Морис Бах - Архитектура операционной системы UNIX

Тут можно читать онлайн Морис Бах - Архитектура операционной системы UNIX - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство Издано корпорацией Prentice-Hall.. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Архитектура операционной системы UNIX
  • Автор:
  • Жанр:
  • Издательство:
    Издано корпорацией Prentice-Hall.
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3.56/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Морис Бах - Архитектура операционной системы UNIX краткое содержание

Архитектура операционной системы UNIX - описание и краткое содержание, автор Морис Бах, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Архитектура операционной системы UNIX - читать онлайн бесплатно полную версию (весь текст целиком)

Архитектура операционной системы UNIX - читать книгу онлайн бесплатно, автор Морис Бах
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
Рисунок 630 Процессы приостановленные до наступления событий и отображение - фото 55

Рисунок 6.30. Процессы, приостановленные до наступления событий, и отображение событий на конкретные адреса

Еще одно противоречие связано с тем, что на один и тот же адрес могут отображаться несколько событий. На Рисунке 6.30, например, события «освобождение буфера» и «завершение ввода-вывода» отображаются на адрес буфера («адрес A»). Когда ввод-вывод в буфер завершается, ядро возобновляет выполнение всех процессов, приостановленных в ожидании наступления как того, так и другого события. Поскольку процесс, ожидающий завершения ввода-вывода, удерживает буфер заблокированным, другие процессы, которые ждали освобождения буфера, вновь приостановятся, ибо буфер все еще занят. Функционирование системы было бы более эффективным, если бы отображение событий на адреса было однозначным. Однако на практике такого рода противоречие на производительности системы не отражается, поскольку отображение на один адрес более одного события имеет место довольно редко, а также поскольку выполняющийся процесс обычно освобождает заблокированные ресурсы до того, как начнут выполняться другие процессы. Стилистически, тем не менее, механизм функционирования ядра стал бы более понятен, если бы отображение было однозначным.

6.6.2 Алгоритмы приостанова и возобновления выполнения

алгоритм sleep

входная информация:

(1) адрес приостанова

(2) приоритет

выходная информация:

1, если процесс возобновляется по сигналу, который ему удалось уловить;

вызов алгоритма longjump, если процесс возобновляется по сигналу, который ему не удалось уловить;

0 — во всех остальных случаях;

{

поднять приоритет работы процессора таким образом, чтобы заблокировать все прерывания;

перевести процесс в состояние приостанова;

включить процесс в хеш-очередь приостановленных процессов, базирующуюся на адресах приостанова;

сохранить адрес приостанова в таблице процессов;

сделать ввод для процесса приоритетным;

if (приостанов процесса НЕ допускает прерываний) {

выполнить переключение контекста;

/* с этого места процесс возобновляет выполнение, когда «пробуждается» */

снизить приоритет работы процессора так, чтобы вновь разрешить прерывания (как было до приостанова процесса);

return (0);

}

/* приостанов процесса принимает прерывания, вызванные сигналами */

if (к процессу не имеет отношения ни один из сигналов) {

выполнить переключение контекста;

/* с этого места процесс возобновляет выполнение, когда «пробуждается» */

if (к процессу не имеет отношения ни один из сигналов) {

восстановить приоритет работы процессора таким, каким он был в момент приостанова процесса;

return (0);

}

}

удалить процесс из хеш-очереди приостановленных процессов, если он все еще находится там;

восстановить приоритет работы процессора таким, каким он был в момент приостанова процесса;

if (приоритет приостановленного процесса позволяет принимать сигналы) return (1);

запустить алгоритм longjump;

}

Рисунок 6.31. Алгоритм приостанова процесса

На Рисунке 6.31 приведен алгоритм приостанова процесса. Сначала ядро повышает приоритет работы процессора так, чтобы заблокировать все прерывания, которые могли бы (путем создания конкуренции) помешать работе с очередями приостановленных процессов, и запоминает старый приоритет, чтобы восстановить его, когда выполнение процесса будет возобновлено. Процесс получает пометку «приостановленного», адрес приостанова и приоритет запоминаются в таблице процессов, а процесс помещается в хеш-очередь приостановленных процессов. В простейшем случае (когда приостанов не допускает прерываний) процесс выполняет переключение контекста и благополучно «засыпает». Когда приостановленный процесс «пробуждается», ядро начинает планировать его запуск: процесс возвращает сохраненный в алгоритме sleep контекст, восстанавливает старый приоритет работы процессора (который был у него до начала выполнения алгоритма) и возвращает управление ядру.

алгоритм wakeup /* возобновление приостановленного процесса */

входная информация: адрес приостанова

выходная информация: отсутствует

{

повысить приоритет работы процессора таким образом, чтобы заблокировать все прерывания;

найти хеш-очередь приостановленных процессов с указанным адресом приостанова;

for (каждого процесса, приостановленного по указанному адресу) {

удалить процесс из хеш-очереди;

сделать пометку о том, что процесс находится в состоянии «готовности к запуску»;

включить процесс в список процессов, готовых к запуску (для планировщика процессов);

очистить поле, содержащее адрес приостанова, в записи таблицы процессов;

if (процесс не загружен в память)

возобновить выполнение программы подкачки (нулевой процесс);

else if (возобновляемый процесс более подходит для исполнения, чем ныне выполняющийся)

установить соответствующий флаг для планировщика;

}

восстановить первоначальный приоритет работы процессора;

}

Рисунок 6.32. Алгоритм возобновления приостановленного процесса

Чтобы возобновить выполнение приостановленных процессов, ядро обращается к алгоритму wakeup (Рисунок 6.32), причем делает это как во время исполнения алгоритмов реализации стандартных системных функций, так и в случае обработки прерываний. Алгоритм iput, например, освобождает заблокированный индекс и возобновляет выполнение всех процессов, ожидающих снятия блокировки. Точно так же и программа обработки прерываний от диска возобновляет выполнение процессов, ожидающих завершения ввода-вывода. В алгоритме wakeup ядро сначала повышает приоритет работы процессора, чтобы заблокировать прерывания. Затем для каждого процесса, приостановленного по указанному адресу, выполняются следующие действия: делается пометка в поле, описывающем состояние процесса, о том, что процесс готов к запуску; процесс удаляется из списка приостановленных процессов и помещается в список процессов, готовых к запуску; поле в записи таблицы процессов, содержащее адрес приостанова, очищается. Если возобновляемый процесс не загружен в память, ядро запускает процесс подкачки, обеспечивающий подкачку возобновляемого процесса в память (подразумевается система, в которой подкачка страниц по обращению не поддерживается); в противном случае, если возобновляемый процесс более подходит для исполнения, чем ныне выполняющийся, ядро устанавливает для планировщика специальный флаг, сообщающий о том, что процессу по возвращении в режим задачи следует пройти через алгоритм планирования (глава 8). Наконец, ядро восстанавливает первоначальный приоритет работы процессора. При этом на ядро не оказывается никакого давления: «пробуждение» (wakeup) процесса не вызывает его немедленного исполнения; благодаря «пробуждению», процесс становится только доступным для запуска.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Морис Бах читать все книги автора по порядку

Морис Бах - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Архитектура операционной системы UNIX отзывы


Отзывы читателей о книге Архитектура операционной системы UNIX, автор: Морис Бах. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x