Архитектура Unix

. Алгоритм записи дискового блока



Рисунок 3.15. Алгоритм записи дискового блока

алгоритм bwrite /* запись блока */ входная информация: буфер выходная информация: отсутствует { приступить к записи на диск; если (ввод-вывод синхронный) { приостановиться (до завершения ввода-вывода); освободить буфер (алгоритм brelse); } в противном случае если (буфер помечен для отложенной записи) пометить буфер для последующего размещения в "голове" списка свободных буферов; }


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



Содержание раздела