Каковы отношения между системными вызовами, передачей сообщений и прерываниями?

Книги/сайты/руководства, которые я использую часто:

  • Ядро Linux: Эта книга публикуется онлайн как часть TLDP (Проект Документации Linux). Это не актуально и не внутреннее руководство, но предоставляет полезную информацию и вводные материалы о принципах и механизмах ядра.

  • Понимание Ядра Linux: по моему скромному мнению, это - лучшая книга для новичков, у кого есть фон о дизайне и понятии операционных систем. Это принято как актуальное, версия 2.6 покрытий ядра. Существует версия HTML книги по сети, но я думаю, что это - по всей вероятности нелицензионный софт.

  • Некоторая книга об управлении виртуальной памятью

При изучении внутренностей ядра Linux обычно необходимо изучать, как аппаратные средства работают и что аппаратные средства обеспечивают абстрактным способом. Intel имеет замечательные руководства для этого.

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

14
03.08.2011, 03:03
3 ответа
  1. Все современные операционные системы поддерживают многозадачность. Это означает, что система может выполнить несколько процессов одновременно; любой в псевдопараллели (когда только один ЦП доступен), или в наше время с многоядерными центральными процессорами, являющимися распространенным параллельно (одна задача/ядро).

    Давайте возьмем более простой случай только одного ЦП, являющегося доступным. Это означает, что при выполнении одновременно двух различных процессов (скажем, веб-браузер и аудиоплеер) система действительно не может выполнить их одновременно. То, что происходит, - то, что ЦП переключается от одного процесса до другого все время; но это происходит чрезвычайно быстро, таким образом Вы никогда не замечаете его.

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

    Случай подобен, когда Вы программируете и хотите попросить сервис от ЦП. Различие - то, что в этом случае Вы выполняете программный код - обычно процедуры библиотеки, которые выполняют системные вызовы (например, fopen для открытия файла).

    Таким образом, 1 описывает два различных способа привлечь внимание от ЦП.

  2. Самые современные операционные системы поддерживают два режима выполнения: непривилегированный режим и привилегированный режим. По умолчанию операционная система работает в непривилегированном режиме. Непривилегированный режим очень ограничен. Например, весь ввод-вывод запрещается; таким образом Нельзя открыть файл от Вашего жесткого диска. Конечно, этого никогда не происходит в реальном, потому что при открытии файла переключатели операционной системы от пользователя к привилегированному режиму прозрачно. В привилегированном режиме Вы имеете полный контроль над аппаратными средствами.

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

    Системные вызовы являются примитивом, используемым в монолитных ядрах (модель совместно используемых данных) для переключения от пользователя к привилегированному режиму. Передача сообщений является примитивом, используемым в микроядрах (клиент-серверная модель). Чтобы быть более точными, в передаче сообщений, системные программисты также используют системные вызовы для привлечения внимания от ЦП. Передача сообщений видима только разработчикам операционной системы. Монолитные ядра с помощью системных вызовов быстрее, но менее надежны, в то время как микроядра с помощью передачи сообщений медленнее, но имеют лучшую изоляцию отказа.

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

  3. Для пересмотра наиболее распространенный способ создания программного прерывания, иначе прерывание, путем выполнения системного вызова. Прерывания, с другой стороны, сгенерированы просто аппаратными средствами.

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

    Таким образом, 3 объясняет, какие потребности быть сделанным после выполнения прерывания или прерывания и насколько подобный эти два случая.

12
27.01.2020, 19:50
  • 1
    Спасибо! (1) В 1, Вы подразумеваете, что двумя способами привлечь внимание от центральных процессоров является программное прерывание (программа с примером системного вызова) и аппаратное прерывание (пример ключа сброса)? (2) В 2, Вы подразумеваете, что системный вызов и передача сообщений являются двумя способами программного прерывания? (3) Это корректно, что цель программного прерывания для процесса для запроса сервисов ядра и ресурсов, и цель аппаратного прерывания не? Если да, какова цель аппаратного прерывания? –  StackExchange for All 03.08.2011, 01:35
  • 2
    (1) Корректный. (2) Ну, системные вызовы и передача сообщений являются двумя различными методами, которые могут использоваться для достижения Межпроцессного взаимодействия. Но это верно, что оба основаны на программном обеспечении, таким образом для привлечения внимания от ЦП, Вы выполняете прерывание (программное прерывание). (3) В некотором смысле, да. Пример просьбы о сервисе ядра выполняет процедуру библиотеки (который будет переведен в 1 или более системных вызовов) как creat для создания нового файла. Примером прерывания является принтер, отправляющий сигнал в ЦП, чтобы сообщить этому, что печать завершается. –  sakisk 03.08.2011, 02:13
  • 3
    Спасибо! Относительно (3), Вы имеете в виду в некотором смысле нет? Каковы общие цели аппаратного прерывания и программного прерывания? –  StackExchange for All 03.08.2011, 02:24
  • 4
    системный сброс не является прерыванием; это не сохраняет состояние для возобновления после. привилегированный режим –  psusi 03.08.2011, 05:50
  • 5
    @faif и NMI (Не Маскируемое прерывание) являются двумя различными контактами на ЦП. Последние причины прерывание, означая сохранять состояние и переход к обработчику. Первый инициализирует ЦП (намеренно отбрасывание всего состояния), как это делает в, включаются (сброс автоматически утверждается в, включаются). Так как часть определения прерывания - то, что оно сохраняет состояние, сбросу не удается выполнить то определение. –  psusi 03.08.2011, 16:21

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

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

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

Системные вызовы включают выполнение определенной инструкции ЦП или набора инструкций, которые заставляют ЦП перейти (сначала сохраняющий обратный адрес на стеке) к предопределенному адресу (не записываемый к непривилегированному режиму) и переместиться, ЦП от непривилегированного режима до привилегированного режима (звоните 3 для вызова 0 в архитектуре Intel).

Аппаратные прерывания делают почти такую же вещь, они заставляют ЦП перейти (сначала сохраняющий обратный адрес на стеке) к предопределенному адресу и переместить ЦП от непривилегированного режима до привилегированного режима. Таким образом во многих центральных процессорах тот же механизм может быть вызван программным обеспечением (названный "программным прерыванием") и может использоваться для вызовов ЦП.

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

В архитектуре микроядра, где фактическое "ядро" очень минимально и большинство функций, которые обеспечивает ядро, перемещены в процессы "сервера", все из которых могут работать одновременно в системе мульти-ЦП, что-то вроде этого могло бы быть более полезным, чем простой подход системного вызова. Интерпретация и маршрутизация "сообщений" к соответствующему ядру "сервер" были бы одним из немногих заданий микроядра.

9
27.01.2020, 19:50
  • 1
    использует те же таблицы страниц и представляет то же представление виртуальной памяти как непривилегированный режим. Различие - то, что это имеет доступ к страницам, отмеченным как ограничиваемый привилегированным режимом. –  psusi 03.08.2011, 05:55

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

И аппаратные и программные прерывания заставляют CPU сохранять состояние, переключаться на привилегированный режим и переход к определенному обработчику для того прерывания. Различие - то, что аппаратные прерывания сгенерированы внешним оборудованием, когда им нужно некоторое внимание, такое как клавиатура, указывающая, что клавиша была нажата. Обработчик клавиатур затем может пойти, читает порт IO клавиатуры для наблюдения, какая клавиша была нажата, и примите соответствующие меры и затем возвратитесь к программе, которая была прервана.

5
27.01.2020, 19:50

Теги

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