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


Выбор целевой страницы

Цель алгоритма утилизации страничных кадров, или алгоритм PFRA (Page Frame Reclaiming Algorithm), состоит в том, чтобы выбирать страничные кадры и освобождать их. Очевидно, страничные кадры, выбираемые алгоритмом PFRA, должны быть несвободны, т. е. они не должны находиться ни в одном из массивов free area, используемых buddy-системой Алгоритм утилизации страничных кадров обращается со страничными кадрами по-разному, в зависимости от их содержимого. Мы будем различать не- утилизируемые страницы, выгружаемые страницы, синхронизируемые страницы и страницы на выброс.
В этой таблице страница называется отображающей, если она отображает фрагмент файла. Например, все страницы в адресных пространствах режима пользователя, принадлежащие отображениям файлов в память, являются отображающими, как и любые другие страницы, содержащиеся в кэше страниц. Почти во всех случаях отображающие страницы являются синхронизируемыми: чтобы утилизировать страничный кадр, ядро должно проверить, является ли страница грязной”, и, если необходимо, записать ее содержимое в соответствующий файл на диске.

В отличие от таких страниц, страница называется анонимной, если она принадлежит анонимной области памяти процесса (например, все страницы процесса в куче или стеке режима пользователя анонимны). Чтобы утилизировать страничный кадр, ядро должно сохранить содержимое страницы в специально отведенном разделе диска, называемом областью подкачки. Следовательно, все анонимные страницы являются выгружаемыми.

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

Когда алгоритм утилизации страничных кадров должен затребовать страничный кадр, принадлежащий адресному пространству процесса режима поль- зовтеля, он вначале определяет, является ли страничный кадр совместно используемым или нет. Совместно используемый страничный кадр принадлежит нескольким адресным пространствам режима пользователя, а страничный кадр, таковым не являющийся, — только одному. Обратите внимание, что страничный кадр, не используемый совместно, может принадлежать нескольким облегченным” процессам, ссылающимся на один дескриптор памяти.
Совместно используемые страничные кадры обычно создаются, когда процесс порождает потомка. Как было сказано в главе 9, таблицы страниц потомка копируются с таблиц породившего процесса, поэтому родитель и потомок совместно используют одни и те же страничные кадры. Другим типичным случаем является обращение двух или более процессов к одному файлу при посредстве совместно используемого отображения в память

Предыдущая страница | 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. Этот дескриптор содержит всю информацию, необходимую ядру для работы с блоком, так что перед обработкой блока ядро обязательно проверяет голову...