Пробуксовування і керування резидентною множиною



Поняття пробуксовування

Пробуксовуванням (thrashing) називають стан процесу, коли через сторінкові переривання він витрачає більше часу на підкачування сторінок, аніж власне на  виконання. У такому стані процес фактично непрацездатний

Пробуксовування виникає тоді, коли процес часто вивантажує із пам’яті сторінки, які йому незабаром знову будуть потрібні. У результаті більшу частину часу такі процеси перебувають у призупиненому стані, очікуючи завершення операції введення-виведення для читання сторінки із диска. Отож, на додачу до пам’яті, за розміром порівнянної із диском, отримують пам’ять, порівнянну із диском і за часом доступу.

Назвемо деякі причини пробуксовування.

Процес не використовує пам’ять повторно (для нього не працює правило «дев’яносто до десяти»).

Процес використовує пам’ять повторно, але він надто великий за обсягом, тому його резидентна множина не поміщається у фізичній пам’яті.

Запущено надто багато процесів, тому їхня сумарна резидентна множина не поміщається у фізичній пам’яті.

У перших двох випадках ситуація майже не піддається виправленню, найкраща порада, яку тут можна дати, – це збільшити обсяг фізичної пам’яті. У третьому випадку ОС може почати такі дії: з’ясувати, скільки пам’яті необхідно кожному процесові, і змінити пріоритети планування так, щоб процеси ставилися на виконання групами, вимоги яких до пам’яті можуть бути задоволені; заборонити або обмежити запуск нових процесів.

Локальність посилань

Можна створити таку програму, яка постійно звертатиметься до різних сторінок, розкиданих великим адресним простором, генеруючи багато сторінкових переривань. Насправді реальні застосування працюють не так: вони зберігають локальність посилань (locality of reference), коли на різних етапах виконання процес посилається тільки на деяку невелику підмножину своїх сторінок, що є одним із наслідків відомого правила «дев’яносто до десяти».

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

Якщо виділено достатньо пам’яті для всіх сторінок поточної локальності, сторінкові переривання до переходу до наступної локальності не генеруватимуться. Якщо пам’яті недостатньо, система перебуватиме у стані пробуксовування.

Завданням керування резидентною множиною є така його динамічна корекція, щоб у будь-який момент часу ця множина давала змогу розміщувати всі сторінки поточної локальності.

Поняття робочого набору. Модель робочого набору

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

Найважливішою характеристикою цього підходу є інтервал часу довжиною Т, який відлічують від поточного моменту часу назад. Якщо Т вимірюють у секундах, то цей інтервал визначає останні Т секунд виконання процесу і задає вікно робочого набору. Ширину вікна завжди залишають постійною, а межі його зсуваються із часом; верхньою межею завжди є поточний момент часу, а нижньою – поточний момент мінус Т.

Під робочим набором процесу розуміють усі сторінки, до яких він звертався у вікні робочого набору. У кожний новий момент часу робочий набір буде різним, оскільки вікно робочого процесу переміщується, сторінки, до яких не було доступу за час Т, із набору вилучають, щойно використані сторінки додають у набір (рис. 9.8).

Рис. 9.8. Робочий набір процесу

Розглянемо, як можна використати концепцію робочого набору.

Виділяючи пам’ять, можна дати кожному процесові стільки сторінок, щоб у них помістився його робочий набір.

У разі заміщення сторінок можна вибирати для заміщення переважно ті сторінки, що не належать до робочого набору.

Під час планування процесів можна не ставити процес на виконання доти, поки всі сторінки його робочого набору не опиняться у пам’яті.

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

Головним недоліком моделі робочого процесу є складність реалізації. Вона пов’язана насамперед із тим, що вікно робочого процесу постійно переміщується, нові сторінки постійно додають у нього, старі – вилучають. Іншим недоліком є складність вибору величини Т (звичайно її підбирають емпірично) і складність організації робочого набору при спільному використанні сторінками різних процесів.

Наведемо один із варіантів реалізації моделювання робочого набору. Із кожним фреймом пов’язують спеціальну характеристику – час простою (idle time). За перериванням від таймера перевіряють, чи встановлено біт R, якщо так, час простою і біт R обнулюють (сторінку залишають у робочому наборі), якщо ні, проміжок часу між скануваннями сторінок додають до часу простою. Коли час простою перевищує Т, сторінку виключають із робочого набору. У реальних системах значення Т перебуває в межах хвилини.

Зазвичай найбільше сторінкових переривань відбувається під час завантаження процесу у пам’ять, тому багато систем намагаються відстежувати робочі набори різних процесів, аби забезпечити якнайбільше сторінок робочого набору процесу у пам’яті до того моменту, коли процес потрібно завантажити. Це ще один варіант реалізації попереднього завантаження сторінок.


Дата добавления: 2018-04-05; просмотров: 753; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!