Вынудите клиент telnet в текстовый режим

Поскольку существует много вызовов schedule () вне do_timer (), могу ли я сказать, что это является своего рода вытеснением? или какова цель?

для реальной ОС; большинство переключений задач происходит из-за того, что задача блокирует ожидание чего-либо (пользовательский ввод, сетевой пакет, дисковый ввод-вывод и т. д.) или задача разблокируется, потому что произошло то, что она ожидала (а разблокированная задача имеет более высокий приоритет и выгружает текущий запущенный более низкий приоритет задание).

Весь «переключение задач, вызванное таймером IRQ», в основном, является всего лишь запасным вариантом для защиты от вредоносных захватов ЦП (атаки типа «отказ в обслуживании»); а для обычного программного обеспечения в нормальных условиях вы можете отключить его (удалить schedule() из обработчика IRQ таймера), и никто не заметит и не позаботится. Примечание. Некоторые люди скажут, что это также относится к «незлонамеренным» задачам, связанным с процессором, но задачи, связанные с процессором, встречаются относительно редко, и (игнорируя тот факт, что планировщик Linux никогда не подходил для приоритетов задач) для задач, связанных с процессором. Лучше полагаться на эффективную систему приоритетов задач (например, дать задачам, связанным с ЦП, низкий приоритет, чтобы почти все их опередили).

Также обратите внимание, что различные курсы по теории ОС начинаются с концепций «настолько просто, что на самом деле это никогда не происходит на практике», которые почти всегда являются чисто циклическим планировщиком с задачами, которые никогда не блокируются (часто с помощью «Эй, мы можем точно предсказать»). будущее и точно знать, как долго каждое задание будет выполняться за «ерунду», что, в основном, хорошо в качестве первого шага («научиться ходить, прежде чем бежать»), но сосет большие соленые собачьи мячи, если за ним не последуют более реалистичные и более сложные концепции (улучшенные алгоритмы планирования, приоритеты задач, несколько алгоритмов одновременного планирования / «политики планировщика», многопроцессорные, интерактивные / чувствительные к задержке задачи, ...), потому что это оставляет ученику / жертве чуть больше дезинформации (например, когда-либо повторяющееся заблуждение "все переключатели задач вызваны ошибочным таймером IRQ").

do_timer () (@ sched.c) будет вызываться каждый раз при тайм-ауте таймера? Этот таймер основан на вызове прерывания x86?

Я предполагаю, что таймер был IRQ необработанного PIT-чипа (учитывая, что версия 0.11 для Linux была «разработчиком абсолютного новичка без намерения сделать это» «портативные» исторические памятные вещи от тысяч добровольцев, исправивших половину худших частей).

Также не забывайте, что планировщик использует время для двух разных вещей - «текущая задача использует слишком много процессорного времени», что почти никогда не имеет значения, и выяснение, когда задачи заблокированы / спят (например, потому что они вызвали sleep()) должен разблокироваться / проснуться. do_timer() может быть для любой из этих вещей и может быть для обоих (я не знаю, не глядя на это).

8
задан Kevin Panko 11 June 2015 в 14:55
поделиться

2 ответа

Если это имеет значение, решенный это самостоятельно.

// IAC WONT LINEMODE IAC WILL ECHO

write(s,"\377\375\042\377\373\001",6);

получает удаленное (по крайней мере, telnet от Xterm на поле Linux) в правильное состояние.

6
ответ дан 5 December 2019 в 12:14
поделиться

Интересно. Мне больше повезло с отправкой

IAC WILL ECHO IAC WILL SUPPRESS_GO_AHEAD IAC WONT LINEMODE
255  251    1 255  251                 3 255  252       34

IAC WONT LINEMODE кажется излишним: мой telnet-клиент, кажется, переходит в правильное состояние и без него, но я оставил его для полноты.

8
ответ дан 5 December 2019 в 12:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: