Книги/сайты/руководства, которые я использую часто:
Ядро Linux: Эта книга публикуется онлайн как часть TLDP (Проект Документации Linux). Это не актуально и не внутреннее руководство, но предоставляет полезную информацию и вводные материалы о принципах и механизмах ядра.
Понимание Ядра Linux: по моему скромному мнению, это - лучшая книга для новичков, у кого есть фон о дизайне и понятии операционных систем. Это принято как актуальное, версия 2.6 покрытий ядра. Существует версия HTML книги по сети, но я думаю, что это - по всей вероятности нелицензионный софт.
При изучении внутренностей ядра Linux обычно необходимо изучать, как аппаратные средства работают и что аппаратные средства обеспечивают абстрактным способом. Intel имеет замечательные руководства для этого.
Intel 64 и Руководства Разработчика программного обеспечения Архитектуры IA-32: актуальная, подробная информация.
Intel 80386 Programmer's Reference Manual: Я знаю, что это немного старо, но я узнал о таком количестве вещей из этого руководства.
Если необходимо учиться о дизайне и понятии операционных систем, я предлагаю следующую книгу: Понятия Операционной системы.
Все современные операционные системы поддерживают многозадачность. Это означает, что система может выполнить несколько процессов одновременно; любой в псевдопараллели (когда только один ЦП доступен), или в наше время с многоядерными центральными процессорами, являющимися распространенным параллельно (одна задача/ядро).
Давайте возьмем более простой случай только одного ЦП, являющегося доступным. Это означает, что при выполнении одновременно двух различных процессов (скажем, веб-браузер и аудиоплеер) система действительно не может выполнить их одновременно. То, что происходит, - то, что ЦП переключается от одного процесса до другого все время; но это происходит чрезвычайно быстро, таким образом Вы никогда не замечаете его.
Теперь давайте предположим, в то время как те два процесса выполняются, нажатие кнопки сброса (плохой парень). ЦП сразу остановит то, что делает, и перезагрузите систему.Поздравляю: Вы генерировали прерывание.
Случай подобен, когда Вы программируете и хотите попросить сервис от ЦП. Различие - то, что в этом случае Вы выполняете программный код - обычно процедуры библиотеки, которые выполняют системные вызовы (например, fopen
для открытия файла).
Таким образом, 1 описывает два различных способа привлечь внимание от ЦП.
Самые современные операционные системы поддерживают два режима выполнения: непривилегированный режим и привилегированный режим. По умолчанию операционная система работает в непривилегированном режиме. Непривилегированный режим очень ограничен. Например, весь ввод-вывод запрещается; таким образом Нельзя открыть файл от Вашего жесткого диска. Конечно, этого никогда не происходит в реальном, потому что при открытии файла переключатели операционной системы от пользователя к привилегированному режиму прозрачно. В привилегированном режиме Вы имеете полный контроль над аппаратными средствами.
Если Вы задаетесь вопросом, почему те два режима существуют, самый простой ответ для защиты. Основанные на микроядре операционные системы (например, MINIX 3) имеют большинство своих сервисов, работающих в непривилегированном режиме, который делает их менее вредными. Монолитные ядра (как Linux) имеют почти все свои сервисы, работающие в привилегированном режиме. Таким образом драйвер, который отказывает в MINIX 3, вряд ли снизит целую систему, в то время как это весьма обычно в Linux.
Системные вызовы являются примитивом, используемым в монолитных ядрах (модель совместно используемых данных) для переключения от пользователя к привилегированному режиму. Передача сообщений является примитивом, используемым в микроядрах (клиент-серверная модель). Чтобы быть более точными, в передаче сообщений, системные программисты также используют системные вызовы для привлечения внимания от ЦП. Передача сообщений видима только разработчикам операционной системы. Монолитные ядра с помощью системных вызовов быстрее, но менее надежны, в то время как микроядра с помощью передачи сообщений медленнее, но имеют лучшую изоляцию отказа.
Таким образом, 2 упоминания два различных способа переключиться от пользователя на привилегированный режим.
Для пересмотра наиболее распространенный способ создания программного прерывания, иначе прерывание, путем выполнения системного вызова. Прерывания, с другой стороны, сгенерированы просто аппаратными средствами.
Когда мы прерываем ЦП (или программным обеспечением, или аппаратными средствами) это должно сохранить где-нибудь свое текущее состояние - процесс, который это выполняет и в которой точке это остановилось - иначе это не сможет возобновить процесс при переключении назад. Это называют контекстным переключением, и оно имеет смысл: Прежде чем Вы выключите свой компьютер, чтобы сделать что-то еще, сначала необходимо удостовериться, что Вы сохранили все свои программы/документы, и т.д. так, чтобы можно было возобновиться от точки, где Вы остановились в следующий раз, когда Вы включите его :)
Таким образом, 3 объясняет, какие потребности быть сделанным после выполнения прерывания или прерывания и насколько подобный эти два случая.
Системные вызовы, обмениваясь сообщениями передающий (как описано в статье Wikipedia), и прерывания являются всеми вещами, которые вызывают контекстное переключение или переключатель от пользователя к привилегированному режиму. Поскольку Вы, вероятно, знаете:
привилегированный режим: программы имеют плоское или реальное представление памяти, и программы могут чтение-запись свободно ко всей памяти и всем устройствам непосредственно без ограничения.
непривилегированный режим: программы имеют виртуализированное представление памяти, программы не могут чтение-запись свободно ко всей памяти, и не могут устройства чтения-записи непосредственно. Для получения большего количества устройств памяти или доступа программа непривилегированного режима должна назвать ядро. Системные вызовы и передача сообщений являются двумя методами, чтобы сделать это.
Системные вызовы включают выполнение определенной инструкции ЦП или набора инструкций, которые заставляют ЦП перейти (сначала сохраняющий обратный адрес на стеке) к предопределенному адресу (не записываемый к непривилегированному режиму) и переместиться, ЦП от непривилегированного режима до привилегированного режима (звоните 3 для вызова 0 в архитектуре Intel).
Аппаратные прерывания делают почти такую же вещь, они заставляют ЦП перейти (сначала сохраняющий обратный адрес на стеке) к предопределенному адресу и переместить ЦП от непривилегированного режима до привилегированного режима. Таким образом во многих центральных процессорах тот же механизм может быть вызван программным обеспечением (названный "программным прерыванием") и может использоваться для вызовов ЦП.
Передача сообщений подразумевает (мне, по крайней мере), что ядро является "рабочим процессом", который получит поток сообщений и что там существует непривилегированный режим доступная функция, которая отправит такие сообщения. Или могло случиться так, что "отправить" функция просто пихает значения на стеке и в следующий раз, когда ядро имеет контроль (или если процесс блокируется или прерывание, происходит), это выталкивает сообщения от стека и отправляет внутренним стандартным программам соответственно.
В архитектуре микроядра, где фактическое "ядро" очень минимально и большинство функций, которые обеспечивает ядро, перемещены в процессы "сервера", все из которых могут работать одновременно в системе мульти-ЦП, что-то вроде этого могло бы быть более полезным, чем простой подход системного вызова. Интерпретация и маршрутизация "сообщений" к соответствующему ядру "сервер" были бы одним из немногих заданий микроядра.
Передача сообщений является высокоуровневым понятием одного процесса, отправляющего сообщение другому. Это реализовано системой (ядро) вызов, прося, чтобы ядро передало сообщение другому процессу. Системные вызовы просят, чтобы ядро выполнило различные сервисы для процесса. Они реализованы программным прерыванием / системное прерывание, которое заставляет CPU сохранять некоторое состояние на стеке, таким образом, это может возвратиться позже, затем переключиться на привилегированный режим и переход к обработчику ядер.
И аппаратные и программные прерывания заставляют CPU сохранять состояние, переключаться на привилегированный режим и переход к определенному обработчику для того прерывания. Различие - то, что аппаратные прерывания сгенерированы внешним оборудованием, когда им нужно некоторое внимание, такое как клавиатура, указывающая, что клавиша была нажата. Обработчик клавиатур затем может пойти, читает порт IO клавиатуры для наблюдения, какая клавиша была нажата, и примите соответствующие меры и затем возвратитесь к программе, которая была прервана.
creat
для создания нового файла. Примером прерывания является принтер, отправляющий сигнал в ЦП, чтобы сообщить этому, что печать завершается. – sakisk 03.08.2011, 02:13