Сегментація пам’яті 1

Надіслати свою хорошу роботу в базу знань просто. Використовуйте форму, розташовану нижче

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

1. Сегментація пам'яті. Реалізація сегментації

Системи віртуальної пам'яті можна розділити на два класи:

системи з фіксованим розміром блоків, званих сторінками, і системи зі змінним розміром блоків, званих сегментами.

Основні поняття сегментації.

Недоліки такої системи:

Одна ділянка може повністю заповнитися, але при цьому залишаться вільні ділянки. Можна звичайно переміщати ділянки, але це дуже складно.

Розглянемо той же приклад з використанням сегментів:

Кожен сегмент може рости або зменшуватися незалежно від інших.

Сегмент - це логічний об'єкт.

o номер сегмента

o Сегменти не заважають один одному.

o Полегшує спільне використання процедур і даних.

o Роздільна захист кожного сегмента (читання, запис).

Якщо сторінки мають фіксований розмір, то сегменти немає.

У сегментів так само, як і у сторінок, існує проблема фрагментації.

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

2. Сегментація з використанням сторінок: MULTICS

В одній з перших, де була застосована сторінкова сегментація, була система MULTICS.

Кожна програма забезпечувалася до 2 ^ 18 сегментів (більше 250 000), кожен з яких міг бути до 65 536 (36-розрядних) слів довжиною.

Таблиця сегментів - зберігає дескриптор для кожного сегмента. У кожної програми своя таблиця.

Оскільки записів в таблиці більше 250 000, вона сама розбита на сторінки.

Сама таблиця є окремим сегментом.

Сегмент з таблицею дескрипторів вказують на таблиці сторінок для кожного сегмента

Нормальний розмір сторінки дорівнює 1024 словам. Якщо сегмент менше 1024, то він або не розбитий на сторінки, або розбитий на сторінки по 64 слова.

Коли відбувається звернення до пам'яті, виконується наступний алгоритм:

1. За номером сегмента знаходиться дескриптор сегмента.

2. Перевіряється, чи таблиця сторінки в пам'яті. Якщо в пам'яті, визначається її розташування. Якщо немає, викликається сегментне переривання.

3. Перевіряється, чи сторінка в пам'яті. Якщо в пам'яті, визначається її розташування в пам'яті. Якщо немає в пам'яті, викликається сторінкове переривання.

5. Відбувається запис або читання.

Сегментація з використанням сторінок: Intel Pentium

Кожна програма забезпечується до 16К сегментів, кожен з яких може бути до 1 млдр 36-розрядних слів довжиною.

Основа віртуальної пам'яті системи Pentium складається з двох таблиць:

o Локальна таблиця дескрипторів LDT (Local Descriptor Table) - є у кожної програми, і описує сегменти програми.

o Глобальна таблиця дескрипторів GDT (Global Descriptor Table) - одна для всіх програм, і описує системні сегменти (включаючи саму ОС).

Кожен селектор (указує на дескриптор) являє собою 16-розрядний номер.

4. Селектор в системі Pentium

13 бітів визначають номер запису в таблиці дескрипторів, тому ці таблиці обмежені, кожна містить 8К (2 ^ 13) сегментних дескрипторів.

1 біт вказує тип використовуваної таблиці дескрипторів LDT чи GDT.

5. Рівні привілейованості в системі Pentium

Рівні привілейованості забороняють виконуваного коду звернутися до більш низького рівня.

Дескриптор програмного (НЕ даних) сегмента в системі Pentium (всього 8 байт (64 біта)).

Розмір (Limit) - розмір сегмента (20 біт), рознесений на дві частини.

Якщо розмір сегмента зазначений у сторінках, він може досягати 2 ^ 32 байтів (2 ^ 20 * 4Кбайт (2 ^ 12) (розмір сторінки в Pentium)).

1. Селектор завантажується в регістр (для сегмента команд в CS, для сегмента даних в DS).

2. Визначається глобальний чи локальний сегмент (LDT чи GDT).

3. Дескриптор витягається з LDT чи GDT, і зберігається в мікропрограмних регістрах.

4. Якщо дескриптор в пам'яті і зсув не виходить за межі сегмента, програма може продовжити роботу, якщо ні, відбувається переривання.

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

У цьому випадку сегмент в 4 Мбайта (1024 записи по 4 Кбайта сторінки), буде мати сторінковий каталог тільки з одним записом (і 1024 у таблиці сторінок), замість 1 млн в одній таблиці.

7. Особливості реалізації в UNIX

У LUNIX системі на 32-розрядної машині кожен процес отримує 3Гбайта віртуальні простори для себе, і 1Гбайт для сторінкових таблиць і інших даних ядра.

На комп'ютерах Pentium, використовуються дворівневі таблиці сторінок, і розмір сторінок фіксований 4Кбайта

На комп'ютерах Alpha, використовується трирівневі таблиці сторінок, і розмір сторінок фіксований 8Кбайт

Для кожної програми виділяється 3 сегменти:

1. Код програми (тільки для читання)

8. Реалізація сегментації

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

Однак сегментація істотно відрізняється від розбиття на сторінки в наступному: розмір сторінок фіксований, а розмір сегментів - немає. На рис. 6.8, а показаний приклад фізичної пам'яті, в якій спочатку міститься 5 сегментів.

Подивимося, що відбувається, якщо сегмент 1 видаляється, а сегмент 7, який менше за розміром, поміщається на його місце. В результаті виходить конфігурація, зображена на рис. 6.8, б. Між сегментом 7 і сегментом 2 виявляється невикористана ( "порожня") область.

Потім сегмент 4 замінюється сегментом 5 (рис. 6.8, в), а сегмент 3 - сегментом 6 (рис. 6.8, г).

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

Іноді зовнішню фрагментацію називають поклеточного розбивкою (checkerboarding).

Мал. 6.8. Динаміка зовнішньої фрагментації (а, б, в, г); дефрагментація шляхом ущільнення (д)

Подивимося, що станеться, якщо програма звернеться до сегменту 3, коли пам'ять фрагментована (див. Рис. 6.8, г). Спільний простір пустот становить 10 Кбайт, і, хоча це більше, ніж потрібно для сегмента 3, сегмент 3 туди не поміщається, так як простір розбито на маленькі фрагменти. Замість цього доводиться спочатку видаляти інший сегмент.

В іншому популярному алгоритмі список пустот просто проглядається по колу і вибирається перший же вільний фрагмент, за розміром відповідний для даного сегмента. Дивно, але останній алгоритм з точки зору загальної продуктивності працює набагато краще, ніж алгоритм оптимальної підгонки, оскільки останній породжує дуже багато маленьких порожнин [114].

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

Наведемо одне з таких процесів. Всякий раз, коли сегмент видаляється з пам'яті, а одна або обидві сусідні області цього сегмента - НЕ сегменти, а порожнечі, суміжні порожнечі можна об'єднати. Якщо на рис. 6.8, г видалити сегмент 5, то дві сусідні порожнечі, об'єднавшись з фрагментом розміром 4 Кбайт, який займав віддалений сегмент, дадуть в результаті вільний фрагмент розміром вже 11 Кбайт.

9. Сегментна і сегментно-сторінкова організація пам'яті

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

Апаратна підтримка сегментів поширена мало (головним чином на процесорах Intel). У більшості ОС сегментаціяреалізуется на рівні, що не залежить від апаратури.

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

Розміщено на Allbest.ru

подібні документи

Поняття віртуальної пам'яті, її реалізація. Особливості сторінкової організації на вимогу. Етапи обробки ситуації відсутності сторінки в пам'яті. Стратегії (алгоритми) заміщення сторінок. Особливості деяких операційних систем: Windows NT і Solaris.

Розробка драйвера під Linux, що відслідковує виділення і звільнення процесами віртуальної пам'яті і виділення фізичних сторінок при сторінкових відмовах. Компіляція драйвера і робота з ним. Експериментальна перевірка працездатності драйвера.

Архітектура комп'ютерів та можливості операційної системи з управління пам'яттю. Суть концепції віртуальної пам'яті. Апаратно-незалежні і апаратно-залежні засоби управління віртуальною пам'яттю. Сегментно-сторінкова організації віртуальної пам'яті.

Розробка програмного додатка на С #, що розпізнають букви і цифри з фотографії автомобільного номера. Алгоритм роботи з зображенням: корекція яскравості, позбавлення від шуму камери, підвищення різкості кордонів, бінаризація, сегментація і розпізнавання.

Обсяг двухпортовой пам'яті, розташованої на кристалі, для зберігання програм і даних в процесорах ADSP-2106x. Метод подвійного доступу до пам'яті. Кеш-команди і конфлікти при зверненні до даних по шині пам'яті. Простір пам'яті багатопроцесорної системи.