Rutines Independents

Documentos relacionados
3. FUNCIONS DE RECERCA I REFERÈN- CIA

CONSULTA DE L ESTAT DE FACTURES

UNITAT LES REFERÈNCIES EN L ÚS DELS CÀLCULS

Guia per enviar i gestionar fitxers des de Línia Oberta

Segundo control de teoría

PROGRAMA DE GESTIÓ PER LES ENTITATS. Guia per l usuari

FITXA DE PROCÉS NUM.REVISIÓ DESCRIPCIÓ DATA APROVACIÓ. 00 Versió original 23/09/2013

EINA PLANIFICACIÓ TORNS DE GUÀRDIES (PTG) Col legi Oficial de Farmacèutics de la Província de Tarragona

Manual OVIDOC OVIDOC GUIA D'USUARI

Instruccions per generar el NIU i la paraula de pas

Problemes de Sistemes Operatius - Entrada / Sortida

SIGAC Valoració i finalització d assistències. Canvi d estat al PMT i enviament d enquestes

UNITAT COMBINAR CORRESPONDÈNCIA

Tema 4. El model de regressió múltiple: Inferència. Joan Llull. Materials:

Setembre qbid Mòdul d empresa Pràctica suport Tutor Empresa

Requisits per al bon funcionament de la tecnologia d accessibilitat integral per als navegadors Internet Explorer, Google Chrome i Mozilla Firefox

COMBINAR CORRESPONDÈNCIA AMB WORD 2000

Manual gestió d usuaris

UNITAT FUNCIONS D ÚS AVANÇAT

DOSSIER PER DONAR D ALTA CITA PRÈVIA A TRAVÉS D EVIA

Càlcul de tants efectius

SOL LICITUD MASSIVA DEL NIA A ÍTACA PER A INCORPORAR A ALLEGRO (pas necessari per a la migració a ÍTACA)

INSTRUCCIONS D ÚS DEL SERVIDOR D APLICACIONS

Manual d accés a les aplicacions

Comprovació i Instal lació de la màquina virtual de Java per a el correcte funcionament de l applet de signatura

El llenguatge HTML (Descripció i etiquetes) L etiqueta <table> (Creació de taules) Exemple complet de codi HTML... 5

SERVEI IMPRESSIÓ - KONICA MINOLTA - CISE

AVALUACIÓ DE QUART D ESO

GUIA AUTOMATRÍCULA

INTRODUCCIÓ AL FULL DE CÀLCUL-NIVELL II

UNITAT CREAR UNA BASE DE DADES AMB MS EXCEL

MOODLE 2 Crear cursos

La Noa va de càmping, quina llet ha de triar?

1. Què tenen en comú aquestes dues rectes? Com són entre elles? 2. En què es diferencien aquestes dues rectes?

ENTRADA/SALIDA. 1. Características diferenciales de los periféricos de E/S.

Passos per a fer les proves d'avaluació final virtuals

2. FUNCIONS MATEMÀTIQUES, TRIGO- NOMÈTRIQUES I ESTADÍSTIQUES

PROGRAMARI LLIURE... Instal la-te l!

operacions inverses índex base Per a unificar ambdues operacions, es defineix la potència d'exponent fraccionari:

Servei de Gestió de Serveis Informàtics Secció de Sistemes en Explotació Webmailaj Correu Municipal Configuració nou compte de correu

enotum 3.0 Guia per integradors Processament en lots

CALC 2... Introduïm fórmules senzilles

EXERCICI 6 PICASA PICASA.

Quadern de matemàtiques Decimals2

PROTOCOL D ACTUACIÓ FARMACÈUTICA

LA FOTOSÍNTESIS. No hem arribat a cap conclusió.

MINIGUIA RALC: REGISTRE D UN NOU ALUMNE (Només per a ensenyaments no sostinguts amb fons públics)

Altres accions bàsiques

ACTUALITZACIÓ DE SEGURETAT WINDOWS PER A WANNACRY BREU MANUAL D INSTRUCCIONS PER A LA INSTAL LACIÓ

TREBALL D'ANÀLISI D'UNA ESCULTURA DE CHILLIDA, OTEIZA O HENRY MOORE.

JMatch. Exporta a HP6 Pàgina d arrossegar/deixar anar

Manual d instal lació i ús Congelador virtual (VFreezer) PFC-Programació d aplicacions per a mòbils usant HTML5

UNITAT CALCULAR EN UNA BASE DE DADES

TEMA 4: Equacions exponencials i logarítmiques

SABI: Sistema de Análisis de Balances Ibéricos

Per fer el balanç inicial 2003 (estat econòmic del centre a )

Emissió de rebuts de matrícula del curs

MANUAL: OBRIR PORTS I DMZ

Manual de configuració comptes de en centres educatius

Manual d usuari. Versió: 0002 Data: 20/02/2018. XolidoSign, eina de signatura digital. <Unidad Organizativa>

TEMA 3 : Nombres Racionals. Teoria

CATÀLEG COL LECTIU DE LA XARXA ELECTRÒNICA DE LECTURA PÚBLICA VALENCIANA

Unitat 2. POLINOMIS, EQUACIONS I INEQUACIONS

EL QUINZET GLOBAL EDUCACIÓ PRIMÀRIA VERSIÓ

GEDAC Gestió d Escolarització D Alumnes Manual d Admissió

Guia d ús de XolidoSign (Data d actualització de la informació: 10 de novembre de 2014)

Guió per fer la sol licitud de Pràcticum:

La creació de qualsevol llista es fa amb l operador list. En el cas de crear una llista buida la sintaxi és

Estructures de dades lineals II

MINIGUIA RALC: FINALITZACIÓ DEL PROCÉS DE REGISTRE DE MATRÍCULES DEL CURS VINENT

Barrera automatitzada de pàrquing

Problema Master mind. Extracte de solució

FINAL. Per aprovar el curs cal aprovar les tres avaluacions, amb una nota igual o superior del 5.

Instruccions per a l ús del Portal d Informació Econòmica i de Serveis Locals

Projecte d enginyeria informàtica (JULIOL 2011) Realitzat per Joan Ayllón Dirigit per Xavier Roca

1. Instal lació de la cua d impressió per Windows 7

COM CREAR UNA ENQUESTA AMB GOOGLE DRIVE

Tema 2: GEOMETRIA ANALÍTICA AL PLA

FULL INFORMATIU Guia per a Avaluar amb el SAGA

UNITAT AUTOMATITZAR ACCIONS

Indicacions comuns. Estacions d aula de primària i secundària

MINIGUIA RALC: REGISTRE DE MATRÍCULES D ALUMNES QUE CONTINUEN AL CENTRE

Taules de Contingut automàtiques

FUNCIONS REALS. MATEMÀTIQUES-1

Recepció de documents electrònics Juliol 2012

1.- PERCENTATGE D APROVATS DEL CONJUNT DE LES ILLES BALEARS.

Bloc 3. Full de Càlcul

Una funció és una relació entre dues variables, de tal manera que al variar el valor d'una d'elles va variant el valor de l'altra.

UNITAT FUNCIONS D ÚS AVANÇAT

Recursos Generals Servei de Tecnologies de la Informació i Telecomunicacions. Plaça del Mercadal REUS

Activació de codis QR

Guía de l Ús del Portal de Proveïdors. Requisits tècnics del proveïdor

Manual d ús d OWNCLOUD

1. Per tramitar les llicències federatives temporals, l entitat excursionista pot accedir pel

Ús de la signatura electrònica amb Mozilla Thunderbird 2.0. Servei de Recursos Informàtics i TIC

SICALWIN. Modificacions Informes Trimestrals de Morositat 2015.

UNITAT LES REFERÈNCIES EN L ÚS DELS CÀLCULS

En la taula següent hi ha la informació que apareix en un envàs de cereals.

Transcripción:

Rutines Independents 1. Obrir Obrir independent del dispositiu Comprovar que el canal és correcte Número de canal Canal no està ja assignat Buscar DD associat a nom, o bé crear-lo si és fitxer (o segons la implementació MBX si ) Cridar a obrir dependent del dispositiu, la qual haurà de: Incrementar nombre d'herències al DD Si és el primer en obrir el dispositiu, marcar propietari Si tot ha estat correcte: Actualitzar entrada de la taula de canals Observacions Síncrona L'accés a cues i variables globals s'ha de fer en Exclussió Mútua a totes les rutines Rutines Independents 21

int obrir (canal, nom, mode, prot) int canal, mode; char * nom; char prot; struct dd * eldd; struct pcbsys * aux; int error, ret; aux = obtenir_pcb(quisoc()); if (canal 0..4) return(-9); if (aux->t_c[canal].pdd!= NIL) return(-7); /* No hi han errors */ if ((eldd = buscar_dd(nom)) == NIL) return(-1); /* Crida a la rutina dependent */ ret = (* eldd->obrir) (eldd, mode, prot); if (ret == 0) aux->t_c[canal].pdd = eldd; aux->t_c[canal].mode = mode; inicialitzar_cua(aux->t_c[canal].q_io); eldd->opens++; return(ret); struct dd * buscar_dd(nom) char * nom; struct dd * eldd switch (tipus_dd(nom)) case CONSOLA: return (DD_CONSOLA); case TERMINAL: case IMPRESSORA: case NUL: return (DD_TTY); return (DD_IMPRESSORA); return (DD_NUL); case MBX**: if ((eldd=buscar_cua(q_dd_mbx, nom)) == NIL) eldd = copiar(mbxplantilla,nom); encuar(q_dd_mbx, eldd); return (eldd); default: if (nom_incorrecte(nom)) return(nil); eldd = copiar(fitxplantilla,nom); return (eldd); Rutines Independents 22

2. Llegir Llegir independent del dispositiu Comprovacions Canal és correcte Número de canal Canal està ja assignat a un dispositiu o fitxer Permís d'operació (mode L o L/E): A l'obrir el dispositiu incloem el tipus d'operació que demanem No hem arribat al nombre màxim d'e/s pendents Per ser una crida asíncrona: Cridar a la rutina dependent, la qual retornarà el id_io corresponent a aquesta E/S Encuar id_io a la cua d'io pendents de l'entrada de la taula de canals corresponent: Cal aquesta informació per què abans de tancar un canal caldrà esperar per totes les E/S pendents del canal Incrementar el nombre d'e/s pendents Retornar id_io: Permetrà esperar o cancel.lar aquesta operació Per escriure seria similar Rutines Independents 23

int llegir (canal, pbuffer, lon) int canal; char * pbuffer; long * lon; struct dd * eldd; struct pcbsys * aux; int id_io; struct io * p_io; aux = obtenir_pcb(quisoc()); if (canal 0..4) return(-2); if ((aux->t_c[canal].pdd == NIL) return (-1); if (aux->t_c[canal].mode > 1)) return (-4); /* Modes: L = 0, L/E = 1, E = 2 */ if (aux->n_es == MAX_ES) return(-3); /* No hi han errors */ eldd = aux->t_c[canal].pdd; id_io = (* eldd -> llegir) (eldd, pbuffer, lon); if (id_io 0) p_io = assignar_mem(quisoc(), sizeof(struct io)); if (p_io == (char *)0) return(-5); p_io->id_io = id_io; encuar (&(aux->t_c[canal].q_io), p_io); aux->n_es++; return(id_io); Rutines Independents 24

3. Posicionar Independent del dispositiu Comprovar que el canal és correcte Número de canal Canal està ja assignat Cridar a la rutina dependent del dispositiu Retornar resultat Observacions Només permés en fitxers Síncrona Esperar per totes les E/S pendents d'aquest canal (ho farà la rutina dependent) Rutines Independents 25

int posicionar (canal, posicio_ptr) int canal; long * posicio_ptr; struct dd * eldd; struct pcbsys * aux; int error; aux = obtenir_pcb(quisoc()); if (canal 0..4) return (-2); if (aux->t_c[canal].pdd == NIL) return(-1); /* No hi han errors */ eldd = aux->t_c[canal].pdd; error = (* eldd -> posicionar) (eldd, posicio_ptr); return(error); Rutines Independents 26

4. Esperar Comprovar que id_io Buscar l'item corresponent a id_io a les cues q_io de tots els canals: si el trobem coneixem el canal i el DD associat Extreure'l Síncrona: wait (id_io) Obtenir_resultat: Buscar l'item corresponent a id_io a la cua q_io_fin del DD Extreure'l Decrementar el nombre d'e/s pendents del procés (al pcbsys) Retornar el resultat Observacions Alliberar estructura de l'item extret de la cua q_io estructura de l'item extret de la cua q_io_fin id_io (semàfor associat de finalització) Només a nivell sistema Només necessitem part independent Rutines Independents 27

int esperar (id_io) int id_io; ONION: Entrada / Sortida /* Bloqueja fins que acabi l'e/s anb identificador id_io * Retorna: * >= 0 -> correcte * -1 -> id_io inexistent * -2 -> EOF (El gestor s'encarrega de deixar-ho al * resultat */ struct dd * eldd; struct pcbsys * aux; int canal, res; aux = obtenir_pcb(quisoc()); canal = obtenir_canal (aux, id_io); if (canal < 0) return (-1); /* id_io inexistent */ wait (id_io); /* Cada E/S pendent té associat un semàfor amb número = id_io que està inicialitzat a 0 */ eldd = aux->t_c[canal].pdd; res = obtenir_resultat (eldd->q_io_fin, id_io); aux->n_es--; return(res); obtenir_canal (aux, id_io) Busca a la t_c del proces l'id_io. Si el troba: - El treu de la cua i allibera l'estructura - retorna el canal on es trobaba encuat si no: - Retorna -1 obtenir_resultat(cua, id_io) Se li passa la cua d'io_finalitzades del DD. Extreu l'element de la cua amb identificador == id_io Allibera l'estructura de l'element extret Allibera el semàfor associat de finalització id_io Retorna el camp resultat Rutines Independents 28

5. Cancelar Comprovar que id_io ONION: Entrada / Sortida Buscar l'item corresponent a id_io a les cues q_io de tots els canals: si el trobem, coneixem el canal i el DD associat Buscar l'item corresponent a id_io a la cua q_iorb del DD. Si s'hi troba, vol dir que encara no ha estat atesa la petició. Extreure'l Buscar l'item corresponent a id_io a la cua q_io_fin del DD. S'hi trobara sii ja ha estat atesa la petició. Extreure'l Decrementar el nombre d'e/s pendents del procés (al pcbsys) Retornar el resultat Observacions Només a nivell sistema Només necessitem part independent Si no està ni a la cua d IORBs ni a la cua d io_fin l'està servint el gestor Alliberar estructura de l'item extret de la cua q_io estructura de l'item extret de la cua q_iorb o q_io_fin id_io (semàfor associat de finalització) Rutines Independents 29

int cancel_lar (id_io) int id_io; /* Cancel.la l'operacio d'e/s amb identificador id_io * Retorna: * 0 -> correcte * -1 -> id_io inexistent * -2 -> id_io finalitzada */ struct dd * eldd; struct pcbsys * aux; int canal; aux = obtenir_pcb(quisoc()); canal = quin_canal (aux, id_io); if (canal < 0) return(-1); /* id_io inexistent */ eldd = aux->t_c[canal].pdd; if ((buscar_id_io (eldd->q_iorb, id_io) == 0) aux->n_es--; buscar_id_io (&(aux->t_c[canal].q_io), id_io); alliberar(id_io); return(0); if ((buscar_id_io (eldd->q_io_fin, id_io) == 0) aux->n_es--; buscar_id_io (&(aux->t_c[canal].q_io), id_io); alliberar(id_io); return(-2); /* Si no: La petició està sent atesa: - Valor de retorn com ja finalitzada - Deixar id_io a la cua de pendents per a que el tancar lliberi el resultat */ return(-2); quin_canal (aux, id_io) Busca a la t_c del procés l'id_io. Si el troba: - retorna el canal on es troba encuat (No desencua) si no: - Retorna -1 buscar_id_io (cua, id_io) Busca l'id_io a la cua especificada. Si el troba: - El desencua i allibera l'estructura - Retorna 0 si no: - Retorna -1 Rutines Independents 30

6. Tancar Comprovar que el canal és correcte Número de canal Canal està ja assignat Recorre la q_io del canal que es tanca i per a cada petició pendent extreu l item corresponent a id_io i fa l'equivalent a esperar l'operació: wait (id_io) Extreure l'item corresponent a id_io a la cua q_io_fin Decrementar el nombre d'e/s pendents del procés (al pcbsys) Observacions És síncrona: Espera a que finalitzin les E/S pendents d aquest canal Es perden els resultats: Les operacions es realitzen però no es comprova si han anat bé o no Alliberar, per a totes les E/S pendents: estructura de l'item extret de la cua q_io estructura de l'item extret de la cua q_io_fin id_io (semàfor associat de finalització) Hi ha rutina dependent: Actuarà segons les característiques del dispositiu La rutina dependent decrementarà el nombre d'herències del DD i alliberarà el DD si cal Rutines Independents 31

/* Tanca el canal * Espera a que finalitzin E/S pendents d'aquest canal * Es perden els resultats * Rutina Dependent: Actua segons característiques del * Dispositiu */ int tancar (canal) int canal; struct dd * eldd; struct pcbsys * aux; int error; item * elem; aux = obtenir_pcb(quisoc()); if (canal 0..4) return(-2) if ((aux->t_c[canal].pdd == NIL) return(-1); /*No hi han errors */ eldd = aux->t_c[canal].pdd; while (!buida(&(aux->t_c[canal].q_io))) elem = primer(&(aux->t_c[canal].q_io)); wait (elem->id_io); buscar_id_io (eldd->q_io_fin, elem->id_io); aux->n_es--; error = (*eldd->tancar)(eldd); aux->t_c[canal].pdd = NIL; return(error); buscar_id_io (cua, id_io) Busca l'id_io a la cua especificada. Si el troba: - El desencua i allibera l'estructura - Retorna 0 si no: - Retorna -1 Rutines Independents 32