• Предлагать пила ленточная по металлу Корвет

    Предлагать пила ленточная по металлу Корвет.

    www.nppfost.ru





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


Управление несмежными областями памяти

Мы уже знаем, что предпочтительно отображать области памяти в последовательности смежных страничных кадров, тем самым обеспечивая более эффективное использование кэша и уменьшая среднее время доступа к памяти. Впрочем, если запросы на области памяти выдаются нечасто, есть смысл рассмотреть схему выделения, основанную на несмежных страничных кадрах, обращение к которым происходит через смежные линейные адреса. Основное достоинство этой схемы в том, что она позволяет избежать внешней фрагментации, а недостатком является необходимость обращаться к Таблицам Страниц ядра. Ясно, что размер несмежной области памяти должен быть кратен 4096. Linux по-разному использует несмежные области памяти — например, для выделения структур для активных областей подкачки или для выделения буферов каким-нибудь драйверам ввода/вывода. Кроме прочего, несмежные области памяти предоставляют еще один способ использования страничных кадров из верхней памяти.

Линейные адреса несмежных областей памяти

Чтобы найти свободный интервал линейных адресов, мы можем просмотреть область, начинающуюся с адреса page offset (обычно это ОхсООООООО, начало четвертого гигабайта

как используются линейные адреса четвертого гигабайта

□ начало этой области включает в себя линейные адреса, отображающие первые 896 Мбайт оперативной памяти, а линейный адрес, который соответствует концу физической памяти, отображенной напрямую, хранится В переменной high_memory;
- конец области содержит фиксированно отображенные линейные адреса;
- начиная с адреса pkmap_base, мы видим линейные адреса, используемые для постоянного отображения ядром страничных кадров верхней памяти;
- остальные линейные адреса можно использовать под смежные области памяти. Интервал размером 8 Мбайт (макрос vmalloc offset) вставляется в целях безопасности между концом отображения физической памяти и первой областью памяти. Его предназначение— ловить” обращения к памяти, нарушающие установленные границы. По той же причине дополнительные интервалы по 4 Кбайт вставляются для разделения несмежных областей памяти.
Макрос vmalloc start определяет начальный адрес линейного пространства, зарезервированного под несмежные области памяти, а макрос vmalloc end определяет его конечный адрес.

Предыдущая страница | 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 | Следующая страница




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

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

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

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

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

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

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

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

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