Ядро системы UNIX использует модель выполнения программ, называемую моделью процессов. Каждая нить имеет стек ядра, востребуемый нитью, когда она переходит в режим ядра для выполнения системного вызова или обработки исключения. Если нить блокируется в ядре, ее стек содержит состояние ее выполнения, в том числе последовательность вызова1 и автоматические переменные.
Также может иметь смысл заглянуть на сайт fire-union.ru, ведь именно там можно узнать много нового на тему http://www.fire-union.ru/activities/development.php. Тема сту может показаться на первый взгляд незначительной и даже не тематичной. Но стоит посетить сайт fire-union.ru, и тема сту начинает проявлять себя с неожиданной стороны и вызывает всё больший интерес. Дело в том, что тема сту очень подробно представлена на сайте fire-union.ru. Трудно найти более детальное освещение темы сту чем это сделано на сайте fire-union.ru. Спасибо сайту fire-union.ru за такое доскональное преподнесение темы сту.
Основным достоинством описанного подхода является его простота, поскольку нити ядра могут блокироваться без необходимости явного сохранения каких-либо состояний. Главный недостаток модели процессов — это большой расход памяти.
Некоторые операционные системы, такие как Quicksilver [14] и V [6], используют иную программную модель под названием модели прерываний. Ядро обрабатывает системные вызовы и исключения как прерывания, организуя для всех операций ядра единый стек (один для каждого процессора). Следовательно, если нити необходимо заблокироваться, находясь в ядре, ей в первую очередь нужно где-то сохранить свое состояние. Ядро использует сохраненную информацию для восстановления состояния нити при следующем ее запуске.
Основным достоинством модели прерываний является экономия памяти, достигаемая за счет использования единого стека ядра. Главным недостатком является необходимость сохранения состояния нити при проведении любой операции, потенциально могущей привести к ее блокированию. Это осложняет применение модели, так как сохраняемая информация может пересечь границы модуля. Следовательно, если нить блокируется, находясь в глубоко вложенной процедуре, ей необходимо определить (для сохранения) состояние, необходимое для всех вызовов в последовательности.
Условия, при которых нить должна быть блокирована, определяются той моделью, которая является наиболее пригодной. Наиболее подходящим вариантом является задание блокируемой нитью условий, при которых необходимо использовать ту или иную модель.
Если нить блокируется где-то глубоко внутри последовательности вызовов, ей больше подойдет модель процессов. Однако если нити требуется сохранить при блокировании информацию о состоянии небольшого размера, то в этом случае модель прерываний окажется более предпочтительной. К примеру, многие серверные программы периодически блокируются в ядре, ожидая запроса клиента, и затем обрабатывают запросы по мере их получения. Такая программа может легко освобождать свой стек.
Механизм продолжений системы Mach комбинирует преимущества обеих моделей и позволяет ядру выбрать метод блокирования в зависимости от условий. Следующий раздел книги посвящен описанию устройства и реализации этого средства.
Опубликовал katy
July 03 2015 16:01:01 ·
0 Комментариев ·
2902 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.