Как операционная система может работать на том же чипе, которым она должна управлять?

17

Из моих чтений об операционных системах (чтение основного материала в Википедии, технических сайтах и ​​т. Д.) Я узнал, что операционная система - это программа, которая позволяет программам и приложениям эффективно и безопасно взаимодействовать с оборудованием.

Однако я не совсем понимаю, как операционная система контролирует работу компьютера, когда он сам нуждается в управлении.

Что я имею в виду? Что ж, я бы мог представить себе, как работает операционная система, на компьютере будет два процессора. Один, который запускает ОС все время, и другой, который ОС использует для запуска компьютера. Однако оказывается, что ОС работает на том же процессоре, что и другие процессы. Это похоже на то, как менеджеру приходится работать на той же производственной линии, что и его сотрудники, и он может использовать электроинструменты только тогда, когда с ними покончено с другим работником. Он не был бы очень эффективным менеджером, так как у него не было бы возможности издавать приказы, если его сотрудник даже немного недисциплинирован.

Так как же может быть так, что ОС работает только часть времени на том же процессоре, который должен быть распределен между всеми другими процессами? Как это работает?

CodyBugstein
источник
1
Менеджер не должен использовать электроинструменты своих сотрудников! Вместо этого он должен убедиться, что у сотрудников есть работающие электроинструменты.
MSalters

Ответы:

15

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

Эти «мощные инструменты» являются определенными привилегиями для управления ресурсами: управление памятью, доступом к оборудованию и продолжительностью выполнения кода пользовательского уровня без прерывания.

Процессор выполняет ОС со своими особыми привилегиями, когда происходит одно из следующих событий:

  1. Процесс пользовательского режима явно передает управление процессу режима ядра. Это называется системным вызовом .
  2. Процесс режима ядра может использовать свои специальные привилегии для регистрации определенных событий (например, внешнее оборудование отправляет специальный сигнал ЦПУ или процесс пространства пользователя пытается получить доступ к зарезервированному ресурсу). Когда это происходит, процессор немедленно останавливает процесс пользовательского режима и передает управление процессу режима ядра. Обычно говорят от прерывания .

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

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

stefan.schwetschke
источник
17

В своей самой примитивной форме операционные системы полагаются на то, что процессы ведут себя хорошо и время от времени возвращают управление операционной системе. Если процесс плохо себя ведет, то действительно может произойти зависание операционной системы.

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

По сути, процессор переключается между запуском ОС и запуском процессов с невероятно высокой скоростью. Кроме того, процессоры имеют «пользовательский режим» и «режим ядра». Процессы работают в пользовательском режиме, а ОС работает в режиме ядра. Работа в пользовательском режиме не позволяет процессу выполнять ограниченные команды (такие как IO). Если процесс хочет выполнить запись на диск, он должен попросить об этом ОС. ОС переключается в режим ядра и выполняет запись от имени процесса (после проверки того, что процесс имеет необходимые разрешения).

Том ван дер Занден
источник
7
@Imray Не совсем, для процессора ОС - это просто еще один кусочек кода. Тем не менее, процессор имеет много функций, которые предназначены для использования создателями ОС.
Том ван дер Занден
3
Я не знаю, является ли «осознание» правильной терминологии, но у ЦП нет причин существовать, кроме как запускать ОС. Это определенно не является полностью независимым. Фактически, процессор полностью зависит от ОС, чтобы управлять ее различными режимами и в противном случае указывать ему, что делать.
мохер
2
@ Mohair Есть много микроконтроллеров, которые работают без ОС вообще, они считаются процессорами?
Том ван дер Занден
2
"это считается как процессор?" Конечно они делают. То же самое было с 6502 на моем первом компьютере, хотя в нем не было отдельных колец пользователей и ядра, и вы могли pokeиз командной строки работать над всеми видами вреда.
dmckee
2
@TomvanderZanden как именно the CPU switches back and forth between running the OS and running processes? Что вызывает переключение?
Jnovacho
1

Вам не нужны два разных процессора для микропроцессора для запуска пользовательского пространства и кода пространства ядра. В основном это работает таким образом, когда вы включаете компьютер на вашем Bios, загружает Bootloader (код 512 КБ на диск, который заканчивается подписью загрузчика 55aa), чтобы ram и через этот загрузчик ваше ядро ​​загружается в ram и работает вечно, пока вы не выключите компьютер. И ваше ядро ​​управляет памятью и не позволяет вашему коду ядра, который находится на оперативной памяти, не будет перезаписан кодом пространства пользователя. Для этого существуют системные вызовы, код пользовательского пространства которых вызывается с помощью этих системных вызовов, и добавьте свой код пользовательского пространства в ram и начните его выполнять. В операционных системах эта концепция исследуется как управление памятью. Вот ссылка, которую вы можете прочитать, это очень хорошо для начала https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf

Ясин Фатуллаев
источник
0

Чтобы опираться на другие ответы, легче понять, если вы думаете, что само ядро ​​- это не процесс, а код управления. Любой пользовательский процесс может перейти из режима пользователя в режим ядра и выполнить код ядра (привилегированные инструкции), используя некоторую часть пространства ядра. Затем процесс может вернуться в режим пользователя и снова работать в пользовательском пространстве.

user35809
источник