2015-12-16 1 views
1

Процесс связывается с другим процессом с использованием various ways of IPC (interprocess communication), такого как разделяемая память, передача сообщений, сигнализация?Является ли ядро ​​ОС взаимодействием с процессом так же, как IPC?

Я узнал, что an OS kernel can communicate with a process using signals, и если я прав, сигнализация по тем же сигналам также является способом IPC.

Является ли ядро ​​ОС взаимодействием с процессом или процессами с использованием других способов IPC, таких как разделяемая память, передача сообщений?

Если необходимо, я хотел бы узнать больше о ядре Linux, а также рад узнать о ядре Windows.

+0

linux является монолитным как архитектура, а это означает, что все ядро ​​- это один большой модуль, а межсетевое взаимодействие между ядрами осуществляется через сигналы (например, Unix-системы). модульные или * микроядрами *, и они используют более гибкий (и более медленный) IPC –

+0

Сделайте несколько попыток Google! Через 30 секунд я прочитал исходный код signal.c, который реализует механизм отправки сигнала. – JJF

+0

Голосование закрывается как слишком широкий. Существует много ays, в котором ОС может «обмениваться» с кодом пользовательского режима. Возможно, каждый вызов API, созданный в режиме пользовательского режима, является формой связи. –

ответ

2

Вопрос предполагает фундаментальное непонимание структуры большинства операционных систем.

Существует нет отдельного процесса «ядра» для связи. Ядро - это код, который выполняется в контексте любого процесса. Код ядра ядра вызывается прерыванием, ловушкой или исключением. В режиме ядра процесс имеет доступ к памяти ядра, которая совместно используется всеми процессами.

Следовательно, между процессом и ядром не может быть межпроцессного взаимодействия.

Когда ядро ​​посылает сигнал (в Unix) или APC (в Windoze), он делает это в контексте процесса, который принимает сигнал.

Некоторые сигналы могут быть созданы вне процесса приема. Общая последовательность:

Процесс P переходит в режим ядра и помещает сигнал в память ядра для обработки Q. Когда процесс Q становится текущим процессом, ядро ​​упорядочивает Q для выполнения обработчика сигнала.

Для такого сигнала связь между P и Q; а не Q и ядром.

Имейте в виду, что этот сигнальный механизм возник в те дни, когда в Unix были только отдельные потоки выполнения. Это была процедура асинхронного вызова бедного человека (как на Windoze или VMS). Было время, когда любая форма параллельной обработки на евнухах требовала создания отдельного процесса. [Плохо разработанная] модель сигнала не проводит различия между событиями, генерируемыми извне/асинхронными/синхронными.

Windoze (NT) следил за моделью VMS с использованием программных прерываний для уведомления о событиях. Эта модель прерываний в значительной степени скрыта за API Windows, которая преобразует модель прерывания в модель события.

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

Один процесс (приложение) может управлять любым количеством устройств в этом типе системы.

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

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

В Windoze сигналы являются частью библиотеки C, перевод программного обеспечения прерывается во что-то, что выглядит как unix-сигнал.

+0

Спасибо. Я знаю, что ядро ​​не является процессом. Вот почему я спрашиваю, связано ли ядро ​​ОС с процессом, используя те же способы, что и IPC. – Tim

+0

==============> Нет. – user3344003