Vous êtes sur la page 1sur 12

1.

4 LLAMADAS AL SISTEMA
Armados con nuestro conocimiento general de cmo MINIX maneja los procesos y los archivos, ahora
podemos comenzar a examinar la interfaz entre el sistema operativo y sus programas de aplicacin, es
decir, el conjunto de llamadas al sistema. i !ien esta explicacin se refiere espec"ficamente a POSIX
#Norma Internacional $$%&'(), y por tanto tam!i*n a MINIX, casi todos los sistemas operativos modernos
tienen llamadas al sistema +ue realizan las mismas funciones, aun+ue los detalles sean diferentes. ,uesto
+ue el mecanismo real de la emisin de una llamada al sistema depende mucho de la m-+uina, y a menudo
de!e expresarse en cdigo de ensam!lador, se proporciona una !i!lioteca de procedimientos +ue permite
efectuar llamadas al sistema desde programas en ..
A fin de hacer m-s claro el mecanismo de las llamadas al sistema, examinemos !revemente READ #leer)
/sta llamada tiene tres par-metros0 el primero especifica el archivo, el segundo especifica el !uffer, y el
tercero especifica el n1mero de !ytes por leer. 2na llamada de READ desde un programa en . podr"a verse
as"0
cuenta = read(file, buffer, nbytes);
3a llamada al sistema #y el procedimiento de !i!lioteca) devuelve en cuenta el n1mero de !ytes +ue
realmente se leyeron. /ste valor normalmente es igual a nbytes, pero puede ser menor, si, por ejemplo, se
llega al fin del archivo durante la lectura.
i la llamada al sistema no puede ejecutarse, ya sea a causa de un par-metro no v-lido o de un error de
disco, se asignar- el valor '( a cuenta, y el n1mero del error se colocar- en una varia!le glo!al, errno. 3os
programas siempre de!en revisar los resultados de una llamada al sistema para ver si ocurri un error.
MINIX tiene un total de &4 llamadas al sistema, las cuales se listan en la 5ig. ('$, agrupadas por comodidad
en categor"as. /n las siguientes secciones examinaremos !revemente cada una de estas llamadas para ver
+u* hacen. /n gran medida, los servicios +ue estas llamadas ofrecen determinan la mayor parte de lo +ue el
sistema operativo tiene +ue hacer, ya +ue la administracin de recursos en las computadoras personales es
m"nima #al menos comparada con las m-+uinas grandes +ue tienen muchos usuarios).
Administracin de
Procesos
pid 6 for7#) .rea un proceso hijo identico al padre
pid 6 8aitpid#pid, 9statloc, opts) /spera +ue el hijo termine
s 6 8ait#9status) :ersin vieja de 8aitpid
s 6 execve#name, argv, envp) ustituye la imagen en memoria de un proceso
exit#status) ;ermina la ejecucin de un proceso y devolver su estado
size 6 !rd#addr) 5ija el tama<o del segmento de datos
pid 6 getpid#) =evuelve el identificador de proceso del invocador
pid 6 getpgrp#) =evuelve el identificador del grupo de procesos del invocador
pid 6 setsid#) .rea una nueva sesin y devolver su identificacin de grupo de procesos
l 6 ptrace#re+, pid, addr, data) e usa para depurar
Seales s 6 sigaction#sig, 9act, 9oldact) =efine la accin a emprender al reci!ir se<ales
s 6 sigreturn#9context) >egresa de una se<al
s 6 sigprocmas7#ho8, 9set, 9old) /xamina o cam!ia la m-scara de se<al
s6 sigpending#set) ?!tiene el conjunto de se<ales !lo+ueadas
s 6 sigsuspend#sigmas7) ustituye la m-scara de se<al y suspende el proceso
s 6 7ill#pid, sig) /nv"a una se<al a un proceso
residual 6 alarm#seconds) ,one la alarma del reloj
s 6 pause#) uspende el invocador hasta la siguiente se<al
Administracin de
Archivos
fd 6 creat#name, mode) 5orma o!soleta de crear un nuevo archivo
fd 6 m7node#name, mode, addr) .rea un nodo'i normal, especial o de directorio
fd 6 open#file, ho8, ...) A!re un archivo para leer, escri!ir o am!as cosas
s 6 close#fd) .ierra un archivo a!ierto
n 6 read#fd, !uffer, n!ytes) 3ee datos de un archivo coloc-ndolos en un !uffer
n 6 8rite#fd, !uffer, n!ytes) /scri!e datos de un !uffer a un archivo
'1'
pos 6 lsee7#fd, offset, 8hence) Mueve el apuntador de archivos
s 6 stat#name, 9!uf) ?!tiene la informacin de estado de un archivo
s 6 fstat#fd, 9!uf) ?!tiene la informacin de estado de un archivo
fd 6 dup#fd) Asigna un nuevo descriptor de archivo a un archivo a!ierto
s 6 pipe#9fd@AB) .rea un conducto
s 6 ioctl#fd, re+uest, argp) >ealiza operaciones especiales con un archivo
s 6 access#name, amode) :erifica la accesi!ilidad de un archivo
s 6 rename#old, ne8) =a a un archivo un nuevo nom!re
s 6 fcntl#fd, cmd, ...) Clo+ueo de archivos y otras operaciones
Administracin de
Directorios
Sistemas de
Archivos
s 6 m7dir#name, mode) .rea un directorio nuevo
s 6 rmdir#name) /limina un directorio vac"o
s 6 lin7#name(, nameD) .rea una nueva entrada, nameD, +ue apunta a name(
s 6 unlin7#name) /limina una entrada de directorio
s 6 mount#special, name, flag) Monta un sistema de archivos
s 6 umount#special) =esmonta un sistema de archivos
s 6 sync#) =esaloja todos los !lo+ues en cach* al disco
s 6 chdir#dirname) .am!ia el directorio de tra!ajo
s 6 chroot#dirname) .am!ia el directorio ra"z
Proteccin s 6 chmod#name, mode) .am!ia los !its de proteccin de un archivo
uid 6 getuid#) ?!tiene el uid del invocador
gid 6 getgid#) ?!tiene el gid del invocador
s 6 setuid#gid) /sta!lece el uid del invocador
s 6 setgid#gid) /sta!lece el gid del invocador
s 6 cho8n#name, o8ner, group) .am!ia el propietario y el grupo de un archivo
oldmas7 6 umas7#complmode) .am!ia la m-scara de modo
Administracin del
Tiem!o
seconds 6 time#9seconds) ?!tiene el tiempo transcurrido desde el (E de enero de ($FA
s 6 stime#tp) /sta!lece el tiempo transcurrido desde el (E de enero de ($FA
s 6 utime#file, timep) /sta!lece el tiempo de G1ltimo accesoH a un archivo
s 6 times#!uffer) ?!tiene los tiempos de usuario y sistema gastados hasta el momento
"i#$ra 1%&. 3as llamadas al sistema Minix. /l cdigo de retorno s es '( si ocurre un error0 fd es un descriptor de archivo,
y n es una cuenta de !ytes. 3os dem-s cdigos de retorno son lo +ue el nom!re sugiere
.omo acotacin, vale la pena se<alar +ue lo +ue constituye una llamada al sistema est- a!ierto a
interpretacin. /l est-ndar ,osix especifica varios procedimientos +ue un sistema +ue se ajuste a *l de!e
proporcionar, pero no especifica si se trata de llamadas al sistema, llamadas de !i!lioteca o algo m-s. /n
algunos casos, los procedimientos ,osix se ofrecen como rutinas de !i!lioteca en MINIX. /n otros, de un
procedimiento, y una llamada al varios procedimientos re+ueridos son slo variaciones menores sistema se
encarga de todos ellos.
1.4.1 Llamadas al sistema !ara administracin de !rocesos
/l primer grupo de llamadas se ocupa de la administracin de procesos. FORK #!ifurcar) es un !uen lugar
para iniciar la explicacin. FORK es la 1nica forma de crear un proceso nuevo. /sta llamada crea un
duplicado exacto del proceso original, incluidos todos los descriptores de archivo, registros, ... todo.
=espu*s del FORK, el proceso original y la copia #el padre y el hijo) siguen cada +uien su camino. ;odas las
varia!les tienen valores id*nticos en el momento del FORK, pero dado +ue los datos del padre se copian
para crear el hijo, los cam!ios su!secuentes en uno de ellos no afectan al otro. #/l texto, +ue es inmuta!le,
es compartido entre padre e hijo.) 3a llamada FORK devuelve un valor, +ue es cero en el hijo e igual al
identificador de proceso del hijo o PID en el padre. .on !ase en el ,I= devuelto, los dos procesos pueden
sa!er cu-l es el proceso padre y cu-l es el proceso hijo.
/n la mayor parte de los casos, despu*s de un FORK, el hijo tendr- +ue ejecutar cdigo diferente al de su
padre. .onsidere el caso del shell. Iste lee un comando de la terminal, !ifurca un proceso hijo, espera +ue
el hijo ejecute el comando, y luego lee el siguiente comando cuando el hijo termina. ,ara esperar a +ue el
'''
hijo termine, el padre ejecuta una llamada al sistema WAITPID #esperar ,I=), +ue simplemente espera
hasta +ue el hijo termina #cual+uier hijo si existe m-s de uno). WAITPID puede esperar un hijo espec"fico, o
cual+uier hijo si se asigna '( al primer par-metro. .uando WAITPID termina, se asignar- el valor de la
situacin de salida #terminacin normal o anormal y valor de salida) del hijo a la direccin a la +ue apunta el
segundo par-metro. e ofrecen tam!i*n varias otras opciones. 3a llamada WAITPID sustituye a la llamada
anterior WAIT +ue ahora es o!soleta pero se incluye por razones de compati!ilidad hacia atr-s.
.onsideremos ahora la forma en +ue el shell usa FORK. .uando se teclea un comando, el shell !ifurca un
nuevo proceso. /ste proceso hijo de!e ejecutar el comando del usuario, cosa +ue hace utilizando la llamada
al sistema EE! #ejecutar), +ue hace +ue toda su imagen de n1cleo sea sustituida por el archivo nom!rado
en su primer par-metro. /n la 5ig. ('(A se muestra un shell muy simplificado +ue ilustra el uso de FORK,
WAITPID y EE!.
"i#$ra 1%1(. 2n shell reducido al m"nimo. /n todo este li!ro, se supone +ue ;>2/ es
por definicin (.
/n el caso m-s general, EE!"E tiene tres par-metros0 el nom!re del archivo +ue se va a ejecutar, un
apuntador al arreglo de argumentos y un apuntador al arreglo de entorno. Istos se descri!ir-n en !reve. e
proporcionan diversas rutinas de !i!lioteca, incluidas e#ecl, e#ec$, e#ecle y e#ec$e +ue permiten omitir
los par-metros o especificarlos de diversas formas. /n todo este li!ro usaremos el nom!re EXE) para
representar la llamada al sistema invocada por todas estas rutinas.
.onsideremos el caso de un comando como
c% arc&i$'l arc&i$'(
+ue sirve para copiar archivo( en archivoD. 2na vez +ue el shell ha !ifurcado, el proceso hijo localiza y
ejecuta el archivo c% y le pasa los nom!res de los archivos de origen y destino.
/l programa principal de c% #y el de casi todos los dem-s programas) contiene la declaracin0
)ain(ar*c, ar*$, en$%)
donde ar*c es una cuenta del n1mero de elementos +ue hay en la l"nea de comandos, incluido el nom!re
del programa. ,ara el ejemplo anterior, ar*c es *.
/l segundo par-metro, ar*$, es un apuntador a un arreglo. /l elemento i de ese arreglo es un apuntador a
la i'*sima cadena de la l"nea de comandos. /n nuestro ejemplo, ar*$+,- apuntar"a a la cadena Gc%H,
ar*$+.- apuntar"a a la cadena Garc&i$'.H, y ar*$+(- apuntar"a a la cadena Garc&i$'(H.
/l tercer par-metro de )ain, en$%, es un apuntador del entorno, un arreglo de cadenas +ue contienen
asignaciones de la forma n')bre = $al'r y +ue sirve para pasar a un programa informacin como el tipo
de terminal y el nom!re del directorio !ase. /n la 5ig. ('(A no se pasa un entorno al hijo, as" +ue el tercer
par-metro de e#ec$e es un cero.
i EE! parece complicado, no se desanimeJ *sta es #sem-nticamente) la llamada al sistema m-s
compleja. ;odas las dem-s son mucho m-s sencillas. .omo ejemplo de llamada sencilla, considere EIT
#salir), +ue los procesos de!en usar al terminar de ejecutarse. EIT tiene un solo par-metro, el estado de
salida #A a D&&), +ue se devuelve al padre en la varia!le status o statl'c de la llamada al sistema WAIT
o WAITPID. /l !yte de orden !ajo de status contiene el estado de terminacin, siendo A la terminacin
normal, y los dem-s valores, diversas condiciones de error. /l !yte de orden alto contiene el estado de
salida del hijo #A a D&&). ,or ejemplo, si un proceso padre ejecuta la instruccin0
n = /ait%id(0., 1status, '%ti'ns);
'*'
se suspender- hasta +ue alg1n proceso hijo termine. i el hijo sale con, digamos, % como par-metro de
e#it, el padre ser- despertado despu*s de asignarse el PID del hijo a n y (+(4(( a status. #/n todo este
li!ro se usar- la convencin de . de anteponer Ax a las constantes hexadecimales.)
3os procesos en MINIX tienen su memoria dividida en tres segmentos0 el se#mento de te+to #esto es, el
cdigo de programa), el se#mento de datos #es decir, las varia!les) y el se#mento de !ila. /l segmento
de datos crece hacia arri!a y el de pila lo hace hacia a!ajo, como se muestra en la 5ig. ('((. /ntre ellos hay
una !recha de espacio de direcciones no utilizado. 3a pila crece hacia la !recha autom-ticamente, seg1n se
necesite, pero la expansin del segmento de datos se efect1a expl"citamente usando la llamada al sistema
2RK. 2RK tiene un par-metro, +ue da la direccin donde de!e terminar el segmento de datos. /sta direccin
puede ser mayor +ue el valor actual #el segmento de datos est- creciendo) o menor #el segmento de datos
se est- encogiendo). =esde luego, el par-metro de!e ser menor +ue el apuntador de la pila, pues de otro
modo los segmentos de datos y de pila se traslapar"an, cosa +ue est- prohi!ida.
"i#$ra 1%11. 3os procesos tienen tres segmentos0
texto, datos y pila. /n el ejemplo, los tres est-n en
el mismo espacio de direcciones, pero tam!i*n se
manejan espaciones de instrucciones y datos
separados.
,ara comodidad del programador, se ofrece una rutina de !i!lioteca sbr3 +ue tam!i*n cam!ia el tama<o
del segmento de datos, slo +ue su par-metro es el n1mero de !ytes por agregar a dicho segmento #un
par-metro negativo reduce el tama<o del segmento de datos). /sta rutina opera siguiendo la pista al tama<o
actual del segmento de datos, +ue es el valor devuelto por 2RK, calculando el nuevo tama<o, y realizando
una llamada pidiendo ese n1mero de !ytes. 2RK y 42RK se consideraron demasiado dependientes de la
implementacin y no forman parte de ,?IX.
3a siguiente llamada al sistema relacionada con procesos tam!i*n es la m-s sencilla, 5ETPID, +ue se limita
a devolver el pid de +uien la invoca. >ecuerde +ue en FORK, slo se proporciona!a el pid del hijo al padre.
i el hijo desea conocer su propio pid, de!er- usar 5ETPID. 3a llamada 5ETP5RP devuelve el pid del grupo
de procesos del invocador. 4ET4ID crea una nueva sesin y asigna el pid del invocador al pid del grupo de
procesos. 3as sesiones est-n relacionadas con una caracter"stica opcional de ,osix llamada control de
tra,a-os, +ue no es apoyada por MINIX y de la cual no nos ocuparemos m-s.
3a 1ltima llamada al sistema relacionada con procesos, PTRA!E, es utilizada por los programas
depuradores para controlar el programa +ue se est- depurando. /sta llamada permite al depurador leer y
escri!ir en la memoria del proceso controlado y administrarla de otras maneras.
1.4.' Llamadas al sistema !ara seali.acin
Aun+ue casi todas las formas de comunicacin entre procesos son planeadas, existen situaciones en las
+ue se re+uiere una comunicacin inesperada. ,or ejemplo, si un usuario accidentalmente le pide a un
editor de textos +ue liste todo el contenido de un archivo muy largo, y luego se percata de su error, necesita
alguna forma de interrumpir el editor. /n MINIX, el usuario puede pulsar la tecla DEL #suprimir) del teclado,
la cual env"a una se<al al editor. /l editor atrapa la se<al y detiene el listado. ;am!i*n pueden usarse
se<ales para informar de ciertas trampas detectadas por el hard8are, como una instruccin no permitida o
un des!ordamiento de punto flotante. 3as expiraciones de tiempo tam!i*n se implementan como se<ales.
.uando se env"a una se<al a un proceso +ue no ha anunciado su disposicin a aceptar esa se<al, el
proceso simplemente se termina sin m-s. ,ara evitar esta suerte, un proceso puede usar la llamada al
sistema 4I5A!TIO6 para anunciar +ue est- preparada para aceptar alg1n tipo de se<al, y proporcionar la
direccin del procedimiento +ue manejar- la se<al, as" como un lugar para almacenar la direccin del
manejador actual. =espu*s de una llamada a 4I5A!TIO6, si se genera una se<al del tipo pertinente #p. ej.,
'4'
la tecla =/3), el estado del proceso se mete en su propia pila y luego se invoca el manejador de se<ales, el
cual puede ejecutarse durante el tiempo +ue desee y emitir todas las llamadas al sistema +ue +uiera. /n la
pr-ctica, empero, los manejadores de se<ales suelen ser m-s o menos cortos. .uando un procedimiento de
manejo de se<ales termina, llama a 4I5RET7R6 para +ue el proceso contin1e donde esta!a antes de la
se<al. 3a llamada 4I5A!TIO6 sustituye a la antigua llamada 4I56A8, +ue ahora se proporciona como
procedimiento de !i!lioteca a fin de mantener la compati!ilidad hacia atr-s.
3as se<ales pueden !lo+uearse en MINIX. 2na se<al !lo+ueada se mantiene pendiente hasta +ue se
des!lo+ueaJ no se entrega, pero tampoco se pierde. 3a llamada 4I5PRO!9A4K permite a un proceso definir
el conjunto de se<ales !lo+ueadas presentando al 7ernel un mapa de !its. 2n proceso tam!i*n puede
preguntar por el conjunto de se<ales +ue actualmente est-n pendientes y cuya entrega no se ha permitido
por+ue est-n !lo+ueadas. 3a llamada 4I5PE6DI65 devuelve este conjunto en forma de mapa de !its. ,or
1ltimo, la llamada 4I5474PE6D permite a un proceso esta!lecer atmicamente el mapa de !its de las
se<ales !lo+ueadas y suspenderse a s" mismo.
/n vez de proporcionar una funcin +ue atrape una se<al, el programa puede especificar la constante
4I5:I56 para +ue se haga caso omiso de todas las se<ales su!secuentes del tipo especificado, o
4I5:DF8 para resta!lecer la accin por omisin de la se<al cuando ocurra. 3a accin por omisin es
terminar el proceso o !ien hacer caso omiso de la se<al, dependiendo de la se<al. .omo ejemplo del uso de
4I5:I56, consideremos lo +ue sucede cuando el shell !ifurca un proceso de segundo plano como
resultado de
c')and' 1
No ser"a conveniente +ue una se<al =/3 del teclado afectara el proceso de segundo plano, as" +ue el shell
hace lo siguiente despu*s del FORK pero antes del EE!0
si*acti'n(4I5I6T, 4I5:I65, 6788);
y
si*acti'n(4I5;7IT, 4I5:I65, 6788);
para inha!ilitar las se<ales DEL y /0IT. #3a se<al /0IT se genera con @)T1LB'@2BJ es lo mismo +ue =/3
excepto +ue, si no es atrapada o ignorada, realiza un vaciado de n1cleo del proceso +ue se termin.) /n el
caso de procesos de primer plano #sin el 1), estas se<ales no se ignoran.
,ulsar la tecla =/3 no es la 1nica forma de enviar una se<al. 3a llamada al sistema KI88 permite a un
proceso enviar una se<al a otro proceso #siempre +ue tengan el mismo $idJ los procesos no relacionados
entre s" no se pueden enviar se<ales mutuamente). :olviendo al ejemplo del proceso de segundo plano,
suponga +ue se inicia un proceso de segundo plano pero posteriormente se decide +ue se le de!e terminar.
4I5I6T y 4I5;7IT han sido inha!ilitadas, as" +ue necesitamos alg1n otro mecanismo. 3a solucin es usar
el programa 3ill, +ue usa la llamada al sistema 3ILL para enviar una se<al a cual+uier proceso. i
enviamos la se<al $ #4I5KI88) a un proceso de segundo plano, podremos terminarlo. 4I5KI88 no puede
atraparse ni ignorarse.
/n muchas aplicaciones de tiempo real se hace necesario interrumpir un proceso despu*s de un intervalo
de tiempo espec"fico a fin de hacer algo, como retransmitir un pa+uete +ue tal vez se perdi en una l"nea de
comunicacin no confia!le. e proporciona la llamada al sistema ALA1M para manejar esta situacin. /l
par-metro especifica un intervalo, en segundos, despu*s del cual se env"a una se<al SI4ALA1M al
proceso. 2n proceso slo puede tener una alarma pendiente en un momento dado. i se emite una llamada
ALA1M con un par-metro de (A segundos, y 4 segundos despu*s se emite otra llamada ALA1M con un
par-metro de DA segundos, slo se generar- una se<al, DA segundos despu*s de la segunda llamada. 3a
primera se<al ser- cancelada por la segunda llamada ALA1M. i el par-metro de ALA1M es cero, se
cancelar- cual+uier se<al de alarma pendiente. i una se<al de alarma no es atrapada, se emprender- la
accin por omisin y se terminar- el proceso al +ue se envi la se<al.
A veces sucede +ue un proceso no tiene nada +ue hacer en tanto no llegue una se<al. ,or ejemplo,
consideremos un programa de instruccin asistida por computadora +ue est- pro!ando la velocidad de
lectura y la comprensin. /l programa exhi!e texto en la pantalla y luego llama a A3A>M para +ue le env"e
una se<al despu*s de 4A segundos. Mientras el estudiante est- leyendo el texto, el programa no tiene nada
+ue hacerJ podr"a +uedar inerte dando vueltas en un ciclo vac"o, pero eso desperdiciar"a tiempo de .,2
+ue otro proceso o usuario podr"a necesitar. 2na solucin mejor es usar PA0SE, +ue le ordena a MINIX +ue
suspenda el proceso hasta la siguiente se<al.
'5'
1.4.* Llamadas al sistema !ara administracin de archivos
Muchas llamadas al sistema se relacionan con el sistema de archivos. /n esta seccin examinaremos
llamadas +ue operan so!re archivos individualesJ en la siguiente veremos las +ue tra!ajan con directorios o
el sistema de archivos glo!al. 2samos la llamada !REAT para crear un nuevo archivo #la razn por la +ue
esta llamada es !REAT y no !REATE se ha perdido en las !rumas del tiempo). 3os par-metros de !REAT
dan el nom!re del archivo y el modo de proteccin. As",
Id = creat( <abc <, ,=>.);
crea un archivo llamado a,c con el modo (651 octal #en ., un cero inicial indica +ue una constante est- en
octal). 3os nueve !its de orden !ajo de AF&( especifican los !its r8x para el propietario #F significa permiso
de lectura'escritura'ejecucin), su grupo #& significa permiso de lectura' ejecucin) y otros #( significa slo
ejecucin).
!REAT no slo crea un archivo nuevo sino +ue tam!i*n lo a!re para escritura, sea cual sea el modo del
archivo, e puede usar el descriptor de archivo devuelto, fd, para escri!ir el archivo. i se invoca !REAT
para un archivo existente, ese archivo se truncar- a longitud A, a condicin, desde luego, +ue los permisos
sean los correctos. 3a llamada !REAT es o!soleta, ya +ue ahora OPE6 puede crear archivos nuevos, pero
se ha incluido para asegurar la compati!ilidad hacia atr-s.
3os archivos especiales se crean usando 9K6OD en lugar de !REAT. 2na llamada t"pica es
Id = )3n'd(?@de$@ttyc(?, ,(,=AA, ,#,A,();
+ue crea un archivo llamado 7dev7ttc' #el nom!re usual para la consola D) y le asigna el modo ('(644
octal #un archivo especial de caracteres con !its de proteccin r8xr''r'') /l tercer par-metro contiene el
dispositivo principal #%) en el !yte de orden alto y el dispositivo secundario #D) en el !yte de orden !ajo. /l
dispositivo principal podr"a ha!er sido cual+uier cosa, pero un archivo llamado 7dev7ttc' de!e ser el
dispositivo secundario D. 3as llamadas a 9K6OD fallar-n si el usuario no es el superusuario.
,ara leer o escri!ir un archivo existente, el archivo primero de!e a!rirse con OPE8. /sta llamada especifica
el nom!re del archivo +ue se va a a!rir, ya sea como nom!re de ruta a!soluto o relativo al directorio de
tra!ajo, y un cdigo de O:RDO68B9 O:WRO68B u O:RDWR, +ue significan a!rir para lectura, escritura o
am!as cosas. /l descriptor de archivo devuelto puede usarse entonces para leer o escri!ir. =espu*s, el
archivo puede cerrarse con !8O4E, con lo +ue el descriptor de archivo +ueda disponi!le para reutilizarse en
un !REAT u OPE6 su!secuente.
3as llamadas m-s utilizadas son sin duda 1EAD y :1ITE. Ka vimos 1EAD antesJ :1ITE #escri!ir) tiene los
mismos par-metros.
Aun+ue casi todos los programas leen y escri!en archivos secuencialmente, algunos programas de
aplicacin necesitan tener acceso directo a cual+uier parte de un archivo. .ada archivo tiene asociado un
apuntador +ue indica la posicin actual en el archivo. Al leer #o escri!ir) secuencialmente, este apuntador
normalmente apunta al siguiente !yte +ue se leer- #o escri!ir-). 3a llamada 84EEK cam!ia el valor del
apuntador de posicin, con lo +ue las llamadas su!secuentes a 1EAD o :1ITE pueden comenzar en
cual+uier lugar del archivo, o incluso m-s all- de su final.
84EEK tiene tres par-metros0 el primero es el descriptor de archivo para el archivo, el segundo es una
posicin en el archivo y el tercero indica si dicha posicin es relativa al principio del archivo, la posicin
actual o el final del archivo. /l valor devuelto por 84EEK es la posicin a!soluta en el archivo una vez +ue se
ha cam!iado el apuntador.
,ara cada archivo, MINIX se mantiene al tanto del modo del archivo #archivo regular, archivo especial,
directorio, etc.), su tama<o, la hora de la 1ltima modificacin y otra informacin. 3os programas pueden
pedir ver esta informacin usando las llamadas al sistema 4TAT y F4TAT. 3a 1nica diferencia entre las dos
es +ue la primera especifica el archivo por su nom!re, en tanto +ue la segunda reci!e un descriptor de
archivo, lo +ue lo hace 1til para archivos a!iertos, so!re todo la entrada est-ndar y la salida est-ndar, cuyos
nom!res tal vez no se conozcan. Am!as llamadas re+uieren como segundo par-metro un apuntador a una
estructura en la cual se colocar- la informacin. 3a estructura se muestra en la 5ig. ('(D.
';'
"i#$ra 1%1'. 3a estructura empleada para devolver informacin para las
llamadas al sistema ;A; y 5;A;. /n el cdigo real se usan nom!res
sim!licos para algunos tipos.
Al manipular descriptores de archivo, a veces resulta 1til la llamada D7P. .onsidere, por ejemplo, un otro
archivo como programa +ue necesita cerrar la salida est-ndar #descriptor de archivo (), sustituir salida
est-ndar, invocar una funcin +ue escri!e ciertas salidas en la salida est-ndar, y luego resta!lecer la
situacin original. Casta cerrar el descriptor de archivo ( y luego a!rir un archivo nuevo para hacer +ue ese
archivo sea la salida est-ndar #suponiendo +ue la entrada est-ndar, con descriptor de archivo A, est* en
uso), pero luego ser- imposi!le resta!lecer la situacin original.
3a solucin consiste en ejecutar primero la instruccin
fd = du%(.);
+ue usa la llamada al sistema D7P para asignar un nuevo descriptor de archivo, fd, y hacer +ue
corresponda al mismo archivo +ue la salida est-ndar. 3uego se puede cerrar la salida est-ndar y a!rir y usar
un nuevo archivo. .uando llegue el momento de resta!lecer la situacin original, se podr- cerrar el
descriptor de archivo ( y luego ejecutarse
n = du%(fd);
para asignar el descriptor de archivo m-s !ajo, +ue es (, al mismo archivo +ue fd. ,or 1ltimo, puede
cerrarse fd y estamos otra vez donde empezamos.
3a llamada D7P tiene una variante +ue permite hacer +ue un descriptor de archivo ar!itrario no asignado se
refiera a un archivo a!ierto dado. /sta variante se invoca con
du%((fd, fd();
donde fd se refiere a un archivo a!ierto y fd( es el descriptor de archivo no asignado +ue ahora se referir-
al mismo archivo +ue fd. ,or ejemplo, si fd se refiere a la entrada est-ndar #descriptor de archivo A) y fd(
es %, despu*s de la llamada los descriptores de archivo A y % se referir-n am!os a la entrada est-ndar.
3a comunicacin entre procesos en MINIX emplea conductos, como ya se explic. .uando un usuario
teclea
cat arc&i$'l arc&i$'( C s'rt
el shell crea un conducto y hace +ue la salida est-ndar del primer proceso escri!a en el conducto para +ue
la entrada est-ndar del segundo proceso pueda leer de *l. 3a llamada al sistema PIPE crea un conducto y
devuelve dos descriptores de archivo, uno para escri!ir y otro para leer. 3a llamada es
%i%e(1fd+,-);
donde fd es un arreglo de dos enteros, y fd y fd.. son los descriptores de archivo para leer y para
escri!ir, respectivamente. ,or lo regular, despu*s viene un FORK, y el padre cierra el descriptor de archivo
para leer y el hijo cierra el descriptor de archivo para escri!ir #o viceversa), de modo +ue, cuando terminan,
uno de los procesos puede leer el conducto y el otro puede escri!ir en *l.
3a 5ig. ('(4 muestra un es+ueleto de procedimiento +ue crea dos procesos, enviando la salida del primero
al segundo por un conducto. #2n ejemplo m-s realista verificar"a errores y manejar"a argumentos.) ,rimero
se crea un conducto, y luego el procedimiento !ifurca. /l padre finalmente se convierte en el primer proceso
de la tu!er"a y el proceso hijo se convierte en el segundo. ,uesto +ue los archivos +ue se van a ejecutar,
%r'cess. y %r'cess( no sa!en +ue forman parte de una tu!er"a, es indispensa!le +ue los descriptores
'6'
de archivo se manipulen de modo +ue la salida est-ndar del primer proceso sea el conducto y la entrada
est-ndar del segundo sea el conducto. /l padre cierra primero el descriptor de archivo para leer del
conducto, luego cierra la salida est-ndar y emite una llamada D7P +ue permite al descriptor de archivo (
escri!ir en el conducto. /s importante tener presente +ue D7P siempre devuelve el descriptor de archivo
m-s !ajo disponi!le, +ue en este caso es (. 3uego, el programa cierra el otro descriptor de archivo del
conducto.
"i#$ra 1%1*. /s+ueleto para esta!lecer una tu!er"a de dos procesos.
=espu*s de la llamada EE!, el proceso iniciado tendr- los descriptores de archivo A y D sin modificacin, y
el ( para escri!ir en el conducto. /l cdigo del hijo es an-logo. /l par-metro para e#ecl se repite por+ue el
primero es el archivo +ue se va a ejecutar y el segundo es el primer par-metro, +ue casi todos los
programas esperan +ue sea el nom!re del archivo.
3a siguiente llamada al sistema, IO!T8, es potencialmente aplica!le a todos los archivos especiales. ,or
ejemplo, es utilizada por los controladores de dispositivos de !lo+ues como el .I para controlar
dispositivos de cinta y .='>?M. No o!stante, su uso principal es con archivos especiales por caracteres,
so!re todo las terminales. ,osix define varias funciones +ue la !i!lioteca traduce a llamadas IO!T8. 3as
funciones de !i!lioteca tc*etattr y tcsetattr usan IO!T8 para cam!iar los caracteres +ue se usan
para corregir los errores de digitacin en la terminal, cam!iar el modo de la terminal, etc*tera.
/l modo cocido es el modo de terminal normal, en el +ue los caracteres de !orrar y terminar funcionan
normalmente, @)T1LB'@SB y @)T1LB'@/B pueden usarse para detener e iniciar la salida de la terminal, @)T1LB'
@DB significa fin de archivo, DEL genera una se<al de interrupcin y @)T1LB'@2B genera una se<al de
a!andonar #<$it) para forzar un vaciado de n1cleo.
/n modo cr$do, todas estas funciones est-n inha!ilitadasJ todos los caracteres se pasan directamente al
programa sin ning1n procesamiento especial. Adem-s, en modo crudo una lectura de la terminal
proporciona al programa todos los caracteres +ue se han tecleado, incluso una l"nea parcial, en lugar de
esperar hasta +ue se teclea una l"nea completa, como en el modo cocido.
/l modo c,rea= es intermedio. 3os caracteres de !orrar y terminar para edicin est-n inha!ilitados, lo
mismo +ue @)T1LB'@DB, pero @)T1LB'@SB, @)T1LB'@/B, DEL y @)T1LB'@2B est-n ha!ilitados. Al igual +ue en
modo crudo, se pueden devolver l"neas parciales a los programas #si se desactiva la edicin intral"neas no
hay necesidad de esperar hasta ha!er reci!ido una l"nea completaJ el usuario no puede cam!iar de opinin
y eliminarla, como en el modo cocido).
,osix no utiliza los t*rminos cocido, crudo y c!rea7. /n la terminolog"a de ,?IX el modo cannico
corresponde al modo cocido. /n este modo est-n definidos once caracteres especiales, y la entrada es por
'>'
l"neas, /n el modo no cannico un n1mero m"nimo de caracteres por aceptar y un tiempo, especificado en
unidades de d*cimas de segundo, determinan la forma en +ue se satisfar- una lectura. Cajo ,?IX hay un
alto grado de flexi!ilidad, y es posi!le ajustar diversas !anderas para hacer +ue el modo no cannico se
comporte como el modo c!rea7 o el crudo. 3os t*rminos antiguos son m-s descriptivos, y seguiremos
us-ndolos informalmente.
IO!T8 tiene tres par-metrosJ por ejemplo, una llamada a tcsetattr para esta!lecer los par-metros de
terminal dar- lugar a0
i'ctl(fd, T!4ET4, 1ter)i's);
/l primer par-metro especifica un archivo, el segundo especifica una operacin y el tercero es la direccin
de la estructura ,osix +ue contiene !anderas y el arreglo de caracteres de control. ?tros cdigos de
operacin pueden posponer los cam!ios hasta +ue se haya enviado toda la salida, hacer +ue las entradas
no le"das se desechen, y devolver los valores actuales.
3a llamada al sistema A!!E44 sirve para determinar si el sistema de proteccin permite cierto acceso a un
archivo. /sta llamada es necesaria por+ue algunos programas pueden ejecutarse usando el $id de un
usuario distinto. /ste mecanismo de 4ET7ID se descri!ir- posteriormente.
3a llamada al sistema RE6A9E sirve para dar a un archivo un nuevo nom!re. 3os par-metros especifican los
nom!res viejo y nuevo.
,or 1ltimo, la llamada F!6T8 se usa para controlar archivos de forma un tanto an-loga a IO!T8 #es decir,
am!as son hac7s horri!les). /sta llamada tiene varias opciones, la m-s importante de las cuales es para
poner candados a archivos a discrecin. 2sando F!6T8, un proceso puede poner y +uitar candados a
partes de archivos y pro!ar una parte de un archivo para ver si tiene candado. 3a llamada no impone
ninguna sem-ntica de candadosJ los programas de!en encargarse de ello.
1.4.4 Llamadas al sistema !ara administracin de directorios
/n esta seccin examinaremos algunas llamadas al sistema +ue m-s !ien est-n relacionadas con
directorios o con el sistema de archivos glo!al, no con un archivo espec"fico como en la seccin anterior.
3as dos primeras llamadas, 9KDIR y R9DIR, crean y eliminan directorios vac"os, respectivamente. 3a
siguiente llamada es 8I6K. u propsito es hacer posi!le +ue el mismo archivo aparezca con dos o m-s
nom!res, a menudo en diferentes directorios. 2n uso t"pico es permitir +ue varios miem!ros del mismo
e+uipo de programacin compartan un archivo com1n, y +ue para cada uno el archivo aparezca en su
propio directorio, tal vez con un nom!re distinto. .ompartir un archivo no es lo mismo +ue dar a cada
miem!ro del e+uipo una copia privada, por+ue al tener un archivo compartido los cam!ios +ue cual+uier
miem!ro del e+uipo efect1an son visi!les de inmediato para los otros miem!ros0 slo existe un archivo.
.uando se hacen copias de un archivo, los cam!ios su!secuentes +ue se hagan a una copia no afectar-n a
las dem-s.
,ara ver cmo funciona 8I6K, consideremos la situacin de la 5ig. ('(%#a).
"i#$ra 1%14. #a) =os directorios antes de vincular #usrLjimLmemo al directorio de
ast. #!) 3os mismos directorios despu*s de la vinculacin.
A+u" hay dos usuarios, ast y -im, cada uno de los cuales tiene sus propios directorios con varios archivos. i
ahora ast ejecuta un programa +ue contiene la llamada al sistema
lin3( <usr@Di)@)e)'?, <@usr@ast@n'te?)
el archivo memo del directorio de -im se incluye ahora en el directorio de ast con el nom!re note. /n
adelante, 7$sr7-im7memo y 7$sr7ast7note se referir-n al mismo archivo.
i entendemos cmo funciona 8I6K tal vez nos +uedar- m-s claro +u* resultado produce. ;odos los
'&'
archivos en MINIX tienen un n1mero 1nico, su n?mero%i, +ue lo identifica. /ste n?mero%i es un "ndice de
una ta!la de nodos%i, uno por archivo, +ue indican +ui*n es el due<o del archivo, dnde est-n sus !lo+ues
de disco, etc. 2n directorio no es m-s +ue un archivo +ue contiene un conjunto de pares #n?mero%i,
nom,re AS)II). /n la 5ig. ('(%, mail tiene el n?mero%i 1;, por ejemplo. 3o +ue 8I6K hace es simplemente
crear una nueva entrada de directorio con un nom!re #posi!lemente nuevo) usando el n?mero%i de un
archivo existente. /n la 5ig. ('(%#!), dos entradas tienen el mismo n?mero%i #6() y por tanto se refieren al
mismo archivo. i cual+uiera de estas entradas se elimina posteriormente, usando la llamada al sistema
768I6K, la otra permanecer-. i am!as se eliminan, MINIX ver- +ue no existen entradas para el archivo
#un campo del n'd'Ei indica cu-ntas entradas de directorio apuntan al archivo), y entonces lo eliminar- del
disco.
.omo dijimos antes, la llamada al sistema 9O76T permite fusionar dos sistemas de archivos para formar
uno solo. 2na situacin com1n es tener el sistema de archivos ra"z, +ue contiene las versiones !inarias
#ejecuta!les) de los comandos comunes y otros archivos de uso intensivo, en el disco en >AM. /l usuario
podr"a despu*s, por ejemplo, insertar en la unidad A un disco flexi!le con programas de usuario.
i se ejecuta la llamada al sistema 9O76T, el sistema de archivos de la unidad A se puede conectar al
sistema de archivos ra"z, como se muestra en la 5ig. ('(&. 2na instruccin t"pica en . para realizar el
montaje es
)'unt(<@de$@fd,?, <@)nt?, ,);
donde el primer par-metro es el nom!re de un archivo especial por !lo+ues para la unidad A y el segundo
par-metro es el lugar del -r!ol donde se de!e montar.
"i#$ra 1%15. istema de archivos #a) antes del montaje y #!) despu*s del montaje.
=espu*s de la llamada 9O76T, se puede acceder a un archivo en la unidad A usando su ruta desde el
directorio ra"z o desde el directorio de tra!ajo, sin importar en +u* unidad est*. =e hecho, se pueden montar
una segunda, tercera y cuarta unidad en cual+uier lugar del -r!ol. /l comando 9O76T permite integrar
medios removi!les en una sola jerar+u"a de archivos integrada sin tener +ue preocuparse respecto a cu-l es
el dispositivo en el +ue est- un archivo. Aun+ue en este ejemplo se ha!l de discos flexi!les, tam!i*n
pueden montarse de este modo discos duros o porciones de discos duros #tam!i*n llamados !articiones o
dis!ositivos sec$ndarios). i un sistema de archivos ya no se necesita, puede desmontarse con la
llamada al sistema 769O76T.
MINIX mantiene un cach* en la memoria principal con los !lo+ues usados m-s recientemente a fin de no
tener +ue leerlos del disco si se vuelven a usar en un lapso corto. i se modifica un !lo+ue del cach* #por un
:1ITE a un archivo) y el sistema se cae antes de +ue el !lo+ue modificado se gra!e en el disco, el sistema
de archivos se da<ar-. ,ara limitar el da<o potencial, es importante desalojar el cach* peridicamente, de
modo +ue la cantidad de datos +ue se pierdan en caso de una ca"da sea pe+ue<o. 3a llamada al sistema
4B6! le dice a MINIX +ue escri!a en disco todos los !lo+ues del cach* +ue hayan sido modificados
despu*s de ha!erse le"do. .uando se inicia MINIX, se pone en marcha un programa llamado u%date
#actualizar) +ue se ejecuta en segundo plano, invocando 4B6! cada 4A segundos a fin de desalojar
continuamente el cach*.
?tras dos llamadas relacionadas con directorios son !FDIR y !FROOT. 3a primera cam!ia el directorio de
tra!ajo y la segunda cam!ia el directorio ra"z. =espu*s de la llamada
c&dir( <@usr@ast@test?);
un OPE6 ejecutado con el archivo +. a!rir- 7$sr7ast7test7+.. !FROOT funciona de forma an-loga. 2na vez
+ue un proceso le ha ordenado al sistema +ue cam!ie su directorio ra"z, todos los nom!res de ruta
a!solutos #los +ue comienzan con GLH) partir-n de la nueva ra"z. lo los superusuarios pueden ejecutar
!FROOT, e incluso ellos no lo hacen con mucha frecuencia.
'1('
1.4.5 Llamadas al sistema !ara !roteccin
/n MINIX todos los archivos tienen un modo de (( !its +ue se utiliza para proteccin. Nueve de estos !its
son los de leer%escri,ir%e-ec$tar para el !ro!ietario, el #r$!o y otros. 3a llamada al sistema !F9OD hace
posi!le cam!iar el modo de un archivo. ,or ejemplo, para hacer +ue un archivo sea slo de lectura para
todos excepto su propietario, podemos ejecutar
c&)'d( <arc&i$' <, ,GAA);
3os otros dos !its de proteccin, ADAAA y A%AAA, son los !its SET4ID #esta!lecer identificador de grupo) y
SET0ID #esta!lecer identificador de usuario), respectivamente. .uando cual+uier usuario ejecuta un
programa +ue tiene activado el !it SET0ID, el uid efectivo de ese usuario se cam!ia al del propietario del
archivo durante la ejecucin del proceso. /sta capacidad se utiliza mucho para permitir a los usuarios
ejecutar programas +ue realizan funciones exclusivas del superusuario, como crear directorios. ,ara crear
un directorio se usa 9K6OD, +ue es slo para el superusuario. i se hace +ue el propietario del programa
)3dir sea el superusuario y +ue ese programa tenga el modo (4655, se podr- otorgar a los usuarios la
facultad de ejecutar 9K6OD pero en una forma muy restringida.
.uando un proceso ejecuta un archivo +ue tiene el !it 4ET7ID o 4ET5ID activado en su modo, ad+uiere un
uid o gid efectivo diferente de su uid o gid real. A veces es importante para un proceso averiguar cu-les son
su uid o gid real y efectivo. 3as llamadas al sistema 5ET7ID y 5ET5ID se incluyeron para proporcionar esa
informacin. .ada llamada devuelve el uidLgid tanto real como efectivo, as" +ue se necesitan cuatro rutinas
de !i!lioteca para extraer la informacin apropiada0 *etuid, *et*id, *eteuid y *ete*id. 3as primeras
dos o!tienen el $id7#id real, y las dos 1ltimas, el $id7#id e@ectivo.
3os usuarios ordinarios no pueden cam!iar su uid, excepto ejecutando programas con el !it 4ET7ID
activado, pero el superusuario tiene otra posi!ilidad0 la llamada al sistema 4ET7ID, +ue esta!lece los uid
tanto efectivo como real. 4ET5ID esta!lece am!os gid. /l superusuario tam!i*n puede cam!iar el
propietario de un archivo mediante la llamada al sistema !FOW6. /n pocas pala!ras, el superusuario tiene
a!undantes oportunidades para violar todas las reglas de proteccin, lo +ue explica por +u* tantos
estudiantes dedican tanto de su tiempo a tratar de convertirse en superusuarios.
3as 1ltimas dos llamadas al sistema de esta categor"a pueden ser ejecutadas por procesos de usuario
ordinarios. 3a primera, 79A4K, esta!lece una m-scara de !its interna dentro del sistema, la cual se usar-
para enmascarar los !its del modo cuando se cree un archivo. =espu*s de la llamada
u)as3(,(();
el modo proporcionado por !REAT y 9K6OD tendr- los !its ADD enmascarados antes de usarse. As", la
llamada
creat( <arc&i$' <, ,===);
asignar- AF&& al modo en lugar de AFFF. ,uesto +ue la m-scara de !its es heredada por los procesos hijo,
si el shell ejecuta un 79A4K justo despu*s del inicio de sesin, ninguno de los procesos de usuario de esa
sesin crear- accidentalmente archivos en los +ue otras personas puedan escri!ir.
.uando un programa propiedad de la ra"z tiene el !it 4ET7ID activado, puede acceder a cual+uier archivo,
pues su uid efectivo es el del superusuario. /n muchos casos al programa le resulta 1til sa!er si la persona
+ue lo invoc tiene permiso para acceder a un archivo dado. i el programa simplemente intenta acceder a
*l, siempre lo lograr-, y no ha!r- averiguado nada.
3o +ue se necesita es una forma de sa!er si el acceso est- permitido para el uid real. 3a llamada al sistema
A!!E44 ofrece una forma de averiguarlo. /l par-metro mode es % para verificar si hay acceso de lectura, D
para acceso de escritura y ( para acceso de ejecucin. ;am!i*n se permiten com!inacionesJ por ejemplo, si
mode es M, la llamada devolver- A si el uid real tiene permiso tanto de escritura como de escrituraJ en caso
contrario, devolver- '(. i mode es A, se verifica si existe el archivo y si se pueden efectuar !1s+uedas en
los directorios +ue conducen a *l.
1.4.; Llamadas al sistema !ara administracin del tiem!o
MINIX tiene cuatro llamadas al sistema relacionadas con el reloj de hora del d"a. TI9E simplemente
devuelve el tiempo actual en segundos, donde A corresponde al ( de enero de ($FA a la media noche #justo
en el momento de comenzar el d"a, no al terminar). =esde luego, el reloj del sistema de!e esta!lecerse en
alg1n momento para poder leerlo despu*s, y es para ello +ue se ha incluido la llamada 4TI9E +ue permite
al superusuario esta!lecer el reloj. 3a tercera llamada relacionada con el tiempo es 7TI9E, +ue permite al
'11'
propietario de un archivo #o al superusuario) alterar el tiempo almacenado en el nodo'i de un archivo. 3a
aplicacin de esta llamada es muy limitada, pero unos cuantos programas la necesitanJ por ejemplo, t'uc&,
+ue asigna el tiempo actual al tiempo del archivo.
,or 1ltimo, tenemos TI9E4, +ue devuelve la informacin de conta!ilidad a un proceso, a fin de +ue pueda
sa!er cu-nto tiempo de .,2 us directamente y cuanto tiempo de .,2 gast el sistema a su nom!re
#manejando sus llamadas al sistema). ;am!i*n se devuelven los tiempos de usuario y de sistema totales
gastados por todos los hijos de ese proceso com!inados.
'1''

Vous aimerez peut-être aussi