Управління пам’яттю в UNIX - Студопедія
Дати загальну характеристику управління пам'яттю в UNIX важко, оскільки ця частина системи зазнала найбільших змін за довгий період існування UNIX, пройшовши шлях від управління динамічними розділами фізичної пам'яті до сучасної схеми заміщення сторінок на вимогу, подібну до тієї, яка використовується в Windows.
Область програми, як правило, доступна лише для читання та має фіксований розмір. Область даних доступна для читання та запису, її розмір може змінюватися під час роботи за допомогою системного дзвінка brk. Область стека автоматично збільшується системою в міру заповнення стека. При запуску декількох процесів, що виконують ту саму програму, вони поділяють загальну область програми, але кожен з процесів отримує власні області даних і стека.
Коли процес виконує системний виклик exec (тобто починає виконувати іншу програму), всі області пам'яті звільняються і потім виділяються заново.
Ядро системи має власні сфери пам'яті. При виконанні системних викликів ядро працює у тих процесу, що викликав, тобто. воно має доступ як до власної пам'яті, так і до областей пам'яті процесу.
Ефективне використання обмеженого обсягу фізичної пам'яті забезпечується роботою системних процесів-«демонів», що управляють переміщенням інформації між пам'яттю та файлом підкачування. У ранніх реалізаціях UNIX, які не використовували механізм віртуальних сторінок, було можливе лише підкачування та витіснення цілих процесів. Демон підкачування (системний процес з ідентифікатором 0) періодично відстежував стан процесів і приймав рішення про витіснення окремих процесів на диск і підкачування в пам'ять одного з раніше витіснених процесів. При цьому вувага приймалася тривалість перебування процесу у пам'яті чи диску, поточний стан процесу (сплячі процеси – більш підходящі кандидати на витіснення, ніж готові) та її розмір (часто тягати туди-сюди великі процеси невыгодно).
У сучасних реалізаціях, заснованих на сторінковій організації пам'яті, значну роль відіграє поняття списку вільних сторінок, які можуть бути негайно виділені, якщо будь-який процес звернеться до віртуальної сторінки в пам'яті. До цього списку заносяться сторінки, яких довго було звернення з боку процесів. Оскільки стосовно сторінок пам'яті важко реалізувати алгоритм LRU, зазвичай використовується більш простий алгоритм другого шансу (його інша назва - алгоритм годинника). Ідея полягає у наступному. Для кожної фізичної сторінки в таблиці сторінок зберігаються біт використання та біт модифікації. Ці біти встановлюються апаратно: біт використання – при кожному зверненні до сторінки, а біт модифікації – під час запису сторінку. Системний процес, званий демоном заміщення сторінок, періодично активізується (за таймером) і стежить, чи не занадто малий розмір списку вільних сторінок. Зазвичай поріг встановлюється рівним загального обсягу фізичної пам'яті. Якщо кількість вільних сторінок нижча за цей поріг, демон починає циклічно перевіряти всі фізичні сторінки. Якщо сторінку встановлено біт використання, цей біт скидається. Якщо ж біт вже було скинуто, то сторінка входить у список вільних. Таким чином, сторінка потрапляє до списку вільних, якщо після останнього звернення до неї сторінковий демон встиг її двічі опитати. Якщо у сторінки встановлено біт модифікації (в іншій термінології, якщо сторінка «брудна»), то перед її зарахуванням до списку вільних система зберігаєдані у сторінковому файлі. Зарахування до списку вільних сторінок не означає негайної втрати даних, і якщо процес встигне звернутися до сторінки до того, як її буде віддано іншому процесу, ця сторінка буде виключена з вільних.
Демон підкачування процесів теж не спить. Якщо сторінковий демон дуже часто виконує запис сторінок на диск, а кількість вільних сторінок залишається низьким, то демон підкачки вибирає один з процесів і відправляє його повністю на диск, щоб зменшити конкуренцію за пам'ять.
Тут описаний (досить приблизно) лише один з варіантів управління пам'яттю, реалізованих в різних версіях UNIX і в Linux. Оскільки алгоритми управління фізичною пам'яттю є «внутрішньою справою» системи та не регламентуються жодними стандартами, відповідні алгоритми, що використовуються у різних версіях системи, можуть значно відрізнятися.
[2] Джерело терміна не зовсім зрозуміле. Серед значень англійського слова «cash» найбільш відповідним видається «готівка» - та дрібниця в гаманці, яка дозволяє не звертатися щоразу до банку заради дрібних покупок.
[3] Згадайте, як працює Windows під час чергового завантаження після неправильного вимкнення комп'ютера.
[4] Теоретично можна задати число копій FAT, відмінне від двох. Це число зберігається як один із параметрів у BOOT-секторі. На практиці завжди використовуються дві копії FAT.
[5] Як ви думаєте, у чому різниця між переміщенням файлу в межах одного диска та переміщенням з диска на диск?
[7] Наявний деякий різнобій у загальноприйнятій термінології: у системі з невитісняючою диспетчеризацією витіснення процесу все-таки можливе, але тільки з ініціативи самого процесу.
[8] Іноді використовують також термін «розподіл часу»(Time Sharing). Однак, цей термін краще залишити для позначення багатотермінальних ОС, описаних у п. 1.3.3. До систем із квантуванням часу відносяться також ОС реального часу, що помітно відрізняються від систем поділу часу.
[9] Але до іспиту згадати!
[10] Те саме розширення EXE означає різні формати програм для MS-DOS і для Windows різних версій. Кожен із цих форматів має власну сигнатуру. Наприклад, для EXE-файлів сучасної Windows використовується сигнатура PE.
[11] Використання слова "nice" - "приємний, люб'язний, вихований, витончений" в даному контексті зазвичай пояснюють так: цей процес настільки люб'язний, що поступається всім дорогу.
[12] Досвід підказує, що як комп'ютери з пам'яттю в кілька гігабайт стануть звичайними, з'являться і програми, здатні знайти більш менш корисне вживання всієї цієї пам'яті.
Чи не знайшли те, що шукали? Скористайтеся пошуком:
Вимкніть adBlock! і оновіть сторінку (F5)дуже потрібно