Anda di halaman 1dari 16

Departamento de Arquitectura y Tecnologa de Computadores

Konputagailuen Arkitektura eta Teknologia Saila


Laboratorio de Sistemas Operativos
Ncleo de un Sistema
Operativo
Alberto Lafuente
Febrero 2!
"#$%&'" ATC Laboratorio de Sistemas (perati)os 2
Contenido
* +ntroducci,n
2 "na estructura en capas para el sistema operati)o
- &structura de un n.cleo de sistema operati)o
-/* 0utinas dependientes del 1ard2are
-/2 0utinas de mane3o de colas y au4iliares
-/- 0utinas para la gesti,n de procesos
-/5 Definiciones y estructuras de datos
-/6 #rimiti)as del n.cleo
5 Funcionamiento del n.cleo
5/* 7esti,n de procesos
5/2 #rimiti)as bloqueantes
5/- 0utinas de tratamiento de interrupciones
5/5 #rimiti)as no bloqueantes
5/6 #rimiti)as de sincroni8aci,n
6 #uesta en marc1a
A/* #rueba del n.cleo
"#$%&'" ATC Laboratorio de Sistemas (perati)os -
1 Introduccin
"n sistema operati)o se define desde dos puntos de )ista/ &n primer lugar9 el sistema
operati)o constituye la interfa8 entre el usuario de un computador y los recursos de :ste
;1ard2are y soft2are<9 proporcionando una )isi,n funcional del sistema en forma de llamadas
al sistema/ &n segundo lugar9 el sistema operati)o es el encargado de gestionar eficientemente
la utili8aci,n de los recursos por los usuarios/
Los ser)icios que un sistema operati)o gestiona suelen di)idirse en cuatro= procesador9
memoria9 dispositi)os y fic1eros/ La comple3idad in1erente a la gesti,n de alguno de estos
ser)icios 1ace necesario estructurar el sistema operati)o en )arias capas o ni)eles9 cada una
ofreciendo un con3unto de primiti)as a la inmediatamente superior/ #or e3emplo9 el sistema de
fic1eros reside sobre el dispositi)o disco9 por lo que la gesti,n de fic1eros se especificar> en
base a las primiti)as que proporcione la gesti,n del disco9 que ser> la que programe el
1ard2are del dispositi)o/
&l ni)el b>sico de un sistema operati)o9 que oculta las caractersticas 1ard2are de la m>quina9
se conoce como ncleo o kernel/ &n este documento se proporciona una descripci,n completa
de la estructura del n.cleo de un sistema operati)o multiprogramado9 que incluye gesti,n de
procesos basada en prioridades9 gesti,n de dispositi)os ;disco fle4ible9 teclado9 pantalla9
impresora9 lnea serie y relo3<9 y primiti)as de sincroni8aci,n ;sem>foros</ Se 1a escogido
como plataforma soporte la arquitectura #C basada en la familia i?4?!/ @a que la mayor
parte de las caractersticas dependientes de la arquitectura est>n encapsuladas en un con3unto
de rutinas dependientes del 1ard2are9 esta elecci,n no es especialmente determinante para el
diseAo del sistema operati)o/ La difusi,n de esta arquitectura es la .nica ra8,n para su
elecci,n/ #or otra parte9 las rutinas dependientes del 1ard2are proporcionan una interfa8 C
para su uso en el n.cleo9 lo que facilita la portabilidad a otras plataformas/
2 Una estructura en capas para el sistema operativo
&l esquema general propuesto es una estructura en tres ni)eles o capas9 de aba3o arriba=
* Nivel Ncleo/ 7esti,n b>sica de procesos= planificaci,n a corto pla8o9 cambio de
conte4to/ #rimiti)as de sincroni8aci,n/ 7esti,n de &%S y tiempo9 rutinas de atenci,n/
2 Nivel del Sistema Bsico de Ficeros! BFS/ Sistema b>sico de fic1eros= ubicaci,n en
disco9 directorios/ 0utinas de &%S9 ser)idores de dispositi)os/
- Nivel Sistema/ +mplementaci,n de las llamadas al sistemaB independencia del
dispositi)o ;tablas de canales<B gesti,n de buffers para acceso a fic1erosB carga9
e3ecuci,n y finali8aci,n de procesos/
La Figura * muestra la estructura en ni)eles de un sistema operati)o/ #ara un ni)el n s,lo son
)isibles las primiti)as del ni)el nC*/ &n general un ni)el utili8ar> adem>s una serie de rutinas
au4iliares internas que no son )isibles desde el ni)el superior/
" #structura de un ncleo de sistema operativo
Como e3emplo de n.cleo de sistema operati)o9 en esta secci,n describiremos las rutinas
internas9 estructuras de datos y primiti)as de un n.cleo multiprogramado para la arquitectura
"#$%&'" ATC Laboratorio de Sistemas (perati)os 5
i?4?!/ &ste n.cleo es el que usaremos en el laboratorio/ &l funcionamiento del n.cleo de
presentar> en la siguiente secci,n/
"S"A0+(
0utinas
de
Librera
D+$&L
S+ST&EA
D+$&L
FFS
D+$&L
D"CL&(
0utinas
internas
Di)el Sistema
0utinas
internas
Di)el FFS
0utinas
internas
Di)el D.cleo
#rimiti)as
Di)el Sistema
#rimiti)as
Di)el FFS
#rimiti)as
Di)el D.cleo
0utinas
dependientes
del 'ard2are
'A0DGA0&
Fi$ura 1% Niveles en un sistema operativo
"%1 &utinas dependientes del ard'are
Son las rutinas del n.cleo de m>s ba3o ni)el/ Distinguiremos dos grupos/ Las m>s elementales
est>n escritas en ensamblador y tratan con direcciones especficas de &%S o de memoria ;para
los dispositi)os memoryCmapped<9 o bien in1iben%acti)an interrupciones o manipulan
directamente la pila del programa para proporcionar los cambios de conte4to/ Sus prototipos
se describen en la Figura 2/ &l segundo grupo de rutinas internas del n.cleo9 que programan
los dispositi)os9 est>n codificadas en C/ &stas se describen en la Figura -/
Las rutinas dependientes del 1ard2are se llamar>n .nicamente desde el n.cleo/ &ncapsulan
las caractersticas de la arquitectura/
RUTINAS BASICAS DEL NUCLEO
int flag inhibir ();
void desinhibir (int flag);
int in_port (int puerto);
void out_port (int puerto, int dato);
void strobe (int puerto, char mascara);
void eoi ();
void vector_int (int num_int , void (*rutina )());
int mascara_anterior enmascarar (int mascara);
void salvar_flags ();
void salvar_reg ();
void restaurar ();
void reset ();
void timer (int valor);
Fi$ura 2% &utinas dependientes del ard'are en ensamblador
RELACIONADAS CON EL TERMINAL
char leer_teclado ();
void escribir_pantalla (int fila, int columna, char car, char atrib);
void posicionar_cursor (int fila , int columna);
void scroll (int fila_ini , int fila_fin);
int estado escribir_impresora (char car);
void beep (lon tono_sonido);
RELACIONADAS CON LA LINEA SERIE
void ini_ls ();
int estado escribir_ls (char car);
char leer_ls ();
int estado consulta_ls_iir ();
int estado consulta_ls_lsr ();
int estado consulta_ls_msr ();
RELACIONADAS CON EL DISCO
void motor_on (int drive);
void motor_off ();
void posicionar_pista (int pista, int drive);
void programar_disco (int op, int cara, int pista, int sector, int drive);
int estado programar_dma (int operacion, char *buffer );
void comando_disco (int comando);
int estado comprobar_posicionado ();
int estado comprobar_trasferencia ();
int estado leer_status ();
void recalibrar (int drive);
Fi$ura "% &utinas dependientes del ard'are en C
"%2 &utinas de mane(o de colas ) au*iliares
La mayora se utili8an en el n.cleo para el mane3o de los #CFs/ Fundamentalmente son
rutinas de acceso a colas9 cuyos prototipos se describen en la Figura 5/ (tras rutinas
au4iliares9 de apoyo a la programaci,n9 se ilustran en la Figura 6/ &n general9 las rutinas
au4iliares se utili8ar>n tambi:n en los ni)eles superiores/ #or esta ra8,n se definen las
estructuras item y cola de forma gen:rica9 sin incluir informaci,n especfica de los elementos
que enla8an ;en general procesos</
RUTINAS !ARA MANE"O DE COLAS
#tr$ct item %
#tr$ct it&' *#i$i&nt&;
#tr$ct it&' *ant&rior;
int (rioridad;
);
#tr$ct cola %
#tr$ct it&' *(ri'&ro;
#tr$ct it&' *$lti'o;
);
void inicializar_cola (#tr$ct cola *cola);
int vacia (#tr$ct cola *cola);
#tr$ct it&' *primero (#tr$ct cola *cola);
** Eli'ina + d&v$&lv& &l (ri'&r &l&'&nto d& cola **
#tr$ct it&' *extraer (#tr$ct cola *cola, int prio);
** Eli'ina + d&v$&lv& &l (ri'&ro d& lo# d& (rioridad prio **
#tr$ct it&' *extirpar (#tr$ct cola *cola, #tr$ct it&' *elem);
** Eli'ina + d&v$&lv& &l &l&'&nto a($ntado (or elem **
void encolar (#tr$ct cola *cola, #tr$ct it&' *elem);
** Encola elem al ,inal d& cola **
void insertar(#tr$ct cola *cola, #tr$ct it&' *elem, int prio);
** Encola &l&' al ,inal d& lo# d& (rioridad prio **
void meter(#tr$ct cola *cola, #tr$ct it&' *elem, int estado);
** In#&rta elem act$ali-ando estado &n &l !CB **
Fi$ura +% &utinas au*iliares para mane(o de colas
RUTINAS AU.ILIARES DI/ERSAS
void copiar (char *str1 , char *str2 , int lon);
int comparar (char *str1, char *str2 , int lon);
int buscar (char *str, char car, int lon);
void rellenar (char *str, char car, int lon);
void mayuscula (char *str, int lon);
void minuscula (char *str, int lon);
int long_a_ascii (lon num, char *str, int base, int
lon);
int int_a_ascii (int num, char *str, int base, int
lon);
lon ascii_a_long (char *str, int lon, int base);
int ascii_a_ int (char *str, int lon, int base);
Fi$ura ,% Otras rutinas au*iliares
"%" &utinas para la $estin de procesos
La gesti,n de procesos est> soportada por rutinas que mane3an colas y proporcionan cambios
de estado en los procesos= blo-uear;<9 sceduler;<9 dispatcer/ (tras rutinas iniciali8an
estructuras de datos ;#CF y pila< para los procesos en su creaci,n/ &stas rutinas se muestran
en la Figura ! y se estudiar>n m>s adelante/
RUTINAS !ARA LA 0ESTION DE !ROCESOS
void bloquear (#tr$ct cola *cola, int estado);
#tr$ct it&' *scheduler();
void dispatcher (#tr$ct it&' este_item)
void crear_pcb(void (*codigo)(), int *pila, int prio, int q, int
id_proc));
void crear ();
Fi$ura .% &utinas para la $estin de procesos
"%+ /e0iniciones ) estructuras de datos
Se refieren a la estructura del #CF y a las colas que modelan el funcionamiento del n.cleo/
Aparecen en la Figura H/ &4iste adem>s una serie de definiciones de smbolos para los estados
de los procesos9 dispositi)os9 etc9 que no se muestran en la figura/
1d&,in& NUM2!CBS 3 ** n$'&ro 'a4i'o d& !CB **
1d&,in& TAM2!ILA 3 ** ta'a5o d& la (ila d& $n (roc&#o **
#tr$ct (c6 %
#tr$ct it&' &l&'&nto2cola;
int id2(roc&#o;
int a4;
int d4;
int ,ar *(ila;
int 7$ant$';
lon c($2ti'&;
int #tat$#;
);
#tr$ct (c6 (roc8NUM2!CBS9;
int (ila#8NUM2!CBS98TAM2!ILA9;
#tr$ct in,o2(roc %
int 7$ant$';
int (rioridad;
lon t2c($;
int #tat$#;
);
#tr$ct cola li6r&#,
r&ad+,
r$n,
t&clado,
di#co,
r&tardo,
l&ct$ra2l#,
&#crit$ra2l#;
int ntr : ;; ** n$'&ro d& tic<# d& r&lo= **
1d&,in& NSEM 3 ** #&'>,oro# **
#tr$ct #&'a,oro %
#tr$ct cola #;
int cont;
);
#tr$ct #&'a,oro #&'8NSEM9;
Fi$ura 1% /e0iniciones 0undamentales del ncleo
(tro con3unto de definiciones ;que tampoco se muestran aqu< especifican la configuraci,n de
la m>quina concreta ;direcciones de pantalla9 mapa de teclado9 etc</
"%, 2rimitivas del ncleo
Las primiti)as del n.cleo constituyen el con3unto de rutinas )isibles desde el ni)el superior/
Se definen en C y utili8an las rutinas dependientes del 1ard2are y a las rutinas au4iliares
introducidas anteriormente/ Las diferenciaremos denomin>ndolas con el sufi3o 3nuc/ Se
pueden di)idir en los siguientes grupos=
1 Control de dispositivos
;a< disco
)oid motor3on3nuc ;int dri)e<
)oid motor3o003nuc ;<
int posicionar3pista3nuc ;int nIpista9 int dri)e<
int leer3sector3nuc ;int nIcara9 int nIsector9 c1ar JpIbuff<
int escribir3sector3nuc ;int nIcara9 int nIsector9 c1ar JpIbuff<
int recalibrar3nuc ;int dri)e<
;b< terminal
c1ar leer3teclado3nuc ;<
int escribir3pantalla3nuc ;int lin9 int col9 c1ar car9 c1ar atributo<
int scroll3nuc ;int linIsup9 int linIinf<
;c< lnea serie
int leer3l3s3nuc ;<
)oid escribir3l3s3nuc ;c1ar car<
)oid init3l3s3nuc ;<
;d< impresora
int escribir3impresora3nuc ;c1ar car<
2 Control de procesos
int crear3pcb3nuc ;)oid ;Jcod<;<9 int Jpila9 int prio9 int quantum9 int pid<
int destruir3pcb3nuc ;int idIproc<
int -uisoc3nuc ;<
int in0o3proc3nuc ;int idIproceso9 struct infoIproc JpIinfo<
int modi03proc3nuc ;int idIproceso9 struct infoIproc JpIinfo<
3 Espera por tiempo
)oid retardo3nuc ;int nItics<
4 Sincronizacin entre procesos
int 'ait3nuc ;int nIsem<
int si$nal3nuc ;int nIsem<
int init3sem3nuc ;int nIsem9 int )alorIinicial<
5 Reset
)oid reset3nuc ;<
+ Funcionamiento del ncleo
+%1 4estin de procesos
+ncluiremos aqu planificaci,n9 creaci,n y destrucci,n de procesos/ "n proceso se representa
en un #CF ;struct pcb< que se identifica por un entero ;ndice en la tabla de #CFs</
"%+%1 2lani0icacin de procesos
&n la )ersi,n del n.cleo propuesta9 se proporciona planificaci,n de procesos de tiempo
compartido y prioridades9 con e4pulsi,n por desbloqueo de un proceso/ &sto implica que la
gesti,n de procesos in)olucra a las rutinas de atenci,n ;muy en particular a la de relo3 para
control de fin de quantum<9 adem>s de las que 1acen que un proceso pase a estado bloqueado
;m>s adelante nos referiremos a estas rutinas como bloqueantes</
Los procesos preparados para e3ecuci,n se encolan en la cola read) de acuerdo a su prioridad9
por lo que la rutina del sc1eduler se limita a coger el primer elemento de la cola9 que pasa al
dispatc1er para que lo cargue en e3ecuci,n ;cola run9 que tendr> un .nico elemento</ #or
ortogonalidad9 se asume la e4istencia de un proceso nulo9 que siempre estar> preparado para
e3ecuci,n o e3ecut>ndose/ La Figura ? muestra el c,digo de las rutinas sceduler;< y el
dispatcer;</ La rutina blo-uear;< es la encargada de sacar a un proceso de la cola9 lo que
implica como efecto colateral la actuali8aci,n del tiempo de C#"/ Su c,digo se muestra en la
Figura K/
#tr$ct it&' *scheduler()
%
r&t$rn ((ri'&ro(?r&ad+));
)
void dispatcher (&#t&2it&')
#tr$ct it&' *&#t&2it&';
%
'&t&r (?r$n, &#t&2it&', RUN);
)
Fi$ura 5% &utinas sceduler ) dispatcer
void bloquear (c, #tat$#)
#tr$ct cola *c;
int #tat$#;
%
((#tr$ct (c6 *)r$n@(ri'&ro)ABc($2ti'& C: ntr;
'&t&r(c, (ri'&ro(?r$n), #tat$#);
ntr:;;
)
Fi$ura 6% &utina blo-uear
"na )e8 actuali8adas la colas de procesos9 la multiple4aci,n se completa reestableciendo el
estado del procesador para que e3ecute el proceso planificado/ F>sicamente esto implica 1acer
que el S# apunte a la pila del nue)o proceso/ La rutina restaurar;<9 codificada en
ensamblador9 es la que se encarga de ello9 manipulando el bloque de acti)aci,n anterior/
#re)iamente9 la rutina salvar3re$;< 1abr> sal)ado el estado del proceso que estaba en
e3ecuci,n/
"#$%&'" ATC Laboratorio de Sistemas (perati)os *
*
La gesti,n del tiempo compartido la reali8a la rutina de atenci,n al relo39 multiple*ar;<9 como
se ilustra en la Figura */ &sta rutina incluye otras funciones ;apagado autom>tico del motor
de la unidad de disco y control del periodo transitorio tras el encendido9 retardo de procesos
por tiempo<9 que no aparecen en la figura/
void multiplexar ()
%
#alvar2r&();
** DIN DE EUANTUMF **
i, (CCntr::((#tr$ct (c6*)r$n@(ri'&ro)AB7$ant$') ca'6iar : TRUE;
3
i, (ca'6iar) %
6lo7$&ar (?r&ad+, READG);
di#(atch&r (#ch&d$l&r());
) &oi();
r&#ta$rar();
)
Fi$ura 17% &utina multiple*ar% Control de -uantum%
"%+%2 Creacin! control ) destruccin de procesos
La rutina crear3pcb3nuc;< asigna un #CF para un nue)o proceso9 pro)ocando la e4pulsi,n
del que est> en e3ecuci,n/ &4isten primiti)as para e4traer informaci,n de un proceso y su
identificador ;in0o3proc3nuc;<9 -uisoc3nuc;<< y para modificar su quantum y prioridad
;modi03proc3nuc;<</ Finalmente9 en la Figura ** se incluye el c,digo de
destruir3pcb3nuc;</ D,tese las situaciones en que el #CF no se libera ;el proceso tiene una
petici,n pendiente<9 sino que el proceso queda en estado finali8ado ;D&AD</ La rutina de
atenci,n correspondiente liberar> el #CF del proceso D&AD con la petici,n pendiente/
+%2 2rimitivas blo-ueantes
Llamaremos rutinas bloqueantes del n.cleo a las que solicitan un ser)icio del 1ard2are ;un
dispositi)o9 el relo3L< y de3an al proceso en estado bloqueado9 pro)ocando la planificaci,n
de un nue)o proceso/ Son )arias las primiti)as que traba3an de esta forma9 en general aqu:llas
cuyo ser)icio se atender> mediante interrupciones9 como motor3on3nuc;<9 retardo3nuc;< M
por tiempoMB leer3teclado3nuc;< Mpor tecladoMB escribir3impresora3nuc;< Mpor
impresoraM leer3l3s3nuc9 escribir3l3s3nuc;< Mpor lnea serieMB posicionar3pista3nuc;<9
leer3sector3nuc;<9 escribir3sector3nuc;<9 y recalibrar3nuc;< Mpor discoM/ Como
e3emplo9 en la Figura *2 se muestra el c,digo de leer3teclado3nuc;</ Todas las rutinas
bloqueantes siguen el protocolo de sal)ar el conte4to del proceso ;salvar30la$s y
salvar3re$<9 bloquear al proceso y planificar otro proceso cargando su conte4to/ D,tese
tambi:n que se e4ige que la cola de bloqueado est: )aca= se sugiere la implementaci,n de un
esquema clienteCser)idor en el ni)el superior/
"#$%&'" ATC Laboratorio de Sistemas (perati)os **
**
int destruir_pcb_nuc (id2(roc&#o)
int id2(roc&#o;
%
inhi6ir();
#alvar2,la#();
#alvar2r&();
id2(roc&#o : id2(roc&#o H NUM2!CBS;
#Iitch ((roc8id2(roc&#o9@#tat$#) %
ca#& LIBREF
((#tr$ct (c6 *)r$n@(ri'&ro)ABa4 : AJ;
6r&a<;
ca#& READGF
(roc8id2(roc&#o9@#tat$# : LIBRE;
&ncolar (?li6r&#, &4tir(ar(?r&ad+,
?((roc8id2(roc&#o9@&l&'&nto2cola)));
((#tr$ct (c6 *)r$n@(ri'&ro)ABa4 : ;;
6r&a<;
ca#& RUNF
(roc8id2(roc&#o9@#tat$# : LIBRE;
&ncolar (?li6r&#,(ri'&ro (?r$n));
di#(atch&r (#ch&d$l&r());
6r&a<;
ca#& BLOE2TEC F
ca#& BLOE2DISCF
ca#& BLOE2RETF
(roc8id2(roc&#o9@#tat$# : DEAD;
((#tr$ct (c6 *)r$n@(ri'&ro)ABa4 : ;;
6r&a<;
d&,a$ltF
(roc8id2(roc&#o9@#tat$# : LIBRE;
&ncolar(?li6r&#, &4tir(ar (?#&'8(roc8id2(roc&#o9@#tat$#9@#,
?((roc8id2(roc&#o9@&l&'&nto2cola)));
((#tr$ct (c6 *)r$n@(ri'&ro)ABa4 : ;;
6r&a<;
)
r&#ta$rar();
)
Fi$ura 11% &utina destruir3pcb3nuc
char leer_teclado_nuc ()
%
inhi6ir();
#alvar2,la#();
#alvar2r&();
i, (vacia (?t&clado)) %
6lo7$&ar(?t&clado, BLOE2TEC);
di#(atch&r (#ch&d$l&r());
r&#ta$rar();
)
&l#& cra#h();
)
Fi$ura 12% #(emplo de rutina blo-ueante
+%" &utinas de tratamiento de interrupciones
Aunque la rutina multiple4ar puede ser)ir como e3emplo de rutina de tratamiento de
interrupciones9 resultar> clarificador en este momento introducir el c,digo de la rutina de
tratamiento de las interrupciones de teclado ;Figura *-< para completar el e3emplo de
tratamiento de peticiones del apartado anterior/ 'ay que resaltar alguna cuesti,n importante9
com.n al resto de rutinas de este tipo=
"#$%&'" ATC Laboratorio de Sistemas (perati)os *2
*2
N Tratamiento de peticiones pendientes de pocesos finali8ados/ La rutina de atenci,n
detecta que el proceso est> en estado D&AD ;):ase destruir3pcb3nuc;<< y libera su
#CF/
N $alores de retorno/ &l car>cter ledo ;o un c,digo de error en otras rutinas< debe ser
de)uelto a tra):s del #CF del proceso ;campo a*<9 que ser> lo que entregue como
)alor de retorno la primiti)a que produ3o el bloqueo ;leerIteclado en nuestro e3emplo<
al restaurarse el conte4to del proceso ;rutina restaurar;<< cuando :ste sea planificado
nue)amente/
void int_teclado()
%
#alvar2r&();
i, ((c:l&&r2t&clado()) K: AJ)
i, (Kvacia(?t&clado))
i, (((#tr$ct (c6 *)t&clado@(ri'&ro)AB#tat$# :: DEAD) %
((#tr$ct (c6 *)t&clado@(ri'&ro)AB#tat$#: LIBRE;
&ncolar(?li6r&#, (ri'&ro(?t&clado));
)
&l#& %
((#tr$ct (c6 *)t&clado@(ri'&ro)ABa4: c;
'&t&r(?r&ad+, (ri'&ro(?t&clado), READG);
6lo7$&ar(?r&ad+, READG);
di#(atch&r (#ch&d$l&r());
)
&l#& 6&&(();
&oi();
r&#ta$rar();
)
Fi$ura 1"% #(emplo de rutina de tratamiento de interrupciones
+%+ 2rimitivas no blo-ueantes
Llamaremos rutinas no bloqueantes a las que no de3an al proceso bloqueado/ &n general ser>n
de este tipo aquellas primiti)as que no se sir)en mediante interrupciones9 como es el caso de
esribir3pantalla3nuc;<9 que se muestra en la Figura *5/ (tras primiti)as de este tipo son=
scroll3nuc;<9 motor3o003nuc;<9 -uisoc3nuc;< e in0o3proc3nuc;</ &stas primiti)as se
resuel)en como simples llamadas a funciones y no producen cambios de conte4to/
int escribir_pantalla_nuc (lin&a, col$'na, caract&r,
atri6$to)
int lin&a, col$'na;
char caract&r, atri6$to;
%
i, (;L:lin&a ?? lin&aL:MN ?? ;L:col$'na ?? col$'naL:OP ??
(atri6$to::UNDERSCORE QQ atri6$to::IN/ERSE QQ
atri6$to::BLINR QQ atri6$to::NORMAL)) %
&#cri6ir2(antalla (lin&a, col$'na, caract&r, atri6$to);
r&t$rn (;);
)
&l#& r&t$rn (AJ);
)
Fi$ura 1+% #(emplo de rutina no blo-ueante
"#$%&'" ATC Laboratorio de Sistemas (perati)os *-
*-
+%, Sincroni8acin entre procesos
&l n.cleo propuesto ofrece sem>foros como mecanismo b>sico de sincroni8aci,n entre
procesos/ "n sem>foro se identifica por un entero/ Se introduce una nue)a condici,n de
bloqueo para los procesos9 con tantas colas como sem>foros disponibles9 DS&E/ &l bloqueo
por sem>foro presenta la particularidad de que debe seguir estrictamente una disciplina FCFS9
por lo que el mecanismo de bloqueo est>ndar introducido para las rutinas bloqueantes no se
puede aplicar en la primiti)a de espera por sem>foro9 'ait3nuc;<9 descrita en la Figura *6/ La
primiti)a si$nal3nuc;< se 1a implementado como e4pulsora/
int wait_nuc (n2#&'a,oro)
int n2#&'a,oro;
%
inhi6ir();
#alvar2,la#();
#alvar2r&();
i, (;L:n2#&'a,oro ?? n2#&'a,oroLNSEM) %
((#tr$ct (c6 *)r$n@(ri'&ro)ABa4 : ;;
i, (#&'8n2#&'a,oro9@cont B ;) #&'8n2#&'a,oro9@contAA;
&l#& %
((#tr$ct (c6 *)r$n@(ri'&ro)AB#tat$# : n2#&'a,oro;
((#tr$ct (c6 *)r$n@(ri'&ro)ABc($2ti'& C: ntr;
&ncolar (?#&'8n2#&'a,oro9@#, (ri'&ro(?r$n));
ntr:;;
di#(atch&r (#ch&d$l&r());
)
)
&l#& ((#tr$ct (c6 *)r$n@(ri'&ro)ABa4 : AJ;
r&#ta$rar();
)
Fi$ura 1,% &utina 'ait3nuc
, 2uesta en marca
Sobre el n.cleo propuesto se puede construir un sistema operati)o completo/ Como no
disponemos de un sistema operati)o completo con todas sus 1erramientas para soportar
aplicaciones9 probaremos el funcionamiento del n.cleo con un con3unto de programas de
prueba que utilicen sus primiti)as y monitoricen su funcionamiento/ &n cualquier caso9 se
requiere un programa que instale el n.cleo y lance los procesos del sistema/ &ste programa
incluir>=
N &l c,digo completo del n.cleo9 que incluye primiti)as9 rutinas internas y libreras de
ba3o ni)el/
N &l c,digo de la prueba del n.cleo9 que es un con3unto de funciones en c,digo C que se
e3ecutar>n asncronamente9 como t1reads o procesos a ser gestionados por el n.cleo/
N &l procedimiento principal ;main< de puesta en marc1a/
&l procedimiento principal reali8ar> las siguientes acciones=
;*< +nstalaci,n de las rutinas de tratamiento de interrupciones9 mediante vector3int;</
;2< +niciali8aci,n de las colas del n.cleo ;run9 ready9 teclado9 sem>foros9 L</
"#$%&'" ATC Laboratorio de Sistemas (perati)os *5
*5
;-< +niciali8aci,n de los #CFs como libres9 encol>ndolos en la cola de libres/
;5< Creaci,n de los procesos del sistema/ Al menos son necesarios dos= el proceso nulo9 y
un proceso de iniciali8aci,n9 que lan8ar> el resto ya sobre el n.cleo/ &stos procesos se
crean rellenando directamente los campos de los #CFs y utili8ando la rutina
crear3pcb;< para asignar la pila correspondiente y apuntar al c,digo del proceso/
;6< #lanificar ;dispatcer y sceduler< y cargar el estado del proceso seleccionado
;mediante restaurar;<</ &ste proceso ser> el de iniciali8aci,n9 ya que el nulo se 1abr>
creado con la prioridad mnima/
@a que no disponemos de un dispositi)o de arranque propio9 la puesta en marc1a del n.cleo
requiere de un sistema operati)o anfitri,n9 ESCD(S/ &l programa de prueba permite )ol)er a
ESCD(S ;al menos si no se pro)ocan situaciones de fallo que requieran reiniciar el sistema</
Daturalmente9 el n.cleo puede ser lan8ado desde cualquier sistema operati)o Gindo2s K6 o
K?9 lo que facilita el desarrollo y mane3o del soft2are9 pero no desde un sistema Gindo2s
basado en DT ;2 o O#</ &n este .ltimo caso9 a.n se puede recurrir a un emulador
;$E2are o $irtual #C< que soporte ESCD(S/
"#$%&'" ATC Laboratorio de Sistemas (perati)os *6
*6
91 2rueba del ncleo
91%1 Compilacin ) monta(e
Los fic1eros fuente del n.cleo que se proporcionan son=
rutinas% Definiciones fundamentales del n.cleoB declaraciones de rutinas au4iliares y
de mane3o de colas9 y declaraciones de rutinas ensamblador y C
dependientes del 1ard2are/
ma-uina% Definiciones ;condicionales< dependientes de la pantalla y el teclado/
nucleo% #rimiti)as del n.cleo/
#ara probar esta )ersi,n del n.cleo9 se proporciona tambi:n un programa de prueba9
pruebas% ;que 1ace las )eces de ni)el superior</ pruebas/1 se incluye 3unto a nucleo/1 en un
fic1ero fuente 0ase7%c9 que contiene el c,digo para poner en marc1a el sistema/ "n resumen
de la organi8aci,n de los m,dulos fuente puede )erse en la Figura A*/*/
Se proporciona un comando para compilar el c,digo=
ccc nombre_prorama
#ara la prueba de la )ersi,n propuesta9 nombreIprograma ser> 0ase7
Se proporciona otro comando para montar el c,digo obtenido con los m,dulos ob3eto
proporcionados9 de acuerdo al esquema de la Figura A*/2=
li nombre_prorama
91%2 #(ecucin
"na )e8 compilado y montado el c,digo9 se puede probar el funcionamiento del n.cleo con
ayuda del c,digo e3ecutable obtenido/ Al e3ecutar 0ase7 se ofrecen mediante un men. las
pruebas de diferentes aspectos del n.cleo=
Control de procesos/ #ermite mane3ar prioridades y quanta de procesos/
Control del disco fle4ible/ #ermite operar el motor9 posicionar el cabe8al y
transferir informaci,n entre disco y memoria/
La introducci,n de otras opciones se reali8ar> modificando el c,digo de pruebas/1/
0utinas au4iliares
Definiciones
0utinas ensambador
;name3o del '2<
"#$%&'" ATC Laboratorio de Sistemas (perati)os *!
*!
rutinas%
nucleo% 0ase7%c
Pinclude Qrutinas/1Q Pinclude Qnucleo/1Q
Definiciones9
rutinas au4iliares9
etc
0utinas dependientes
de la m>quina
Pinclude Qmaquina/1Q
C,digo de las
primiti)as del n.cleo
#rogramas que
usan el n.cleo
Pinclude Qpruebas/1Q
#rograma de
acti)aci,n del n.cleo
ma-uina% pruebas%
Fi$ura 91%1% Or$ani8acin de los mdulos 0uente
0 as e7 %
c
nucleo/ 1
pruebas/ 1
0 as e7 % o b(
main;<
L
c c c f a s e
li fase
0 as e7 % e*
e
s o lib% lib
Fi$ura 91%2% #s-uema para compilar ) montar el ncleo%

Anda mungkin juga menyukai