На главную страницу
Форум txt.version   



Статья :: 3.3 МЕХАНИЗМ ПОИСКА БУФЕРА : Морис Бах

3.3 МЕХАНИЗМ ПОИСКА БУФЕРА

Как показано на Рисунке 2.1, алгоритмы верхнего уровня, используемые ядром для подсистемы управления файлами, инициируют выполнение алгоритмов управления буферным кешем. При выборке блока алгоритмы верхнего уровня устанавливают логический номер устройства и номер блока, к которым они хотели бы получить доступ. Например, если процесс хочет считать данные из файла, ядро устанавливает, в какой файловой системе находится файл и в каком блоке файловой системы содержатся данные, о чем подробнее мы узнаем из главы 4. Собираясь считать данные из определенного дискового блока, ядро проверяет, находится ли блок в буферном пуле, и если нет, назначает для него свободный буфер. Собираясь записать данные в определенный дисковый блок, ядро проверяет, находится ли блок в буферном пуле, и если нет, назначает для этого блока свободный буфер. Для выделения буферов из пула в алгоритмах чтения и записи дисковых блоков используется операция getblk (Рисунок 3.4).

Рассмотрим в этом разделе пять возможных механизмов использования getblk для выделения буфера под дисковый блок.

1. Ядро обнаруживает блок в хеш-очереди, соответствующий ему буфер свободен.

2. Ядро не может обнаружить блок в хеш-очереди, поэтому оно выделяет буфер из списка свободных буферов.

3. Ядро не может обнаружить блок в хеш-очереди и, пытаясь выделить буфер из списка свободных буферов (как в случае 2), обнаруживает в списке буфер, который помечен как «занят на время записи». Ядро должно переписать этот буфер на диск и выделить другой буфер.

4. Ядро не может обнаружить блок в хеш-очереди, а список свободных буферов пуст.

5. Ядро обнаруживает блок в хеш-очереди, но его буфер в настоящий момент занят.

Обсудим каждый случай более подробно.

Осуществляя поиск блока в буферном пуле по комбинации номеров устройства и блока, ядро ищет хеш-очередь, которая бы содержала этот блок. Просматривая хеш-очередь, ядро придерживается списка с указателями, пока (как в первом случае) не найдет буфер с искомыми номерами устройства и блока. Ядро проверяет занятость блока и в том случае, если он свободен, помечает буфер «занятым» для того, чтобы другие процессы[8] не смогли к нему обратиться. Затем ядро удаляет буфер из списка свободных буферов, поскольку буфер не может одновременно быть занятым и находиться в указанном списке. Если другие процессы попытаются обратиться к блоку в то время, когда его буфер занят, они приостановятся до тех пор, пока буфер не освободится. На Рисунке 3.5 показан первый случай, когда ядро ищет блок 4 в хеш-очереди, помеченной как «блок 0 модуль 4». Обнаружив буфер, ядро удаляет его из списка свободных буферов, делая блоки 5 и 28 соседями в списке.


алгоритм getblk

входная информация: номер файловой системы номер блока

выходная информация: буфер, который можно использовать для блока

{

 do if (буфер не найден)  {

  if (блок в хеш-очереди)   {

   if (буфер занят) { /* случай 5 */

    sleep (до освобождения буфера);

    continue; /* цикл с условием продолжения */

   }

   пометить буфер занятым; /* случай 1 */

   удалить буфер из списка свободных буферов;

   return буфер;

  }

  else { /* блока нет в хеш-очереди */

   if (в списке нет свободных буферов) { /*случай 4*/

    sleep (до освобождения любого буфера);

    continue; /* цикл с условием продолжения */

   }

   удалить буфер из списка свободных буферов;

   if (буфер помечен для отложенной переписи) { /* случай 3 */

    асинхронная перепись содержимого буфера на диск;

    continue; /* цикл с условием продолжения */

   }

   /* случай 2 — поиск свободного буфера */

   удалить буфер из старой хеш-очереди;

   включить буфер в новую хеш-очередь;

   return буфер;

  }

 }

}

Рисунок 3.4. Алгоритм выделения буфера



Рисунок 3.5. Поиск буфера — случай 1: буфер в хеш-очереди


алгоритм brelse

входная информация: заблокированный буфер

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

{

 возобновить выполнение всех процессов при наступлении события, связанного с освобождением любого буфера;

 возобновить выполнение всех процессов при наступлении события, связанного с освобождением данного буфера;

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

 if (содержимое буфера верно и буфер не старый)  поставить буфер в конец списка свободных буферов;

 else  поставить буфер в начало списка свободных буферов;

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

 разблокировать (буфер);

}

Рисунок 3.6. Алгоритм высвобождения буфера


Перед тем, как перейти к остальным случаям, рассмотрим, что произойдет с буфером после того, как он будет выделен блоку. Ядро системы сможет читать данные с диска в буфер и обрабатывать их или же переписывать данные в буфер и при желании на диск. Ядро оставляет у буфера пометку «занят»; другие процессы не могут обратиться к нему и изменить его содержимое, пока он занят, таким образом поддерживается целостность информации в буфере. Когда ядро заканчивает работу с буфером, оно освобождает буфер в соответствии с алгоритмом brelse (Рисунок 3.6). Возобновляется выполнение тех процессов, которые были приостановлены из-за того, что буфер был занят, а также те процессы, которые были приостановлены из-за того, что список свободных буферов был пуст. Как в том, так и в другом случае, высвобождение буфера означает, что буфер становится доступным для приостановленных процессов несмотря на то, что первый процесс, получивший буфер, заблокировал его и запретил тем самым получение буфера другими процессами (см. раздел 2.2.2.4). Ядро помещает буфер в конец списка свободных буферов, если только перед этим не произошла ошибка ввода-вывода или если буфер не помечен как «старый» — момент, который будет пояснен далее; в остальных случаях буфер помещается в начало списка. Теперь буфер свободен для использования любым процессом.

Ядро выполняет алгоритм brelse в случае, когда буфер процессу больше не нужен, а также при обработке прерывания от диска для высвобождения буферов, используемых при асинхронном вводе-выводе с диска и на диск (см. раздел 3.4). Ядро повышает приоритет прерывания работы процессора так, чтобы запретить возникновение любых прерываний от диска на время работы со списком свободных буферов, предупреждая искажение указателей буфера в результате вложенного выполнения алгоритма brelse. Похожие последствия могут произойти, если программа обработки прерываний запустит алгоритм brelse во время выполнения процессом алгоритма getblk, поэтому ядро повышает приоритет прерывания работы процессора и в стратегических моментах выполнения алгоритма getblk. Более подробно эти случаи мы разберем с помощью упражнений.

При выполнении алгоритма getblk имеет место случай 2, когда ядро просматривает хеш-очередь, в которой должен был бы находиться блок, но не находит его там. Так как блок не может быть ни в какой другой хеш-очереди, поскольку он не должен «хешироваться» в другом месте, следовательно, его нет в буферном кеше. Поэтому ядро удаляет первый буфер из списка свободных буферов; этот буфер был уже выделен другому дисковому блоку и также находится в хеш-очереди. Если буфер не помечен для отложенной переписи, ядро помечает буфер занятым, удаляет его из хеш-очереди, где он находится, назначает в заголовке буфера номера устройства и блока, соответствующие данному дисковому блоку, и помещает буфер в хеш-очередь. Ядро использует буфер, не переписав информацию, которую буфер прежде хранил для другого дискового блока. Тот процесс, который будет искать прежний дисковый блок, не обнаружит его в пуле и получит для него точно таким же образом новый буфер из списка свободных буферов. Когда ядро заканчивает работу с буфером, оно освобождает буфер вышеописанным способом. На Рисунке 3.7, например, ядро ищет блок 18, но не находит его в хеш-очереди, помеченной как «блок 2 модуль 4». Поэтому ядро удаляет первый буфер из списка свободных буферов (блок 3), назначает его блоку 18 и помещает его в соответствующую хеш-очередь.


Рисунок 3.7. Второй случай выделения буфера


Если при выполнении алгоритма getblk имеет место случай 3, ядро так же должно выделить буфер из списка свободных буферов. Однако, оно обнаруживает, что удаляемый из списка буфер был помечен для отложенной переписи, поэтому прежде чем использовать буфер ядро должно переписать его содержимое на диск. Ядро приступает к асинхронной записи на диск и пытается выделить другой буфер из списка. Когда асинхронная запись заканчивается, ядро освобождает буфер и помещает его в начало списка свободных буферов. Буфер сам продвинулся от конца списка свободных буферов к началу списка. Если после асинхронной переписи ядру бы понадобилось поместить буфер в конец списка, буфер получил бы «зеленую улицу» по всему списку свободных буферов, результат такого перемещения противоположен действию алгоритма поиска буферов, к которым наиболее долго не было обращений. Например, если обратиться к Рисунку 3.8, ядро не смогло обнаружить блок 18, но когда попыталось выделить первые два буфера (по очереди) в списке свободных буферов, то оказалось, что они оба помечены для отложенной переписи. Ядро удалило их из списка, запустило операции переписи на диск в соответствующие блоки, и выделило третий буфер из списка, блок 4. Далее ядро присвоило новые значения полям буфера «номер устройства» и «номер блока» и включило буфер, получивший имя «блок 18», в новую хеш-очередь.

В четвертом случае (Рисунок 3.9) ядро, работая с процессом A, не смогло найти дисковый блок в соответствующей хеш-очереди и предприняло попытку выделить из списка свободных буферов новый буфер, как в случае 2. Однако, в списке не оказалось ни одного буфера, поэтому процесс A приостановился до тех пор, пока другим процессом не будет выполнен алгоритм brelse, высвобождающий буфер. Планируя выполнение процесса A, ядро вынуждено снова просматривать хеш-очередь в поисках блока. Оно не в состоянии немедленно выделить буфер из списка свободных буферов, так как возможна ситуация, когда свободный буфер ожидают сразу несколько процессов и одному из них будет выделен вновь освободившийся буфер, на который уже нацелился процесс A. Таким образом, алгоритм поиска блока снова гарантирует, что только один буфер включает содержимое дискового блока. На Рисунке 3.10 показана конкуренция между двумя процессами за освободившийся буфер.

Последний случай (Рисунок 3.11) наиболее сложный, поскольку он связан с комплексом взаимоотношений между несколькими процессами. Предположим, что ядро, работая с процессом A, ведет поиск дискового блока и выделяет буфер, но приостанавливает выполнение процесса перед освобождением буфера. Например, если процесс A попытается считать дисковый блок и выделить буфер, как в случае 2, то он приостановится до момента завершения передачи данных с диска. Предположим, что пока процесс A приостановлен, ядро активизирует второй процесс, B, который пытается обратиться к дисковому блоку, чей буфер был только что заблокирован процессом A. Процесс B (случай 5) обнаружит этот захваченный блок в хеш-очереди. Так как использовать захваченный буфер не разрешается и, кроме того, нельзя выделить для одного и того же дискового блока второй буфер, процесс B помечает буфер как «запрошенный» и затем приостанавливается до того момента, когда процесс A освободит данный буфер.

В конце концов процесс A освобождает буфер и замечает, что он запрошен. Тогда процесс A «будит» все процессы, приостановленные по событию «буфер становится свободным», включая и процесс B. Когда же ядро вновь запустит на выполнение процесс B, процесс B должен будет убедиться в том, что буфер свободен. Возможно, что третий процесс, C, ждал освобождения этого же буфера, и ядро запланировало активизацию процесса C раньше B; при этом процесс C мог приостановиться и оставить буфер заблокированным. Следовательно, процесс B должен проверить то, что блок действительно свободен.


Рисунок 3.8. Третий случай выделения буфера


Рисунок 3.9. Четвертый случай выделения буфера


Процесс B также должен убедиться в том, что в буфере содержится первоначально затребованный дисковый блок, поскольку процесс C мог выделить данный буфер другому блоку, как в случае 2. При выполнении процесса B может обнаружиться, что он ждал освобождения буфера не с тем содержимым, поэтому процессу B придется вновь заниматься поисками блока. Если же его настроить на автоматическое выделение буфера из списка свободных буферов, он может упустить из виду возможность того, что какой-либо другой процесс уже выделил буфер для данного блока.

Рисунок 3.10. Состязание за свободный буфер


В конце концов, процесс B найдет этот блок, при необходимости выбрав новый буфер из списка свободных буферов, как в случае 2. Пусть некоторый процесс, осуществляя поиск блока 99 (Рисунок 3.11), обнаружил этот блок в хеш-очереди, однако он оказался занятым. Процесс приостанавливается до момента освобождения блока, после чего он запускает весь алгоритм с самого начала. На Рисунке 3.12 показано содержимое занятого буфера.

Алгоритм выделения буфера должен быть надежным; процессы не должны «засыпать» навсегда и рано или поздно им нужно выделить буфер. Ядро гарантирует такое положение, при котором все процессы, ожидающие выделения буфера, продолжат свое выполнение, благодаря тому, что ядро распределяет буферы во время обработки обращений к операционной системе и освобождает их перед возвратом управления процессам.[9] В режиме задачи процессы непосредственно не контролируют выделение буферов ядром системы, поэтому они не могут намеренно «захватывать» буферы. Ядро теряет контроль над буфером только тогда, когда ждет завершения операции ввода-вывода между буфером и диском. Было задумано так, что если дисковод испорчен, он не может прерывать работу центрального процессора, и тогда ядро никогда не освободит буфер. Дисковод должен следить за работой аппаратных средств в таких случаях и возвращать ядру код ошибки, сообщая о плохой работе диска. Короче говоря, ядро может гарантировать, что процессы, приостановленные в ожидании буфера, в конце концов возобновят свое выполнение.

Рисунок 3.11. Пятый случай выделения буфера


Можно также представить себе ситуацию, когда процесс «зависает» в ожидании получения доступа к буферу. В четвертом случае, например, если несколько процессов приостанавливаются, ожидая освобождения буфера, ядро не гарантирует, что они получат доступ к буферу в той очередности, в которой они запросили доступ. Процесс может приостановить и возобновить свое выполнение, когда буфер станет свободным, только для того, чтобы приостановиться вновь из — за того, что другой процесс получил управление над буфером первым. Теоретически, так может продолжаться вечно, но практически такой проблемы не возникает в связи с тем, что в системе обычно заложено большое количество буферов.




3.3 МЕХАНИЗМ ПОИСКА БУФЕРА : Морис Бах

страницы в данном разделе 
Архитектура операционной системы UNIX : Морис Бах 1.1 ИСТОРИЯ : Морис Бах
1.2 СТРУКТУРА СИСТЕМЫ : Морис Бах 1.3 ОБЗОР С ТОЧКИ ЗРЕНИЯ ПОЛЬЗОВАТЕЛЯ : Морис Бах
1.3.1 Файловая система : Морис Бах 1.3.2 Среда выполнения процессов : Морис Бах
1.3.3 Элементы конструкционных блоков : Морис Бах 1.4 ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ : Морис Бах
1.5 ПРЕДПОЛАГАЕМАЯ АППАРАТНАЯ СРЕДА : Морис Бах продолжение 9 : Морис Бах
1.1 ИСТОРИЯ : Морис Бах 1.2 СТРУКТУРА СИСТЕМЫ : Морис Бах
1.3.1 Файловая система : Морис Бах 1.3.2 Среда выполнения процессов : Морис Бах
1.3.3 Элементы конструкционных блоков : Морис Бах 1.3.1 Файловая система : Морис Бах
1.3.2 Среда выполнения процессов : Морис Бах 1.3.3 Элементы конструкционных блоков : Морис Бах
1.4 ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ : Морис Бах 1.5 ПРЕДПОЛАГАЕМАЯ АППАРАТНАЯ СРЕДА : Морис Бах
продолжение 20 2.1 АРХИТЕКТУРА ОПЕРАЦИОННОЙ СИСТЕМЫ UNIХ : Морис Бах
2.2 ВВЕДЕНИЕ В ОСНОВНЫЕ ПОНЯТИЯ СИСТЕМЫ : Морис Бах 2.2.1 Обзор особенностей подсистемы управления файлами : Морис Бах
2.2.2 Процессы : Морис Бах продолжение 25 : Морис Бах
2.2.2.1 Контекст процесса : Морис Бах 2.2.2.3 Переходы из состояния в состояние : Морис Бах
2.2.2.4 Сон и пробуждение : Морис Бах 2.5 ВЫВОДЫ И ОБЗОР ПОСЛЕДУЮЩИХ ГЛАВ : Морис Бах
2.1 АРХИТЕКТУРА ОПЕРАЦИОННОЙ СИСТЕМЫ UNIХ : Морис Бах 2.2.1 Обзор особенностей подсистемы управления файлами : Морис Бах
2.2.2 Процессы : Морис Бах продолжение 33 : Морис Бах
2.2.2.1 Контекст процесса : Морис Бах 2.2.2.3 Переходы из состояния в состояние : Морис Бах
2.2.2.4 Сон и пробуждение : Морис Бах 2.2.1 Обзор особенностей подсистемы управления файлами : Морис Бах
2.2.2 Процессы : Морис Бах 2.2.2.1 Контекст процесса : Морис Бах
2.2.2.3 Переходы из состояния в состояние : Морис Бах 2.2.2.4 Сон и пробуждение : Морис Бах
продолжение 42 2.2.2.1 Контекст процесса : Морис Бах
2.2.2.3 Переходы из состояния в состояние : Морис Бах 2.2.2.4 Сон и пробуждение : Морис Бах
2.5 ВЫВОДЫ И ОБЗОР ПОСЛЕДУЮЩИХ ГЛАВ : Морис Бах ГЛАВА 3. БУФЕР СВЕРХОПЕРАТИВНОЙ ПАМЯТИ (КЕШ) : Морис Бах
3.1 ЗАГОЛОВКИ БУФЕРА : Морис Бах 3.2 СТРУКТУРА ОБЛАСТИ БУФЕРОВ (БУФЕРНОГО ПУЛА) : Морис Бах
3.3 МЕХАНИЗМ ПОИСКА БУФЕРА : Морис Бах 3.4 ЧТЕНИЕ И ЗАПИСЬ ДИСКОВЫХ БЛОКОВ : Морис Бах
3.5 ПРЕИМУЩЕСТВА И НЕУДОБСТВА БУФЕРНОГО КЕША : Морис Бах 3.6 ВЫВОДЫ : Морис Бах
3.7 УПРАЖНЕНИЯ : Морис Бах продолжение 55
3.1 ЗАГОЛОВКИ БУФЕРА : Морис Бах 3.2 СТРУКТУРА ОБЛАСТИ БУФЕРОВ (БУФЕРНОГО ПУЛА) : Морис Бах
3.3 МЕХАНИЗМ ПОИСКА БУФЕРА : Морис Бах 3.4 ЧТЕНИЕ И ЗАПИСЬ ДИСКОВЫХ БЛОКОВ : Морис Бах
3.5 ПРЕИМУЩЕСТВА И НЕУДОБСТВА БУФЕРНОГО КЕША : Морис Бах 3.6 ВЫВОДЫ : Морис Бах
3.7 УПРАЖНЕНИЯ : Морис Бах ГЛАВА 4. ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ФАЙЛОВ : Морис Бах
4.1 ИНДЕКСЫ : Морис Бах 4.1.1 Определение : Морис Бах
4.1.2 Обращение к индексам : Морис Бах 4.2 СТРУКТУРА ФАЙЛА ОБЫЧНОГО ТИПА : Морис Бах
4.3 КАТАЛОГИ : Морис Бах 4.4 ПРЕВРАЩЕНИЕ СОСТАВНОГО ИМЕНИ ФАЙЛА (ПУТИ ПОИСКА) В ИДЕНТИФИКАТОР ИНДЕКСА : Морис Бах
4.6 НАЗНАЧЕНИЕ ИНДЕКСА НОВОМУ ФАЙЛУ : Морис Бах 4.7 ВЫДЕЛЕНИЕ ДИСКОВЫХ БЛОКОВ : Морис Бах
4.9 ВЫВОДЫ : Морис Бах 4.10 УПРАЖНЕНИЯ : Морис Бах
продолжение 74 4.1 ИНДЕКСЫ : Морис Бах
4.1.2 Обращение к индексам : Морис Бах 4.1.1 Определение : Морис Бах
4.1.2 Обращение к индексам : Морис Бах 4.2 СТРУКТУРА ФАЙЛА ОБЫЧНОГО ТИПА : Морис Бах
4.3 КАТАЛОГИ : Морис Бах 4.4 ПРЕВРАЩЕНИЕ СОСТАВНОГО ИМЕНИ ФАЙЛА (ПУТИ ПОИСКА) В ИДЕНТИФИКАТОР ИНДЕКСА : Морис Бах
4.6 НАЗНАЧЕНИЕ ИНДЕКСА НОВОМУ ФАЙЛУ : Морис Бах 4.7 ВЫДЕЛЕНИЕ ДИСКОВЫХ БЛОКОВ : Морис Бах
4.9 ВЫВОДЫ : Морис Бах 4.10 УПРАЖНЕНИЯ : Морис Бах
ГЛАВА 5. СИСТЕМНЫЕ ОПЕРАЦИИ ДЛЯ РАБОТЫ С ФАЙЛОВОЙ СИСТЕМОЙ : Морис Бах 5.1 OPEN : Морис Бах
5.2 READ : Морис Бах 5.3 WRIТЕ : Морис Бах
5.5 УКАЗАНИЕ МЕСТА В ФАЙЛЕ, ГДЕ БУДЕТ ВЫПОЛНЯТЬСЯ ВВОД-ВЫВОД — LSEEК : Морис Бах 5.6 CLOSЕ : Морис Бах
5.7 СОЗДАНИЕ ФАЙЛА : Морис Бах 5.8 СОЗДАНИЕ СПЕЦИАЛЬНЫХ ФАЙЛОВ : Морис Бах
5.9 СМЕНА ТЕКУЩЕГО И КОРНЕВОГО КАТАЛОГА : Морис Бах 5.12 КАНАЛЫ : Морис Бах
5.12.1 Системная функция pipе : Морис Бах 5.12.2 Открытие поименованного канала : Морис Бах
5.12.3 Чтение из каналов и запись в каналы : Морис Бах 5.12.5 Примеры : Морис Бах
5.13 DUР : Морис Бах 5.14 МОНТИРОВАНИЕ И ДЕМОНТИРОВАНИЕ ФАЙЛОВЫХ СИСТЕМ : Морис Бах
продолжение 102 : Морис Бах 5.14.1 Пересечение точек монтирования в маршрутах поиска имен файлов : Морис Бах
5.14.2 Демонтирование файловой системы : Морис Бах 5.15 LINК : Морис Бах
5.16 UNLINК : Морис Бах продолжение 107 : Морис Бах
5.16.1 Целостность файловой системы : Морис Бах 5.16.2 Поводы для конкуренции : Морис Бах
5.17 АБСТРАКТНЫЕ ОБРАЩЕНИЯ К ФАЙЛОВЫМ СИСТЕМАМ : Морис Бах 5.18 СОПРОВОЖДЕНИЕ ФАЙЛОВОЙ СИСТЕМЫ : Морис Бах
5.20 УПРАЖНЕНИЯ : Морис Бах продолжение 113
5.1 OPEN : Морис Бах 5.2 READ : Морис Бах
5.3 WRIТЕ : Морис Бах 5.5 УКАЗАНИЕ МЕСТА В ФАЙЛЕ, ГДЕ БУДЕТ ВЫПОЛНЯТЬСЯ ВВОД-ВЫВОД — LSEEК : Морис Бах
5.6 CLOSЕ : Морис Бах 5.7 СОЗДАНИЕ ФАЙЛА : Морис Бах
5.8 СОЗДАНИЕ СПЕЦИАЛЬНЫХ ФАЙЛОВ : Морис Бах 5.9 СМЕНА ТЕКУЩЕГО И КОРНЕВОГО КАТАЛОГА : Морис Бах
5.12.1 Системная функция pipе : Морис Бах 5.12.2 Открытие поименованного канала : Морис Бах
5.12.3 Чтение из каналов и запись в каналы : Морис Бах 5.12.5 Примеры : Морис Бах
5.12.1 Системная функция pipе : Морис Бах 5.12.2 Открытие поименованного канала : Морис Бах
5.12.3 Чтение из каналов и запись в каналы : Морис Бах 5.12.5 Примеры : Морис Бах
5.13 DUР : Морис Бах 5.14 МОНТИРОВАНИЕ И ДЕМОНТИРОВАНИЕ ФАЙЛОВЫХ СИСТЕМ : Морис Бах
5.14.1 Пересечение точек монтирования в маршрутах поиска имен файлов : Морис Бах 5.14.2 Демонтирование файловой системы : Морис Бах
продолжение 134 5.14.1 Пересечение точек монтирования в маршрутах поиска имен файлов : Морис Бах
5.14.2 Демонтирование файловой системы : Морис Бах 5.15 LINК : Морис Бах
5.16 UNLINК : Морис Бах 5.16.1 Целостность файловой системы : Морис Бах
5.16.2 Поводы для конкуренции : Морис Бах продолжение 141
5.16.1 Целостность файловой системы : Морис Бах 5.16.2 Поводы для конкуренции : Морис Бах
5.17 АБСТРАКТНЫЕ ОБРАЩЕНИЯ К ФАЙЛОВЫМ СИСТЕМАМ : Морис Бах 5.18 СОПРОВОЖДЕНИЕ ФАЙЛОВОЙ СИСТЕМЫ : Морис Бах
5.20 УПРАЖНЕНИЯ : Морис Бах 6.1 СОСТОЯНИЯ ПРОЦЕССА И ПЕРЕХОДЫ МЕЖДУ НИМИ : Морис Бах
6.2 ФОРМАТ ПАМЯТИ СИСТЕМЫ : Морис Бах продолжение 149 : Морис Бах
6.2.1 Области : Морис Бах 6.2.2 Страницы и таблицы страниц : Морис Бах
6.2.3 Размещение ядра : Морис Бах 6.2.4 Пространство процесса : Морис Бах
6.3 КОНТЕКСТ ПРОЦЕССА : Морис Бах 6.4 СОХРАНЕНИЕ КОНТЕКСТА ПРОЦЕССА : Морис Бах
6.4.1 Прерывания и особые ситуации : Морис Бах 6.4.2 Взаимодействие с операционной системой через вызовы системных функций : Морис Бах
6.4.3 Переключение контекста : Морис Бах j159.html
6.5 УПРАВЛЕНИЕ АДРЕСНЫМ ПРОСТРАНСТВОМ ПРОЦЕССА : Морис Бах продолжение 161 : Морис Бах
6.5.2 Выделение области : Морис Бах 6.5.3 Присоединение области к процессу : Морис Бах
6.5.4 Изменение размера области : Морис Бах 6.5.5 Загрузка области : Морис Бах
6.5.8 Копирование содержимого области : Морис Бах 6.6 ПРИОСТАНОВКА ВЫПОЛНЕНИЯ : Морис Бах
6.6.1 События, вызывающие приостанов выполнения, и их адреса : Морис Бах 6.6.2 Алгоритмы приостанова и возобновления выполнения : Морис Бах
6.7 ВЫВОДЫ : Морис Бах 6.8 УПРАЖНЕНИЯ : Морис Бах
6.1 СОСТОЯНИЯ ПРОЦЕССА И ПЕРЕХОДЫ МЕЖДУ НИМИ : Морис Бах 6.2 ФОРМАТ ПАМЯТИ СИСТЕМЫ : Морис Бах
6.2.1 Области : Морис Бах продолжение 175
6.2.1 Области : Морис Бах 6.2.2 Страницы и таблицы страниц : Морис Бах
6.2.3 Размещение ядра : Морис Бах 6.2.4 Пространство процесса : Морис Бах
6.3 КОНТЕКСТ ПРОЦЕССА : Морис Бах 6.4.1 Прерывания и особые ситуации : Морис Бах
6.4.2 Взаимодействие с операционной системой через вызовы системных функций : Морис Бах 6.4.3 Переключение контекста : Морис Бах
j184.html 6.4.1 Прерывания и особые ситуации : Морис Бах
6.4.2 Взаимодействие с операционной системой через вызовы системных функций : Морис Бах 6.4.3 Переключение контекста : Морис Бах
j188.html 6.5 УПРАВЛЕНИЕ АДРЕСНЫМ ПРОСТРАНСТВОМ ПРОЦЕССА : Морис Бах
6.5.2 Выделение области : Морис Бах 6.5.3 Присоединение области к процессу : Морис Бах
6.5.4 Изменение размера области : Морис Бах 6.5.5 Загрузка области : Морис Бах
6.5.8 Копирование содержимого области : Морис Бах продолжение 195
6.5.2 Выделение области : Морис Бах 6.5.3 Присоединение области к процессу : Морис Бах
6.5.4 Изменение размера области : Морис Бах 6.5.5 Загрузка области : Морис Бах
6.5.8 Копирование содержимого области : Морис Бах 6.6.1 События, вызывающие приостанов выполнения, и их адреса : Морис Бах
6.6.2 Алгоритмы приостанова и возобновления выполнения : Морис Бах 6.6.1 События, вызывающие приостанов выполнения, и их адреса : Морис Бах
6.6.2 Алгоритмы приостанова и возобновления выполнения : Морис Бах 6.7 ВЫВОДЫ : Морис Бах
6.8 УПРАЖНЕНИЯ : Морис Бах ГЛАВА 7. УПРАВЛЕНИЕ ПРОЦЕССАМИ : Морис Бах
7.1 СОЗДАНИЕ ПРОЦЕССА : Морис Бах 7.2 СИГНАЛЫ : Морис Бах
продолжение 210 : Морис Бах 7.2.1 Обработка сигналов : Морис Бах
7.2.3 Посылка сигналов процессами : Морис Бах 7.3 ЗАВЕРШЕНИЕ ВЫПОЛНЕНИЯ ПРОЦЕССА : Морис Бах
7.4 ОЖИДАНИЕ ЗАВЕРШЕНИЯ ВЫПОЛНЕНИЯ ПРОЦЕССА : Морис Бах 7.5 ВЫЗОВ ДРУГИХ ПРОГРАММ : Морис Бах
7.6 КОД ИДЕНТИФИКАЦИИ ПОЛЬЗОВАТЕЛЯ ПРОЦЕССА : Морис Бах 7.7 ИЗМЕНЕНИЕ РАЗМЕРА ПРОЦЕССА : Морис Бах
7.8 КОМАНДНЫЙ ПРОЦЕССОР SHELL : Морис Бах 7.9 ЗАГРУЗКА СИСТЕМЫ И НАЧАЛЬНЫЙ ПРОЦЕСС : Морис Бах
7.10 ВЫВОДЫ : Морис Бах 7.11 УПРАЖНЕНИЯ : Морис Бах
продолжение 222 7.1 СОЗДАНИЕ ПРОЦЕССА : Морис Бах
7.2 СИГНАЛЫ : Морис Бах 7.2.1 Обработка сигналов : Морис Бах
7.2.3 Посылка сигналов процессами : Морис Бах продолжение 227
7.2.1 Обработка сигналов : Морис Бах 7.2.3 Посылка сигналов процессами : Морис Бах
7.3 ЗАВЕРШЕНИЕ ВЫПОЛНЕНИЯ ПРОЦЕССА : Морис Бах 7.4 ОЖИДАНИЕ ЗАВЕРШЕНИЯ ВЫПОЛНЕНИЯ ПРОЦЕССА : Морис Бах
7.5 ВЫЗОВ ДРУГИХ ПРОГРАММ : Морис Бах 7.6 КОД ИДЕНТИФИКАЦИИ ПОЛЬЗОВАТЕЛЯ ПРОЦЕССА : Морис Бах
7.7 ИЗМЕНЕНИЕ РАЗМЕРА ПРОЦЕССА : Морис Бах 7.8 КОМАНДНЫЙ ПРОЦЕССОР SHELL : Морис Бах
7.9 ЗАГРУЗКА СИСТЕМЫ И НАЧАЛЬНЫЙ ПРОЦЕСС : Морис Бах 7.10 ВЫВОДЫ : Морис Бах
7.11 УПРАЖНЕНИЯ : Морис Бах 8.1 ПЛАНИРОВАНИЕ ВЫПОЛНЕНИЯ ПРОЦЕССОВ : Морис Бах
8.1.2 Параметры диспетчеризации : Морис Бах 8.1.3 Примеры диспетчеризации процессов : Морис Бах
8.1.5 Планирование на основе справедливого раздела : Морис Бах 8.1.6 Работа в режиме реального времени : Морис Бах
8.2 СИСТЕМНЫЕ ОПЕРАЦИИ, СВЯЗАННЫЕ СО ВРЕМЕНЕМ : Морис Бах 8.3 ТАЙМЕР : Морис Бах
продолжение 246 : Морис Бах 8.3.2 Внутренние системные тайм-ауты : Морис Бах
8.3.3 Построение профиля : Морис Бах 8.3.4 Учет и статистика : Морис Бах
8.5 УПРАЖНЕНИЯ : Морис Бах 8.1.2 Параметры диспетчеризации : Морис Бах
8.1.3 Примеры диспетчеризации процессов : Морис Бах 8.1.5 Планирование на основе справедливого раздела : Морис Бах
8.1.6 Работа в режиме реального времени : Морис Бах 8.1.2 Параметры диспетчеризации : Морис Бах
8.1.3 Примеры диспетчеризации процессов : Морис Бах 8.1.5 Планирование на основе справедливого раздела : Морис Бах
8.1.6 Работа в режиме реального времени : Морис Бах 8.2 СИСТЕМНЫЕ ОПЕРАЦИИ, СВЯЗАННЫЕ СО ВРЕМЕНЕМ : Морис Бах
8.3 ТАЙМЕР : Морис Бах 8.3.2 Внутренние системные тайм-ауты : Морис Бах
8.3.3 Построение профиля : Морис Бах 8.3.4 Учет и статистика : Морис Бах
продолжение 264 8.3.2 Внутренние системные тайм-ауты : Морис Бах
8.3.3 Построение профиля : Морис Бах 8.3.4 Учет и статистика : Морис Бах
8.5 УПРАЖНЕНИЯ : Морис Бах ГЛАВА 9. АЛГОРИТМЫ УПРАВЛЕНИЯ ПАМЯТЬЮ : Морис Бах
9.1 СВОПИНГ : Морис Бах 9.1.1 Управление пространством на устройстве выгрузки : Морис Бах
9.1.2 Выгрузка процессов : Морис Бах продолжение 273 : Морис Бах
9.1.3 Загрузка (подкачка) процессов : Морис Бах 9.2 ПОДКАЧКА ПО ЗАПРОСУ : Морис Бах
продолжение 276 : Морис Бах 9.2.1 Структуры данных, используемые подсистемой замещения страниц : Морис Бах
продолжение 278 : Морис Бах 9.2.1.1 Функция fork в системе с замещением страниц : Морис Бах
9.2.1.2 Функция exec в системе с замещением страниц : Морис Бах 9.2.2 "Сборщик" страниц : Морис Бах
9.2.3 Отказы при обращениях к страницам : Морис Бах 9.2.3.1 Обработка прерываний по отказу из-за недоступности данных : Морис Бах
9.2.3.2 Обработка прерываний по отказу системы защиты : Морис Бах 9.2.4 Замещение страниц на менее сложной технической базе : Морис Бах
9.3 СИСТЕМА СМЕШАННОГО ТИПА СО СВОПИНГОМ И ПОДКАЧКОЙ ПО ЗАПРОСУ : Морис Бах 9.4 ВЫВОДЫ : Морис Бах
9.5 УПРАЖНЕНИЯ : Морис Бах продолжение 289
9.1.1 Управление пространством на устройстве выгрузки : Морис Бах 9.1.2 Выгрузка процессов : Морис Бах
продолжение 292 : Морис Бах 9.1.3 Загрузка (подкачка) процессов : Морис Бах
9.1.1 Управление пространством на устройстве выгрузки : Морис Бах 9.1.2 Выгрузка процессов : Морис Бах
продолжение 296 9.1.3 Загрузка (подкачка) процессов : Морис Бах
9.2 ПОДКАЧКА ПО ЗАПРОСУ : Морис Бах 9.2.1 Структуры данных, используемые подсистемой замещения страниц : Морис Бах
продолжение 300 : Морис Бах 9.2.1.1 Функция fork в системе с замещением страниц : Морис Бах
9.2.1.2 Функция exec в системе с замещением страниц : Морис Бах 9.2.2 "Сборщик" страниц : Морис Бах
9.2.3 Отказы при обращениях к страницам : Морис Бах 9.2.3.1 Обработка прерываний по отказу из-за недоступности данных : Морис Бах
j306.html 9.2.4 Замещение страниц на менее сложной технической базе : Морис Бах
продолжение 308 9.2.1 Структуры данных, используемые подсистемой замещения страниц : Морис Бах
9.2.1.1 Функция fork в системе с замещением страниц : Морис Бах 9.2.1.2 Функция exec в системе с замещением страниц : Морис Бах
продолжение 312 9.2.1.1 Функция fork в системе с замещением страниц : Морис Бах
9.2.1.2 Функция exec в системе с замещением страниц : Морис Бах 9.2.2 "Сборщик" страниц : Морис Бах
9.2.3.1 Обработка прерываний по отказу из-за недоступности данных : Морис Бах 9.2.3.2 Обработка прерываний по отказу системы защиты : Морис Бах
9.2.3.1 Обработка прерываний по отказу из-за недоступности данных : Морис Бах 9.2.3.2 Обработка прерываний по отказу системы защиты : Морис Бах
9.2.4 Замещение страниц на менее сложной технической базе : Морис Бах 9.3 СИСТЕМА СМЕШАННОГО ТИПА СО СВОПИНГОМ И ПОДКАЧКОЙ ПО ЗАПРОСУ : Морис Бах
9.4 ВЫВОДЫ : Морис Бах 9.5 УПРАЖНЕНИЯ : Морис Бах
ГЛАВА 10. ПОДСИСТЕМА УПРАВЛЕНИЯ ВВОДОМ-ВЫВОДОМ : Морис Бах 10.1 ВЗАИМОДЕЙСТВИЕ ДРАЙВЕРОВ С ПРОГРАММНОЙ И АППАРАТНОЙ СРЕДОЙ : Морис Бах
10.1.1 Конфигурация системы : Морис Бах 10.1.2 Системные функции и взаимодействие с драйверами : Морис Бах
продолжение 328 : Морис Бах 10.1.2.1 Open : Морис Бах
10.1.2.2 Closе : Морис Бах 10.1.2.3 Read и Writе : Морис Бах
10.1.2.4 Стратегический интерфейс : Морис Бах 10.1.2.5 Ioctl : Морис Бах
10.1.3 Программы обработки прерываний : Морис Бах 10.2 ДИСКОВЫЕ ДРАЙВЕРЫ : Морис Бах
10.3 ТЕРМИНАЛЬНЫЕ ДРАЙВЕРЫ : Морис Бах продолжение 337 : Морис Бах
10.3.1 Символьные списки : Морис Бах 10.3.2 Терминальный драйвер в каноническом режиме : Морис Бах
10.3.3 Терминальный драйвер в режиме без обработки символов : Морис Бах 10.3.4 Опрос терминала : Морис Бах
10.3.5 Назначение операторского терминала : Морис Бах 10.3.6 Драйвер косвенного терминала : Морис Бах
10.3.7 Вход в систему : Морис Бах 10.4 ПОТОКИ : Морис Бах
продолжение 346 : Морис Бах 10.4.1 Более детальное рассмотрение потоков : Морис Бах
10.4.2 Анализ потоков : Морис Бах 10.5 ВЫВОДЫ : Морис Бах
10.6 УПРАЖНЕНИЯ : Морис Бах продолжение 351
10.1.1 Конфигурация системы : Морис Бах 10.1.2 Системные функции и взаимодействие с драйверами : Морис Бах
продолжение 354 : Морис Бах 10.1.2.1 Open : Морис Бах
10.1.2.2 Closе : Морис Бах 10.1.2.3 Read и Writе : Морис Бах
10.1.2.4 Стратегический интерфейс : Морис Бах 10.1.2.5 Ioctl : Морис Бах
10.1.3 Программы обработки прерываний : Морис Бах 10.1.1 Конфигурация системы : Морис Бах
10.1.2 Системные функции и взаимодействие с драйверами : Морис Бах 10.1.2.1 Open : Морис Бах
10.1.2.2 Closе : Морис Бах 10.1.2.3 Read и Writе : Морис Бах
10.1.2.4 Стратегический интерфейс : Морис Бах 10.1.2.5 Ioctl : Морис Бах
продолжение 368 10.1.2.1 Open : Морис Бах
10.1.2.2 Closе : Морис Бах 10.1.2.3 Read и Writе : Морис Бах
10.1.2.4 Стратегический интерфейс : Морис Бах 10.1.2.5 Ioctl : Морис Бах
10.1.3 Программы обработки прерываний : Морис Бах 10.2 ДИСКОВЫЕ ДРАЙВЕРЫ : Морис Бах
10.3 ТЕРМИНАЛЬНЫЕ ДРАЙВЕРЫ : Морис Бах 10.3.1 Символьные списки : Морис Бах
10.3.2 Терминальный драйвер в каноническом режиме : Морис Бах 10.3.3 Терминальный драйвер в режиме без обработки символов : Морис Бах
10.3.4 Опрос терминала : Морис Бах 10.3.5 Назначение операторского терминала : Морис Бах
10.3.6 Драйвер косвенного терминала : Морис Бах 10.3.7 Вход в систему : Морис Бах
продолжение 384 10.3.1 Символьные списки : Морис Бах
10.3.2 Терминальный драйвер в каноническом режиме : Морис Бах 10.3.3 Терминальный драйвер в режиме без обработки символов : Морис Бах
10.3.4 Опрос терминала : Морис Бах 10.3.5 Назначение операторского терминала : Морис Бах
10.3.6 Драйвер косвенного терминала : Морис Бах 10.3.7 Вход в систему : Морис Бах
10.4 ПОТОКИ : Морис Бах 10.4.1 Более детальное рассмотрение потоков : Морис Бах
10.4.2 Анализ потоков : Морис Бах продолжение 395
10.4.1 Более детальное рассмотрение потоков : Морис Бах 10.4.2 Анализ потоков : Морис Бах
10.5 ВЫВОДЫ : Морис Бах 10.6 УПРАЖНЕНИЯ : Морис Бах
11.1 ТРАССИРОВКА ПРОЦЕССОВ : Морис Бах 11.2 ВЗАИМОДЕЙСТВИЕ ПРОЦЕССОВ В ВЕРСИИ V СИСТЕМЫ : Морис Бах
продолжение 402 : Морис Бах 11.2.1 Сообщения : Морис Бах
11.2.2 Разделение памяти : Морис Бах 11.2.3 Семафоры : Морис Бах
11.2.4 Общие замечания : Морис Бах 11.3 ВЗАИМОДЕЙСТВИЕ В СЕТИ : Морис Бах
11.4 ГНЕЗДА : Морис Бах 11.6 УПРАЖНЕНИЯ : Морис Бах
11.1 ТРАССИРОВКА ПРОЦЕССОВ : Морис Бах 11.2 ВЗАИМОДЕЙСТВИЕ ПРОЦЕССОВ В ВЕРСИИ V СИСТЕМЫ : Морис Бах
11.2.1 Сообщения : Морис Бах 11.2.2 Разделение памяти : Морис Бах
11.2.3 Семафоры : Морис Бах 11.2.4 Общие замечания : Морис Бах
продолжение 416 11.2.1 Сообщения : Морис Бах
11.2.2 Разделение памяти : Морис Бах 11.2.3 Семафоры : Морис Бах
11.2.4 Общие замечания : Морис Бах 11.3 ВЗАИМОДЕЙСТВИЕ В СЕТИ : Морис Бах
11.4 ГНЕЗДА : Морис Бах 11.6 УПРАЖНЕНИЯ : Морис Бах
12.1 ПРОБЛЕМЫ, СВЯЗАННЫЕ С МНОГОПРОЦЕССОРНЫМИ СИСТЕМАМИ : Морис Бах 12.2 ГЛАВНЫЙ И ПОДЧИНЕННЫЙ ПРОЦЕССОРЫ : Морис Бах
12.3 СЕМАФОРЫ : Морис Бах продолжение 427 : Морис Бах
12.3.2 Реализация семафоров : Морис Бах 12.3.3 Примеры алгоритмов : Морис Бах
12.3.3.1 Выделение буфера : Морис Бах 12.3.3.3 Драйверы : Морис Бах
12.3.3.4 Фиктивные процессы : Морис Бах 12.6 УПРАЖНЕНИЯ : Морис Бах
12.1 ПРОБЛЕМЫ, СВЯЗАННЫЕ С МНОГОПРОЦЕССОРНЫМИ СИСТЕМАМИ : Морис Бах 12.2 ГЛАВНЫЙ И ПОДЧИНЕННЫЙ ПРОЦЕССОРЫ : Морис Бах
12.3 СЕМАФОРЫ : Морис Бах 12.3.2 Реализация семафоров : Морис Бах
12.3.3 Примеры алгоритмов : Морис Бах 12.3.3.1 Выделение буфера : Морис Бах
12.3.3.3 Драйверы : Морис Бах 12.3.3.4 Фиктивные процессы : Морис Бах
продолжение 442 12.3.2 Реализация семафоров : Морис Бах
12.3.3.1 Выделение буфера : Морис Бах 12.3.3.3 Драйверы : Морис Бах
12.3.3.4 Фиктивные процессы : Морис Бах 12.3.3.1 Выделение буфера : Морис Бах
12.3.3.3 Драйверы : Морис Бах 12.3.3.4 Фиктивные процессы : Морис Бах
12.6 УПРАЖНЕНИЯ : Морис Бах ГЛАВА 13. РАСПРЕДЕЛЕННЫЕ СИСТЕМЫ : Морис Бах
13.1 ПЕРИФЕРИЙНЫЕ ПРОЦЕССОРЫ : Морис Бах 13.2 СВЯЗЬ ТИПА NEWCASTLЕ : Морис Бах
13.3 "ПРОЗРАЧНЫЕ" РАСПРЕДЕЛЕННЫЕ ФАЙЛОВЫЕ СИСТЕМЫ : Морис Бах 13.4 РАСПРЕДЕЛЕННАЯ МОДЕЛЬ БЕЗ ПЕРЕДАТОЧНЫХ ПРОЦЕССОВ : Морис Бах
13.5 ВЫВОДЫ : Морис Бах 13.6 УПРАЖНЕНИЯ : Морис Бах
продолжение 458 13.1 ПЕРИФЕРИЙНЫЕ ПРОЦЕССОРЫ : Морис Бах
13.2 СВЯЗЬ ТИПА NEWCASTLЕ : Морис Бах 13.3 "ПРОЗРАЧНЫЕ" РАСПРЕДЕЛЕННЫЕ ФАЙЛОВЫЕ СИСТЕМЫ : Морис Бах
13.4 РАСПРЕДЕЛЕННАЯ МОДЕЛЬ БЕЗ ПЕРЕДАТОЧНЫХ ПРОЦЕССОВ : Морис Бах 13.5 ВЫВОДЫ : Морис Бах
13.6 УПРАЖНЕНИЯ : Морис Бах ПРИЛОЖЕНИЕ СИСТЕМНЫЕ ОПЕРАЦИИ : Морис Бах
БИБЛИОГРАФИЯ : Морис Бах Использовалась литература : Архитектура операционной системы UNIX

Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)


Microsoft Office Журнал Компьютерра № 32 от 5 сентября 2006 года Журнал Компьютерра № 34 от 18 сентября 2006 года