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


Функция try_to_unmap_anon

При утилизации анонимного страничного кадра алгоритм PFRA должен перебирать все области памяти в списке структуры anon vma и тщательно проверять, содержит ли очередная область анонимную страницу, чей страничный кадр является целевым.

Эта задача решается с помощью функции try_to_unmap_anon, которая принимает в качестве параметра дескриптор целевого страничного кадра и выполняет следующие действия:
1. Получает спин-блокировку lock структуры anon vma, на которую указывает поле mapping дескриптора страницы.
2. Сканирует список дескрипторов областей памяти, принадлежащий структуре anon vma. Для каждого дескриптора области памяти vma, найденного в этом списке, функция вызывает функцию try_to_unmap_one, передавая ей в качестве параметров сам vma и дескриптор страницы. Если по какой- либо причине вызванная функция возвратит значение swap fail, или поле
mapcount дескриптора страницы будет показывать, что все записи Таблицы Страниц, ссылающиеся на данный страничный кадр, были найдены, сканирование прекратится до достижения конца списка.
3. Освобождает спин-блокировку, полученную на шаге 1.
4. Возвращает значение, вычисленное при последнем вызове функции
try_to_unmap_one, Т. е. SWAP_AGAIN (частичный успех) ИЛИ SWAP_FAIL (не- удача).

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