Регістрові вікна (register window) - Студопедія

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

регістрові

На комп'ютері є k фізичних регістрів. Система команд машини надає l регістрів загального призначення, l різних реєстрових вікна. Кожен із l регістрів відображається на k фізичних регістрів. У кожний момент часу програма працює з одним реєстровим вікном.

Кожне регістрове вікно ділиться на частини:

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

Б) область локальних регістрів підпрограм

В) область тимчасових регістрів

Можлива кільцева схема організації реєстрових вікон.

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

Розглянемо, що відбувається за безпосередньої роботі:

Звертаємось до 1-ї програми, їй виділяється 0-е реєстрове вікно. Далі пішли в глибину на 2-й рівень, виділилося 1-е реєстрове вікно і т.д. доти, доки не дійшли до останнього. Що буде, коли це коло обійдемо? Починається відкачування цих вікон у ВП. Ця схема гарантує ефективну роботу програм із вкладеністю не більше фіксованого, якщо вкладеність більша, то виникають проблеми, але все одно починається робота з КЕШ і ми все одно не опускаємося на рівень спілкування з ОП. Відповідно система може мати спеціальний регістр-покажчик поточного вікна та покажчик збереженого вікна.

При зверненні на функцію відбуваються такі действия:

window

Збільшуємо покажчик поточного вікна на одиницю за модулем N.

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

При виході з функції ми починаємо діяти так:

window

- Спочатку зменшуємо модулю,

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

register

Main -програма, яка спочатку має деякий стан 0. Тобто. у нас 2 реєстрові вікна. 0-е реєстрове вікно належить програмі Main, 1-е – вільне. Якщо кількість операцій виходу з функції буде більшою, ніж кількість звернень, виникнуть проблеми. Розглянемо, що відбувається при (хибному) зверненні до таких функцій.

  1. Ми звернулися до функції А1, згідно з алгоритмом, поточне вікно буде першим, збережене залишається нульовим.
  2. Звернулися до А2, збільшили поточний покажчик по модулю 2 і отримали, що він став рівним нулю. дорівнює нулю, дорівнює покажчику нульового (збереженого). Це означає, щоми звернулися до вікна, яке зайняте. Відбувається те, що вікно, яке було main, виштовхується, його місце займає функція А2, та й покажчик SWP стає рівним одиниці.
  3. Звернулися до функції А3. Збільшили поточний на 1. І отримали знову збіг - "зайнято". Виштовхнули А1 і змінили і т.д.

регістрові

Є такий процесор Itanium – це 64-розрядний процесор. У ньому використовується модель, у якій вважається, що реєстрове вікно, доступне програмі у кожен момент, складається з 128 регістрів загального призначення. Відповідно 32 регістру – це статичні регістри, які залишаються завжди незмінними, що залишилися регістри (96)– динамічні (віртуальні), тобто. які відображаються на кільцевому списку фізичних регістрів. Розмір цього кільцевого списку може змінюватись від … і до … . "Динамічне" вікно - можна замовити вікно довільного розміру (від регістра GR32 до регістра GR32 + N (N = 0.95)).

Відбувається оптимізація роботи з фізичними регістрами

Чи не знайшли те, що шукали? Скористайтеся пошуком:

Вимкніть adBlock! і оновіть сторінку (F5)дуже потрібно