Читать «Разработка ядра Linux» онлайн - страница 11
Роберт Лав
Прикладные программы, работающие в системе, взаимодействуют с ядром с помощью интерфейса printf()
. Эта функции обеспечивает форматирование и буферизацию данных и лишь после этого один раз обращается к системному вызову write()
для вывода данных на консоль. Некоторые библиотечные функции соответствуют функциям ядра один к одному. Например, библиотечная функция open()
не делает ничего, кроме выполнения системного вызова open()
. В то же время некоторые библиотечные функции, как, например, strcpy()
, надо полагать, вообще не используют обращения к ядру. Когда прикладная программа выполняет системный вызов, то говорят, что
Рис. 1.1. Взаимодействие между прикладными программами, ядром и аппаратным обеспечением
В функции ядра входит также управление системным аппаратным обеспечением. Практически все платформы, включая те, на которых работает операционная система Linux, используют
Обычно каждому типу прерываний соответствует номер. Ядро использует номер прерывания для выполнения специального обработчика прерывания (interrupt handler), который обрабатывает прерывание и отправляет на него ответ. Например, при вводе символа с клавиатуры, контроллер клавиатуры генерирует прерывание, чтобы дать знать системе, что в буфере клавиатуры есть новые данные. Ядро определяет номер прерывания, которое пришло в систему и выполняет соответствующий обработчик прерывания. Обработчик прерывания обрабатывает данные, поступившие с клавиатуры, и даст знать контроллеру клавиатуры, что ядро готово для приема новых данных. Для обеспечения синхронизации выполнения ядро обычно может запрещать прерывания: или все прерывания, или только прерывание с определенным номером. Во многих операционных системах обработчики прерываний не выполняются в контексте процессов. Они выполняются в специальном