Sistemes Operatius S O Onion Mecanisme dentrada al

  • Slides: 18
Download presentation
Sistemes Operatius (S. O. ) Onion: Mecanisme d'entrada al sistema Enginyeria en Informatica Facultat

Sistemes Operatius (S. O. ) Onion: Mecanisme d'entrada al sistema Enginyeria en Informatica Facultat d'Informatica de Barcelona Universitat Politecnica de Catalunya

Practica d'Onion: 1 a entrega fluxes. c onionlib. lib boot. c sistema. c bfs.

Practica d'Onion: 1 a entrega fluxes. c onionlib. lib boot. c sistema. c bfs. c nucli. c

Estructura de la practica q 6 fitxers a generar q q q 3 fitxers

Estructura de la practica q 6 fitxers a generar q q q 3 fitxers donats q q q salres. asm solib. lib / rutines. h new_maq. asm / new_maq. h q q q boot. c sistema. c bfs. c nucli. c onionlib. lib fluxes. c Mes tots els. h que calguin! q q salres. h sistema. h / onionlib. h bfs. h. . .

salres. asm q int *salvar() q q void restaurar(void) q q q Guarda el

salres. asm q int *salvar() q q void restaurar(void) q q q Guarda el context de l’usuari a la pila Retorna un apuntador al context salvat Caldra modificar-la mes endevant ! Restaura el context de l’usuari de la pila Caldra modificar-la mes endevant ! NOTA: cal que us feu el fitxer de capcelera q Altrament el compilador enten: int salvar()

solib. lib / rutines. h q Inhibir i desinhibir les interrupcions q q Rutines

solib. lib / rutines. h q Inhibir i desinhibir les interrupcions q q Rutines d'acces als dispositius hardware q q q int inhibir() / void desinhibir(int flags) escriure_pantalla_hw llegir_teclat_hw Rutines de gestio de cues q q ini_cua insertar cap primer

new_maq. asm / new_maq. h q Dades i rutines necessaries per accedir als dispositius

new_maq. asm / new_maq. h q Dades i rutines necessaries per accedir als dispositius q q q Taula de mapeig del teclat Taula d’adreces de pantalla Rutina d'inicialitzacio de la pantalla q int *ini_pantalla()

boot. c q q Inhibir interrupcions Inicialitzar totes les estructures del sistema q q

boot. c q q Inhibir interrupcions Inicialitzar totes les estructures del sistema q q q Desinhibir interrupcions q q q Pantalla Vector d’interrupcions Canvi a mode usuari Perdua de tots els privilegis de sistema § acces a estructures de dades Execucio del proces inicial

sistema. c q Punt d’entrada al sistema (INT 64) q q rsi_trap() { ctx

sistema. c q Punt d’entrada al sistema (INT 64) q q rsi_trap() { ctx = salvar (); switch (reg_AX) { (. . . ) case N: escriure_pantalla_sis (); break; (. . . ) } (no cal inhibir les interrupcions) Salvar Accedir al registre AX § Atendre peticio d’usuari Restaurar restaurar(); } q Escriure pantalla (sistema) q Recollir parametres de la pila escriure_pantalla_sis ( ? ? ? ) {. . . }

bfs. c sistema q Escriure pantalla (BFS) q Passa directament a nivell nucli BFS

bfs. c sistema q Escriure pantalla (BFS) q Passa directament a nivell nucli BFS nucli

nucli. c Escriure pantalla (nucli) q q q Comprovar parametres § Coordenades de pantalla

nucli. c Escriure pantalla (nucli) q q q Comprovar parametres § Coordenades de pantalla valides Accedir al dispositiu Retorn de resultats § A traves del registre AX de l’usuari • Caldra accedir al CONTEXT 80 columnes 25 files q

onionlib. lib q Programacio en assemblador de la llibreria del sistema q q q

onionlib. lib q Programacio en assemblador de la llibreria del sistema q q q Indicar el servei al registre AX Cridar a la instruccio de TRAP Una rutina per cada crida a sistema Llibreria del sistema (Onion sobre i 8086) public _CAS proc far. MOV AX, num_servei INT 64. RET _CAS end proc

fluxes. c q No disposem d’un carregador (loader) q q q Sistema de fitxers

fluxes. c q No disposem d’un carregador (loader) q q q Sistema de fitxers Gestio de memoria Codi dels processos d’usuari q Inclos el proces inicial codi dades

Estat de la pila en una CAS Onion (I) q Crida a la llibreria

Estat de la pila en una CAS Onion (I) q Crida a la llibreria del sistema q q q Empilar parametres § Empilats de dreta a esquerra Empilar @retorn § Registres CS: IP A recordar: q usuari() {. . CAS(par_1, par_2). . } Empilem el parametres en cridar a la subrutina Sistemes Operatius Mecanismes d'entrada al S. O. CS: IP usuari() par_1 par_2 13

Estat de la pila en una CAS Onion (II) q Executar crida a sistema

Estat de la pila en una CAS Onion (II) q Executar crida a sistema q q Indicar el servei que es desitja § Modificar registre AX Executar instruccio TRAP § Empilar PSW § Empilar @retorn Sistemes Operatius public _CAS proc far. MOV AX, num_servei INT 64. RET _CAS end proc Mecanismes d'entrada al S. O. CS: IP _CAS PSW CS: IP usuari() par_1 par_2 14

Estat de la pila en una CAS Onion (III) q Executar ruitna d'atencio als

Estat de la pila en una CAS Onion (III) q Executar ruitna d'atencio als traps q q q Fer l'enllac dinamic push BP mov BP, SP Reservar espai per variables locals i temporals Salvar context a la pila Accedir al registre AX § seleccionar el servei Cridar a la ruitna de servei sense parametres § nomes empila @retorn CS: IP rsi_trap() context AX rsi_trap() { ctx = salvar (); switch (reg_AX) { (. . . ) case N: rut_servei_N(); break; (. . . ) } restaurar(); locals i temporals rsi_trap() BP CS: IP _CAS PSW CS: IP usuari() par_1 par_2 } Sistemes Operatius Mecanismes d'entrada al S. O. 15

Estat de la pila en una CAS Onion (IV) q Programem la rutina de

Estat de la pila en una CAS Onion (IV) q Programem la rutina de servei amb parametres q q q Fem l'enllac dinamic Recollim els parametres amb el BP a partir de l'@retorn rutina_servei_N( deixalles, par_1, par_2) { (. . . ) } Declarem un parametre de mes, per saltar el que no volem struct deixalles { int brossa[N]; } q A recordar: q Els parametres es recullen en executar la rutina Sistemes Operatius Mecanismes d'entrada al S. O. BP IP: CS rsi_trap() context locals i temporals rsi_trap() BP CS: IP _CAS PSW CS: IP usuari() par_1 par_2 16

Practica d'Onion: 1 a entrega boot. c fluxes. c onionlib. lib fluxe 1 escriure_pantalla

Practica d'Onion: 1 a entrega boot. c fluxes. c onionlib. lib fluxe 1 escriure_pantalla main() new_maq. asm ini_pantalla solib. lib vector_int sistema. c bfs. c nucli. c rsi_trap escriure_pantalla_bfs escriure_pantalla_nuc escriure_pantalla_sis salres. asm solib. lib salvar restaurar escriure_pantalla_hw

Estructura de directoris dir. principal *. c, *. asm Makefile . /include . /lib

Estructura de directoris dir. principal *. c, *. asm Makefile . /include . /lib *. h *. lib