Сторінковий кеш і зворотний запис сторінок

ядрі операційної системи Linux реалізовано один головний дисковий кеш, який називається сторінковим (page cache) Призначення цього кеша-мінімізувати кількість дискових операцій введення-виведення шляхом зберігання в памяті тих даних, для звернення до яких необхідно виконувати дискові операції,

Ця глава присвячена розгляду сторінкового кеша

Кешування дискових даних важливо з двох причин По-перше, доступ до диску виконується значно повільніше, ніж доступ до памяті Доступ до даних в памяті виконується значно швидше, ніж до даних на диску По-друге, якщо до деякими даними здійснювався доступ, то з досить великою ймовірністю до цими ж даними в найближчому майбутньому буде потрібно звернутися знову Принцип, згідно з яким операції звернення до деякими даними мають тенденцію групуватися один з одним у часі, називається зосередженістю в часі (temporal locality) Зосередженість в часі гарантує, що якщо дані кешуються при першому доступі до них, то існує велика ймовірність вдалого звернення до кеш до цих даних в найближчому майбутньому

Сторінковий кеш складається з фізичних сторінок, які знаходяться в оперативній памяті Кожна сторінка памяті в кеші відповідає кільком дисковим блокам Коли ядро ​​починає деяку операцію сторінкового введення-виведення (дискові, зазвичай файлові, операції введення-виведення, які виконуються порціями, рівними розміром сторінки памяті), то воно спочатку перевіряє, чи немає відповідних даних в сторінковому кеші Якщо ці дані є в кеші, то ядро ​​може не звертатися до диска і використовувати дані прямо з сторінкового кеша

Окремі дискові блоки також можуть бути привязані до сторінкового кешу за допомогою буферів блочного введення-виведення Згадайте з матеріалу глави 13, Рівень блочного введення-виведення, що буфер – Це подання в памяті одного фізичного дискового блоку Буфери грають роль дескрипторів, які відображають сторінки памяті на дискові блоки Тому сторінковий кеш також дозволяє скоротити кількість звернень до диска при виконанні операцій блочного введення-виведення як за рахунок кешування, так і за рахунок буферизації операцій блочно-

го введення-виведення для виконання в майбутньому Такий тип кешування часто називають буферним кешем, хоча насправді це не окремий кеш, а частина сторінкового кеша

Розглянемо ті типи операцій і даних, які повязані зі сторінковим кешем Сторінковий кеш в основному поповнюється при виконанні сторінкових операцій введення-виведення, таких як read () і write () Сторінкові операції введення-виведення виконуються з цілими сторінками памяті, в яких зберігаються дані, що відповідає операціям з більш, ніж одним дисковим блоком У сторінковому кеші дані файлів зберігаються порціями Розмір однієї порції дорівнює одній сторінці памяті

Операції блочного введення-виведення працюють в кожен окремий момент часу з одним дисковим блоком Часто зустрічається операція блочного введення-виведення – це читання і запис файлових індексів Ядро надає функцію bread (), яка виконує низкоуровневое читання одного блоку з диска За допомогою буферів дискові блоки відображаються на повязані з ними сторінки памяті і завдяки цьому зберігаються в сторінковому кеші

Наприклад, при першому відкритті в текстовому редакторі дискового файлу з початковим кодом, дані зчитуються з диска і записуються в память При редагуванні файлу зчитується вага більше даних в сторінки памяті Коли цей файл пізніше починають компілювати, то ядро ​​може зчитувати відповідні сторінки памяті з дискового кеша Немає необхідності знову зчитувати дані з диска Оскільки користувачі схильні до того, щоб періодично працювати з одними і тими ж файлами, сторінковий кеш зменшує необхідність виконання великої кількості дискових операцій

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*