Какой код является кодом режима пользователя и какой код является кодом режима ядра? - PullRequest
0 голосов
/ 14 октября 2018

У меня вопрос к себе при прохождении курса по операционной системе.

Если я набираю любой код на C в своем текстовом редакторе или, хотя в IDE, и выполняю его с помощью компилятора, он переводит код в машинный код.

Тогда я бы предположил, что если я запустите программу, ОС выделит адрес памяти для кода, который выполняется кодом ядра.

И если в моем коде было введено прерывание ввода-вывода,код ядра выполняется.

И так ... какой бит тогда является кодом режима пользователя?

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Режим ядра по сравнению с режимом пользователя фактически отражает работу процессора.

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

Функциональное различие в современных операционных системах заключается в том, что код режима ядра выполняется в одном (виртуальном) адресном пространстве, которое представляет все системные ресурсы, поэтому все функции в режиме ядра могут влиять на каждыйпосмотри напрямую.Например, все действия драйвера режима ядра могут напрямую влиять на работу самой операционной системы и любого другого драйвера режима ядра.(Детали реализации специфики несколько различаются в зависимости от типа операционной системы, например, между Windows, Linux, BSD и т. Д., Но основные принципы одинаковы)

Это означает, что если вы пишете код, который будет выполняться внутривнутренняя работа операционной системы или в драйвере режима ядра, тогда это можно назвать кодом режима ядра.В противном случае это будет код пользовательского режима.Код, который пытается выполнить какое-либо действие, которое может быть выполнено только в режиме ядра, будет предотвращен от этого самим процессором, если только сам процессор не находится в режиме ядра.Сама операционная система выступает в роли посредника, когда процессор переходит в режим ядра, поэтому код должен распознаваться операционной системой (или устанавливаться, в случае драйверов режима ядра), чтобы выполнять действия, которые могут выполняться только в режиме ядра.Код пользовательского режима не может произвольно перевести процессор в режим ядра без помощи некоторого кода, который уже распознается операционной системой.

Практически современные операционные системы также предоставляют набор функций (например, вAPI), который можно вызвать из пользовательского режима.Многие из этих функций выполняются исключительно в пользовательском режиме.Некоторые, однако, приводят к тому, что процессор переключается в режим ядра для выполнения некоторых конкретных действий, а затем процессор переключается обратно в режим пользователя, когда управление временем возвращается к вызывающей стороне.Какой код внутри самой ОС выполняется в пользовательском режиме или в режиме ядра, зависит как от конструкции операционной системы, так и от административных настроек (например, только пользователи с соответствующими правами (например, администраторы) могут, например, устанавливать драйверы режима ядра).

0 голосов
/ 14 октября 2018

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

Очевидно, что если вы пишете код ядра или загружаемые модули ядра, то все иначе- этот код будет кодом режима ядра.Но большинство людей большую часть времени пишут только код пользовательского режима.

...