Linux Kernel (Ядро линукса) (часть 3)


Освобождение страниц буферов блочных устройств

страницы буферов блочных устройств освобождаются, когда ядро пытается получить в свое распоряжение дополнительную свободную память. Очевидно, что страницу нельзя освободить, если она содержит грязные” или заблокированные буферы. Чтобы освободить страницы буферов, ядро вызывает функцию try_to_reiease_page, которая принимает адрес раде дескриптора страницы и выполняет следующие действия3:
1. Если флаг PG writeback установлен, функция возвращает 0 (освобождение невозможно, поскольку страница в этот момент записывается обратно на диск).
2. Вызывает метод reieasepage объекта address space данного блочного устройства, если этот метод определен. (Как правило, для блочных устройств он не определен.)
3. Вызывает функцию try to free buffers о и выдает код возврата, полученный от нее.
Что касается функции try to free buffers , она перебирает головы буферов, связанные со страницей, и выполняет следующие действия:
1. Проверяет флаги всех голов буферов, входящих в страницу. Если у какой- то головы буфера установлен флаг BH Dirty или BH Locked, функция завершает работу, возвращая 0 (неудача), поскольку освободить буферы невозможно.
2. Если голова буфера находится в списке косвенных буферов 3. Сбрасывает флаг PG private дескриптора страницы, записывает в поле private значение null и уменьшает счетчик обращений страницы.
4. Сбрасывает флаг страницы PG dirty.
5. Многократно вызывает функцию free buffer heado, чтобы освободить все головы буферов этой страницы.
6. Возвращает 1 (успех).

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

Linux Kernel (Ядро линукса) (часть 1)

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть другие прерывания того же типа, и другие процессоры могут приступить к их обработке. Без спин-блокировки к главному дескриптору прерывания могли бы обратиться сразу несколько процессоров. Как мы...

Linux Kernel (Ядро линукса) (часть 2)

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

Linux Kernel (Ядро линукса) (часть 3)

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer head. Этот дескриптор содержит всю информацию, необходимую ядру для работы с блоком, так что перед обработкой блока ядро обязательно проверяет голову...