Download APUNTES DE SISTEMAS OPERATIVOS INTRODUCCION Puede

Document related concepts

Setuid wikipedia , lookup

Descriptor de archivo wikipedia , lookup

Proceso de arranque en Linux wikipedia , lookup

Loop device wikipedia , lookup

Arquitectura de Windows NT wikipedia , lookup

Transcript
APUNTES DE SISTEMAS OPERATIVOS
INTRODUCCION
Puede considerarse al sistema operativo como el más fundamental de todos los programas.
Controla todos los recursos del sistema de cómputo y ofrece la base sobre la cual pueden
escribirse los programas de aplicación.
El sistema operativo es una capa de software que está sobre la parte superior del hardware
descubierto. De esta manera se manejan todas las partes del sistema y se presentar al
usuario una interfaz o máquina virtual que es más fácil de entender y programar. La figura 1
muestra esta situación
Programas de aplicación
Programas del
sistema
Reservación
en líneas aéreas
Compiladores
Sistema
bancario
Editores
Juegos de
video
Intérprete
de comandos
Sistema operativo
Lenguaje de máquina
Hardware
Microprogramación
Dispositivos físicos
Figura 1. Un sistema de cómputo consta de hardware, programas del sistema y programas
de aplicación.
La mayoía de los procesadores pueden trabajar en dos modos, el modo usuario y el modo
supervisor, en el 386 estos modos se llaman modo real y modo protegido. El sistema
operativo es aquella parte del software que corre en modo kernel (nucleo) o modo
supervisor.
El sistema operativo como una máquina ampliada
La función del sistema operativo es la de presentar al usuario con el equivalente de una
máquina ampliada o máquina virtual que sea más fácil de programar que el hardware
implícito.
El sistema operativo como un manejador de recursos
La tarea principal del sistema operativo es llevar el control de quién utiliza cuál recurso,
conceder requisiciones de recursos, explicar el uso e interceder en requisiciones conflictivas
de diferentes programas y usuarios.
1
CONCEPTOS FUNDAMENTALES DE LOS SISTEMAS OPERATIVOS
La interfaz entre el sistema operativo y los programas de usuario se define por medio del
conjunto de "instrucciones extendidas" que el sistema operativo proporciona, estas se
conocen como llamadas al sistema.
Procesos
Un proceso es un programa en ejecución. Consta del programa ejecutable, los datos y la
pila del programa, su contador de programa, apuntador de pila y otros registros, así como de
toda la información que se necesita para ejecutar el programa.
En muchos sistemas operativos, toda la información referente a cada proceso se almacena
en una tabla del sistema operativo llamada tabla de procesos, la cual es un arreglo (o lista
enlazada) de estructuras, una para cada proceso en existencia corriente.
Por lo tanto un proceso consta de su espacio de direcciones, generalmente llamada imagen
del núcleo y su registro de la tabla de procesos, que contiene sus registros entre otras cosas.
Las llamadas al sistema de manejo del proceso claves son aquellas que tienen que ver con la
creación y terminación de procesos.
Un proceso puede crear uno o más procesos diferentes (conocidos como procesos hijos) y
estos a su vez generan nuevos procesos hijos, se llega rápidamente a la estructura de árbol
de la figura 2.
A
B
D
C
E
F
Figura 2. Un árblo de procesos, El proceso A creó dos procesos, B y C. El proceso B creó
tres derivados, D, E y F.
Archivos
Un archivo es un bloque de información que generalmente recide en disco. Antes de que se
pueda leer un archivo, éste debe abrirse y después de que se haya leído debe cerrarse. Con
el fin de ofrecer un sitio para guardar archivos, MINIX tiene el concepto de directorio como
una forma de agrupar archivos. Los directorios suelen tener una jerarquía de árbol como la
que se muestra en la figura 3.
2
Directorio raíz
Alumnos
Juan
María
Facultad
Luis
Prof. Peréz
Cursos
Prof. Gómez
Prof. López
Examenes
Archivos
Figura 3. Sistema de archivos de la Universidad.
Los archivos en la jerarquía del directorio pueden especificarse dando su nombre de
trayectoria desde la parte superior de la jerarquía del directorio, el directorio raíz. Por
ejemplo la trayectoria al archivo E1 será /Facultad/Prof.Perez/Examenes/E1. La primera
diagonal especifica el directorio raíz.
En todo momento se tiene un directorio de trabajo, si por ejemplo /Faultad/Prof.Perez fuera
el directorio de trabajo, el archivo E1 podría especificarse con solo Examenes/E1.
Los archivos en MINIX tienen un código binario de protección de 9 bits, 3 para el
propietario, 3 para el grupo del propietario y 3 para alguien más. Los bits se conocen como
bits rwx (read-write-execute, leer-escribir-ejecutar), para un directorio x significa permiso
de búsqueda.
Antes de que un archivo pueda leerse o escribirse, se verifican los permisos. Si se permite el
acceso, el sistema produce un entero pequeño llamado descriptor de archivo para
utilizarse en operaciones subsecuentes. Si se prohibe el acceso, se produce un código de
error.
3
Para trabajar con discos removibles, MINIX permite que el sistema de archivos de un disco
flexible se anexe al árbol principal mediante un montaje. Antes de la llamada a MOUNT, el
disco de RAM (simulado en memoria central) contiene el sistema de archivo raíz o
primario. La situación se muestra en la figura 4.
Raíz
a
c
Raíz
Unidad 0
b
x
y
a
c
d
b
d
x
y
(b)
(a)
Figura 4. (a) Antes del montaje los archivos de la unidad 0 no son accesibles. (b) después
del montaje, son parte de la jerarquía. En este caso se montaron en el directorio vacío b.
Un concepto importante en los archivos es el de archivo especial, este permite manejar los
dispositivos como si fueran archivos. Los archivos especiales se dividen en dos tipos,
archivos especiales de bloque y archivos especiales de caracteres. los archivos
especiales de bloque manejan dispositivos en los que las tranferencias se hacen en bloque al
azar, como los discos. Los archivos especiales de caracteres modelan dispositivos seriales
como impresoras de línea, interfaces de red, etc.
El dispositivo estándard de entrada se reconoce con el descriptor de archivo 0 y el
dispositivo estándard de salida por el descriptor de archivo 1. El descriptor de archivo 2
se refiere al dispositivo error estándard.
Se definen dos números, el número de dispositivo mayor y el número de dispositivo
menor, el primero se refiere al tipo de dispositivo (disco, terminal, impresora, etc.) y el
segundo a cual de esos de dispositivos se refiere. Los número de dispositivo pueden
observarse al listar /dev.
Otro archivo especial es la tubería (pipe), este es un pseudo archivo que se usa para
conectar dos proceso, cuando un proceso A desea enviar datos a otro proceso B, aquél
escribe en la tubería. El proceso B puede leer los datos al leer la tubería. La figura 5 muestra
esta situación.
Proceso
Tubería
A
Proceso
B
Figura 5. Dos procesos conectados por una tubería.
4
El intérprete de comandos
El intérprete de comandos llamado shell (concha) no es parte del sistema operativo, pero
hace un uso intenso de las llamadas al sistema. Cuando un usuario entra al sistema, se inicia
un shell. Una vez activado el shell espera a que el usuario emita un comando. El indicador
de shell (prompt) es generalmente un signo de pesos. Cuando se emite un comando el shell
crea un proceso derivado y espera a que este termine. La entrada o salida de un proceso
puede redirigirse usando < para entrada y > para salida, esto permite utilizar archivos como
entrada o salida estándard. Si se desea que el shell solicite más comandos antes de procesar
el actual, hay que agregar & al final de la línea de comandos. Esto puede ser muy útil para
procesos que llevan mucho tiempo.
LLAMADAS AL SISTEMA
MINIX tiene 41 llamadas al sistema, idénticas a las de UNIX V7. Por ejemplo la llamada
READ tiene tres parámetros, el nombre del archivo, el buffer de lectura y el número de bytes
que se leerá. El código en C sería:
count = read(file, buffer, nbytes);
en count se almacena el número real de bytes leidos.
Llamadas al sistema para el manejo de procesos
La llamada FORK crea un nuevo proceso.
5
Manejo de procesos
pid = fork() - crea un proceso hijo idéntico a proceso padre
s = wait(&status) - espera a que un proceso hijo termine y determina su condición de salida
s = execve(name,argv,envp) - sustituye la imagen esencial de un proceso
exit(status) - pone fin a la ejecución del proceso y produce la condición de salida
size = brk(addr) - fija el tamaño del segmento de datos que se direccionará (addr)
pid = getpid() - produce el id del proceso solicitante
Señales
oldfunc = signal(sinc,func) - arregla que alguna señal sea capturada, pasada por alto, etc.
s = kill(pid,sig) - envia una señal a un proceso
residual = alarm(seconds) - planifica o programa una señal SIGALRM después de cierto tiempo
s = pause() - suspende al solicitante hasta la siguiente señal
Manejo del archivo
fd = creat(name,mode) - crea un nuevo archivo o trunca uno existente
fd = mknod(name,mode,addr) - crea un nodo i especial, regular o de directorio
fd = open(file,how) - abre un archivo para lectura, escritura o ambos
s = close(fd) - cierra un archivo abierto
n = read(fd,buffer,nbytes) - lee datos de un archivo en un buffer
n = write(fd,buffer,nbytes) - escribe datos de un archivo en un buffer
pos = lseek(fd,offset,whence) - mueve el apuntador del archivo a alguna otra parte del archivo
s = stat(name,&buf) - lee y produce la condición de un archivo a partir de su nodo i
s = fstat(fd,buf) - lee y produce la condición de un archivo a partir de su nodo i
fd = dup(fdl) - distribuye otro descriptor del archivo para un archivo abierto
s = pipe(&fd0) - crea una tubería
ioctl(fd,request,argp) - realiza operaciones especiales en archivos especiales
Manejo del directorio y del sistema de archivos
s = link(name1,name2) - crea un nuevo registro del directorio, name2 para name1 del archivo
s = unlink(name) - elimina una entrada del directorio
s = mount(special,name,rwflag) - monta un sistema de archivo
s = unmount(special) - desmonta un sistema de archivo
s = sync() - limpia todos los bloques reservados en la memoria para el disco
s = chdir(dirname) - cambia el directorio de trabajo
s = chroot(dirname) - cambia el directorio raíz
Protección
s = chmod(name,mode) - cambia los bits de protección asociados con un archivo
uid = getuid() - determina el uid del solicitante
gid = getgid() - determina el gid del solicitante
s = setuid(uid) - fija el uid del solicitante
s = setgid(gid) - fija el gid del solicitante
s = chown(name,owner, group) - cambia el propietario y grupo de un archivo
oldmask = umask(complmode) - fija una máscara que se utiliza para descubrir bits de protección
access(name, mode) - verifica si se tiene acceso a un archivo
Manejo del tiempo
seconds = time(&seconds) - determina el tiempo transcurrido en segs. desde el 1o. de enero de 1970
s= stime(tp) - fija el tiempo desde el 1o. de enero de 1970
s = utime(file,timep) - fija la hora del "último acceso" del archivo
s = times(buffer) - fija los tiempos del usuario y del sistema que se han usado hasta ahora
Figura 6. Llamadas al sistema MINIX. El código producido s es -1 si ha ocurrido un error;
fd
es un descriptor de archivo, n es un conteo de bytes. Los otros códigos producidos son los
que el nombre sugiere.
6
La llamada FORK produce una copia idéntica del proceso padre, el valor que genera es cero
en el hijo y pid en el padre.
el código de la figura 7 es un shell simplificado.
while (TRUE) {
/* repetir por siempre */
/* leer la entrada desde la terminal */
read_command(command, parameters);
if (fork() != 0){
/* ramificar el proceso hijo */
wait(&status);
/*código padre */
}else {
execve(command, parameters, 0); /* código hijo */
}
}
Figura 7. Un shell desguarnecido.
la llamada WAIT espera a que termine el hijo y regresa una variable con la condición de
salida. La llamada EXECVE ejecuta un comando.
por ejemplo.
$cp file1 file2
copia el archivo file1 en file2.como muchos comandos el main de cp contiene la
declaración.
main(argc,argv,envp)
argc es el numero de argumentos, argv es un arreglo de cadenas de parámetros, envp es un
apuntador de ambiente donde hay información sobre el tipo de terminal, el directorio
doméstico a un programa, etc.
Los procesos en MINIX dibiden su memoria en tres segmentos: el segmento de texto (el
código del programa) el segmento de datos y el segmento de pila como se muestra en la
figura 8.
7
Dirección (hex)
FFFF
Pila
Interespacio
Datos
Texto
0000
Figura 8. Los procesos tienen tres segmentos: texto, datos y pila.
En este ejemplo, Los tres están en el espacio de dirección, pero
también se soportan espacios para datos e instrucciones
separados.
Llamadas al sistema para señalación
La siguiente tabla resume las señales de MINIX.
(1)
SIGHUP
El modem ha detectado una conexión telefónica
rota
Se ha oprimido la llave DEL en el teclado
Señal de renuncia del teclado
Instrucción ilegal
Trampa de seguimiento
Instrucción IOT
Instrucción EMT
Desbordamiento/insuficiencia de punto flotante
Eliminación
Error de bus
Violación de la segmentación
Argumento erróneo para la llamada al sistema
Escritura en tubería sin lector
Alarma
Señal de terminación generada por el software
2
SIGINT
3*
SIGQUIT
(4)*
SIGILL
(5)*
SIGTRAP
(6)*
SIGIOT
(7)*
SIGEMT
(8)*
SIGFPE
9
SIGKILL
(10)*
SIGBUS
(11)*
SIGSEGV
(12)*
SIGSYS
13
SIGPIPE
14
SIGALRM
15
SIGTERM
16
no asignado
Figura 9. Tipos de señales. Las señales en paréntesis no son soportadas por
MINIX. Los asteriscos denotan señales que provocan vaciados del núcleo si
no se capturan o pasan por alto.
El segmento de datos crece mediante una llamada a
nuevo límite superior de dicho segmento.
BRK
la cual lleva como parámetro el
La tecla DEL suspende la ejecución de un proceso. esto será indeseable en al caso de
procesos en el transfondo, por esto el shell generará después de FORK y antes de EXEC.
8
el programa kill hace uso de la llamada
señal sigkill mata al proceso.
KILL
para enviar señales a cualquier proceso. la
La llamada ALARM permite mandar señales en tiempos predefinidos.
Llamadas al sistema para manejo de archivos
La llamada CREAT crea un archivo, acepta como parámetros el nombre del archivo y el
modo de protección,
fc = creat("abc", 0751);
crea el archivo "abc" con modos rwxr-x--x. El archivo creado se abre para escritura, si
existe se trunca a una longitud de 0 bytes.
Para crear archivos especiales se usa MKNOD. Por ejemplo:
fd = mknod("/dev/tty2",020744,0x0402);
crea un archivo nombrado /dev/tty2 y le da el modo (un archivo especial de caracteres con
los bits de protección rwxr--r--). El tercer parámetro contiene el dispositivo mayor (4) y
menor (2). Solo el superusuario puede hacer una llamada a MKNOD.
Para leer o escribir un archivo existente, primero debe abrirse con OPEN. Esta llamada
especifica el nombre del archivo y un código 0, 1 o 2 que significa abierto para leer, escribir
o ambos. El descriptor de archivo producido puede utilizarse entonces para lectura o
escritura. La lectura y escritura se realiza con READ y WRITE, respectivamente.
Para posicionarse dentro del archivo se utiliza LSEEK, esto permite el manejo de archivos
aleatorios. Los parámetros de LSEEK son: el descriptor de archivo, la posición en el archivo
y un indicador de si la posición es relativa al inicio del archivo, a la posición actual o al
final del archivo. El valor producido por LSEEK es la posición absoluta obtenida dentro del
archivo.
Las llamadas STAT y FSTAT suministran información sobre los archivos, en la primera se
suministra el nombre y en la segunda el descriptor del archivo. Estas hacen uso de la
estructura de la figura 10.
struct stat {
short st_dev;
unsigned short st_ino;
unsigned short st_node;
short st_nlink;
short st_uid;
short st_gid;
short st_rdev;
/* dispositivo a donde pertenece el nodo i */
/* número de nodo i */
/* palabra de nodo */
/* número de enlaces */
/* id del usuario */
/* id del grupo */
/* dispositivo mayor/menor de archivos especiales */
9
long st_size;
long st_atime;
long st_mtime;
long st_ctime;
/* tamaño del archivo */
/* igual que st_mtime */
/* hora de la última modificación */
/* igual que st_mtime */
};
Figura 10. Estructura que se utiliza para producir información de las llamadas al sistema
STAT y FSTAT. Hay tres tiempos presentes para que haya compatibilidad con UNIX.
La llamada DUP crea un nuevo descriptor de archivo para un archivo abierto.
UNIX
hace uso de tuberías, cuando se teclea
cat file1 file2 | sort
el shell crea una tuberia y arregla que la salida estándar del primer proceso escriba en la
tubería, de modo que la entrada estándar del segundo proceso se pueda leer a partir de él. La
llamada al sistema PIPE crea una tuberia y produce dos descriptores de archivo, uno para
escritura y otro para lectura. La llamada es
pipe(&fd[0])
donde fd es un arreglo de dos enteros y fd[0] es el descriptor de archivo para leer y fd[1] es
el que sirve para escribir. La figura 11 muestra el esqueleto para construir una tubería.
#define STD_INPUT 0
/* descriptor del archivo de la entrada estándar */
#define STD_OUTPUT 1 /* descriptor del archivo de la salida estándar */
pipeline(process1, process2)
char *process1, *process2;
{
int fd[2];
/* apuntadores a los nombres del programa */
pipe(&fd[0]);
/* crea una tubería */
if (fork != 0) {
/* El proceso padre ejecuta estas proposiciones */
close(fd[0]);
/* el proceso 1 no necesita leer de la tubería */
close(STD_OUTPUT);
/* prepárese para la nueva salida estándar */
dup(fd[1]);
/* fijar la salida estándar en fd[1] */
close(fd[1]);
/* la tubería ya no se necesita */
execl(process1, process1,0);
} else {
/* El proceso hijo ejecuta estas proposiciones */
close(fd[1]);
/* el proceso 2 no necesita escribir de la tubería */
close(STD_INPUT);
/* prepárese para la nueva entrada estándar */
dup(fd[0]);
/* fijar la salida estándar en fd[0] */
10
close(fd[0]);
/* la tubería ya no se necesita */
execl(process2, process2,0);
}
}
Figura 11. Esqueleto para construir una tubería de los procesos.
La llamada IOCTL se utiliza para cambiar los caracteres empleados para corregir errores del
teclado en la terminal, cambiar el modo de la terminal, etc. En modo elaborado, los
caracteres de borrado y eliminación trabajan normalmente, CRTL-S y CRTL-Q se pueden
utilizar para detener e iniciar la salida de la terminal. CRTL-D significa fin de archivo. DEL
genera una señal de interrupción y CRTL-\ genera una señal de renuncia pra forzar un
vaciado del núcleo.
En modo no elaborado, todas las funciones se desactivan; todos y cada uno de los
caracteres se pasan directamente al programa sin procesamiento especial. Además, una
lectura de la terminal dará al programa cualquier carácter se haya tecleado, aunque sea una
línea parcial, en vez de esperar una línea completa como en el modo leaborado.
El modo Cbreak está situado entre ambos. Los caracteres de borrado y eliminación para
edición se desactivan, como CRTL-D, pero CRTL-S, CRTL-Q, DEL y CRTL-\ se activan.
La llamda IOCTL tiene tres parámetros, por ejemplo
ioctl(fd, TIOCSETP, &sgttyb)
el primer parámetro especifica un archivo, el segundo una operación y el tecero es la
dirección de una estructura que contiene diversas indicaciones. La estructura se muestra en
la figura 12.
/* Estructuras de datos de las llamadas a IOCTL TIOCGETP/TIOCSETP */
struct sgttyb {
char sg_ispeed;
char sg_ospeed;
char sg_erase;
char sg_kill;
int sg_flag;
};
/* velocidad de entrada (no se usa ahora) */
/* velocidad de salida (no se usa ahora) */
/* borrar carácter */
/* eliminar carácter */
/* indicaciones de modo */
/* campos en sg_flags. */
#define XTABS 0006000 /* ocacionar la expansión tabular */
#define RAW
0000040 /* actvar el modo no elaborado */
#define CRMOD 0000020 /* hacer el mapa lf igual a cr + lf */
#define ECHO
0000010 /* activar el eco de la entrada tecleada */
#define CBREAK 0000002 /* activar el modo cbreak */
11
#define COOKED 0000000 /* ni CBREAK ni RAW */
#define TIOCGETP (('t'<<8) | 8)
#define TIOCSETP (('t'<<8) | 9)
Figura 12. Estructura de datos que se usa como el tercer parámetro de IOCTL.
Los bits de sg_flag se pueden fijar para que entren en modo no elaborado o cbreak, ECHO
debe activarse para que la terminal refleje los caracteres, excepto cuando se este tecleando
la contraseña.
Llamadas al sistema para el manejo de directorios
La llamada LINK permite que un archivo figure con dos o más nombres. Considerese la
situación de la figura 13(a), después de
link("/usr/jim/memo","/usr/ast/note");
se obtiene la situación de la figura 13(b), /usr/jim/memo y /usr/ast/note se refieren al mismo
archivo.
/usr/ast
/usr/jim
16 correo
81 juegos
40 prueba
31
70
59
38
/usr/ast
bin
memo
f.c
prog1
16
81
40
70
(a)
/usr/jim
correo
juegos
prueba
nota
31
70
59
38
bin
memo
f.c
prog1
(b)
Figura 13. (a) Dos directorios antes de enlazar /usr/jim/memo al
directorio de ast. (b) Los mismos directorios después del enlace.
Todos los archivos en UNIX tienen un número único, su nodo i (i-node), que los identifica.
Un directorio es simplemente un archivo que contiene un conjunto de parejas (número i,
nombre ASCII).
En la figura 13 el número a la izquierda de los archivos es su número de nodo i, note que
/usr/jim/memo y /usr/ast/note se refieren al mismo nodo i. La llamada UNLINK elimina
enlaces en el directorio, si no existe ya ningún enlace el archivo es eliminado.
La llamada MOUNT permite que dos sistemas de archivos se combinen en uno. Al ejecutar la
llamada a MOUNT, el sistema de archivos de un disco removible se puede anexar al sistema
de archivo raíz, como se muestra en la figura 14. Cuando el sistema de archivos ya no se
necesita, se puede desmontar con la llamada UNMOUNT.
12
bin
dev
lib
´mnt
usr
(a)
bin
dev
lib
usr
(b)
Figura 14. (a) Sistema de archivo antes del montaje. (b) Sistema de
archivo después del montaje.
La llamada al sistema SYNC indica a MINIX que debe escribir todos los bloques que se han
modificados desde que se leyeron. Cuando inicia MINIX, un progama llamado update
(actualización) se inicia como proceso de fondo para hacer una SYNC (sincronización) cada
30 segundos, con objeto de mantener la limpieza de la reserva.
Otras dos llamados son CHDIR y
última cambia el directorio raíz.
CHROOT.
La primera cambia el directorio de trabajo y la
Llamadas al sistema para protección
En MINIX todo archivo tiene un modo de 11 bits que se utiliza con fines de protección.
Nueve de estos bits son los bits de lectura, escritura y ejecución del propietario, grupo y
otros. La llamada CHMOD hace posible cambiar el modo de un archivo. Por ejemplo, para
hacer que un archivo sea sólo de lectura para todos excepto el propietario, se podra ejecutar
chmod("file", 0644);
Los otros dos bits de protección, 02000 y 04000, son los bits SETGID (fijar el id del grupo)
y SETUID (fijar el id del usuario), respectivamente. Cuando algún usuario ejecuta un
programa con el bit SETUID activado, en la duración de ese proceso el uid efectivo del
usuario se cambia por el del propietario del archivo. Esta característica se utiliza
ampliamente para permitir a los usuarios ejecutar programas que efectúen solo funciones de
superusuario, como la creación de directorios.
13
Cuando un proceso ejecuta un archivo que tiene el bit SETUID o SETGID en su modo, éste
adqiere un uid o gid efectivo diferente de su uid o gid real. Las llamadas al sistema GETUID
y GETGID se han proporcionado para obtener el uid gid real y efectivo. Para ésto, existen
cuatro rutinas de biblioteca: getuid, getgid, geteuid y getegid. Las dos primeras determinan
el uid/gid real y las dos últimas los efectivos.
Los usuarios ordinarios no pueden cambiar su uid, excepto al ejecutar programas con el bit
SETUID activado, pero el superusuario tiene otra posibilidad: la llamada al sistema SETUID,
que fija los uid efectivo y real. SETGID fija ambos gid. El superusuario también puede
cambiar el propietario de un archivo con la llamada al sistema CHOWN.
La llamada UMASK, fija la máscara de bit interna dentro del sistema, que se utiliza para
descubrir bits de modo cuando se crea un archivo. Después de la llamada
umask(022)
el modo proporcionado por CREAT y
utilizados. Por lo tanto, la llamada
MKNOD
tendrá los bits 022 descubiertos antes de ser
creat("file", 0777)
fijará el modo en 0755 en vez de 0777.
La llamada ACCESS se utiliza para verificar permisos. El parámetro mode es 4 para verificar
el acceso a lectura, 2 para escritura y i1 para ejecución.
Llamadas al sistema para el manejo del tiempo
produce la hora corriente en segundos, con 0 en el 1 de enero de 1970 a la media
noche. STIME le permite al superusuario poner la hora del sistema. UTIME permite al
propietario de un archivo cambiar el tiempo almacenado en un nodo i de un archivo. Por
último, TIMES produce la información contable a un proceso, de modo que pueda observar
cuánto tiempo de la CPU ha utilizado directamente y cuanto tiempo de la misma ha gastado
el sistema mismo en su beneficio.
TIME
ESTRUCTURA DE UN SISTEMA OPERATIVO
Sistemas monolíticos
Un sistema monolítico es aquel que se escribe como un conjunto de procedimientos, cada
uno de los cuales puede llamar a cualquier otro. Cada procedimiento tiene una interfaz bien
definida en término de parámetros y resultados.
14
Las llamadas al sistema proporcionados se solicitan al colocar los parámetros en sitios bien
definidos, como registros o la pila y después ejecutar una instrucción de trampa especial
conocida como llamada de kernel o llamada supervisora.
Esta instrucción cambia la máquina de modo usuario a modo kernel y transfiere el control
al sistema operativo, que se muestra como el evento (1) de la figura 15. El sistema examina
después los parámetros de la llamada para determinar qué llamada al sistema se efectuará,
que se muestra como (2) en la figura 15. Después, el sistema operativo indiza en una tabla
que contiene en el canal k un apuntador al procedimiento que realiza la llamada al sistema
k. Esta operación, que se muestra como (3) en la figura 15, identifica el procedimiento de
servicio, que después es llamado. Por útimo, se termina la llamada al sistema y el control se
devuelve al programa de usuario.
Memoria principal
Programa del usuario 2
Programa del usuario 3
Llamada a kernel
4
Procedimiento
de servicio
3
1
2
Los programas del
usuario corren en
modo de usuario
El sistema
operativo
corre en
modo kernel
Tabla de despacho
Figura 15. Como puede hacerse una llamada al sistema: (1) El programa del
usuario captura el kernel. (2) El sistema operativo determina el número de
servicio que se pide. (3) El sistema operativo localiza y llama a un
procedimiento de servicio. (4) El control se devuelve al programa del usuario.
Esta organización sugiere una estructura básica del sistema operativo:
1. Un programa central que invoque el procedimiento de servicio solicitado.
2. Un conjunto de procedimientos de servicios que realicen las llamadas al sistema.
3. Un conjunto de procedimientos de uso general que ayude a los procedimientos de
servicio.
Esto sugiere la estructura de la figura 16.
15
Procedimiento central
Procedimientos de servicio
Procedimientos de uso general
Figura 16. Modelo de estructuración simple de un sistema monolítico.
Máquinas virtuales
Este sistema se basa en una observación astuta: un sistema de tiempo compartido ofrece (1)
multiprogramación y (2) una máquina extendida con una interfaz más adecuada que el
hardware simple.
El corazón del sistema, conocido como monitor de la máqina virtual, corre en el
hardware y realiza la multiprogramación, ofreciendo no una, sino varias máquinas virtuales
para el siguiente estrato hacia arriba, como se muestra en la figura 17. Estas máquinas
virtuales no son máquinas extendidas, con archivos y otras características atractivas. En su
lugar, son copias exactas del hardware simple, incluyendo el modo de kernel/usuario, E/S,
interrupciones y todo lo demás que tiene la máquina real.
370 virtuales
Llamada al sistema aquí
Instrucciones de E/S aquí
CMS
Trampa aquí
CMS
CMS
Trampa aquí
VM/370
Hardware al descubierto del 370
Figura 17. Estructura de VM/370 con CMS.
Cada máquina virtual puede correr cualquier sistema operativo que corra directamente en el
hardware. De hecho, diferentes máquinas virtuales pueden, ejecutar diferentes sistemas
operativos.
Modelo del cliente servidor
El método general consiste en implementar a mayoría de las funciones del sistema
operativo en procesos del usuario. Para solicitar un servicio, como la lectura de un bloque
de un archivo, un proceso del usuario (ahora conocido como proceso cliente) envia la
16
solicitud a un proceso servidor, que después realiza el trabajo y devuelve la respuesta. En
este modelo, que se muestra en la figura 18, todo lo que el kernel hace es manejar la
comunicación entre clientes y servidores.
Proceso del Proceso del Servidor del Servidor de
cliente
cliente
proceso
la terminal
Servidor de Servidor de Modo de
archivo
memoria
usuario
Modo kernel
Kernel
El cliente obtiene servicio enviando mensajes
a los procesos servidores
Figura 18. Modelo del servidor cliente.
Otra ventaja del modelo de cliente servidor es su adaptabilidad pra utilizarse en sistemas
distribuidos, como se muestra en la figura 19.
Máquina 1
Máquina 2
Máquina 3
Máquina 4
Cliente
Servidor de
archivo
Servidor de
procesos
Servidor de
la terminal
Kernel
Kernel
Kernel
Kernel
Red
Mensaje del cliente al servidor
Figura 19. Modelo del cliente servidor en un sistema distribuido.
17
UNIX
Proceso de entrada al sistema
Al inicio el sistema mostrara la señal de entrada.
login:_
El usuario deberá responder con su nombre de usuario el cual le fué asignado por el
administrador. El sistema solicita a continiación la palabra clave. Si no hay problemas el
sistema informa de la última vez que el usuario ingreso. Normalmente el indicador de
solicitud de comandos el signos de pesos ($). En el momento en el que se muestra este el
sistema espera a que el usuario escriba algún comando.
Comandos básicos
date - muestra la fecha actual.
CTRL-U
- borra la línea actual.
stty - modifica la asignación de teclas
who- muestra una lista de usuarios conectados al sistema.
El formato general de las ordenes en unix es .
Orden opciones expresión nombre_de_archivo
passwd - cambia la palabra clave.
Caracteres especiales
/- se interpreta como el caracter escape.Sirve para cambiar el significado de los caracteres
especiales.
*,?,[,] - se utilizan para abreviar los nombres de archivos .
$ - se utiliza para la sustitución de argumentos
CTRL-D
- señal de terminación.
CTRL- S, CTRL-Q
- suspende y reanuada la salida a la terminal.
Consultas de manuales con man
18
El comando man permite desplegar información de todos los comandos de
da ayuda de como usar este comando.
UNIX.
También
$man man
La información que muestra lo siguiente:
NAME - nombre de la orden y sus alternativos y una breve descripción.
SYNOPSIS - muestra como se usa la orden se indican posibles opciones y el tipo de los
argumentos esperados.
DESCRIPTION - da mas detalla de lo que da la orden y conmo se midifica por las
opciones.
FILES - da los nombres de los archivos más importantes para la orden.
SEE ALSO - se refiere a las ordenes relacionadas u otra documentación que podria ser util
para el lector.
DIAGNOSTICS - da explicaciones sobre los misteriosos mensajes de error que pueden
aparecer si la orden se utiliza mal .
BUGS - da detalles de los errores conocidos que existen en la orden y a veces le dice
obviarlos.
Directorios y archivos
pwd - da el directorio actual.
cat - despliega un archivo en pantalla.
pg - despliega archivos por pagina.
tail - despliega el final de un archivo , diez líneas por default.
ls - lista el contenido del directorio. la información desplegada tiene el siguiente formato.
Las claves del primer carácter del listade de archivos es:
d
l
b
c
s
entrada de directorio.
un enlace simblico.
archivo especial de bloques .
archivo especial de caracteres.
semaforo senix.
19
m
p
s
-
datos compartidos senix (memoria).
archivo especial fifo ( llamado tuberia, pipe).
direccion de familia socket af-unix (AF_UNIX address family socket) .
archivo regular.
file - determina el tipo de un archivo.
20