Роберт лав - розробка ядра linux - стор 96

У цьому розділі були розглянуті основи роботи пристроїв блокового введення-виведення, а також структури даних, що використовуються для роботи рівня введення-виведення блоками: структура bio. яка представляє виконувану операцію введення-виведення; структура buffer_head. яка представляє відображення блоків на сторінки пам'яті; структура request. яка являє собою окремий запит вводу-виводу. Після розгляду запитів вводу-виводу був описаний їх короткий, але важливий шлях, кульмінацією якого є проходження через планувальник вводу-виводу. Були розглянуті дилеми, що виникають при плануванні операцій введення-виведення, і чотири типи планувальника, які на даний момент існують в ядрі Linux, а також планувальник введення виведення з ядра 2.4 - ліфтової алгоритм Лінуса.

Області пам'яті можуть містити наступну потрібну інформацію.

• Відображення виконуваного коду з виконуваного файлу в область пам'яті процесу, яка називається сегментом коду (text section).

• Відображення ініціалізованих змінних з виконуваного файлу в область пам'яті процесу, яка називається сегментом даних (data section).

• Відображення сторінки пам'яті, заповненої нулями, в область пам'яті процесу, яка містить неініціалізовані глобальні змінні і називається сегментом bss [79] (bss section). Нульова сторінка пам'яті (zero page, сторінка пам'яті, заповнена нулями) - це сторінка пам'яті, яка повністю заповнена нульовими значеннями і використовується, наприклад, для зазначеної вище мети.

• Відображення сторінки пам'яті, заповненої нулями, в пам'ять процесу, яка використовується в якості стека процесу простору користувача (не потрібно плутати зі стеком процесу в просторі ядра, який є окремою структурою даних і управляється і використовується ядром).

• Всі файли, вміст яких відображено в пам'ять.

• Всі області спільно використовуваної пам'яті.

• Всі анонімні відображення в пам'ять, як, наприклад, пов'язані з функцією malloc () [80].

дескриптор пам'яті

struct vm_area_struct * mmap; / * Список областей пам'яті * /

struct rb_root mm_rb; / * Червоно-чорне дерево