Добро пожаловать в серию статей об операционных системах, которые объясняются в виде диаграмм + на местном языке, чтобы Xiaobai мог понять это и помочь вам быстро начать работу с популярной наукой.
В этой статье начинается изучение пользовательского режима и режима ядра. Хотя об этом обычно не спрашивают на собеседованиях, для нас очень важно понять всю компьютерную систему. Это сделает вас внезапно просветленным в ваших будущих исследованиях. сказать: «Ах, это такой вздох!»
план содержания
короткий рассказ
Чжан Сан — младший инженер-разработчик Java в технологической компании (низкая привилегия), на данный момент на 15 этаже офисного кода компания предоставляет только набор компьютерных ресурсов (пользовательский режим), Чжан Сан думает о ценах на жилье в этой строке, и чувствует сильное давление, поэтому поставил перед собой цель, он должен быть техническим директором, прижиться в передовой, Борьба Б. Чжан Сан после 5 лет борьбы наконец стал техническим директором (высокий авторитет), а потом Чжан Сан переехал на 30-й этаж, и в любой момент может связаться с Министерством ресурсов (системный вызов) обращаться на различные ресурсы компании и получать конфиденциальную информацию компании (Состояние ядра), так называемое достижение вершины жизни.
Благодаря этой истории мы обнаружили, что ресурсы с низкими привилегиями имеют меньшую область действия, а ресурсы с высокими привилегиями имеют большую область действия, так называемые«Режим пользователя и режим ядра — это просто области ресурсов с разными разрешениями».
Разрешения набора инструкций CPU
говорящийПользовательский режим и режим ядраПрежде необходимо сказатьC P U 指令集
, набор инструкцийC P UСреда для реализации программного обеспечения, управляющего аппаратным исполнением. В частности, каждый оператор сборки соответствуетC P U 指令
, и очень, очень многоC P U 指令
Вместе они могут образовывать один или даже несколько наборов.Набор инструкций называетсяC P U 指令集
.
в то же времяC P U 指令集
Есть уровни власти, представим,C P U 指令集
Вы можете напрямую управлять оборудованием, если действуют инструкциинерегулярный`, возникающая ошибка влияет на веськомпьютерная системаиз. Это похоже на то, что вы пишете программы, потому что правильноНе знаком с работой оборудования, в результате чего ядро операционной системы и все другие запущенные программыОшибка операцииПри возникновении необратимой ошибки единственный способ сделать это — перезагрузить компьютер.
И дляЭксплуатация оборудованияОн очень сложный, со многими параметрами и проблемамивполне вероятно, нужно делать с осторожностью, этотрудная задача, также увеличит нагрузку, и у разработчиков такжене доверяют,Поэтому ядро операционной системы напрямую ограждает разработчика от возможности аппаратной эксплуатации, не позволяйте вам столкнуться с этимиC P U 指令集
.
В ответ на вышеуказанные требования производители аппаратного оборудования напрямую предоставляют поддержку на аппаратном уровне.C P U 指令集
Разрешения установлены, можно использовать разные уровни разрешенийC P U 指令集
ограниченоIntel C P UНапример, Интер поставилC P U 指令集
Права доступа к операциям разделены на 4 уровня от высокого к низкому:
- ring 0
- ring 1
- ring 2
- ring 3
Среди них кольцо 0 имеет наивысший авторитет и может использовать всеC P U 指令集
, кольцо 3 имеет самые низкие разрешения и может использовать только обычныеC P U 指令集
,нельзя использоватьоперативные аппаратные ресурсыC P U 指令集
,НапримерI O
Чтение и запись, доступ к сетевой карте и приложение памяти недостаточно.Система Linux использует только два разрешения: кольцо 0 и кольцо 3.
высокий эмоциональный интеллект
-
кольцо 0 называется режимом ядра и полностью работает в ядре операционной системы.
-
кольцо 3 называется пользовательским режимом и запускается в приложении
низкий эмоциональный интеллект
-
Выполнять код в пространстве ядра, с уровнем защиты кольца 0, со всеми правами на работу с оборудованием, и может выполнять все
C P U 指令集
, доступ к памяти по любому адресу, любое исключение в режиме ядра является катастрофическим и приведет к отключению всей машины -
В пользовательском режиме с уровнем защиты кольца 3 код не имеет прямого контроля над оборудованием и не может напрямую обращаться к памяти адреса Программа обращается к оборудованию и памяти, вызывая API-интерфейсы системного вызова. режиме, даже если программа выйдет из строя, ее можно будет восстановить.Большинство программ на компьютере работают в пользовательском режиме.
Пользовательский режим и режим ядра
ОчищеноРазрешения набора инструкций CPU, скажи это сейчасПользовательский режим и режим ядраЭто очень просто, концепция пользовательского режима и режима ядраРазрешения набора инструкций CPUРазница между чтением и письмом в процессеI O
, обязательно воспользуюсьring 0уровеньC P U 指令集
, а на этот разC P UРазрешение на работу с набором инструкций есть толькоring 3, чтобы работатьring 0уровеньC P U 指令集
,C P UУровень разрешения операции с набором команд переключенияring 0, ЦП выполняет соответствующиеring 0уровеньC P U 指令集
(код ядра), реализованокод ядраБудет использоваться стек ядра текущего процесса.
PS: у каждого процесса есть два стека, пользовательский стек и стек ядра, соответствующие использованию пользовательского режима и режима ядра.
Пространство пользователя и пространство ядра
Использование ресурсов памяти операционной системыПользовательский режим и режим ядраТакже есть ограничения, при каждом создании процесса будет выделяться «адрес виртуального пространства» (Если вы не понимаете, вы можете обратиться к другой моей статье «15 минут! Эта статья поможет Xiaobai понять память операционной системы».), взяв в качестве примера 32-разрядную операционную систему Linux, ее диапазон адресного пространства составляет4G
(2 в 32-й степени), и операционная система разделит виртуальный адрес управления на две части, одна частьпространство ядра, другая частьпользовательское пространство, высоко1G
(от виртуального адреса 0xC0000000 до 0xFFFFFFFF) используется ядром, а нижний3G
(от виртуального адреса 0x00000000 до 0xBFFFFFFFF) Используется отдельными процессами.
- Пользовательский режим: может работать только
0-3G
нижний адрес виртуального пространства диапазона - Состояние ядра:
0-4G
Можно манипулировать диапазоном адресов виртуального пространства, особенно для3-4G
Старший адрес виртуального пространства диапазона должен управляться режимом ядра. - Пополнить:
3G-4G
Часть его является общей для всех (имеется в виду, что логические адреса режима ядра всех процессов имеют один и тот же адрес памяти), которое является адресным пространством режима ядра, где здесь хранятся код и все модули ядра, хранящиеся во всем ядре. , а также данные, поддерживаемые ядром
за процесс4G
Адрес виртуального пространства, старший разряд1G
Это все равно, пространство ядра. только оставшиеся3G
Он используется только самим процессом, другими словами, высоким1G
Пространство ядра совместно используется всеми процессами!
Наконец, чтобы подвести итог, мы различаем пользовательский режим и режим ядра с помощью разрешений набора инструкций, а также ограничиваем использование ресурсов памяти.Операционная система делит два пространства памяти для пользовательского режима и режима ядра и использует их для соответствующих наборов инструкций. .
Переключение между режимом пользователя и режимом ядра
Я полагаю, что все слышали высказывание «накладные расходы на переключение между режимом пользователя и режимом ядра высоки», но где накладные расходы? Вкратце, вот пункты
- Сохранять контекст пользовательского режима (контекст, регистры, пользовательский стек и т. д.)
- Скопируйте параметры пользовательского режима, переключите пользовательский стек на стек ядра и войдите в режим ядра.
- дополнительные проверки (поскольку код ядра не доверяет пользователям)
- выполнить код режима ядра
- Скопируйте результат выполнения кода режима ядра и вернитесь в пользовательский режим.
- Восстановление контекста пользовательского режима (контекст, регистры, пользовательский стек и т.д.)
На самом деле, операционная система будет сложнее, чем выше, вот только схема, мы можем найти, что коммутатор испытал«Режим пользователя -> Режим ядра -> Режим пользователя».
Чтобы активно переключаться из пользовательского режима в режим ядра, должна быть запись.На самом деле, режим ядра обеспечивает унифицированную запись.Ниже представлена общая схема архитектуры Linux.
Из приведенного выше рисунка мы можем видеть, что черезсистемный вызовВся система Linux разделена на режим пользователя и режим ядра. Чтобы приложения могли получить доступ к ресурсам ядра, таким как ЦП, память и ввод-вывод, ядро должно предоставить набор интерфейсов общего доступа. называетсясистемный вызов.
Библиотечные функцииОн предназначен для того, чтобы скрыть эти сложные детали низкоуровневой реализации, уменьшить нагрузку на программистов и уделить больше внимания реализации логики верхнего уровня.Он инкапсулирует системные вызовы и предоставляет программистам простые базовые интерфейсы.
ShellКак следует из названия, это означает оболочку, точно так же, как оболочка, обертывающая ядро, это специальное приложение, широко известное как командная строка.Shellтакже программируется, имеет стандартныйShellграмматика, текст, который соответствует своей грамматике, называетсяShellСкрипт, которым будут пользоваться многиеShellСкрипты реализуют некоторые общие функции, которые могут повысить эффективность работы.
Наконец, что заставит пользовательский режим переключаться в режим ядра
-
Системный вызов: Способ, которым процесс пользовательского режима активно переключается в режим ядра. Процесс пользовательского режима обращается к операционной системе за ресурсами для завершения работы через системные вызовы. Например, fork() — это системный вызов для создания нового Ядро механизма системных вызовов использует операционная система. Реализуется прерыванием, специально открытым для пользователей, например прерыванием int 80h в Linux, которое также можно назвать программным прерыванием.
-
Исключение: когда ЦП выполняет процесс пользовательского режима, возникают некоторые непредвиденные исключения.В это время текущий запущенный процесс переключится на процесс, связанный с ядром, который обрабатывает это исключение, то есть переключится в режим ядра, например как исключение ошибки страницы.
-
Прерывание: Когда ЦП выполняет процесс пользовательского режима, после того, как периферийное устройство завершит операцию, запрошенную пользователем, оно отправит ЦП соответствующий сигнал прерывания.В это время ЦП приостанавливает выполнение следующей инструкции. для выполнения, и перейти к соответствующему сигналу прерывания.Обработчик выполняется, то есть переходит в состояние ядра. Если операция чтения/записи жесткого диска завершена, система переключится на обработчик прерывания чтения/записи жесткого диска для выполнения следующих операций.
Рекомендуемые статьи по теме
- 15 минут! Статья, которая поможет Xiaobai понять память операционной системы
- Процессы, потоки и сопрограммы тупо неразличимы? Проведите вас через статью!
обо мне
Привет, это А Син, 93-летний программист Java, который любит технологии, в общедоступном аккаунте."Звезда обезьяны программы"Мы будем регулярно делиться качественными оригинальными статьями об операционных системах, компьютерных сетях, Java, дистрибутивах, базах данных и т. д. В 2021 году мы будем расти вместе с вами по пути Be Better! .
Большое спасибо за то, что можете видеть здесь. Это не просто создать. Если статья полезна, вы можете «лайкнуть» или «поделиться и прокомментировать».
Я надеюсь, что вы и я сможем идти по тому пути, по которому хотим идти, увидимся в следующей статье!