Рассмотрим следующий случай в многоядерном процессоре и для простоты позволяет использовать ядро Linux.Два заблокированных процесса ввода-вывода в ОС и событие нажатия клавиши
wait_char()
{
while (1)
{
ch = readchar();
putchar(ch);
}
}
- открыть два терминала А и В, и выполнить код wait_char() в каждом
- Как процесс А и процесс В блокируются и положить в очереди ввода/вывода ожидает для клавиатуры прерывания приходить , Допущу, А впереди B в этой очереди
- Теперь я выбрал терминал В частности и ввести ключ от моей клавиатуры
- CPU работает клавиатура процедуру обработки прерываний в режиме ядра
- Естественно я буду видеть, введенный ключ эхо в консоли.
Теперь как выяснилось, что это ядро для B (кто был в очереди ввода-вывода)?
Я угадаю, поскольку я не уверен на 100%. Баш будет 'fork' и' execv' для введенной вами программы. Детский и родительский процесс разделяют все записи в таблице «PD», включая 'stdin' и' stdout'. Если вы введете свой ключ в первый открытый bash, в котором вы запустили программу A, и введите там свой вход, bash прервет и таким образом OS позаботится об этом входе. Только программа A и этот bash получили этот вход. Не программа B/Второе открытое bash. –