SHPORA.net :: PDA

Login:
đćăèńòđàöèÿ

Main
FAQ

ăóìàíèòàđíûć íàóêè
ćńòćńòâćííûć íàóêè
ìàòćìàòèśćńêèć íàóêè
òćőíèśćńêèć íàóêè
Search:
Title: | Body:

b.Salvarea context

^algoritmul inthand /* rutina detratare a ^întreruperii */
^intrare: niciuna
^ie?ire: niciuna
{
^salvează (introduce) stratul context curent;
^determină sursa de întrerupere;
^găse?te vectorul de întrerupere;
^apelează rutina de tratare a întreruperii;
^reface (scoate din stivć) stratul context anterior;
}
Interfața de apel sistem a nucleului a fost descrisă ca un apel normal de funcție. Compilatorul C folose?te o bibliotecă de funcții predefinite (biblioteca C) care conține denumirile apelurilor sistem.
Funcțiile de bibliotecă invocă o instrucțiune care schimbă modul de execuție al procesului în modul nucleu ?i determină nucleul să înceapă execuția codului pentru apelurile sistem.Această instrucțiune este numită "trap" ?i este văzută ca o excepție. Rutinele de bibliotecă sunt executate în modul utilizator, dar interfața de apel sistem este un caz special de rutina de tratare a întreruperii.
^algoritmul syscal /* algoritmul pentru invocarea unui apel sistem */
^ intrare: numărul apelului sistem
^ ie?ire: rezultatul apelului sistem
{
găse?te intrarea în tabela de apeluri sistem corespunzătoare numărului de apel sistem;
^determină numărul de parametri pentru apelul sistem;
^copie parametrii din spațiul de adrese utilizator în u area;
^salvează contextul curent pentru întoarcerea forțată );
^invocă codul apelului sistem in nucleu;
^if (apare eroare în timpul execuției apelului sistem)
{
setează registrul 0 din registrul context salvat utilizator cu numărul 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;
}