2016-09-18 3 views
3

Может ли процесс получить доступ ко всей ОЗУ или CPU дает процессу определенную часть, которую решает ядро, и процесс (работающий в пользовательском пространстве) не может измениться? Другими словами - это процесс, изолированный аппаратным обеспечением, или он может что-то делать, но контролируется ОС?Процессы «изолированы» аппаратными средствами?

EDIT

Я сказал в комментариях, что это слишком широкая, так что давайте предположим, x86/x64. Я также добавлю, что вопрос возник при чтении того, что я понял, чтобы сказать, что процессы могут получить доступ ко всей ОЗУ, что, похоже, противоречит тому, что я читал о безопасности в ОС.

+3

Это зависит от o/s (и h/w, с которого работает o/s), но современные операционные системы ограничивают процесс, который может выполнять процесс, и процесс не может получить доступ ко всей памяти, поскольку o/s ограничивает то, что разрешено использовать, частично из-за управления виртуальной памятью. Но это предполагает, что вы работаете над системой с управлением памятью и т. Д. Если вы работаете с 8-битными микрофонами во встроенных системах, вероятность того, что любой процесс сможет получить доступ к любой памяти. Но это все еще зависит от h/w и o/s. –

+1

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

+0

@PeterCordes Спасибо. (кстати, я обновил вопрос.) – ispiro

ответ

5

Если вы считаете MS-DOS «операционной системой», процессы могут делать что угодно (и не контролируются). Даже Windows95 не имеет реальной защиты памяти, и глючный процесс может привести к сбою машины, нацарапав неправильную память.

Если вы считаете только современные ОС с разделением привилегий (Unix/Linux, Windows NT и производными), тогда процессы изолированы.

AFAIK, на самом деле нет систем, где есть мониторинг любого вида, кроме «ошибки, если вы пытаетесь что-то сделать». Ядро устанавливает границы, и процесс пользовательского пространства получает ошибку, если он пытается выйти за их пределы.

Если вы воображаете, что, возможно, ядро ​​смотрит на то, что делает непривилегированный процесс, и соответственно адаптируется, то нет, это не то, что происходит.


См

  • https://en.wikipedia.org/wiki/Memory_protection: Обычно это достигается путем предоставления каждому процессу свой собственный виртуальное адресное пространство (virtual memory). Это аппаратно поддерживается: каждый адрес, используемый вашим кодом, преобразуется в физический адрес с помощью быстрого кеша перевода (TLB), который кэширует таблицы перевода, установленные ОС (так называемые таблицы страниц).

    Процесс не может непосредственно изменить собственные таблицы страниц: он должен попросить ядро ​​отобразить больше физической памяти в адресное пространство (например, как часть malloc()). Таким образом, ядро ​​имеет возможность проверить, что запрос в порядке до.

    Кроме того, процесс может попросить ядро ​​копировать данные в/из файлов (или других вещей) в его пространство памяти. (запись/чтение системных вызовов).

  • https://en.wikipedia.org/wiki/User_space: нормальные процессы выполняются в пользовательском режиме, который является режимом, предоставляемым оборудованием, где привилегированные инструкции будут ловушками для ядра.

+0

Получаю, что ваш ответ на вопрос (в заголовке) в основном «да». Но я недоумеваю, почему вы подчеркиваете ОС, а не CPU. Вы даже не упоминаете оборудование до тех пор, пока в ответе не появится горизонтальная линия. Я что-то пропустил? – ispiro

+0

@ispiro: все механизмы песочницы поддерживаются аппаратными средствами. Когда я сказал, что «ядро устанавливает границы», он делает это, программируя аппаратное обеспечение, например. настройка таблиц страниц. Все, что делает компьютер, - это инструкции CPU (ну, не считая DMA устройствами, записывающими непосредственно в память). Аппаратное обеспечение просто считывает инструкции из памяти и выполняет их, в соответствии с тем, что, по словам руководства, должно произойти. «Ядро X» - это просто способ описания процесса на высоком уровне. например см. [wiki для x86] (http://stackoverflow.com/tags/x86/info) для ссылок на руководства и руководства x86. –

+0

Спасибо. Таким образом, процесс ограничен тем, что позволяет ему получить доступ к процессору + MMU. Я просто не могу обернуть голову тем, что процессор делает «ядро» с тех пор, как использует прямое выполнение - когда процесс выполняет код (до следующего прерывания) - это всего лишь процесс и процессор. Ядро не существует (за исключением того, что процесс выполняется в пользовательском режиме, а не в режиме ядра, но это не означает, что код режима ядра имеет силу в данный момент. Он неактивен.) Во всяком случае, я не буду возьмите больше своего времени. Ответ на мой вопрос теперь кажется ясным. Еще раз спасибо. – ispiro