Когда пользовательский процесс хочет выполнить системный вызов, он выполняет специальную инструкцию ЦП, и ЦП переключается из виртуального режима (для пользовательских процессов, имеет таблицы страниц, относящиеся к процессам) в реальный режим (для ядра) и выполняет переход в обработчик системного вызова ОС. Затем ядро может делать то, что ему нравится.
Для этого требуется поддержка ЦП. Процессор отслеживает, в каком режиме он находится, где расположены таблицы страниц, перемещается указатель инструкций и т. Д. Он запускается пользовательским программным обеспечением, выполняющим системный вызов, и зависит от ядра, обеспечивающего поддержку всего, что он пытается выполнить. делать. Как и во всех вычислениях, это всегда и аппаратное и программное обеспечение. Однако я не могу сделать это исключительно с помощью программного обеспечения, потому что тогда не будет никакого способа предотвратить процесс, заставляющий системный вызов злоупотреблять полученными привилегиями, например это может начать читать /etc/shadow.
Современные компьютеры x86 имеют специальную инструкцию только для системных вызовов. Более ранние процессоры x86 и некоторые текущие RISC-процессоры имеют инструкцию для запуска прерывания. В старых архитектурах были другие способы управления переключением.