словник | перекладачка | факти | тексти | програми
щодо | посилання | новини | гостьова книга | пошук
початок << тексти  << автор  << зміст  << сторінка

next up previous contents index
Далі: Загрузка та вимкнення системи Вгору: Керування пам'яттю Назад: Виділення своп простору

Буферний кеш

114  

Швидкість читання з диску115, є набагато меншою, ніж швидкість доступу до (справжньої) пам'яті. Часто трапляється так, що Вам потрібно прочитати одні й ті ж дані кілька разів з диску на протязі відносно короткого відтинку часу. Простий приклад: Ви читаєте листа, який прийшов електронною поштою, потім відкриваєте цього ж листа в редакторі для того, щоб дати на нього відповідь, потім відкриваєте програму електонної пошти, яка відішле цю відповідь. Або інший випадок: скільки разів виконується команда ls  в системі з багатьма користувачами? Швидкість роботи системи можна підняти, якщо читати всі дані з диску тільки один раз, і тримати їх в пам'яті після цього доти, доки вони більше не потрібні. Таким чином підвищується швидкість всіх операцій читання з диску крім самої першої. Це називають дисковим буфером, і пам'ять, яка використовується при цьому називають буферним кешем.

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

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

Більшість операційних систем мають дискові буфери та кеш (хоча в деяких випадках вони називаються інакше), але не всі з цих систем працюють за одними й тими ж принципами. Деякі з них є з наскрізним записом116 - дані записуються на диск без затримки (але, звичайно ж, тримаються в кеші). Кеш, у якому запис відбувається пізніше, називається кешем з відкладеним записом. Відкладений запис значно ефективніший, ніж наскрізний запис, але в той же час, більш схильний до помилок: якщо щось негаразд з системою - або зникає напруга (хтось висмикнув шнур з розетки), або дискету вийняли з приводу до того, як дані з буферу записані на неї - всі дані, які були в буфері на цей момент, загублені. Інколи це навіть може означати, що файлова система на диску (якщо така була там) не в повному порядку. Бо не записані на диск дані можуть бути деякими контрольними даними файлової системи.

Через це не можна вимикати систему без виконання відповідної процедури вимикання (див. підрозділ [*]), просто витягнувши шнура з розетки. Дискету з дисководу можна витягувати тільки після розмонтовування її, або ж тільки після того, як команда, яка виконувала запис на дискету, повідомить Вам про те, що вона закінчила писати. Команда sync  зливає117 буфер, тобто примусово записує всі незаписані дані на диск, і нею треба користуватися тоді, коли треба впевнитися, що все записано безпечно на диск. В системах з традиційними Юніксами існує програма update , яка виконується в фоновому режимі і робить sync  кожні 30 секунд, тобто в більшості випадків немає необхідності робити sync . В Лінаксі є інший демон bdflush , який робить чистішу роботу - він виконує sync  частіше для того, щоб запобігти раптовим короткочасним зависанням системи, які інколи трапляються при високих нагрузках на диск викликаних командою sync . В Лінаксі bdflush  запускається процесом update . В більшості випадків немає причини піклуватися про них, але, якщо з деяких причин трапляється так, що демон bdflush  вмирає, то ядро видасть попередження про це і його потрібно запустити вручну (/sbin/update ). Дисковий кеш звичайно тримає в буфері не файли, а блоки - найменші одиниці дискового вводу/виводу (в Лінаксі вони рівні 1 кбайту). Таким чином тримаються в буфері також директорії, суперблоки, інформація файлової системи та дані дисків без файлових систем.

Ефективність кешу в першу чергу залежить від його розміру. Занадто малий кеш практично не робить нічого - всі ті дані, які він тримає в буфері будуть злиті на диск раніше, ніж кеш встигне їх використати. Критичний розмір кешу залежить від того, скільки даних читається і записується, і як часто потрібен доступ до одних і тих же даних. Єдиний шлях це дізнатися - це шлях експерименту.

Якщо дисковий кеш має фіксований розмір, то його надмірний розмір теж знижує ефективність роботи. Кеш забирає оперативну пам'ять від системи, пам'ять стає меншою, що в свою чергу приводить до підвищення частоти свопінґу, а свопінґ - такий же повільний, як і інші дискові перації. Для підвищення ефективності використання пам'яті Лінакс автоматично використовує всю вільну пам'ять під дисковий кеш, і автоматично зменшує розмір кешу, коли програмам потрібно більше пам'яті.

В Лінаксі від адміністратора не вимагається ніяких додаткових дій для користування кешем - все відбувається автоматично. Крім вимикання комп'ютера за правилами та виймання дискети з дисководу тоді, коли потрібно, Вам немає про що турбуватися.



Dmytro Kovalev
1999-06-10
вгору
 
Без реклами
2004-03-23 13:52:14
TopList
© 2000-2003, Київ, Соломко Валентин -- ідея та наповнення, графічне опрацювання -- проєкт дизайн, змiнено -- 08.06.2003 14:25:50