2015-03-24 27 views
1

Я прохожу через код в OS/161 в отношении того, как выполняются системные вызовы. Из того, что я вижу, системный вызов (например, reboot()) фактически переводится ядром OS/161 в вызов sys_reboot(). Аналогичным образом, вызов fork() будет переведен на звонок sys_fork().Системные вызовы в OS/161

Правильно ли я понимаю?

Спасибо.

ответ

1

Каждый системный вызов имеет уникальный идентификационный номер, в OS161 эти номера системного вызова определены в керн/включить/Керн/syscall.h:

#define SYS_reboot  119 

Процедура библиотека перезагрузки() помещает номер системного вызова в регистр (v0) и выдает ловушку ОС, обработчик syscall получает от обработчика исключений на языке ассемблера структуру данных, называемую trapframe, которая содержит, помимо прочего, номер системного вызова.

Этот номер используется в переключатель сазе для выбора функции:

void syscall(struct trapframe *tf) 
    ... 
    callno = tf->tf_v0; 
    ... 
    switch (callno) { 
     case SYS_reboot: 
     err = sys_reboot(tf->tf_a0); 
     break; 
Смежные вопросы