Transferència Programada de Dades i Interrupcions
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en catalán con un tamaño de 6,13 KB
Una transferència programada de dades és un programa executat per la CPU que segueix la següent seqüència:
- 1. Envia/rep una dada sobre el port del perifèric.
- Espera en un bucle que el perifèric estigui llest per tornar-hi.
- Tornar a 1 i repetir fins acabar l'operació programada.
Com que el pas “2” manté la CPU ocupada de manera improductiva, ho solucionem incorporant les interrupcions. Fet el pas “1”, deixem la transferència i no fem cap bucle. Executem altres programes que puguin ser d’interès. Quan el perifèric estigui llest per tornar-hi, envia un senyal a la CPU i aquesta executa una “rutina de tractament de la interrupció” que comporta enviar/rebre una altra dada. Fet això, tornarà al programa d’interès que estava fent quan ha arribat la interrupció. Això es repetirà fins acabar l'operació programada. D’aquesta manera, la transferència programada de dades amb interrupció alleugereix la CPU d’estar fent un bucle improductiu.
Una interrupció és un senyal asíncron que fa que es deixi d’executar el programa en curs per executar un altre programa amb la idea de resoldre una situació que requereix l’atenció immediata.
En arribar el senyal, s’acaba d’executar la instrucció en curs i es passa a executar la rutina de tractament de la interrupció (RTI), l’adreça de començament de la qual és al registre Vector d’Interrupció. Per tant, es carrega aquesta adreça al Comptador de Programa.
- Es produeix un canvi de mode usuari a supervisor.
- Es salva el contingut del registre d’estat i del PC.
- S’executa la Rutina de Tractament de la Interrupció (RTI).
La RTI acaba amb una instrucció de Retorn d’Interrupció que restaura el registre d’estat i el PC. D’aquesta manera, es recupera l’execució del programa que s’estava executant en el moment que va arribar la interrupció.
Canvia de mode Supervisor a usuari. Una interrupció hardware és la que es produeix per l’activació d’un senyal hardware indicant que s’ha produït un esdeveniment exterior al sistema que requereix la seva atenció i és generat per un dispositiu com una impressora, un disc, un motor, etc.
L’excepció desencadena el mateix procés que l’anterior, però la causa que el produeix és interna a la CPU, com una divisió per zero en una operació, intent d’executar una instrucció privilegiada, un overflow, etc.
La interrupció software (TRAP) és una instrucció del repertori de la CPU que pot ser inclosa al nostre programa d’usuari, que desencadena exactament el mateix procés que les anteriors. La CPU disposa de dos modes de funcionament: Usuari i Supervisor. En el primer, la CPU i el programa que estigui executant tenen accés a un espai de memòria limitat, no tenen accés a l’espai d’entrada/sortida ni a tots els registres interns de la CPU, i hi ha instruccions del repertori que no poden executar. Si ho intenten, es produirà una excepció. En el mode supervisor, totes les limitacions desapareixen. Es passa de mode usuari a supervisor quan es produeix una interrupció en general i el camí contrari quan s’executa una instrucció de Retorn d’Interrupció.
El Sistema Operatiu ens proporciona els mecanismes per poder utilitzar el sistema d’una manera eficient i segura. Tots els serveis per utilitzar els recursos del sistema, com memòria, fitxers, accés a la xarxa, etc., han de ser sol·licitats al SO, el qual és l’únic capacitat per gestionar-los.
Una crida al sistema és una petició d’un servei al sistema operatiu. La seva funció és indicar què volem, com ho volem, i on ho volem. S’implementa mitjançant una sèrie d’instruccions que permeten posar en memòria o en registres els paràmetres que necessita la crida i finalment la fa efectiva amb una instrucció TRAP. La relació amb les interrupcions és perquè d’aquesta manera l’execució del SO es fa en mode supervisor i els programes s’executen en mode usuari. Així protegim la feina del SO i del sistema en general.
L’usuari interactiu necessita una aplicació que transformi comandes interactives en crides al sistema operatiu. És l’“intèrpret de Comandes”. Des d’un programa ho pot fer directament com hem explicat o amb funcions de llibreria de llenguatge o de sistema.
La crida al sistema sempre s’acaba amb una TRAP per fer efectiva la crida. Les funcions de llibreria de sistema són versions més amigables de la crida al sistema feta en llenguatge màquina, però fan exactament el mateix; de fet, el compilador les substitueix per la crida en llenguatge màquina. Les funcions de llibreria de llenguatge són ampliacions de les de sistema, per tant les inclouen, amb funcionalitats afegides.
En primer lloc, en executar-se aquest codi es visualitza per pantalla el missatge “Hola”.
A continuació, amb el fork()
, es crea un procés fill idèntic al que s’està executant (pare) i l’identificador del nou procés se li assigna a la variable “pid” del pare. A la variable “pid” del fill se li assigna un zero.
Ara tenim dos processos iguals executant-se: Pare i Fill. El procés Pare, a través de l’else
, executarà el wait(&st)
que el deixarà bloquejat a l’espera que el Fill acabi d’executar-se. Quan el fill finalitzi, visualitzarà per pantalla el missatge “Adeu del pare”.
El procés Fill, a través de l’if (pid == 0)
, visualitzarà per pantalla el missatge “Adeu del fill” i a continuació substituirà el programa actual que està executant per un programa que es troba emmagatzemat en un fitxer anomenat “ls” i continuarà executant aquest nou programa, fins acabar, en substitució total de l’anterior. En cas que no hagi tingut èxit la crida execlp
i no s’hagi produït la substitució, el procés fill acabarà la seva execució a través de l’exit(1).