Sistemes Operatius S O Practica dOnion 2 a

  • Slides: 19
Download presentation
Sistemes Operatius (S. O. ) Practica d'Onion, 2 a entrega Enginyeria en Informatica Facultat

Sistemes Operatius (S. O. ) Practica d'Onion, 2 a entrega Enginyeria en Informatica Facultat d'Informatica de Barcelona Universitat Politecnica de Catalunya

Planificacio de processos q Planificacio hibrida: q q q Round-robin amb prioritats § Final

Planificacio de processos q Planificacio hibrida: q q q Round-robin amb prioritats § Final de quantum § Entrada a Ready § Sortida de RUN Apropiativa § Immediata o diferida RUN Quantums i prioritats assignats externament q q Quantum petit § Rotacio rapida de la CPU § Major overhead del S. O. Major prioritat als processos que fan E/S § Menor per als processos de calcul Sistemes Operatius Ready E/S Preempcio immediata, un proces pot passar a RUN sense passar per la cua de READY Gestio de Processos 2

Estructures de dades q Proces q q Codi i dades: els tenim en una

Estructures de dades q Proces q q Codi i dades: els tenim en una subrutina (globals) Pila: caldra reservar un espai per la pila de cada proces #define TAM_PILA 1024 int pila[MAX_PILA][TAM_PILA] q Taula de PCBs struct PCB { int pid; int quantum; int prioritat; int *context; /* punter al context guardat a la pila del proces */ (. . . ) }; #define MAX_PCB 20 struct PCB taula_pcb[MAX_PCB]; q Estats dels processos i cues struct PCB *RUN; struct cua_pcb READY; struct cua_pcb ES; Sistemes Operatius Gestio de Processos 3

multiplexar() q Farem servir la interrupcio de rellotge q q q Modificar el timer

multiplexar() q Farem servir la interrupcio de rellotge q q q Modificar el timer produir 200 interrupcions per segon timer(6000); Mesurarem el temps en tics § temps entre 2 interrupcions de rellotge RSI_rellotge ® multiplexar() q q q Control dels canvis de context § Planificador a curt termini Incrementa el temps de CPU Decrementa el quantum del proces en execucio Sistemes Operatius Gestio de Processos 4

multiplexar() q 1 proces multiplexar () { RUN->context = salvar(); /* 1 sol proces

multiplexar() q 1 proces multiplexar () { RUN->context = salvar(); /* 1 sol proces */ RUN->tcpu++; eoi(); restaurar(RUN->context); } q q N processos ? q 2 processos Tenim una cua de READY /* 2 processos */ RUN->tcpu++; tics--; if (tics == 0) canviar(RUN, READY); Sistemes Operatius Gestio de Processos 5

Canvi de context Proces A () {. . tic. . } RUN Ready PCB

Canvi de context Proces A () {. . tic. . } RUN Ready PCB A PCB B *context Context proces B variables locals BP IP CS PSW Proces B () {. . . tic. }

Canvi de context Proces A () {. . tic. . } variables locals BP

Canvi de context Proces A () {. . tic. . } variables locals BP IP CS PSW RUN Ready PCB A PCB B *context multiplexar () { RUN->context = salvar(); RUN->tcpu++; tics--; planificador_curt_termini() eoi(); restaurar(RUN->context); } Context proces B variables locals BP IP CS PSW Proces B () {. . . tic. }

Canvi de context Proces A () {. . tic. . } Context proces A

Canvi de context Proces A () {. . tic. . } Context proces A variables locals BP IP CS PSW RUN Ready PCB A PCB B *context multiplexar () { RUN->context = salvar(); RUN->tcpu++; tics--; planificador_curt_termini() eoi(); restaurar(RUN->context); } Context proces B variables locals BP IP CS PSW Proces B () {. . . tic. }

Canvi de context Proces A () {. . tic. . } Context proces A

Canvi de context Proces A () {. . tic. . } Context proces A variables locals BP IP CS PSW Ready RUN PCB A PCB B *context multiplexar () { RUN->context = salvar(); RUN->tcpu++; tics--; planificador_curt_termini() eoi(); restaurar(RUN->context); } Context proces B variables locals BP IP CS PSW Proces B () {. . . tic. }

Canvi de context Proces A () {. . tic. . } Context proces A

Canvi de context Proces A () {. . tic. . } Context proces A variables locals BP IP CS PSW Ready RUN PCB A PCB B *context _restaurar PROC FAR. . . iret _restaurar ENDP Context proces B variables locals BP IP CS PSW Proces B () {. . . tic. }

Canvi de context Proces A () {. . tic. . } Context proces A

Canvi de context Proces A () {. . tic. . } Context proces A variables locals BP IP CS PSW Ready RUN PCB A PCB B *context Context proces B variables locals BP IP CS PSW Proces B () {. . . }

Creacio del proces inicial q El primer proces es diferent de la resta q

Creacio del proces inicial q El primer proces es diferent de la resta q q No cal posar-lo a RUN § ja s'esta executant ! No cal assignar-li una pila § ja en te una No li cal un context § ja el salvara ell quan entri al sistema Nomes li cal un PCB q q q Quantum Prioritat Tics PID (. . . ) Sistemes Operatius void multiplexar() { RUN->context = salvar(); (. . . ) restaurar(RUN->context); } El proces inicial entra i surt • salva i restaura La resta de processos sols surten • nomes restauren • els cal un context per restaurar Gestio de Processos 12

Creacio d'un nou proces q q Trobar un PCB i una pila lliures Crear

Creacio d'un nou proces q q Trobar un PCB i una pila lliures Crear un context en la pila del proces q q Inicialitzar el PCB q q Registres del processador PSW @retorn § donada per la subrutina que volem executar quantum prioritat *context Posar el PCB a READY Sistemes Operatius Gestio de Processos 13

Creacio d'un context a la pila Pila x Context Valors dels registres ? IP

Creacio d'un context a la pila Pila x Context Valors dels registres ? IP SS DS SI AX CX PSW CS SP BP ES DI BX DX Ready PCB x ES* DS* *context Proces x () {. . . } variables locals BP IP CS PSW ? ?

Espais d'adreces q Dos espais d'adreces q Usuari pila q codi dades DS ES

Espais d'adreces q Dos espais d'adreces q Usuari pila q codi dades DS ES DS pila q ES q q codi dades Sistema DS ES Els registres DS i ES apunten a les dades q codi dades Espai d'usuari Espai de sistema del proces del sistema Cal canviar-los quan calqui q q Entrada al sistema § salvar() Canvi de context § restaurar()

Canviar l'espai d'adreces q Com saber els valors dels registres DS i ES ?

Canviar l'espai d'adreces q Com saber els valors dels registres DS i ES ? q q q Entrada al sistema q q rutines en assemblador llegir el valor de DGROUP salvar () ® cal posar els valors (ES, DS) del sistema Canvi de context q restaurar () ® restaura els valors (ES, DS) de l'usuari

Checklist 2 a entrega q Modificar restaurar() q q Modificar salvar() q q reb

Checklist 2 a entrega q Modificar restaurar() q q Modificar salvar() q q reb un parametre: @ del context a restaurar § Canviar SS: SP § Restaurar context en aquella adreca un cop salvats DS, ES canviar-los pels valors del sistema § valor de la constant DGROUP al propi fitxer salres. asm Declarar l'estructura PCB q q quins camps haura de tenir a quin valor s'inicialitcen

Checklist 2 a entrega (II) q Inicialitzar el PCB del proces inicial q q

Checklist 2 a entrega (II) q Inicialitzar el PCB del proces inicial q q q Declaracio i inicialitzacio dels estats dels processos q q q el proces inicial no s'ha de crear, ja existeix assignar-li un PCB, i inicialitzar-lo com cal Un unic proces a RUN Un conjunt de processos a READY § Rutines de cues a solib. lib RSI de rellotge: multiplexar() q Planificador de curt termini § Round-robin § Prioritats § Apropiatiu (immediat o diferit)

Checklist 2 a entrega (III) q q q Declarar la taula de PCBs Reservar

Checklist 2 a entrega (III) q q q Declarar la taula de PCBs Reservar espai per les piles dels processos Nova CAS: crear_pcb(rutina, quantum, prioritat) q q q Trobar un PCB lliure Trobar una pila lliure Crear un context a la pila trobada § Valors dels registres DS, ES Inicialitzar el PCB del proces Posar el proces a READY (diferida) o a RUN (immediata) Valors de DS, ES d'usuari (creacio d'un context) q Noves rutines en assemblador § obtenir_ds(), obtenir_es() § valor de la constant DGROUP