Що таке однорівнева пам’ять - Основи AS, 400
Що таке однорівнева пам'ять
Перш ніж поринути всередину однорівневої пам'яті, спробуємо осмислити загальну картину, розглянувши її концепції та компоненти. Потім обговоримо, чому однорівнева пам'ять така важлива для AS/400 і розберемо деякі деталі її роботи, взявши як приклад програму, що виконує послідовне читання індексованого файлу бази даних (READ на ЯВУ або FETCH в SQL). У цьому прикладі ми розберемо використання кількох об'єктів: програми, індексу, курсору, області даних та інших. Деякі їх у пам'яті, а деякі ні.
Для звернення до даних об'єкта, або для виконання команд програми, вони мають бути перенесені на згадку. У нашому прикладі послідовного читання бази даних фрагмент програми, що містить команди на виконання читання, повинен бути перенесений з диска в пам'ять, перш ніж команди виконаються. Таке перенесення з диска на згадку відбувається нижче рівня MI, оскільки MI не розрізняє диск і пам'ять.

Малюнок 8.1. Об'єкти в однорівневому сховищі
Сторінка, перенесена на згадку одним процесом (завданням), стає доступною будь-якому іншому. Безліч завдань можуть використовувати команди програм спільно. Записи, раховані з бази даних останніми, мабуть, усе ще у пам'яті. Об'єм дискового введення-виводу значно скорочується при багаторазовому зчитуванні тих самих записів. Припустимо, що у прикладі читання бази даних використовується індекс, поділений з іншими користувачами системи. Якщо цей індекс був нещодавно рахований одним з них, то частина або весь індекс, ймовірно, все ще в пам'яті, і не потрібно чекати на вибірки сторінок індексу з диска. У звичайній системі з більш обмеженими можливостями поділу даних на згадку довелося б перенести новукопію індексу, незважаючи на те, що одна там уже є.
Коли сторінка переноситься з диска, вона заміщує сторінку, яка давно не використовувалася. З будь-якою сторінкою пов'язані спеціальні розряди, які встановлюються при кожному зверненні до неї. Змінені сторінки також позначаються, щоб у разі заміщення пам'яті вони були записані назад на диск.
Пам'ять містить команди програм, дані та покажчики. Під даними тут розуміється все, що не є командою або покажчиком, що виконується: всі об'єкти OS/400, крім об'єктів-програм, а також невиконані частини об'єктів-програм. Порівняйте цей підхід з підходом команди «WRSYSSTS» (Work With System Status), яка розрізняє лише сторінкові помилки, пов'язані з роботою бази даних, та інші. Сторінні помилки бази даних стосуються лише фізичних та логічних файлів. Інші сторінкові помилки, такі як помилки для програми, курсора або будь-якого простору з нашого прикладу послідовного читання, стосуються решти.
Раніше ми розглянули сторінки помилки. Для зчитування сторінки з диска не обов'язково чекати, доки така помилка станеться. Будь-який компонент SLIC або будь-яка трансльована програма MI може запросити керування головною пам'яттю SLIC явне перенесення (зчитування) в пам'ять діапазону віртуальних сторінок (однієї або більше). Функціонально явне перенесення сторінок у пам'ять не потрібне, оскільки необхідні сторінки завжди будуть перенесені за сторінковою помилкою, але тоді процес, який її викликав, очікує завершення читання з диска. Запит на операцію перенесення до того, як сторінки фактично будуть потрібні, дозволяє виконувати операції дискового читання паралельно з іншою обробкою. Таким чином, явні переноси знижують тимчасові витрати та підвищують продуктивність.
Можливе також явне створення очищених сторінкових кадрів у пам'яті. Запит на очищення, переданий управлінню головною пам'яттю, розписує один чи кілька сторінкових кадрів у пам'яті двійковими нулями. Ця операція корисна, наприклад, у випадках, коли буфер заповнюється новими даними та поточний вміст диска Вас не цікавить. Замість читання сторінок буфера як в результаті окремих сторінкових помилок, так і за допомогою перенесення, операція очищення дозволяє обнулити сторінкові кадри без звернення до диска.
Доповнює перенесення та очищення сторінок можливість скинути (переписати) одну або кілька сторінок на диск. Скидання має сенс лише тоді, коли сторінку в пам'яті було змінено, тобто копія сторінки на диску не актуальна. На відміну від перенесення та очищення, які не є функціонально необхідними (ці завдання виконає обробка сторінкової помилки), скидання іноді необхідне, наприклад, під час журналування бази даних. У цьому випадку компонент бази даних SLIC повинен гарантувати, що записи журналу в журнальному просторі записані на диск, причому він зобов'язаний використовувати функцію скидання, не чекаючи, поки сторінки журнального простору будуть записані на диск в результаті сторінкових помилок. Крім того, можна зняти фіксацію в пам'яті однієї або декількох сторінок.
Нарешті, сторінкові кадри можна видалити з пам'яті без запису назад на диск. Функціональних причин для видалення сторінок немає, але це корисно, тому що усуває наступні операції запису на диск, наприклад, якщо буфер пам'яті був спустошений і дані в ньому більше не потрібні.
Вказівники мають бути захищені від пошкоджень. Програма користувача, що працює на рівні MI, цілком здатна змінити покажчик, оскільки покажчики зберігаються в асоційованому просторі об'єктів MIразом з іншими структурами, яких програма повинна мати доступ. Значення покажчиків можуть бути зруйновані фізичними явищами, такими як флуктуації напруги. Якщо покажчик змінено «незаконно» (тобто не процедурою SLIC за допомогою команди, недоступної безпосередньо в MI), а будь-яким іншим способом, то апаратура скидає розряд тега, роблячи цим покажчик недійсним.