На головну

Розподіл пам'яті в багатозадачних системах

  1.  II. РОЗПОДІЛ ТРУДОМІСТКОСТІ ПО РОЗДІЛАХ, ТЕМАМИ ДИСЦИПЛІНИ І ВИДІВ НАВЧАЛЬНОЇ РОБОТИ
  2.  III. РОЗПОДІЛ НАВЧАЛЬНОГО ЧАСУ ПО семестр, РОЗДІЛІВ, ТЕМ, ВИДІВ НАВЧАЛЬНИХ ЗАНЯТЬ
  3.  III. РОЗПОДІЛ НАВЧАЛЬНОГО ЧАСУ ЗА ТЕМАМИ І ВИДАМИ НАВЧАЛЬНИХ ЗАНЯТЬ
  4.  SIPP (SIP) -модулем пам'яті.
  5.  V. розподіл годин курсу за темами
  6.  VI. нейрохімічні МЕХАНІЗМИ пластичність і ПАМ'ЯТІ.
  7.  Video RAM Cacheable (Кешірованіевідеопамяті) -див. Video Memory Cache Mode

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

У перших ОС пам'ять розміщувалася дуже просто - кожна програма починалася з одного і того ж адреси т. Е. Кожна наступна накладалася на попередню. Якщо частина програми залишалася в пам'яті, то при наступному завантаженні довантажувати тільки відсутня частина. наприклад:

 пам'ять  виконання завдання 1  виконання завдання 2  виконання завдання 3  виконання завдання 2
 0 000 - 5 000  система  система    система
 10 000  задача 1  задача 2  задача 3  довантаження 2
 15 000  задача 2  задача 2
 20 000
 25 000  вільна пам'ять
   вільна пам'ять  вільна пам'ять  вільна пам'ять

У цьому прикладі для завантаження завдання 2 повторно не потрібно завантажувати її всю (т. К. Частина її вже знаходиться в пам'яті), а тільки відсутню частину, яку використовувала завдання 3 до цього ..

Однак такий розподіл неефективно. Наприклад, задачу3 можна було розмістити в вільній ділянці і тоді задачу2 не довелося б повторно довантажувати. Тому з'явилися інші системи розподілу пам'яті:

 розділ 8М  розділ 8М  розділ 8М  розділ 8М  ...

Фіксований розподіл:

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

 2М  4М  8М  8М  16М  ...

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

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

 1 прогр  2 прогр    4 програм    6ін  ...

система «двійників»:це був компроміс між динамічним і фіксованим розподілом, за яким пам'ять виділялася блоками розміром 2к . Припустимо вся пам'ять розміром 1 М, тоді для розміщення програми 100кБ підбирається блок наступним чином: вся пам'ять ділиться навпіл (т. Е. На 2 частини по 512 кБ), потім знову навпіл (по 128Кб) і відводиться для програми шматок 128Кб т. До . при наступному розподілі програма вже не розміститься. За таким же принципом розміщуються інші програми в частині пам'яті. При утворенні двох поспіль однакових вільних шматків вони об'єднуються в один блок. Наприклад, при запиті на розміщення програм а (= 100 Кб), В (= 186 Кб) і з (= 52Кб) вони будуть розміщені послідовно так:

 А - 128  128 Кб  256 Кб  512 Кб
 А - 128  128 Кб  В - 256  512 Кб
 А - 128  З-64  64 Кб  В - 256  512 Кб
         

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

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

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

 




 ВСТУП |  Принципи роботи перших комп'ютерів без ОС |  Перші пакетні ОС |  переривання |  багатозадачність |  Кеш - пам'ять |  стану процесу |  Приклад станів процесу і черг. |  Перемикання між процесами |  ОС як процес |

© um.co.ua - учбові матеріали та реферати