Нууу, умнячки. Глубина буфера ввода по дефолту не очень большая. Но хранит то он не сами символы а сканкоды. Некоторые кнопки имеет составные сканкоды. Например:
Control Keys Make Break
Alt-PrtSc (SysReq) 54 D4
Ctrl-PrtSc E0 37 E0 B7
Enter E0 1C E0 9C
PrtSc E0 2A E0 37 E0 B7 E0 AA
Right Alt E0 38 E0 B8
Right Ctrl E0 1D E0 9D
Shift-PrtSc E0 37 E0 B7
/ E0 35 E0 B5
Pause E1 1D 45 E1 9D C5 (not typematic)
Ctrl-Pause (Ctrl-Break) E0 46 E0 C6 (not typematic)
- Keys marked as "not typematic" generate one stream of bytes
without corresponding break scan code bytes (actually the
break codes are part of the make code).
И все это где-то надо хранить. К тому же, сама матрица кнопок упрощена и внутренний буфер стандартного 80c42, на котором обычно построена стандартная клава очень мал.
И сам факт пищащего PC спикера заключается в том, что со времен DOSа, если программа делала выборку буфера кнопок медленнее, чем пользователь пихал туда сканкоды, то при достижении потолка обработчик прерывания выкидывал пришедший сканкод и издавал недовольный гудок, чтобы предупредить пользователя об этом деянии. Этот буфер остался и в Windows (как и в Linux и вообще везде). В итоге, если программа подвисла и буфер не опусташается, то происходят гудки. Помните, как начинает трещать спикер, если двигать мышой при зависшем винде (когда даже мыша останавливается)? Это тоже буфер ввода. Ну а в данном случае, при нажатии некоторой комбинации клавишь происходит генерация шквала сканкодов, которые не помещаются как в буфер системы так и в буфер самой клавы.
И последнее, если нажать хотя-бы 2 клавиши, использующие одну приемную линию сканирующей матрицы но использующие разные передающие линии сканирующей матрицы происходит микро КЗ, которое определяет контроллер в клавиатуре и он начинает посылать сигнал гудка, чтобы юзер отпустил эти кнопки. Именно поэтому, в т.н. "турбо" клавиатурах, сканирующих матриц несколько и они меньше.