Как сон реализован на уровне ОС?

Существует опция поместить вводную изогнутую фигурную скобку и точку с запятой автоволшебно в "корректном" положении. Необходимо будет включить, это - Выбирает Window/Preferences и вводит "фигурную скобку" в поле поиска - должно быть легко findable (никакое затмение на этом компьютере). Эффект:

  • Ввод точки с запятой где угодно на строке поместит его в этом конце строк (как в word/openoffice: Клавиша Backspace, если требуется иметь его в исходном месте)
  • Ввод вводной изогнутой фигурной скобки, когда Вы только в другой паре фигурных скобок, поместит, это в конце этой строки - как в этом примере

(" |" курсор):

if(i==0|)

ввод "{" теперь приведет к

if(i==0) {|
25
задан Peter Mortensen 17 October 2017 в 17:06
поделиться

5 ответов

Sleep () реализован на уровне ОС. Процессор не вращается, когда задача / поток / процесс спят. Этот конкретный поток помещается в очередь ожидания (поток не готов к запуску) до тех пор, пока не истечет время, после которого поток будет помещен в очередь готовности к запуску.

Тем временем другие потоки, которые находятся готов к запуску, будет запущен.

Только если ни один поток не готов к запуску, ОС перейдет в неактивный поток, который обычно выдает инструкции для выключения (или в любом случае переводит в состояние низкого энергопотребления) процессор до тех пор, пока аппаратное происходит прерывание.

Только для очень простой системы (например, самой простой из встроенных систем) Sleep () может быть реализован как не более чем цикл ожидания при занятости.

Любая операционная система учебник, например "

21
ответ дан 28 November 2019 в 21:46
поделиться

Ответ на ваш вопрос полностью зависит от операционной системы и реализации.

Простой способ думать об этом: когда вы вызываете sleep () , ОС вычисляет время пробуждения, а затем помещает ваш процесс куда-то в очередь с приоритетом. Затем он просто не планирует ваш процесс, чтобы получить какое-либо время выполнения, пока не пройдет достаточно реального времени, чтобы он был вытянут из очереди.

2
ответ дан 28 November 2019 в 21:46
поделиться

В типичной операционной системе спящий режим вызывает ядро, которое заставляет процесс ждать, пока не пройдет заданное время, а затем переходит и находит другой процесс для выполнения. Если нечего делать, он запустит «процесс ожидания». По истечении времени планировщик отметит, что процесс ожидания готов, и он снова запланирует его.

2
ответ дан 28 November 2019 в 21:46
поделиться

Вы не выполняете никаких циклов while, иначе система не сможет ничего сделать - не будет реагировать на мышь, клавиатуру, сеть и т. Д.

Обычно наиболее оперативные системы: вы добавляете задержку к текущей метке времени, чтобы получить метку времени, когда задача, которая запросила задержку, будет возобновлена ​​(при условии, что в это время не запущена задача с более высоким приоритетом), и добавьте [wakeupTimestamp, указатель задачи] в список который отсортирован по возрастанию по отметке времени. После этого ОС выполняет переключение контекста и запускает следующую доступную задачу. Периодически система сравнивает самую раннюю отметку времени в спящем списке с текущей отметкой времени, и, если крайний срок прошел, она перемещает спящую задачу в очередь «готовых» задач.

1
ответ дан 28 November 2019 в 21:46
поделиться

Sleep блокирует вашу задачу / поток на время, прошедшее с момента передачи. . Ваша задача становится невыполнимой в течение этого периода или до тех пор, пока не произойдет что-то еще интересное (например, сигнал), в зависимости от того, что произойдет раньше.

Нередко спящий режим вызывает select () и не передает никаких дескрипторов для ожидания и значение тайм-аута. равный вашему периоду сна.

Система может реализовать это, установив таймер, истекающий по истечении прошедшего времени, а затем ожидая семафор, который будет сигнализировать, когда этот таймер истечет. Таким образом, он заблокирован на этом семафоре.

1
ответ дан 28 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

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