b.Salvarea context

[ ]
^algoritmul inthand /* rutina detratare a ^ntreruperii */
^intrare: niciuna
^ie?ire: niciuna
{
^salveaz (introduce) stratul context curent;
^determin sursa de ntrerupere;
^gse?te vectorul de ntrerupere;
^apeleaz rutina de tratare a ntreruperii;
^reface (scoate din stiv) stratul context anterior;
}
Interfaa de apel sistem a nucleului a fost descris ca un apel normal de funcie. Compilatorul C folose?te o bibliotec de funcii predefinite (biblioteca C) care conine denumirile apelurilor sistem.
Funciile de bibliotec invoc o instruciune care schimb modul de execuie al procesului n modul nucleu ?i determin nucleul s nceap execuia codului pentru apelurile sistem.Aceast instruciune este numit "trap" ?i este vzut ca o excepie. Rutinele de bibliotec sunt executate n modul utilizator, dar interfaa de apel sistem este un caz special de rutina de tratare a ntreruperii.
^algoritmul syscal /* algoritmul pentru invocarea unui apel sistem */
^ intrare: numrul apelului sistem
^ ie?ire: rezultatul apelului sistem
{
gse?te intrarea n tabela de apeluri sistem corespunztoare numrului de apel sistem;
^determin numrul de parametri pentru apelul sistem;
^copie parametrii din spaiul de adrese utilizator n u area;
^salveaz contextul curent pentru ntoarcerea forat );
^invoc codul apelului sistem in nucleu;
^if (apare eroare n timpul execuiei apelului sistem)
{
seteaz registrul 0 din registrul context salvat utilizator cu numrul erorii;
^ntoarce bitul de transport n registrul PS din contextul registrului salvat utilizator;
}
^else
^seteaz registrul 0, 1 din registrul context salvat utilizator ca valori de retur din apelul sistem;
}

:

Network | | | | | | | | | | | | | | | - | | | | | | | | | | | | | | | | | | | | | () | | | | | | | | | | | | | | | | () | Assembler | Basic, VB | Pascal | , ++ |