Какое адресное пространство используется в системных вызовах? физическое? или виртуальный?

610
user2284570

объяснение

Существует два вида адресного пространства: виртуальное и физическое. На физической модели (обычно используемой ядром) память ограничена, и каждый адрес соответствует физическому.

Виртуальный используется процессами. Там нет предела (кроме одного из-за размера указателя) . Чтобы получить больше памяти, программа просто запрашивает ее (игнорируя, какую сумму можно запросить) . Каждый адрес сопоставлен с разными физическими адресами.
Вот как процесс ограничен в том, что они могут читать из оперативной памяти.

Эта проблема

Причина заключается в том, что системные вызовы используют ring0, но в то же время (по крайней мере, в Linux) состояние процесса обновляется до прерываемого, предполагая, что системные вызовы используют виртуальное адресное пространство.
Насколько я понимаю, вызовы ЦП связаны с привилегированными инструкциями, а не с адресным пространством (поскольку оно связано с MMU) .

Таким образом, если во время выполнения системного вызова в коде ядра происходит прочтение вне связи (из-за уязвимости) . Может ли он вернуть память от других процессов?

0

2 ответа на вопрос

0
Jamie Hanrahan

Код режима ядра может делать практически все, что захочет, включая отслеживание адресных пространств различных процессов.

Да, код режима ядра использует виртуальное адресное пространство. Ядро управляет физическим адресным пространством, но не работает в физическом адресном пространстве.

Пользовательский режим не может читать что-либо из ОЗУ, так как он не может утверждать физические адреса.

Поскольку режим ядра работает с включенной трансляцией адресов, код режима ядра также может утверждать только виртуальные адреса. Но код k-mode может настроить записи таблицы страниц для определения виртуальных адресов, которые переводятся на любые физические адреса, к которым он может обратиться.

-1
Mahadev Patil

Те системные вызовы, которые вызывает ядро, используют физическое адресное пространство.
Те системные вызовы, которые вызываются процессами, используют виртуальное адресное пространство.

Извините, но это неверно. После загрузки ОС и включения подкачки она остается включенной в течение всего срока загрузки. Следовательно, вы используете виртуальные адреса как в режиме пользователя, так и в режиме ядра. Jamie Hanrahan 6 лет назад 0

Похожие вопросы