Я много думал о клавиатуре. Как это работает? Кажется, я не могу объяснить вам хорошее объяснение.Как взаимодействует 2 или более процессов с клавиатурой?
Я знаю, что прерывание клавиатуры выполняется каждый раз при нажатии клавиши. Процессор останавливает все, что он обрабатывает, и загружает данные клавиатуры из буфера клавиатуры, сохраняя его в буфере уровня системы.
Но что будет дальше? Давайте рассмотрим практический пример. Что происходит, когда я запускаю следующий фрагмент кода:
...
std::string s;
std::cin >> s;
....
читать ли cin
из представления на уровне пользователя буфера клавиатуры системного уровня? Это имеет смысл в моей голове, потому что тогда 2 или более процесса могут считывать из одного и того же буфера, и таким образом я не теряю никаких нажатий клавиш. Но работает ли это так?
Я знаю, что говорю в самых общих чертах. Используемая ОС - OS X.
Таким образом, WM владеет клавиатурой. ОС обрабатывает прерывания и копирует буфер с уровня ядра на уровень пользователя, где WM обрабатывает буфер. WM обрабатывает события для разных приложений, убедившись, что все, что я пишу на клавиатуре, показано в текстовом приложении? – mslot
Ну, вернее, оконный сервер (X11, Cocoa или Win32) передает сообщения в сфокусированное окно, которые несут информацию нажатия клавиши. Входной буфер частично реализуется драйвером ввода и просто считывается сервером окон. Все приложения видят оконные сообщения. – greyfade
Ах ладно. Мне просто интересно, как разные процессы читаются из буфера клавиатуры, но теперь я вижу, что это делает сервер окон.У кого-то из вас есть ссылки на документы, описывающие этот механизм? – mslot