SHPORA.net :: PDA | |
Main FAQ ăóìàíèòàđíûć íàóêè ćńòćńòâćííûć íàóêè ìàòćìàòèśćńêèć íàóêè òćőíèśćńêèć íàóêè 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; } |