Skip to main content
LibreTexts - Ukrayinska

6.9: Специфіка Linux

  • Page ID
    34545
    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

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

    Linux ділить доступний адресний простір на спільний компонент ядра та адреси приватного простору користувача. Це означає, що адреси в порту ядра адресного простору відображаються в одній і тій же фізичній пам'яті для кожного процесу, тоді як адреси користувацького простору є приватними для процесу. У Linux спільний простір ядра знаходиться в самому верху доступного адресного простору. На найпоширенішому процесорі, 32-бітному x86, цей розкол відбувається в точці 3 Гб. Оскільки 32 біти можуть відображати максимум 4 Гб, це залишає верхню 1 Гб для спільної області ядра [20].

    Макет адресного простору Linux. Зверніть увагу, що сторінки в адресному просторі користувача є приватними, тоді як сторінки ядра є спільними.
    Малюнок 6.5. Макет адресного простору Linux

    Існує багато різних способів організації таблиць сторінок операційною системою, але Linux вирішує використовувати ієрархічну систему.

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

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

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

    Трирівнева таблиця сторінок
    Малюнок 6.6. Таблиця сторінок з трьома рівнями Linux

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

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

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

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


    [20] Це, на жаль, надмірне спрощення, оскільки багато машин хотіли підтримувати більше 4 Гб на процес. Висока підтримка пам'яті дозволяє процесорам отримувати доступ до повних 4 Гб за допомогою спеціальних розширень.