Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

 

Банки пам'яті

Банки пам'яті використовуються, коли адресний простір процесора малий, а додаток вимагає. При цьому вартісні і електротехнічні обмеження дозволяють нам встановити в систему значно більше пам'яті, чим процесор може адресувати. Наприклад, в багатьох" мікроконтроллерів адреса має довжину всього 8 біт, проте 256 байт даних, і тим більше 256 команд коди для більшості додатків недостатньо. Багато хто з ранніх персональних комп'ютерів, заснованих на 8-розрядних мікропроцесорах i8085 і Z80 з 16-розрядним адресою, мав значно більше 64 Кбайт пам'яті. Наприклад, популярні в роки дитинства авторів комп'ютери Yamaha мали до 2 Мбайт оперативної пам'яті.
Адресація додаткової пам'яті в цій ситуації забезпечується додатковим адресним регістром, який може бути як конструктивним елементом процесора, так і зовнішнім пристроєм. Цей регістр дає нам додаткові біти адреси, які і забезпечують адресацію додаткової пам'яті. Регістр цей називається розширювачем адреси або селектором банку а область пам'яті, яку можна адресувати, не змінюючи селектор банку, - банком пам'яті. Значення регістра-селектора називають номером банку.

Банкова адресація в 16-розрядних мікропроцесорах
Уважний читач, знайомий з системою команд Intel 8086, не може не відзначити, що "сегментні" регістри цього процесора мають мало спільного з власне сегментацією, що описується в главі 5. Ці регістри більш схожі на химерний гібрид селектора банків і базового регістра. Як і описуваний далі PIC, I8086 має команди "ближніх" (внутрішньобанкових) і "далеких" (міжбанкових) переходів, викликів і повернень.
Що відноситься до того ж поколінню процесорів Zylog 800 має повноцінні селектори банків. Зі всіх виготівників 16-розрядних мікропроцесорів лише інженери фірми Motorola наважилися розширити адресу до 24 біт (це зажадало збільшення розрядності регістрів і надання команд 32-розрядного складання), всі останні так чи інакше експериментували з селекторами банків і варіаціями на цю тему.

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

Банки команд в Р/с
В мікроконтроллерів PIC арифметичні операції проводяться лише над молодшими 8 бітами лічильника команд, тому відносні і обчислювані переходи допустимі лише в межах 256-командного банка. Проте повне — з врахуванням селектора банку — адресний простір для команд досягає 64 Кбайт, а в старших моделей і 16 Мбайт за рахунок використання двох регістрів-розширювачів. Перемикання банку здійснюється спеціальними командами "довгого" — міжбанкового — переходу.

Якщо банкова адресація реалізована як зовнішній пристрій, проблема міжбанкової передачі управління встає перед нами в повне зростання. Оскільки ми не маємо команд міжбанкового переходу, будь-якою такий перехід складається мінімум з двох команд: перемикання банку і власне переходу. Кожна з них порушує порядок виконання команд.
Розглянемо ситуацію детальніше (мал. 2.15): з коди, що знаходиться в банці 1 за адресою Oxloaf, ми хочемо викликати процедуру, що знаходиться в банці 2 за адресою 0x2000. Якщо ми спочатку виконаємо перемикання банку, ми опинимося в банці 2 за адресою ОХЮЬО, не маючи жодного уявлення про те, який же код або дані розміщені за цією адресою. З тією ж проблемою ми зіткнемося, якщо спочатку спробуємо зробити перехід за адресою Oxlfff.
Як рішення можна запропонувати розміщення за адресою Oxlfff в банці 1 команди перемикання на банк 2. Можливо, для цього доведеться перемістити якийсь код або дані, але ми попадемо за бажаною адресою. Впро-чем, якщо ми постійно здійснюємо міжбанкові переходи, цей підхід Зажадає вставки команд перемикання банку для кожної можливої точки входу у всіх останніх банках. Ручне (та і автоматизоване) розміщення цих команд — операція надзвичайно трудомістка, і виникає природна ідея: сконцентрувати всі ці вставлені команди і відповідні ним точки входу в якомусь одному місці. Втім, навіть ця ідея не дає нам відповіді на питання, як же при такій архітектурі повертати управління з процедур? Вставляти команду перемикання ще і для кожної команди виклику?

Мал. 2.15. Міжбанковий перехід

Розвиток цієї ідеї приводить нас до чогось, схожому на менеджер оверлеїв (див. разд. Оверлеї (перекриття) . програмний модуль, який присутній у всіх банках поодинці і тій же адресі (мал. 2.16). Якщо нам потрібно викликати відому процедуру в певному банку, ми передаємо її адресу і номер банку цьому модулю, і він здійснює збереження поточного банку, перемикання і перехід. Якщо процедура робить повернення, вона повертає управління тому ж модулю, який, у свою чергу, відновлює вихідний банк і повертає управління в точку виклику.
Подальший розвиток цієї ідеї приводить до думки, що найпростіший спосіб розмістити цей код у всіх банках — це ускладнити схему роботи селектора банків, наприклад, завжди відображувати перший кілобайт адресного простору на одні і ті ж фізичні адреси. Апаратний це нескладно: ми аналізуємо старші шість бітів адресної шини процесора. Якщо вони не дорівнюють нулю, ми подаємо на старші біти адресної шини пам'яті вміст селектора банку, якщо ж рівні — нульові біти. Приблизно цим способом і розширюють пам'ять більшість мікрокомп'ютерів на основі 8-розрядних процесорів.
Оскільки ми вступили на дорогу аналізу логічної адреси, можна піти і далі: розбити адресний простір процесора на декілька банків, кожен зі своїм селектором.

Мал. 2.16. Перемикач банків

Адресний простір Pdp-11
Машини серії Pdp-11 мають 16-розрядний адреса, яка дозволяла адресувати 64 Кбайт. В старших моделей серії цей простір розбитий на 8 сегментів по 8 Кбайт кожен. Кожному з цих сегментів відповідає свій селектор банку (в даному випадку слід вже говорити про дескриптор сегменту) (мал. 2.17). Фізичний адресний простір, який може бути охоплене дескрипторами сегментів, складає 2 Мбайт, що набагато більше адрес, доступних окремому процесу. На перший погляд, ця конструкція є ускладненою реалізацією банкової адресації, мета якої — лише розширити фізичний адресний простір за межі логічного, але той факт, що, окрім фізичної адреси, кожен сегмент має і інші атрибути, у тому числі права доступу, заставляє нас визнати, що це вже зовсім інша історія, заслуговуюча окремої глави (див. главу 5).

Мал. 2.17. Віртуальна пам'ять Pdp-11/20

 

:: Реклама ::

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017