Любое ядро в значительной степени является полной противоположностью "обычной программы". Несмотря на то, что специалистам по микроядру может понравиться идея, что службы ОС работают как процессы на том же уровне, что и пользовательское приложение, ядро всегда должно включать какую-то часть, которой нет. По крайней мере, должна быть какая-то часть ОС, которая занимается планированием и переключением между процессами, а также связью между ними.
В частности, в Linux ядро отображается в адресное пространство всех процессов в верхней части адресного пространства. В некотором смысле, это часть каждого процесса, поскольку в некоторых процессах может выполняться код ядра, а в то же время в каком-то другом процессе может выполняться код пользовательского пространства.
Я бы не сказал, что ядро работает как обычная программа, но оно также не работает «только» по прерываниям, поскольку код пользовательского пространства также может вызывать подпрограммы ядра: это и есть системные вызовы. Кавычки вокруг «только», поскольку прерывания вовсе не являются исключительными, довольно часто встречается какое-то регулярное тиканье таймера.
Некоторое время спустя исследования я пришел к выводу, что это конфигурация дисплея X пытается выводить на мой монитор с разрешением 1920 * 1080 вместо 1828 * 1028 с недостаточной разверткой. Это приводило к тому, что дисплей представлялся системе как все еще имеющий разрешение 1920 * 1080, даже несмотря на то, что контент был подогнан к дисплею 1828 * 1028, что приводило к эффекту «курсор-на-краю-показывает-ковер». По сути, «поверхность экрана» была больше, чем «размер экрана».
Чтобы исправить эту проблему, я установил размеры дисплея X на правильные уменьшенные размеры 1828 * 1028 с помощью команды xrandr
:
# xrandr -s 1828x1028
Мне еще предстоит выяснить, как сохранить это изменение. lightdm
перезапускается. Обновлю ответ, когда разберусь.