0% encontró este documento útil (0 votos)
610 vistas81 páginas

Minix - Sistemas Operativos

Cargado por

Natalia Guzman
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
610 vistas81 páginas

Minix - Sistemas Operativos

Cargado por

Natalia Guzman
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 81

IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS

lng. Lduardo Abanto Lopez


FACULTAD DE INGENIERIA
ELECTRONICA E INFORMATICA
SIS1LMAS CLkA1IVCS
Ing. Lduardo Abanto Lopez
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
MINIk
Es un sistema operativo educacional, diseado por Tanembaum con dos propsitos
bsicos:
fcil de comprender
fcil de modificar
A nivel de usuario es muy parecido a UNIX(V7), si bien su realizacin interna es distinta.
MINIX = MINIUNIX
Sacrifica eficiencia por modularidad y comprensin
Soporta: MULTIPROCESO y MULTIUSUARIO
Funcionamiento MINIX es muy parecido a UNIX en cuanto a:
El procesador de comandos (SHELL BOURNE)
Los comandos
Las llamadas al sistema
Como todo sistema operativo MINIX se divide en cuatro partes
El administrador del procesador
El administrador de entrada/salida (manejadores de dispositivos)
El administrador de la memoria
El sistema de ficheros
El sistema est construido con mdulos separados que comunican por un sistema de
mensajes
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
CARACTERISTICAS DE MINIX 2.0
* Este sistema operativo est diseado para IBM PC o compatible (con los mismos chips
de I/O), no utiliza la BIOS), XT, AT, 360, PS/2 (8088, 80286, 80386, PENTIUM).
Existen versiones para ATARI, AMIGA, y MACINTOSH
Emuladores sobre UNIX y SUN
Precisa una particin de 30 MB
Contiene drivers para monocromo, CGA, HERCULES, EGA
Soporta hasta 16 MB de memoria (286) y 4GB en 386 y superior
Puertos: 2 RS232 (terminal adicional o modem)
Puerto CENTRONICS (impresora).
Controladores de disco duro: XT, AT, BIOS
Manejadores de red TCP/IP
Se distribuye como un CD
Llamadas al sistema compatibles con POSIX
Licencia libre para educacin e investigacin
Est escrito en C (ANSI y IEEE POSIX) basndose en el compilador Amsterdam
Compiler Kit, (Kernighan y Ritchie C), admite flags como:
-o la salida de la compilacin es un fichero especificado en vez de a.out.
-D define una macro.
-I busca en un directorio determinado para los ficheros include.
Tiene un preprocesador para #define, #include, #ifdef
Linus Tovard, deci convertirlo en un sistema operativo competitivo con abundantes
herramientas de desarrollo y creo LINUX.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
INSTALACION DE MINIX
Los ficheros de MINIX se pueden obtener en las siguientes direcciones:
- De los creadores en la Universidad Libre de Amterdam
http://www.cs.vu.nl/~ast/minix.html
- Una copia de la misma en el web de la asignatura en
http://labsopa.dis.ulpgc.es
En el CD ROM que viene con el libro "Sistemas Operativos Diseo e implementacin".
Segunda Edicin. Tanenbaum. Prentice Hall.
CONTENIDO DEL CD ROM
BOCHS - Interprete 386 para simular MINIX sobre UNIX
COMPILER - Compiladores
DEBUGGER - El debugger de MINIX
DOSUTILS - Programas de MSDOS de ayuda para instalar MINIX
LISTING - Codigo fuente
MINIX - Directorio donde se encuentran los ficheros de MINIX
NETUTILS - Utilidades para instalar MINIX en red
SMX - Simulador de MINIX sobre SPARC - Solaris
DIRECTORIO /MINX
El directorio MINIX contiene la version 2.0 de MINIX en los siguientes ficheros y
directorios:
i386\ROOT - La imagen de boot y sistema de ficheros /ROOT
i386\USR - Parte basica del sistema de ficheros /USR para instalar
i386\USR.TAZ - Todos los programas de MINIX, librerias, resto de /USR
i86 - Directorio con version antigua de MINIX para PCs 286
SYS.TAZ - Fuentes de MINIX y manuales
CMD.TAZ - Fuentes de los comandos
INSTALL - Guia de instalacin (ASCII text y PostScript)
MANUALS - Paginas de manuales
EXAMPLE.TXT - Un listado de pantalla ejemplo de instalacin
NETINSTL.TXT - Comentarios para instalar MINIX en red
XT640K.TXT - Notas para ejecutar MINIX en PCs antiguos 286
fdvol.exe - Transiere desde el CD ROM a floppy
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
MNIMO HARDWARE REQUERIDO MINIX 2.0 (versin 32 bits)
PC 386-486-PENTIUM
2MB RAM
30 MB Disco
disquetera 3.5"
Video CGA, EGA, VGA
Antes de comenzar la instalacin de MINIX hay que leer en el siguiente orden los
ficheros:
Readme.txt en el directorio raiz del CD ROM
Readme.txt en el directorio MINIX
Install en el directorio MINIX
Para instalar MINIX en un disco duro, desde un CD ROM hay que ralizar los siguientes
pasos:
1 Pasar los ficheros de distribucin de MINIX (xxx.TAZ, archivos tar comprimidos) en el
CD a floppies
El programa fdvol.exe transfieren ficheros del CD ROM a floppies ya formateados
fdvol 1440 A: i386\ROOT i386\USR
- Crea el disco de arranque boot con
el sector de arranque, mas el kernel del s.o.
dos particiones sobre el floppy fd0a para el sistema de fichero ROOT y fd0c para el
sistema bsico de fichero /USR
fdvol 1440 A: i386\USR.TAZ - sistema basico 3 floppies
fdvol 1440 A: SYS.TAZ - fuentes del sistema 2 floppies
fdvol 1440 A: CMD.TAT - fuentes de los comandos 3 floppies
2 Crear una particin primaria en el disco duro para MINIX > 30 MB
El programa part (MINIX), maneja las particiones.
El programa fdisk (MSDOS), maneja las particiones.
3 Transferir los ficheros desde los floppies a la particin MINIX
Arrancar MINIX desde floppy con el disco BOOT
Pulsar la tecla = en las opciones del menu
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Escribir fdoc para indicar desde donde cargar /USR
Entrar en el sistema log in como root
Ejecutar setup
Introducir el tipo de teclado spanish
Si necesita crear una particin para MINIX, ejecute part
Introduzca el nombre de la particin creada por ejemplo /dev/hd2
Se crearan dos particiones /dev/hd2a de 1440 kb para /ROOT, y
/devhd2c con el resto para /USR
Se copian ficheros desde floppy a la particin
Si la memoria RAM >= 4MB se crea una memoria cache de segundo nivel en RAM de
1MB para transferencia de ficheros
En este punto la imagen del sistema operativo, y un sitema de ficheros mnimo ya estan
cargados en la particin por lo que el sistema ya es operativo. Se puede rearrancar el
sistema con halt
Ejecutar setup /usr para copiar los 3 floppies /USR
Si se desea instalar los fuentes:
Ejecutar setup /usr para copiar los 2 floppies /SYS
Ejecutar setup /usr para copiar los 3 floppies /CMD
ARRANCAR MINIX
* No utiliza la ROM BIOS ya que la BIOS no est manejada por interrupciones lo que la
hace inservible para sistemas en tiempo compartido.
* Programa directamente todos los circuitos de I/O.
- PASOS A SEGUIR.
1) Encienda el computador
Cuando el computador se enciende, se ejecuta un programa "BIOS", cargado en la ROM
del sistema, este busca un fichero ejecutable "MASTER BOOTSTRAP" en el primer sector
del floppy o del disco duro, el cdigo se encuentra en el fichero masterboot.s, lo carga en
memoria en la posicin 0x7C00 y le da control, contiene la tabla de particiones del disco;
este busca el programa "BOOTSTRAP" o "BOOTSECTOR" en el primer sector de la
particin activa, su cdigo se encuentra en el fichero bootblock.s, y le da control; este
busca el programa "BOOT MONITOR", en el directorio raiz, cuyo fuente se encuentra en
boot.c, lo carga en memoria 0x10000 y le da control, este carga en memoria 0x00800 la
imagen ejecutable del sistema operativo "MINIX", que se encuentra en el directorio
/MINIX, y contiene las partes del sistema operativo kernel, mm, fs, init. Posteriormente se
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
ejecuta el S.O. en el punto de entrada MINIX de mpx.s
2. Aparece en pantalla el mensaje
Minix boot monitor 2.5
Pres ESC to enter the monitor
Hit a key as follows:
= Start Minix
al presionar la tecla " = "
3. MINIX borra la pantalla y presenta una linea en la parte superior con
Minix 2.0.0 Copyright 1997 Prentice Hall
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Executin in 32-bit protect mode
Memory size=8010K MINIX=295K RAM disk=480K Available=7236K
- Memoria total del micro.
- Memoria ocupada por el S.O. MINIX (incluyendo tablas y buffers).
- Tamao del disco virtual RAM.
- Memoria disponible para los usuarios, esta no debe ser negativa y se necesitan
al menos 200k para trabajar.
4. El sistema de ficheros ROOT se copia en el disco virtual RAM.
5. El sitema de ficheros en la particin MINIX (hd2c) se monta en /USR
/dev/hd2c is read-write mounted on /usr
6. Se ejecuta el fichero de iniciacin del sistema /etc/rc
# Inicializa de algunos ficheros del administrador como:
/etc/mtab - fichero con los mounts realizados
/etc/utmp - guarda los logins realizados
7. Lanza en modo tanda varios comandos update (sync cada cierto tiempo)
Starting standard daemons: update
Minix Release 2.0 version 0
8. Presenta en pantalla login:
teclee el nombre root
cuidado MINIX distingue entre maysculas y minsculas
9. Si ha entrado en el sistema, se ejecuta el procesador de comandos SHELL y nos
presenta su smbolo (# para el root $ un usuario normal) indicando que esta listo para:
- Aceptar un comando.
- Editar un fichero.
- Montar un sistema de ficheros. (/etc/mount /dev/fd0 /user)
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
10. Para despedirse del sistema.
- Si existen procesos ejecutandose en modo tanda debe terminarlos con el comando kill.
- Ejecutar el comando sync, (almacena en disco cualquier buffer pendiente).
CTRL-d. Despide la sesin y aparece el mensaje
login: y se puede entrar otra vez
Para apagar el computador, escriba shutdown
The system will shutdown NOW
COMO USAR MINIX
A nivel de usuario MINIX trabaja como UNIX estndar POSIX
- El procesador de comandos SHELL funcionalmente es el mismo que (V7).
- Redirecciona los ficheros estandar de entrada salida > <.
- Ampersand (&) para lanzar un proceso en modo tanda.
- Tiene pipe |. ejem. cat aaa bbb ccc | sort > ddd &
- Caracter mgico en nombres de ficheros (*,?) .
- Dos puntos para separar varios comandos en una lnea :.
- Admite ficheros de comandos "script" con las estructuras if, for, while, case.
- CTRL-h borra caracter izquierdo del cursor.
- @borra la lnea.
- CTRL-s, CTRL-q bloquea y desbloquea la pantalla.
- CTRL-d indica el fin de fichero desde el teclado.
La funcin de estas teclas puede cambiarse utilizando:
La llamada al sistema IOCTL. - El comando stty
Una de las mayores diferencias entre MINIX y UNIX son los editores:
editores de UNIX editor de MINIX
ed ed
emacs mined
elle
vi elvis
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
ed editor de linea muy sencillo.
mined es un editor de pantalla, pequeo, rpido y fcil de aprender.
elle editor de ventanas, multifichero, con la filosofia de emacs.
elvis funcionalmente igual al vi, y ex de UNIX Berkeley.
LA ESTRUCTURA DE FICHEROS EN MINIX
Minix utiliza para el directorio una estrucutra en rbol.
El directorio ROOT siempre est ubicado en memoria RAM y contiene los
siguientes subdirectorios:
/bin - contiene los programas binarios (ejecutables) ms utilizados. (resto en
/usr/bin).
/dev - contiene ficheros especiales para los dispositivos de I/O
/etc - contiene ficheros y programas para la administracin del sistema y
miscelaneos
/fd0 - directorio vacio para ubicar un FS del usuario
/fd1 - directorio vacio para ubicar un FS del usuario
/minix - contiene la imagen ejecutable del sistema operativo
/mnt - directorio vacio
/root - directorio para el root
/tmp - utilizado para contener ficheros temporales
/usr - el disco del sistema se monta aqu
contiene ficheros de inicializacin
.ellepro.b1
.exrc
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
.profile
y boot el Boot Monitor
SUBDIRECTORIO /bin
debe contener los programas utilizados ms frecuentemente, ya que se encuentra
en RAM.
cat, date, echo, expr, false, fsck, halt, loadkeys, mount, printroot, pwd, readclock,
reboot, sh, sync, test, true, umount
SUBDIRECTORIO /dev contiene ficheros especiales para los dispositivos de I/O
Mayor dev, menor dev
Memoria 1
/dev/ram 1,0 - el disco virtual RAM
/dev/mem 1,1 - memoria absoluta, leer de este fichero es leer desde el byte 0 (el
vector de interrupciones)
/dev/kmem1,2 - memoria del ncleo, comienza en la posicin 0x600
/dev/null 1,3 - equipo nulo (los datos escritos en el se pierden)
/dev/port 1,4 - acceso a los puertos I/O en modo protegido.
Floppy 2
/dev/fd0 2,0 - lee o escribe en el disco floppy 0, 5.25", 360K
/dev/fd0a 2,
/dev/fd0b 2,
/dev/fd0c 2,
/dev/fd0d 2,
/dev/fd1 2,1 - disco 1, 5.25", 360K
/dev/pc0 2,4 - disco 0, 5.25", 360K
/dev/pc1 2,5 - disco 1, 5.25", 360K
/dev/at0 2,8 - disco 0, 5.25", 1.2M
/dev/at1 2,9 - disco 1, 5.25", 1.2M
/dev/ps0 2,16 - disco 0, 3.5" , 720K
/dev/ps1 2,17 - disco 1, 3.5" , 720K
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
/dev/pat0 2,20 - disco 0, 5.25 , 1.2M
/dev/pat1 2,21 - disco 1, 5.25 , 1.2M
/dev/PS0 2,28 - disco 0, 3.5" , 1.44M
/dev/PS1 2,29 - disco 1, 3.5" , 1.44M
Disco duro3
/dev/hd0 3,0 - manejador del disco duro 0, todo el disco
/dev/hd1 3,1 - manejador del disco duro 1 todo el disco
/dev/hd1a 3, - manejador del disco duro 1 particin 1
/dev/hd1b 3,
/dev/hd1c 3,
/dev/hd1d 3,
/dev/hd2 3,2 -
/dev/hd3 3,3 -
/dev/hd4 3,4 -
/dev/hd5 3,5 - manejador del disco duro 1, todo el disco
/dev/hd6 3,6 - " " " " particin 1
/dev/hd7 3,7 - " " " " " 2
/dev/hd8 3,8 - " " " " " 3
/dev/hd9 3,9 - " " " " " 4
Terminales 4
/dev/console 4,0 - terminal 0 (principal)
/dev/log 4
/dev/ptyp0 4,0 - terminal 0 (consola) igual que /console
/dev/ptyp1 4,1 - RS232-C puerto 1
/dev/ptyp2 4,2 - RS232-C puerto 2
/dev/ptyp3
/dev/tty00 4
/dev/tty01 4
/dev/ttyc1 4
/dev/ttyp0 4
/dev/ttyp3 4
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Terminal annimo 5
/dev/tty 5,0 - terminal actual, en monousuario coincide con la consola
Impresora 6
/dev/lp 6,0 - es un fichero solo de escritura, escribe los byts en la impresora sin
modificarlos. Tipo Centronics.
TCP/IP 7
/dev/eth 7,0 - Ethernet
/dev/ip 7,
/dev/tcp 7
/dev/udp 7
CD-ROM 8
/dev/cd0 8,0
/dev/cd1 8,1
/dev/cd1
[a,b,c,d]
/dev/cd2 8,6
/dev/cd3 8,
/dev/cd4 8,
Discos SCSI 10
/dev/rst4 10
/dev/sd0 10
/dev/sd0a 10
/dev/sd0b 10
/dev/sd0c 10
/dev/sd0d 10
/dev/sd1 10
/dev/sd2 10
/dev/sd3 10
/dev/sd4 10
/dev/sd9 10
Audio 13
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Mixer 14
mknod - crea un fichero especial ejem. mknod /dev/pc2 b 2 6 360
/dev/pc2 - fichero especial, b - transferencias por bloque 2 - numero Mayor, 6 -
numero menor, 360 - tamao 360K
Tipos de ficheros-device para floppys
Nombre MINOR
dev
Pulg Drive Floppy Tamao Parmetros
/dev/fd0 0 5.25 360K 360K/1.2M Todo Variable
/dev/fd1 1 5.25 360K 360K/1.2M Todo Variable
/dev/pc0 4 5.25 360K 360K 360K Fijo
/dev/pc1 5 5.25 360K 360K 360K Fijo
/dev/at0 8 5.25 1.2M 1.2M 1.2M Fijo
/dev/at1 9 5.25 1.2M 1.2M 1.2M Fijo
/dev/qd0 12 5.25 720K 360K 360K Fijo
/dev/qd1 13 5.25 720K 360K 360K Fijo
/dev/ps0 16 3.5 720K 720K 720K Fijo
/dev/ps1 17 3.5 720K 720K 720K Fijo
/dev/pat0 20 5.25 1.2M 360K 360K Fijo
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
/dev/pat1 21 5.25 1.2M 360K 360K Fijo
/dev/qh0 24 5.25 1.2M 720K 720K Fijo
/dev/qh1 25 5.25 1.2M 720K 720K Fijo
/dev/PS0 28 3.5 1.44M 1.44M 1.44M Fijo
/dev/PS1 29 3.5 1.44M 1.44M 1.44M Fijo
SUBDIRECTORIO /etc
Contiene parte de los ficheros de datos y configuracin del sistema,
otros se encuentran en /usr/etc.
/etc/ethers - fichero con datos de direcciones ethernet
/etc/fstab - tabla del sistema de ficheros
/etc/group - contiene nombres de los grupos de usuarios
/etc/hostname.file - nombre del sistema local
/etc/hosts - fichero de datos de direcciones TCP/IP
/etc/hosts.equiv - direccin equivalente para la red
/etc/keymap - mapa de teclas para el teclado
/etc/motd - mensaje de inicio en el login.
/etc/mtab - creado al iniciarse para base de datos de los mounts
/etc/passwd - fichero con los usuarios del sistema
/etc/psdatabase - informacin del ncleo para el comando ps
/etc/profile - fichero de inicio para el shell
/etc/rc - fichero script para inicio del sistema
/etc/resolv.conf - nobre del sistema para el dominio TCP/IP
/etc/services - nombres para los servicios TCP/IP
/etc/shadow - fichero con las paswords encriptadas
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
/etc/termcap - secuencias de escapes para el terminal de Berkeley
termcap
/etc/ttys - activa o desactiva lineas RS232 para usarse por un terminal.
Contiene una lnea por cada terminal en el sistema, inicialmente un
terminal de consola, contiene el valor 100. Cuando el sistema arranca,
el programa init lee este fichero y lanza un proceso para cada terminal.
/etc/ttytype - configuracin del terminal
/etc/umount - desmonta un sistema de ficheros.
/etc/utmp - creado al iniciarse para almacenar los logins
SUBDIRECTORIO /fd0 y SUBDIRECTORIO /fd1
Directorios vacios para que el usuario monte su sistema de ficheros.
SUBDIRECTORIO /minix
Contiene la imagen ejecutable del sistema operativo minix
SUBDIRECTORIO /mnt
Directorio vacio
SUBDIRECTORIO /root
Directorio para el usuario root.
SUBDIRECTORIO /tmp
Lo utilizan los programas para situar ficheros temporales, se situa en
RAM para que los programas sean ms rpidos. Existe otro en /usr/tmp
SUBDIRECTORIO /usr - ficheros del sistema
/usr/adm - el fichero /usr/adm/wtmp contiene record de login y logout
/usr/ast - home directorio para el usuario Andrew S. Tanenbaum
/usr/bin - contiene los ejecutables binarios, cc, cp, ls, man,...
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
/usr/etc - directorio del administrador
/usr/include - ficheros cabecera para el sistema
/usr/include/minix - ficheros cabecera especificos para MINIX
/usr/include/sys - mas ficheros cabecera
/usr/lib - librerias para el compilador y otros soportes
/usr/lib/cawf - ficheros para formatear texto
/usr/lib/tmac - macros para nroff
/usr/lib/dict - lista de palabras American English
/usr/lib/libc.a - librera compilada solo para minix 1.5 (8086)
/usr/local - software local
/usr/local/bin - utilidades locales
/usr/local/man - paginas locales del manual
/usr/local/src - fuentes locales
/usr/man - directorio con las paginas del manual
/usr/man/cat* - paginas del manual preformateadas
/usr/man/man0 - seccin 0, libro de estilos de los comandos de usuario
/usr/man/man1 - comandos de usuario
/usr/man/man2 - llamadas al sistema
/usr/man/man3 - librera con rutinas
/usr/man/man4 - ficheros asociados a equipos
/usr/man/man5 - formatos de los ficheros
/usr/man/man6 - juegos
/usr/man/man7 - miscelneos
/usr/man/man8 - utilidades del sistema
/usr/man/whatis - tabla de paginas del manual
/usr/mdec - cdigo del bootstrap
/usr/preserve - buffers para el editor elvis
/usr/spool - directorios especiales de spool
/usr/spool/at - directorio de spool para at
/usr/spool/lpd - directorio spool para impresora (futuro)
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
/usr/spool/mail - directorio spool para mail
/usr/spool/uucp - directorio spool para kermit y uucp (futuro)
/usr/src - raiz del arbol de los fuentes del sistema y comandos
/usr/src/boot - Monitor Boot
/usr/src/LICENCE - licencia para utilizar MINIX
/usr/src/commands - fuentes de los comandos
/usr/src/inet - fuentes para la red TCP/IP
/usr/src/fs - fuentes del manejador de ficheros fs
/usr/src/lib - directorio de fuentes de librerias
/usr/src/lib/amiga - fuentes de librerias para amiga
/usr/src/lib/ansi - fuentes de librerias para procedimientos C
/usr/src/lib/atari - fuentes de librerias para atari
/usr/src/lib/ibm - fuentes de librerias para ibm-pc
/usr/src/lib/mac - fentes de librerias para macintosh
/usr/src/lib/other - fuentes de otras librerias
/usr/src/lib/posix - fuentes de librerias para POSIX
/usr/src/lib/string - fuentes para manejo de strings
/usr/src/kernel - fuentes del nucleo kernel
/usr/src/mm - fuentes del manejador de memoria mm
/usr/src/user - directorio para colocar a los usuarios
.ashrc - para el arranque del Ash (shell)
.ellepro.b1 - para el arranque del editor Elle (compilado)
.ellepro.e - para el arranque del editor Elle (texto)
.exrc - para el arranque del editor Ex/vi
.profile - para el arranque del shell de un usuario
.rhosts - fichero de permisos para usuarios remotos
/usr/src/test - fuentes y binarios para hacer test
/usr/src/tools - utilidades para construir disco boot de MINIX
/usr/src/tmp - directorio para ficheros temporales
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
FICHEROS .profile
Cuando se hace un logn, se ejecuta el SHELL y este mira si en el
directorio del usuario existe un fichero .profile y si lo encuentra lo
ejecuta, este fichero contiene comandos y variables para el SHELL y
parmetros para stty.
Ejemplo /usr/ast/.profile
HOME= /usr/ast
PATH=:/bin:/usr/bin:user/bin: HOME/bin:
m= "/etc/mount /dev/fd0/user"
n= "/etc/umount /dev/fd0"
m1="/etc/mount /dev/fd1/user"
n1="/etc/umount /dev/fd1"
export PATH HOME PS1 PS2
Las teclas de funcin F1 y F2 hacen que aparezcan algunas tablas del
sistema sobre la pantalla.
F1 muestra la tabla de procesos, los valores que aparecen en la
columna user y sys son el nmero de pulsos de reloj cargados a
cada proceso.
MONTAR UN SISTEMA DE FICHEROS
El comando montar /etc/mount la llamada al sistema
MOUNT, permiten enganchar un sistema de ficheros en disco con el
rbol principal, situado en memoria RAM.
Dada la situacin de la figura.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Si ejecutamos el comando /etc/mount /dev/fd0 /b la situacin final
es:
Si se desea quitar el disco, hay que realizar la operacin inversa
desmontar el disco o bien con la llamada al sistema UMOUNT con el
comando:
desmontar disco 1 /etc/umount /dev/fd0
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
SUPER USUARIO
Los super usuarios tienen mayor capacidad que los usuarios normales.
Pueden cambiar todas las protecciones.
Tienen un indicador de SHELL especial #.
Para entrar como super usuario haga un logn como root,
O bien utilice el comando su.
El comando su, crea otra sesion de shell, por lo que se consume memoria.
Algunos comandos como mkfs, chown, mknod solo pueden ejecutarse por el
super usuario.
HACER UN NUEVO SISTEMA DE FICHEROS
El sistema de ficheros en MINIX incluye.
root
/usr
La nica diferencia entre estos sistemas de ficheros (a parte de su contenido)
es su tamao.
El tamao del disco virtual RAM se calcula dinmicamente cuando el sistema
arranca, leyendo el superbloque de root.
Una vez formateado el floppy o la particin del disco, una de las cosas que el
super usuario hace es crear un nuevo sistema de ficheros con el comando
mkfs
y luego copiar ficheros en l.
Cuando se crea un sistema de ficheros nuevo se escribe en el superbloque, el
nmero de bloques (1k) y el nmero de nodos.
El comando df /dev/fd0 muestra bloques y nodos libres del disco
Ejemplo: Hacer un sistema de ficheros vacio de 360 bloques en el disco 1.
mkfs /dev/fd0 360
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Se puede construir un sistema de ficheros inicializado con directorios y
ficheros.
mkfs /dev/fd0 proto
donde proto es un fichero prototipo que contiene las inicializaciones del
sistema de fichero a crear.
PROBAR UN SISTEMA DE FICHEROS
Para probar un sistema de ficheros: se utiliza el comando
fsck
lee los i-nodos, el mapa de bits, el directorio y comprueba si el sistema de ficheros es
consistente y presenta un mensaje.
ejemplo para reparar /dev/hd1
cd/
cp /usr/bin/fsck /fsck
/etc/umount /dev/hd1
fsck -a /dev/hd1 -a reparacin automtica
/etc/mount /dev/hd1 /usr
EL FICHERO ETC/PASSWORD
Este fichero es utilizado por el super usuario, editando este fichero se pueden introducir
nuevos usuarios, aadiendo nuevas lneas del tipo:
1 2 3 4 5 6 7
SANTIAGO
:
:
15
:
3
:
SANTIAGO
CANDELA :
/user/CANDELA: / bin/sh
1 nombre
2 password inicialmente nula
3 uid
4 gid
5 nombre completo
6 directorio asociado
7 SHELL asociado
Cuando se crea un nuevo usuario dos pasos ms hay que seguir.
Crear su directorio (en el ejemplo /user/Juan) con el comando mkdir.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
mkdir(directorio,04777)
Colocar su propietario correctamente con el comando chown.
chown(directorio,uid,gid)
Cada usuario tiene que tener un uid nico. Pueden existir varios usuarios con
el mismo grupo. Cuando el nuevo usuario entra en el sistema deber crearse
una clave con el comando passwd.
MODIFICAR EL SISTEMA DE FICHEROS ROOT
MINIX viene con los sistemas de ficheros.
root /usr
Cuando el sistema se arranca el sistema de ficheros root se copia en memoria principal
en el disco virtud RAM.
Cualquier modificacin en los ficheros o directorios del rbol principal (root) en memoria
RAM, hay que guardarla en disco con el comando cp si no se quiere perder al apagarse el
sistema.
Los contenidos de los sistemas de ficheros pueden ser reorganizados,
realizando mount y cp secuencialmente y conseguir que los programas ms utilizados se
encuentren el el root, si bien hay que guardar la precaucin de guardar al menos 100k
para /tmp.
COMANDOS DE MINIX
Los comandos de MINIX a nivel de usuario tienen el mismo nombre y sintaxis que sus
equivalentes a UNIX, por lo que se puede consultar cualquier manual de este ltimo para
obetener una mayor informacin.
ar.- Archivador.
Mantiene archivos y libreras.
* aade ficheros al archivo
* borra ficheros del archivo
* lista de contenido del archivo
* reemplaza ficheros
* extrae ficheros del archivo
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
asld.- Ensamblador cargador. Es el ensamblador cargador combinado de MINIX.
basename.- quita sufijos y prefijos de un fichero.
cat.- Concatena ficheros y los visualiza en la salida estndar.
cc.- El compilador de C.
Ejecuta cinco pasadas.
Programa entrada salida operacin efectuada
/lib/cpp prog.c prog.i Preprocesador de C: #include, #define, #ifdef.
/lib/cem prog.i prog.k Anlisis semntico
/usr/lib/opt prog.k prog.m Optimizacin del cdigo intermedio
/usr/lib/cg prog.m prog.s Generacin de cdigo
/usr/bin/asld prog.s a.out Ensamblado y lincado
chmem.- Cambia la asignacin de memoria.
chmod.- Cambia las protecciones de un fichero.
chwn.- Cambia el propietario.
clr.- Borra la pantalla.
cmp.- Compara dos ficheros.
comm.- Presenta las lneas comunes a dos ficheros.
cp.- Copia ficheros.
date.- Presenta la fecha y la hora.
dd.- Volcado de disco.
df.- Presenta el nmero de bloques y nodos libres.
dosdir.- Lista el directorio de un disco MS.DOS.
dosdir 0
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
dosread.- Lee un fichero de un disco MS.DOS.
dosread 0 -a prog.c > /user/nomina/prog.c
doswrite.- Escribe un fichero en un disco MS.DOS.
doswrite -a 0 prog.c < /user/nomina/prog.c
echo.- Presenta la string continuacin de este comando.
getlf.- Espera hasta que se pulse return.
grep.- Busca una string dentro de un fichero.
gres.- Busca una string y la sustituye por otra.
head.- Presenta las primeras lneas de un fichero.
kill.- Envia una seal a un proceso.
libpack.- Empaqueta un fichero ASCII.
libupack.- Desempaqueta un fichero a ASCII.
ln.- Crea un enlace (sinnimo) a un fichero.
lpr.- Imprime fichero por impresora.
ls.- Lista el contenido del directorio.
make.- Mantiene actualizado un conjunto de programas.
mined.- Editor del MINIX.
mkdir.- Crear un directorio.
mkfs.- Crea un sistema de ficheros.
mknod.- Crea un fichero especial.
mount.- Monta un sistema de ficheros.
mv.- Mueve o renombra un archivo.
od.- Presenta el contenido de un fichero en varios formatos.
passwd.- Cambia la palabra clave de acceso.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
pr.- Presenta el contenido de un fichero.
pwd.- Presenta el directorio actual de trabajo.
rev.- Lista un fichero invirtiendo los caracteres de las lneas.
rm.- Borra un fichero.
rmdir.- Borra un directorio.
roff.- Formateador de texto.
sh.- El procesador de comandos shell.
shar.- Archivo shell.
size.- Presenta el tamao del cdigo, datos y bss de un programa.
sleep.- Duerme un proceso durante un tiempo.
sort.- Ordena un fichero ASCII.
split.- Trocea un fichero en varios ficheros pequeos.
stty.- Coloca parmetros para el terminal.
su.- Para entrar temporalmente como otro usuario.
sum.- Calcula los bloques y la prueba de suma de un fichero.
sync.- Escribe buffer a disco.
tail.- Escribe las ltimas lneas de un fichero.
tar.- Archivo con formato de cinta.
tee.- Copia la entrada estndar a la salida estndar y en uno o ms ficheros.
time.- Presenta cuanto tiempo gasta un comando.
touch.- Actualiza la fecha de modificacin de un fichero.
tr.- Traduce cdigos de caracteres.
true.- Devuelve el valor verdadero.
umount.- Desmonta un sistema de ficheros.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
uniq.- Borra lneas iguales consecutivas de un fichero.
update.- Peridicamente escribe el buffer a disco.
wc.- Cuenta, lneas, palabras y caracteres de un fichero.
FORMATOS DE FICHEROS
MINIX tiene tres tipos de formatos para tres clases de ficheros.
ficheros ejecutables.
archivos.
mdulos de librerias.
FORMATO DE LOS FICHEROS EJECUTABLES (a.out)
Un fichero ejecutable tiene tres partes.
ENCABEZAMIENTO
PROGRAMA
INICIALIZACION
DE DATOS
El segmento de datos no inicializados (bss) no est presente en los ficheros
ejecutables.
Este sistema operativo soporta dos modelos de memoria.
MODELO PEQUEO - 64K para programa + datos + stack.
MODELO SEPARADO ID
64K para programa
64K para datos + stack
Un encabezamiento normal consiste de 8 palabras de 4 bytes (32 bytes)
0:0x04100301L (modelo pequeo), 0x04200301L (separado I,D)
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
1:0x00000020L (encabezamiento de 32 bytes) 0x00000030L
(encabezamiento de 48 bytes)
2:tamao del segmento de programa en bytes.
3:tamao del segmento de inicializacin de datos en bytes.
4:tamao del segmento de datos no inicializados (bss) en bytes.
5:0x00000000L
6:Memoria total asignada al programa.
7:0x00000000L
Se admite un encabezamiento de 48 bytes que consiste:
32 bytes (encabezamiento normal) + 16 bytes (son ignorados)
EN EL MODELO PEQUEO
6:memoria total = programa + datos + bss + asignacin dinmica
En el modelo separado ID
6:memoria total = datos + bss + asignacin dinmica
Asignacin dinmica.- es la memoria total reservada para el stack ms
crecimientos del segmento de datos.
La asignacin dinmica puede modificarse con el comando chmen que
actualiza la palabra 6 del encabezamiento.
FORMATO DE UN ARCHIVO
El formato de un archivo consiste en una secuencia de pares:
(ENCABEZAMIENTO, FICHERO)
donde los ficheros vienen precedidos por el nmero mgico: 0177545
El encabezamiento consiste de 26 bytes con los siguientes campos:
campo tamao especificacin
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
name 14 nombre de fichero
time 4 fecha de la ltima modificacin
uid 1 identificador del usuario (truncado a 1 byte)
gid 1 identificador del grupo
mode 2 bits de proteccin del fichero
size 4 tamao del fichero
Si un fichero tiene un nmero de bytes impar se le aade un byte cero para que el
encabezamiento comience en una direccin par.
Las dos palabras de 4 bytes del encabezamiento se almacenan con la palabra de mayor
orden primero (por compatibilidad con la versin de 7 UNIX)
FORMATO DE LIBRERIA
MINIX contiene varias libreras de procedimientos que contienen:
- procedimientos utilizados propiamente por el sistema (multiplicaciones, divisiones, etc).
- llamadas al sistema (con los mismos parmetros que UNIX).
Cada fichero contiene un procedimiento llamable, cada nombre que va a ser visible desde
fuera tiene que declararse en una sentencia .define
Todas las sentencias .define ocuparn los primeros lugares dentro del fichero.
Estas sentencias se generan cuando el compilador C se llama con el flag -LIB
Los comandos libpack y libupack, compactan, (eliminan comentarios) y descompactan
cdigo ensamblador.
RECORRIDO POR LAS FUENTES DE MINIX
Los programas fuentes de MINIX estn distribuidos en varios directorios con ficheros de
cdigo y de encabezamiento. Directorio /usr/src/
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Directorios
boot - ficheros boot
commands - fuentes de los comandos del sistema
etc - ficheros del administrador
fs - sistema de ficheros
inet - red
kernel - ncleo
lib - libreras
mm - manejador de memoria
test - test para verificar MINIX
tmp - vacio
tools - herramientas para construir MINIX
Ficheros .ashrc, .ellepro.b1, .ellepro.e, .exrc, .profile, LICENSE, Makefile, crclist
DIRECTORIO /usr/src/kernel
ficheros cabecera para el kernel............................
assert.h
const.h - constantes generales que utiliza el ncleo
glo.h - variables globales que se utilizan en el ncleo
kernel.h
proc.h - tabla de procesos
proto.h
sconst.h - miscelneo de constantes utilizadas por el ensamblador
type.h - definicin de tipos, tasktab, stakframe_s
ficheros de la capa 1.............
mpx.s
mpx386.s - manejo de interrupciones para 386 o superior
mpx88.s - manejador de las interrupciones para 86
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
start.c - cdigo de comienzo de MINIX pone un buen ambiente para main.c
i8259.c - driver para el chip i8259 controlador de interrupciones
exception.c - manejo de las excepciones, interrupciones de la CPU
protect.c
protect.h - constantes del modo protegido
klib.s
klib386.s - procedimientos utilizados por mpx386.s
klib88.s - procedimientos utilizados por mpx88.s
proc.c - mensajes
proc.h
table.c - contiene el vector de tareas
manejadores o tareas............................................
main.c - programa principal del kernel
driver.c
driver.h
drvlib.c
drvlib.h
memory.c - driver de memoria principal
floppy.c - driver de floppy
wini.c - driver de disco duro
xt_wini.c - driver de un disco duro tipo XT
at_wini.c - driver para el disco duro at
bios_wini.c - driver para disco duro que utiliza la BIOS
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
aha_scsi.c - manejador de disco duro scsi
ps_wini.c - driver para el disco duro de un ps
esdi_wini.c
mcd.c - manejador para un CDROM
clock.c - driver del reloj
tty.c - driver para un terminal tty
tty.h - definiciones y constantes propias del tty
pty.c - manejador para un seudo terminal
console.c - driver para el terminal consola
keymaps - directorio con tablas de teclados para varios idiomas
keyboard.c - driver para el teclado
rs232.c - driver para los puertos seriales rs232 en C
printer.c - driver para el printer
sb16.h
sb16_dsp.c
sb16_mixer.c
dmp.c - procedimientos que realizan un dmp en pantalla de la tabla de procesos
dp8390.c
dp8390.h
ne2000.c - manejador de red
ne2000.h
wdeth.c
wdeth.h
system.c - tarea del sistema
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
miscelaneos.................................................
misc.c
Makefile - compilar el kernel
config
DIRECTORIO /usr/src/mm
Contiene todos los programas fuentes referentes al manejo de la memoria los
ficheros cabecera y el fichero Makefile.
ficheros cabecera del manejador de memoria..................
const.h - constantes que utiliza el mm
glo.h - variables globales
mm.h - constantes principales e include
mproc.h - tabla de procesos
param.h - definicin de sinnimos para variables mensaje
proto.h - prototipo de funciones
type.h - definicin de tipos
table.c - tabla para mapear numero de llamada con rutina que la realiza.
alloc.c - libera y asigna bloques de memoria
llamadas al sistema que conforman el manejador de memoria.....
main.c - programa principal
forkexit.c - llamadas fork, exit y wait
exec.c - llamada exec
break.c - crecimiento de los segmentos de datos y pila
signal.c - manejo de seales
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
getset.c - coloca el uid y gid
utility.c - utilidades para el mm
putk.c - para imprimir un mensaje el mm
trace.c
DIRECTORIO /usr/src/fs
Contiene todos los ficheros que conforman el FS
buf.h - estructura buffer y hash
const.h - definicin de constantes para el fs
fproc.h - tabla de procesos
fs.h - contiene los include cabecera
glo.h - variables globales para el fs
param.h - define sinnimos para mensajes
proto.h - prototipo de funciones
type.h - definicin de tipos
table.c - relaciona el numero de llamada al sistema con la funcin que lo maneja
cache.c - mantiene un buffer para reducir acceso a disco
cache2.c -mantiene una cahe de segundo nivel en el disco RAM
inode.c - maneja la tabla de nodos i
inode.h - tabla de los nodos i
super.c - maneja la tabla de superbloque
super.h - tabla de superbloque
filedes.c - manipula los descriptores de fichero
file.h - tabla filp, intermediario entre descriptores de fichero y los nodos i
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
main.c - programa principal del fs
open.c - abre un fichero
read.c - lectura de un fichero
write.c - escritura en un fichero
pipe.c - realiza un pipe
path.c - busqueda de trayectorias en los directorios
mount.c - monta y desmonta un sistema de ficheros
link.c - establece un nuevo enlace para un fichero
lock.c
lock.h
stadir.c - cambio de directorio
protect.c - proteccin de ficheros
time.c - programa el reloj del sistema
dev.h - tabla de dispositivos enlaza el numero mayor con la rutina que lo procesa
device.c - lee bloques de disco que no estn en el buffer
super.c
super.h
utility.c - miscelaneos utilizados por el fs
putk.c - para imprimir un mensaje por el fs
misc.c - realizan parte de llamadas al sistema
Makefile
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
DIRECTORIO /usr/src/commands
En este directorio se encuentran todos los fuentes de los comandos del sistema operativo
vienen separados en los siguientes directorios.
aal
advent
ash
autil
awk
bc
byacc
cawf
de
dis88
elle
elvis
flex_2.3.7
ftp
ftpd
i386
i86
ibm
ic
indet
kermit
m4
make
mined
patch
reboot
scripts
sh
simple
talk
talkd
telnet
telnetd
yap
zmode
DIRECTORIO /usr/src/boot
2.6 DIRECTORIO /usr/src/boot
Makefile
masterboot.s - boot master de arranque para el 1er sector del disco
extboot.s - boot master de arranque para particiones extendidas de MSDOS
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
bootblock.s - bootstrap para el 1er sector de la particin activa, carga el boot
boot.c - Boot Monitor, boot secundario, carga y arranca el MINIX
boot.h
boothead.s - Soporte de la BIOS para el boot.c
edparams.c - permite modificar parmetros del sistema
installboot.c - instala el sector de arranque (bootblock), o instala (image) el
ejecutable del MINIX, para crear un disco de arranque.
image.h - informacin entre installboot y boot
bootimage.c - carga y ejecuta una imagen del sistema operativo
rawfs.c - soporte para manejar un sistema de ficheros tipo RAW
rawfs.h
El fichero Makefile de este directorio tiene las ordenes para que se compilen
estos programas y se dejen en los directorios
Directorio /usr/mdec contiene los compilados:
Boot
Bootblock
Extboot
Masterboot
Directorio /usr/bin contiene los compilados:
Installboot
edparmas
MODIFICACIN DE MINIX
Veamos como modificar MINIX sus utilidades para ello se debe utilizar un sistema de
desarrollo que puede ser:
- El propio MINIX - LINUX - MSDOS
MINIX consiste de tres partes independientes.
image - imagen ejecutable de minix
root - sistema de ficheros raz
usr - sistema de ficheros usr
- image contiene la imagen ejecutable del ncleo del sistema operativo.
RECOMPILAR LA IMAGEN DE MINIX
* La imagen ejecutable del sistema operativo MINIX est compuesta de los
programas o trozos.
- Ncleo (kernel)
- Manejador de memoria (mm)
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
- Sistema de ficheros (fs)
- Inicializador (init)
- Manejador de red (inet), si hay red
* Solo se necesita recompilar la parte que se ha modificado.
Si la modificacin afecta a un fichero cabecera xxx.h se debe recompilar todo
el sistema por seguridad.
COMPILAR EL KERNEL
Nos situamos en el subdirectorio /src/kernel
Compilacin automtica, cuando se utiliza MINIX como sistema de desarrollo la
compilacin puede hacerse de una manera fcil con el comando make.
make compila todos los fuentes y los ensambla en una sola pieza que
llama kernel.
Es aconsejable realizar primero el comando make -n para ver lo que el
comando make va a realizar.
Compilar "a mano" mediante la sentencia make -n > script se genera un
fichero llamado script con todos los pasos que realiza make, y que podemos
realizar nosotros paso a paso, compilando y ensamblando cada uno de los
ficheros fuentes. Al final llamar al fichero binario simplemente kernel.
COMPILAR EL MANEJADOR DE MEMORIA MM Y EL SISTEMA DE
FICHEROS FS
Para recompilar el manejador de memoria o el sistema de ficheros:
Nos situamos en los directorios /src/mm o /src/fs Realizamos los mismos
pasos que para el kernel.
Llamamos a los resultados de la compilacin y ensamblado mm y fs.
Fichero Makefile para mm
# Makefile for mm
# Directories
u = /usr
i = $u/include
s = $i/sys
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
h = $i/minix
# Programs, flags, etc.
CC = exec cc
CFLAGS = -I$i
LDFLAGS = -i
OBJ = main.o forkexit.o break.o exec.o \
signal.o alloc.o utility.o table.o putk.o trace.o getset.o
mm: $(OBJ)
$(CC) -o $@ $(LDFLAGS) $(OBJ)
install -S 256w $@
all install: # Nothing.
clean:
rm -f *.o *.bak mm
# Dependencies
a = mm.h $h/config.h $s/types.h $h/const.h $h/type.h \
$i/ansi.h $i/fcntl.h $i/unistd.h $h/syslib.h \
$i/limits.h $i/errno.h const.h type.h proto.h glo.h
alloc.o: $a
alloc.o: $h/com.h
break.o: $a
break.o: $i/signal.h
break.o: mproc.h
break.o: param.h
exec.o: $a
exec.o: $s/stat.h
exec.o: $h/callnr.h
exec.o: $i/a.out.h
exec.o: $i/signal.h
exec.o: $i/string.h
exec.o: mproc.h
exec.o: param.h
forkexit.o: $a
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
forkexit.o: $s/wait.h
forkexit.o: $h/callnr.h
forkexit.o: $i/signal.h
forkexit.o: mproc.h
forkexit.o: param.h
getset.o: $a
getset.o: $h/callnr.h
getset.o: $i/signal.h
getset.o: mproc.h
getset.o: param.h
main.o: $a
main.o: $h/callnr.h
main.o: $h/com.h
main.o: $i/signal.h
main.o: $i/fcntl.h
main.o: $s/ioctl.h
main.o: mproc.h
main.o: param.h
putk.o: $a
putk.o: $h/com.h
signal.o: $a
signal.o: $s/stat.h
signal.o: $h/callnr.h
signal.o: $h/com.h
signal.o: $i/signal.h
signal.o: $s/sigcontext.h
signal.o: $i/string.h
signal.o: mproc.h
signal.o: param.h
table.o: $a
table.o: $h/callnr.h
table.o: $i/signal.h
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
table.o: mproc.h
table.o: param.h
trace.o: $a
trace.o: $s/ptrace.h
trace.o: $i/signal.h
trace.o: mproc.h
trace.o: param.h
utility.o: $a
utility.o: $s/stat.h
utility.o: $h/callnr.h
utility.o: $h/com.h
utility.o: $i/fcntl.h
utility.o: $i/signal.h
utility.o: mproc.h
nACLk UN DISCC C Ak1ICICN DL AkkANUL
2.8 HACER UN DISCO O PARTICIN DE ARRANQUE
Un disco o particin de arranque tiene las siguientes partes:
Bootblock - sector de arranque, situado en el 1er sector del disco o la
particin
Boot - boot monitor, situado en el directorio raiz /
Image - ejecutable del s.o., situado en el directorio /minix
Un disco de arranque se construye con el programa mkboot y las
herramientas del directorio /usr/src/tools
Makefile
init.c - fuente del programa init
mkboot - programa para construir el disco o particin de arranque
ps.c - realiza un print del estado de todos los procesos
tell_config - contiene parametros, para averigura si est configurada la red
mkboot realiza los siguientes pasos:
instala el bootblock en el primer sector del disco o de la particin
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
installboot -device $root $mdec/bootblock /boot || exit
copia el boot monitor en el directorio raiz /
install -cs - m 644 $mdec/boot $rootdir/boot || exit
copia image, el ejecutable del s.o., y lo deja en /minix
cp -p image $rootdir/minix/$target || exit
para un floppy las instrucciones son:
installboot -d $dev $medc/bootblock boot || exit
cp -p $mdec/boot /mnt/boot || exit
cp -p image /mnt/minix || exit
De forma automatica se realiza con el comando make utilizando:
make
Compila las diferentes partes del sistema operativo y las combina en un fichero
llamado image.
make fdboot
Construye el ejecutable del sistema operativo image y hace un floppy de
arranque instalndolo con el boot y el bootblock.
make hdboot
Construye el ejecutable del sistema operativo image y los coloca en el
directorio /minix, instala el boot en el directorio raiz /, e installa
elbootblock en el primer sector de la particin minix.
# Makefile for the kernel image.
#
u=/usr
CC= exec cc
CFLAGS= -O -D_MINIX -D_POSIX_SOURCE
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
MDEC= /usr/mdec
MAKE= exec make -$(MAKEFLAGS)
inet=
PROGRAMS= ../kernel/kernel ../mm/mm ../fs/fs $(inet) init
programs:
cd ../kernel && $(MAKE)
cd ../mm && $(MAKE)
cd ../fs && $(MAKE)
@if [ `exec ./tell_config ENABLE_NETWORKING` = 0 ]; then \
$(MAKE) image; \
else \
echo "cd ../inet && $(MAKE)" && \
(cd ../inet && $(MAKE)) && \
$(MAKE) image inet=../inet/inet; \
fi
image: $(PROGRAMS)
installboot -image $@ $(PROGRAMS)
init: init.c
$(CC) $(CFLAGS) init.c -o $@
install -S 192w $@
ps: ps.c /usr/include/minix/config.h ../kernel/const.h \
../kernel/type.h ../kernel/proc.h ../mm/mproc.h \
../fs/fproc.h ../fs/const.h
$(CC) -i $(CFLAGS) -m -o $@ ps.c
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
install -S 16kw $@
/usr/bin/ps: ps
install -cs -o bin -g kmem -m 2755 $? $@
bootable:
exec su root mkboot bootable
hdboot: programs
exec sh mkboot $@
fdboot: programs
exec su root mkboot $@
all install clean::
cd ../kernel && $(MAKE) $@
cd ../mm && $(MAKE) $@
cd ../fs && $(MAKE) $@
cd ../inet && $(MAKE) $@
all:: ps
install:: /usr/bin/ps
clean::
rm -f *.bak init ps image
DIRECTORIO /src/test PRUEBAS AL MINIX
2.9 DIRECTORIO /src/test PRUEBAS AL MINIX
El directorio /src/test contiene una serie de test para MINIX.
Situarse en el directorio /test.
Ejecute los test individualmente, (test0, test1...) o ejecutar todos con el
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
programa run.
El test dura aproximadamente 10 minutos y presenta una serie de mensajes.
El comando make all compila todos los test.
LA LIBRERA EN MINIX
El sistema operativo y muchos de los comandos, utilizan procedimientos almacenados en
una librera. Estos procedimientos se deben lincar cuando se genera el cdigo binario
(ejecutable) de un programa.
Para aumentar la velocidad en el lincado, estos procedimientos se encuentran ya
precompilados dentro de la librera, de donde el compilador los extrae.
Las libreras para MINIX se encuentra en el directorio: /usr/lib/i386/
as
cg
crtso.o
end.a
libc.a
libcurses.a
libd.a
libe.a
libedit.a
libfp.a
liby.a
Los procedimiento que contiene una librera son de dos tipos:
1. - Procedimientos utilizados por los usuarios.
Llamadas al sistema Procedimientos I/O Procedimientos varios
- open - fopen - atoi
- read - getc - isatty
- fork - printf - strcmp
) - Procedimientos utilizados por el compilador como parte del cdigo generado.
- lmul, - ldiv, - csv, ...
Estos procedimientos internos son propios de cada compilador por lo que no se
suministran los fuentes. Hay que utilizar los que vienen con cada compilador.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
En caso de utilizar otro compilador distinto del que viene con MINIX, (como turbo C
para MS-DOS) . Asegrese que la librera del compilador solo tiene procedimientos
internos, en caso de que existan llamadas al sistema estas deben quitarse.
FUENTES DE LAS LIBRERIAS DIRECTORIO /usr/src/lib
Los fuentes de los procedimientos de librera se encuentran distribuidos en los
subdirectorios
ansi
curses
editline
end
float
fphook
i386
i86
ip
liby
math
other
posix
stdio
syscall
syslib
Los fuentes de las libreras se encuentran como archivos para ahorrar
espacio ya que un fichero ocupa como mnimo un bloque = 1k.
Para visualizarlos utilice el comando: ar tv ansi.a
Solo necesitan ser compilados y puestos en la librera.
Muchos ficheros vienen comprimidos ansi.a.Z
compress -d ansi.a.Z
El resultado es un fichero descomprimido ansi.a
INSTRUCCIONES PASO A PASO PARA CONSTRUIR UNA LIBRERA
Los fuentes de los procedidos de la librera estn en varios
subdirectorios en forma de archivo ansi.a, en vez de ficheros
separados, por razn de espacios.
1) Separe los procedimientos en ficheros
ar x ansi.a
borre ansi.a (ya no sirve)
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
rm ansi.a
Compile todos los ficheros C que hay en ansi, ensamble todos los
ficheros en cdigo ensamblador en ansi pero no los linque.
Se puede realizar de forma automtica con el comando make
# Makefile for the libraries
# This makefile runs make in all the subdirectories of the src/lib tree.
# See ansi/Makefile for a further explanation.
MAKE = exec make -$(MAKEFLAGS)
usage:
@echo "Usage: make all" >&2 # Compile all library functions" >&2
@echo " make install # Backup /usr/lib/*.a first!" >&2
@echo " make clean # Delete .o and .a files" >&2
@false
all:
cd ansi && $(MAKE)
cd curses && $(MAKE)
cd editline && $(MAKE)
cd end && $(MAKE)
cd float && $(MAKE)
cd fphook && $(MAKE)
cd ip && $(MAKE)
cd liby && $(MAKE)
cd math && $(MAKE)
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
cd other && $(MAKE)
cd posix && $(MAKE)
cd stdio && $(MAKE)
cd syscall && $(MAKE)
cd syslib && $(MAKE)
cd `arch` && $(MAKE)
install: all
$(MAKE) install_`arch`
# Installation rules for PC Minix.
LIB= /usr/lib
install_i86: \
$(LIB)/ncrtso.o \
$(LIB)/libc.a \
$(LIB)/libd.a \
$(LIB)/libe.a \
$(LIB)/libfp.a \
$(LIB)/end.a \
$(LIB)/libcurses.a \
$(LIB)/libedit.a \
$(LIB)/liby.a \
$(LIB)/ncrtso.o: ncrtso.o
install -c -o bin $? $@
$(LIB)/libc.a: libc.a
install -c -o bin $? $@
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
$(LIB)/libd.a: libd.a
install -c -o bin $? $@
$(LIB)/libe.a: libe.a
install -c -o bin $? $@
$(LIB)/libfp.a: libfp.a
install -c -o bin $? $@
$(LIB)/end.a: end.a
install -c -o bin $? $@
$(LIB)/libcurses.a: libcurses.a
install -c -o bin $? $@
$(LIB)/libedit.a: libedit.a
install -c -o bin $? $@
$(LIB)/liby.a: liby.a
install -c -o bin $? $@
# Installation rules for Minix-386.
LIB386= /usr/lib/i386
LIB86= /usr/lib/i86
install_i386: \
$(LIB386)/crtso.o \
$(LIB386)/libc.a \
$(LIB386)/libd.a \
$(LIB386)/libe.a \
$(LIB386)/libfp.a \
$(LIB386)/end.a \
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
$(LIB386)/libcurses.a \
$(LIB386)/libedit.a \
$(LIB386)/liby.a \
# $(LIB86)/libc.a \
# $(LIB86)/end.a \
$(LIB386)/crtso.o: crtso.o
install -c -o bin $? $@
$(LIB386)/libc.a: libc.a
install -c -o bin $? $@
$(LIB386)/libd.a: libd.a
install -c -o bin $? $@
$(LIB386)/libe.a: libe.a
install -c -o bin $? $@
$(LIB386)/libfp.a: libfp.a
install -c -o bin $? $@
$(LIB386)/end.a: end.a
install -c -o bin $? $@
$(LIB386)/libcurses.a: libcurses.a
install -c -o bin $? $@
$(LIB386)/libedit.a: libedit.a
install -c -o bin $? $@
$(LIB386)/liby.a: liby.a
install -c -o bin $? $@
$(LIB86)/libc.a: libc86.a
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
install -c -o bin $? $@
$(LIB86)/end.a: end86.a
install -c -o bin $? $@
clean:
find . -name '*.[oa]' -o -name '*.bak' | xargs rm
LLAMADAS AL SIS1LMA
La interfase entre los programas de usuario y el sistema operativo se define mediante un
conjunto de "instrucciones ampliadas" o llamadas al sistema.
El conjunto de llamadas que ofrece MINIX, son muy parecidas a las de UNIX y XENIX, si
bien estos tienen ms.
Existe unas libreras de procedimientos en /usr/lib/ para poder realizar llamadas desde un
programa escrito en C.
Ejemplo: count = read(file, buffer, nbyte);
read -> nombre de la llamada al sistema
file -> fichero de donde leer
buffer -> zona de memoria donde colocar los dato
nbytes -> n de bytes a leer
count -> n de bytes ledos, si count es - 1, hay error, que se coloca en la
variable global errno
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Los programas deben siempre testear despus de una llamada si es correcta.
MINIX tiene un total de 53 llamadas al sistema, idnticas a UNIX V7 (estndar
POSIX). en nombre, funcin y parmetros.
Ejemplo de programa, del uso de la variable global errno y del
procedimiento perror()
/*
* errores.c
* lista los errores de llamadas al sistema
*/
# include <stdio.h>
main(argc,argv)
int argc;
char *argv[];
{
int i;
extern int errno;
for (i=0;i<=53;i++){
fprintf(stderr,"%3d",i);
errno=i;
perror(" ");
}
exit(0);
}
Manejo de procesos
pid = fork() - crea un proceso hijo idntico al proceso padre.
pid = waitpid(pid, &statloc, opts) - espera a que un hijo determinado termine
y coge su condicin de salida.
s = wait(&status) - espera a que un proceso hijo termine y coge su condicin
de salida devuelve el pid del hijo que termina, llamada antigua.
s = execve (name, argv, envp) - sustituye la imagen en memoria de un
proceso.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
exit(status) - pone fin a la ejecucin del proceso y devuelve la condicin de
salida.
size = brk (addr) - fija el tamao del segmento de datos a (addr).
pid = getpid() - devuelve el id del proceso solicitante.
pid = getpgrp() - devuelve el id de grupo de procesos del proceso solicitante.
pid = setsid() - crea una nueva sesin y asigna el pid del invocador como
identificador del grupo de procesos.
s = ptrace(req, pid, addr, data) - controla un proceso para depurar.
Seales
s = sigaction(sig, &act, &oldact) - define la accin a realizar cuando se recibe
una seal.
s = sigreturn(&context) - regresa de una seal.
s = sigprocmask(how, &set, &old) - examina o cambia la mascara de las
seales.
s = sigpending(set) - obtiene el conjunto de seales bloqueadas.
s = sigsuspend(sigmask) - sustituye la mascara de seales y suspende el
proceso.
s = kill (pid, sig) - enva una seal a un proceso.
residual = alarm(seconds) - planifica o programa una seal SIGALRM despus
de un cierto tiempo.
s = pause() - suspende el solicitante hasta la siguiente seal.
Manejo de ficheros
fd =creat (name, mode) - crea un nuevo fichero o trunca uno existente.
fd = mknod (name, mode, addr) - crea un nodo i normal, especial, o de
directorio.
fd = open (file, how, ...) - abre un fichero para lectura, escritura o ambos.
s = close (fd) - cierra un fichero abierto.
n = read (fd, buffer, nbytes) - lee datos de un fichero y los coloca en un
buffer.
n = write (fd, buffer, nbytes) - escribe datos a un fichero desde un buffer.
pos = lseek (fd, offset, whence) - mueve el apuntador del fichero.
s = stat (name, &buf) - lee y devuelve el estado de un fichero de su nodo i.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
s = fstat (fd, buf) - lee y devuelve el estado de un fichero a partir de su nodo
i.
fd = dup (fd) - asigna otro descriptor de fichero para un fichero abierto.
s = pipe (&fd [0]) - crea una tubera.
s = ioctl(fd, request, argp) - realiza operaciones especiales en ficheros
especiales.
s = access(name,amode) - verifica los accesos a un fichero.
s = rename(old, new) - cambia el nombre de un fichero.
s = fcntl(fd, cmd, ...) - bloqueo de un fichero y otras operaciones.
Manejo del directorio y del sistema de ficheros
s = mkdir(name, mode) - crea un nuevo directorio.
s = rmdir(name) - elimina un directorio vacio.
s = link (name1, name2) - crea una entrada nueva name2 en el directorio,
que apunta al fichero name1.
s = unlink (name) - elimina una entrada del directorio.
s = mount (special, name, rwflag) - monta un sistema de ficheros.
s = unmount (special) - desmonta un sistema de ficheros.
s = sync() - escribe todos los bloques de la memoria cache en el disco.
s = chdir (dirname) - cambia el directorio de trabajo.
s = chroot (dirname) - cambia al directorio raz.
Proteccin
s = chmod (name, mode) - cambia los bits de proteccin asociados con un
fichero.
iud = 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
fichero.
oldmask = umask (complmode) - pone una mscara que se utiliza para fijar
los bits de proteccin.
Manejo de tiempo
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
seconds = time (&seconds) - calcula el tiempo transcurrido en segundos desde
el 1 de enero de 1970.
s = stime (tp) - pone el tiempo transcurrido desde el 1 de enero 1970.
s = utime (file, timep) - pone la hora del "ltimo acceso" del fichero.
s = times (buffer) - determina los tiempos del usuario y del sistema gastados
hasta ahora.
LLAMADAS AkA LL MANLIC DL kCCLSCS
FORK()
Crea un nuevo proceso, exactamente igual al proceso original, incluyendo los descriptores
de ficheros, registros, ambiente, etc.
Una vez ejecutado el FORK, padre, e hijo se estn ejecutando simultneamente, en un
principio las variables tienen los mismos valores, despus, cambios en uno no afectan al
otro.
La llamada FORK devuelve un valor despus de ejecutarse, este valor es:
cero -> en el proceso hijo
pid (identificador del proceso hijo -> en el padre
Mediante este valor los procesos pueden saber cual es el padre y cual es el
hijo.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
WAITPID
pid = waitpid(pid, &statloc, opts) - espera a que un hijo determinado termine,
devolviendo el pid del proceso que termina, y coge su condicin de salida.
En mucho casos, el hijo creado por el FORK necesita lanzar un proceso, distinto
al del padre. Ejemplo:
El Shell, lee un comando, lanza un proceso hijo, y debe esperar hasta que el
proceso hijo ejecute el comando, posteriormente lee un nuevo comando
cuando el hijo termina.
Para esperar a que el hijo termine, el padre debe ejecutar WAITPID.
Si el parmetro pid vale -1, el padre espera por el primer hijo que termina
El segundo parmetro statloc es la direccin de una variable (estado de salida)
que es escrita por el proceso hijo para indicar terminacin normal o anormal.
EXEC.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
s = execve (name, argv, envp) - sustituye la imagen en memoria de un
proceso.
name - nombre del fichero que contiene el programa a ejecutar.
argv - vector de argumentos.
envp - vector ambiente
En el caso del Shell, el proceso hijo debe ejecutar el comando, esto lo hace
mediante la llamada EXEC, la cual hace que la imagen del hijo, sea
reemplazada por el fichero que hay en el primer parmetro de EXEC.
Ejemplo: Shell simplificado con FORK, WAITPID y EXEC.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
While (TRUE){ /* bucle indefinido */
read_command (command, parmetro); /* lee comando */
if(fork() != 0){ /* lanza un proceso hijo */
waitpid(-1,&status,0); /* el padre espera a que hijo acabe */
}else{
execve(command, parmetros, 0); /* ejecuta el comando */
}
}
Pregunta: El Shell padre podra lanzar directamente el comando?
La respuesta es NO, ya que EXEC, reemplaza el fichero por el cdigo de quien
lo lanza, y este se pierde.
Muchas libreras, contienen varias versiones del EXEC.
execl, execv, execle, execve
que permiten omitir o especificar los parmetros de forma particular.
Utilizaremos EXEC para referirnos a cualquiera de ellos.
Consideremos el ejemplo: cp file1 file2 copiar file1 en file2
Despus que el Shell a creado con el FORK una imagen hijo, este hijo ejecuta
cp mediante EXEC, le pasa al programa cp, y la informacin a cerca de los
ficheros a copiarse.
El programa principal main de cp contiene los argumentos: main (argc, argv,
envp)
argc -> Entero, contiene el nmero de parmetros (palabras) contenidos en la
lnea de comandos, en nuestro ejemplo 3.
argv -> Es un puntero a un vector, cada elemento del vector contiene un
parmetro de la lnea de comandos.
argv[0] = cp
argv[1] = file1
argv[2] = file2
envp -> Es un pointer o un vector ambiente, es un vector estring, conteniendo
asignaciones de la forma (nombre = valor), utilizada para pasar informacin
como el tipo del terminal, directorio, smbolo del Shell, etc.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
EXIT().
Esta llamada la deben utilizar lo procesos cuando terminan.
Devuelve al padre un valor de estatus (0 a 255), que se carga en el byte
menos significativo de la variable estatus de WAITPID, un cero es terminacin
normal, otro valor es error.
BRK(adr)
Esta llamada cambia el tamao del segmento de datos de un programa.
El parmetro adr que indica el nuevo tamao en bytes del segmento de datos.
Devuelve el tamao actual del segmento de datos.
La rutina sbrk, en la librera, tambin cambia el tamao del segmento de
datos, su parmetro indica el nmero de bytes que aumenta (positivo) o
disminuye (negativo) el segmento de datos.
GETPID
Devuelve el identificador del proceso (pid) que lo ejecuta.
En un Fork, al padre se le devuelve el pid del hijo, mientras que al hijo se le
devuelve un cero, si el hijo quiere saber su pid, deber efectuar un GETPID.
LLAMADAS AkA SLALLS
Las llamadas se utilizan para
manejar interrupciones por software
hacer reports de interrupciones hardware
detectar instrucciones ilegales
rebosamiento de variables
Cuando una seal se enva a un proceso, que no est preparado para recibirla,
el proceso se mata.
SIGNAL(seal, &funcion)
int seal;
int (*funcin)(); funcin a realizar cuando se recibe una seal
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Esta llamada se utiliza para indicar que se est preparado para recibir algn
tipo de seal y suministrar la direccin del procedimiento manejador de la
seal.
Despus del SIGNAL, si se recibe una seal por ejemplo SIGINT (pulsar la tecla
DEL), se efecta:
1) El estado del proceso se guarda en su propia pila.
2) Se ejecuta el manejador de la seal.
SIGRETURN (&contexto)
Es llamado por el manejador que atiende la seal cuando termina.
Recupera el estado del proceso interrumpido desde la pila y lo contina.
Los tipos de seales son:
1 SIGHUP El modem ha detectado lnea telefnica colgada
2 SIGINT La tecla DEL ha sido pulsada
3* SIGQUIT Seal Quit (desde el teclado CTRL \)
4* SIGILL Instruccin ilegal
5* SIGTRAP Traza de los traps
6* SIGABRT Abortar un programa
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
7* SIGUNUSED Instruccin EMT
8 SIGFPE Rebosamiento de coma flotante
9 SIGKILL Matar un proceso
10 SIGUSR1 El usuario define la seal # 1
11* SIGSEGV Violacin de segmentacin
12 SIGUSR2 El usuario define la seal # 2
13 SIGPIPE Escritura en pipe sin lectores
14 SIGALRM Alarma
15 SIGTERM Software genera una seal de terminacin
16 no asignada
17 SIGCHLD Proceso hijo terminado o bloqueado
18 SIGCONT Si est bloqueado continuar
19 SIGSTOP Seal de paro
20 SIGTSTP Seal de paro interactiva
21 SIGTTIN Proceso en segundo plano quiere leer
22 SIGTTOU Proceso en segundo plano quiere escribir
23 SIGWINCH Cambio del tamao de la ventana
Las seales entre parntesis no son soportadas por MINIX.
Los asteriscos denotan aquellas seales que causan un volcado del proceso, si
no son atendidas.
Despus de recibir una seal, es necesario volver a permitir recibir otra seal
con otro SIGNAL, ya que si no, puede recibirse una seal y matar el proceso
(accin por defecto).
Existen dos funciones predefinidas que el usuario puede utilizar:
LLAMADAS AkA MANLIC DL IICnLkCS
CREAT
int creat (nombre, permisos) /* crea un fichero */
char *nombre; /* nombre camino */
int permisos; /* bits de permisos */
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Crea un fichero y lo abre en modo escritura, independiente del modo. Sus parmetros son
el nombre del fichero y el permiso.
fd = CREAT("ac", 0751)
Crea un fichero de nombre ac y con permiso 0751.
Permiso est escrito en octal, cada dgito tiene tres bits que se relacionan con los modos
rwx, lectura, escritura y ejecutar, un uno significa permiso, cero no permiso.
El tercer dgito (7) se refiere al propietario rwx todo.
El segundo dgito (5) a los usurarios del grupo r-x leer y ejecutar.
El primer dgito (1) al resto --x slo ejecutar.
Si el fichero ya existe, el fichero se trunca a longitud cero, si el permiso es
correcto.
Esta llamada nos devuelve el fd (descriptor del fichero) que se utiliza para
posteriores referencias al fichero.
MKNOD
int mknod (nombre, modo, equipo) /* crea un fichero especial */
char *nombre; /* fichero a crearse */
int modo; /* modo del nuevo fichero */
int equipo; /* numero de equipo */
Crea un fichero especial, es solo llamable por el super usuario.
fd = mknod ("/dev/tty2", 020744, 0x0402);
Crea un fichero llamado /dev/tty2 (nombre usual para el terminal 2)
Modo en octal 020744, indica que es un fichero especial en modo carcter
c..rwxr--r--
El tercer parmetro expresa en el byte ms significativo 04 (mayor equipo)
el tipo de equipo (disco, terminal impresora, etc) y en el byte menos
significativo (menor equipo) el nmero dentro de su tipo, en este caso 02.
OPEN
Abre un fichero o crea un fichero, forma moderna de creat.
int open (fichero, modo) /* abre un fichero */
char *fichero; /* nombre paso */
int modo; /* lectura escritura o ambos */
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Abre un fichero, declarando un identificador y el como.
O_RDONLY (0) -> lectura
O_WRONLY (1) -> escritura
O_RDWR (2) -> ambos
Devuelve el descriptor del fichero, (fd) para posteriormente utilizarlo en
lecturas o escrituras; -1 en caso de error.
CLOSE
Cierra un fichero especificado por su descriptor.
int close (fd) /* cierra un fichero */
int fd; /* descriptor del fichero */
devuelve -1 en caso de error, y cero en caso de exito
READ
int read(fd, buffer, nbytes) /* lectura de un fichero */
int fd; /* descriptor del fichero */
char *buffer; /* direccin del buffer */
unsigned nbytes; /* numero de bytes a leer */
devuelve numero de bytes ledos, 0 un EOF, -1 error.
WRITE
int write (fd, buffer, nbytes) /* escribe en un fichero */
int fd; /* descriptor de un fichero */
char *buffer; /* direccin del buffer */
unsigned nbytes; /* numero de bytes a escribir */
devuelve el numero de bytes escritos o -1 si hay errror.
Lectura, escritura secuencial, cada vez que se lee o escribe, el pointer asociado
con el fichero es incrementado n bytes.
LSEEK
Mueve el pointer del fichero a una determinada posicin, utilizado para acceso
directa. Tiene tres parmetros.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
long lseek(fd, offset, de_donde) /* mueve el pointer */
int fd; /* identificador del fichero */
long offset; /* desplazamiento dentro del fichero */
int de_donde; /* si la posicin es relativa al principio 0, o al final del fichero 2,
o actual 1*/
Lseek devuelve la posicin absoluta del pointer despus del cambio.
STAT
int stat(nombre, p) /* lee el estado de un fichero */
char *nombre; /* nombre camino */
struct stat *p; /* informacin del estado */
FSTAT
int fstat(fd, p) /* lee el estado de un fichero */
int fd; /* descriptor de un fichero */
struct stat *p /* informacin del estado */
Devuelve -1 si hay error, 0 si exito
Nos da informacin relativa a un fichero.
Modo, directorio, tipo de fichero, tamao, ltima modificacin, etc.
Estas llamadas difieren solo en la forma de especificar el fichero (nombre o
identificador).
El segundo parmetro es un pointer a una estructura donde va a colocarse la
informacin. La forma de esta estructura es:
struct stat {
short st_dev; /* equipo donde el nodo esta */
unsigned short st_ino; /* numero del nodo */
unsigned short st_mode; /* palabra de modo */
short st_nlink; /* numero de enlaces */
short st_uid; /* identificador del usuario */
short st_gid; /* identificador del grupo */
short st_rdev; /* mayor/menor fichero especial */
short st_size; /* tamao del fichero */
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
short st_atime; /* igual que st_mtime */
short st_mtime; /* fecha de la ultima modificacin */
short st_ctime; /* hora de la ltima modificacin del nodo-i */
};
Existen tres tiempos, para compatibilizar con UNIX.
DUP
int dup(fd) /* duplica el descriptor de un fichero */
int fd; /* descriptor de un fichero abierto */
Devuelve el nuevo descriptor del fichero o -1 si hay error
Se utiliza para manejar descriptores de ficheros.
Ejemplo: Consideremos la siguiente accin a un programa.
1) Cerrar la salida standar (descriptor de fichero = 1).
2) Utilizar otro fichero como salida standar.
3) Utiliza funciones de escritura para la salida standar (printf).
4) Recuperar la situacin original.
Esto se puede realizar:
- cerrando con descriptor de fichero igual a uno
- abriendo un nuevo fichero que ser la nueva salida standar
pero ser imposible recuperar la situacin ms tarde.
La solucin correcta es:
-Ejecutar fd = dup(1)
El cual origina un nuevo descriptor para la salida standar, la cual ahora tiene
dos descriptores fd y 1.
-Cerrar la salida standar close(1), (se pierde el 1).
-Abrir un fichero (open) (se recupera para ste el 1).
Para recuperar la situacin original.
- Cerrar con el descriptor igual a uno.
- Ejecutar n = dup(fd) para recuperar el descriptor 1 que apunta al mismo
fichero que fd.
- Cerrar con fd y volvemos a la situacin original.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Esto se entiende si las asignaciones de descriptores son secuenciales, se
asigna el menor descriptor disponible.
El dup tiene una variante, que permite a un descriptor, que no ha sido
asignado, referenciar a un fichero abierto.
dup2 (fd,fd2);
fd --> es el descriptor de un fichero abierto
fd2 --> el descriptor no asignado que va a referenciar al mismo fichero que fd.
Si fd referencia a la entrada standar (0) y fd2 es 4, despus de la llamada la
entrada standar se podr referenciar como 0 y como 4.
PIPE
int pipe(pfd) /* crea un pipe */
int pfd[2]; /* descriptores de los ficheros */
La llamada Pipe, crea un pipe y devuelve dos enteros descriptores de fichero.
pfd[0] --> es el descriptor para leer
pfd[1] --> es el descriptor para escribir
devuelve -1 si hay error 0 si xito.
La comunicacin entre procesos en MINIX, utiliza pipes. Cuando ejecutamos el
comando.
cat file1 file2 | sort
El Shell crea un pipe y hace que la salida standar del primer proceso (cat) se
escriba en el pipe, y que la entrada standar del segundo proceso (sort) pueda
leer de pipe.
ejemplo: procedimiento que crea dos procesos, con la salida del primero,
escrita sobre un pipe, y leda por el segundo.
#defineSTD_INPUT 0 /*fd de la entrada estandar */
#define STD_OUTPUT 1 /* fd de la salida estandar */
pipeline(proceso1, proceso2)
char *proceso1, *proceso2; /* punteros a nombres de programa */
{
int fd[2];
pipe(&fd[0]); /* crea un pipe */
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
if (fork() != 0) { /* el padre ejecuta estas sentencias */
close(fd[0]); /* proceso uno no necesita leer de pipe */
close(STD_OUTPUT); /*prepara para una nueva salida estandar.*/
dup(fd[1]); /* coloca la salida estandar a fd[1] */
close(fd[1]); /* pipe no necesita ninguno ms */
execl(proceso1, proceso1, 0);
} else {
/* el proceso hijo ejecuta estas sentencias */
close(fd[1]); /* proce. dos no necesita escribir en pipe */
close(STD_INPUT); /*prepara para una nueva entrada estandar.*/
dup(fd[0]); /* coloca la entrada estandar a fd[0] */
close(fd[0]); /* pipe no necesita ninguno ms */
execl(proceso2, proceso2, 0);
}
}
Escritura en un PIPE
Los datos se escriben en orden de llegada.
Si el pipe se llena (tamao finito # 4kB), el proceso que escribe se
bloquea hasta que datos son extrados del pipe.
Lectura en un PIPE
Los datos se leen en el orden de llegada FIFO
Una vez un dato es ledo, es sacado del pipe y no puede ser ledo de nuevo.
Si el pipe esta vacio el proceso que lee se bloquea hasta que se introducen
datos en el pipe.
Close sobre un PIPE
Libera el descriptor del pipe y puede ser asignado
Si se cierra el descriptor para escritura close(pfd[1]); acta como un end-of-
file (final de fichero) para el lector.
IOCTL
int ioctl(fd, comando, tbuf) /* control de un fichero especial como un terminal
*/
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
int fd; /* descriptor del fichero */
int comando; /* comando */
struct termio *tbuf; /* informacin del terminal */
Devuelve -1 si hay error, 0 si exito.
Tiene su aplicacin mas comn en terminales, se utiliza para:
- Cambiar el carcter de borrado.
- Cambiar el modo del terminal.
modo "cooked" (en POSIX modo cannico)
Para leer espera por una lnea completa.
backspace --> trabaja normalmente
break --> trabaja normalmente
CRTL S --> Para la salida en el terminal
CTRL Q --> Reanuda la salida en el terminal
CTRL D --> fin de fichero
DEL --> seal de interrupcin
CRTL \ --> seal quit para producir un volcado.
modo "raw" (en POSIX modo no cannico)
Todos las funciones anteriores son desabilitadas.
Los caracteres pasan directamente al programa, sin ningn proceso.
Para leer no espera por una lnea completa.
modo "Cbreak" (en POSIX modo cannico variando ciertos
parmetros)
inhibidos: backspace, break, CTRL D
permitidos: CTRL S, CTRL Q, DEL CTRL\
Puede leer lneas parciales.
La forma de esta llamada es:
ioctl (fd, operacin, &sgttyb);
fd --> especifica un fichero
operacin --> especfica una operacin
&sgttyb --> direccin a una estructura de flags
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Las operaciones soportadas por MINIX son:
TIOCSETP --> asigna los valores de la estructura a los parmetros del
terminal.
TIOCGETP --> Llena la estructura con los valores actuales del terminal.
La estructura est definida en el fichero sgtty.h
/* Estructura de datos para IOCTL llamadas TIOCGETP/TIOCSETP */
struct sgttyb {
char sg_ispeed; /* velocidad de entrada (no se usa) */
char sg_ospeed; /* velocidad de salida (no se usa) */
char sg_erase; /* carcter de borrado */
char sg_kill; /* carcter de matar */
int sg_flags; /* flags de modo */
};
/* Campos de sg_flags */
#define XTABS 0006000 /* a uno causa la expansin de tab */
#define RAW 0000040 /* a uno permite el modo raw */
#define CRMOD 0000020 /* a uno LF transforma en LF + CR */
#define ECHO 0000010 /* a uno permite el eco */
#define CBREAK 0000002 /* a uno permite el modo Cbreak */
#define COOKED 0000000 /* ni CBREAK ni RAW */
#define TIOCGETP (( 't'<<8 ) | 8 )
#define TIOCSETP (( 't'<<8 ) | 9 )
Los bits en sg_flags pueden ponerse estando en los modos "raw" o "cbreak".
XTABS debe colocarse a cero cuando utilizamos terminales que realizan la
tabulacin por hardware.
XTABS puesto a uno, hace que LF se transforme en LF + CR.
ECHO puesto a uno, produce el eco de los caracteres hacia el terminal. (cero,
para palabras claves).
IOCTL puede utilizarse con otra estructura de datos, (tchars) para cambiar:
- el carcter de interrupcin
- el carcter quit
- el carcter de parada
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
- el carcter de reanudar
- el carcter de fin de fichero
ACCESS(name,amode) - verifica los accesos de un programa a un fichero. Un
programa puede ejecutarse con el UID de otro, como el caso de comandos del
sistema.
RENAME(viejo, nuevo) - cambia el nombre viejo de un fichero por nuevo.
FCNTL(fd, cmd, ...) - bloqueo, candados, de partes de un fichero y otras
operaciones.
LLAMADAS AkA MANLIC DL DIkLC1CkIC
MKDIR(name, mode) - crea un nuevo directorio.
RMDIR(name) - elimina un directorio vaco.
LINK (nombre 1, nombre 2)
Permite que varios usuarios referencien a un fichero con dos o ms nombres, a
menudo en diferentes directorios, el fichero no se duplica, se crea otra entrada
en el directorio. Las modificaciones afectan a todos, pues es el mismo fichero.
Ejemplo. Supongamos la siguiente situacin para dos directorios.
/usr/ast /usr/jim
16
81
40
mail
juego
test
31
70
50
38
bin
nemo
fc
prog1
despus de realizar la llamada link ("/usr/jim/nemo", "/usr/ast/note")
La situacin es la siguiente
/usr/ast /usr/jim
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
16
81
40
70
mail
juego
test
note
31
70
50
38
bin
nemo
fc
prog1
Todo fichero tiene un nico nmero identificador, entrada en la tabla de
inodos.
Existen dos entradas con el mismo identificador (70) que referencian al mismo
fichero.
UNLINK (nombre)
Quita una entrada del directorio, si existen ms, las otras permanecen.
MOUNT (especial, nombre, rwflag).
Realiza la fusin entre dos sistemas de ficheros (normalmente el raz) y un
sistema de ficheros de usuario, en otro dispositivo.
Ejemplo:
mount (/dev/fd0, /usr/home, 0);
mount (/dev/fd0, /fd0, 0);
El primer parmetro es el disco donde se encuentra el sistema de ficheros a
montar.
El segundo parmetro es el directorio donde se va a realizar el enlace.
Una vez que un fichero est montado forma parte del rbol general y se
accede independiente del disco donde est situado.
UMOUNT (/dev/fd0)
Desmonta un sistema de ficheros.
SYNC ()
MINIX mantiene los datos usado ms recientemente del disco, en memoria
principal. (memoria cache, buffer).
Si se modifica un dato de esta memoria, y antes que se guarde en el disco, el
sistema cae, se puede producir un error, para prevenir esto; SYNC escribe
bloques, de datos que han sido modificados, de la memoria cache a disco.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Cuando MINIX se arranca, se ejecuta el programa update en modo tanda, y
este ejecuta un SYNC cada 30 segundos.
CHDIR (nombre de directorio).
Cambia el directorio de trabajo,despus de la llamada chdir
("/usr/ast/test");
un open sobre el fichero xyz, lo abre en /usr/ast/test/xyz
CHROOT ("/usr")
Cambia el directorio raz "/", solo el super usuarios pueden realizar esta
llamada.
LLAMADAS AkA kC1LCCICN
CHMOD (nombre, modo)
MINIX proporciona 11 bits de modo, para proteccin de un fichero. La llamada CHMOD,
permite cambiar estos bits de modo para un fichero.
Los nueve primeros bits, son para el propietario, el grupo y el resto de usuarios (rwx).
Ejemplo: chmod ("file", 0644);
Coloca el fichero file con acceso de solo lectura para cualquiera, excepto para el
propietario.
Los otros dos bits son:
bit (10) 02000 SETGID (pone identificador de grupo)
bit (11) 04000 SETUID (pone identificador de usuario)
Cuando un usuario, ejecuta un programa con el bit SETUID puesto a uno, el
identificador del usuario, se cambia por el identificador del dueo del fichero, y
este cambio dura la vida del proceso.
Esto se utiliza, para permitir que un usuario pueda ejecutar procesos del super
usuario como por ejemplo crear un directorio. Si a mkdir se le coloca el modo
04755, usuarios normales pueden ejecutarlo.
SETGID cuando est a uno, el usuario del fichero, cambia su identificador de
grupo, por el del propietario del fichero.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
GETUID () GETGID ()
Dan al proceso que hace esta llamada, el identificado real y efectivo del
usuario, y grupo respectivamente.
Se necesitan cuatro rutinas de librera para obtener esta informacin.
getuid, getgid, geteuid, getegid
Las dos primeras cogen el real uid/gid y las dos ltimas el efectivo uid/gid.
SETUID(uid) SETGID(gid)
Estas llamadas permiten al super usuario, cambiar el identificador real y
efectivo de un usuario y grupo.
CHOWN (nombre, propietario, grupo)
Con esta llamada, el super usuario puede cambiar el propietario de un fichero.
UMASK (modo mscara)
Pone una mscara interna de bits, en el sistema, para enmascarar los bits de
modo, cuando se crea un fichero.
Ejemplo, la llamada umask (022)
Hace que una llamada posterior para crear un fichero. creat ("file", 0777)
Su modo 0777 sea enmascarado con 022 y por tanto cambiado a 0755.
0777 = 1 1 1 1 1 1 1 1 1
mcara 0022 = 1 1 1 1 0 1 1 0 1
and 1 1 1 1 0 1 1 0 1 = 755
Los bits de mscara son heredados por los procesos hijos.
Si el Shell hace umask justo despus de login, ninguno de los procesos de
usuario en esa sesin crearan ficheros que accidentalmente pueden ser
escritos por otros usuarios.
ACCESS
Esta llamada nos dice si un usuario tiene permiso de acceso para un fichero.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Si un programa del super usuario, tiene el SETUID a uno, cualquier usuario
que la ejecute tomara el identificador efectivo del super usuario y podr
ejecutar cualquier programa.
La llamada access nos dice si un identificador real tiene permiso para acceder a
un fichero.
El parmetro modo es 4 para lectura, 2 para escritura y 1 para ejecutar, se
permiten combinaciones por ejemplo con modo 6, si la llamada no devuelve un
cero, si se permite acceso de lectura y escritura y 1 en otro caso.
Con modo cero, se testea si el fichero existe.
LLAMADAS AkA MANLIC DL kLLCI
TIME (&segundos)
Nos devuelve los segundos transcurridos desde el uno de enero de 1970.
STIME (segundos)
El super usuario pone el tiempo transcurrido, desde 1 de Enero de 1970, para
posteriores lecturas.
UTIME (fichero, fecha)
Permite el usuario de un fichero, escribir en el campo "ltima fecha de acceso del
fichero", en el directorio.
Algunos programas exigen que todos sus ficheros tengan la misma fecha de
modificacin.
TIMES (buffer)
Devuelve informacin a un proceso como:
tiempo de CPU gastado por el proceso
tiempo de CPU gastado por el sistema
tiempo de CPU de los procesos hijos
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
ESTRUCTURA INTERNA DEL MINIX
MINIX est formado por una coleccin de procesos que comunican entre si y con los
procesos de usuarios. Utilizando unas primitivas de comunicacin a base de mensajes.
MINIX est estructurado en cuatro capas, cada una realiza una funcin definida.
4 init proceso de
usuario
proceso de
usuario
proceso de
usuario
procesos
usuarios
3 Manejador de Memoria Sistema de Ficheros Servidor
Red
Capa de
servidores
2 tarea disco tarea terminal tarea reloj ...... tarea
sistema
Capa de
tareas I/O
1 MANEJO DE PROCESOS
CAPA 1 - Funciones:
Atiende las interrupciones, guardando y recuperando registros.
Planificacin de tareas y procesos
Maneja mecanismos de mensajes, chequeo de destinos correctos,
localizacin de buffers en memorial real para enviar y recibir, copia de bytes
desde el que enva al que recibe.
La parte de esta capa que trata con el nivel inferior de las interrupciones est
escrita en ensamblador, el resto en C.
CAPA 2 - Contiene los procesos (tareas) de I/O, manejadores de dispositivos
(device drivers).
memoria
discos
impresora
terminal
reloj
sistema (no corresponde con ningn equipo)
Todas las tareas de la capa dos y todo el cdigo de la capa uno estn
combinados juntos en un nico programa binario el KERNEL.
Todas las tareas se gestionan independientemente y se comunican utilizando
mensajes.
CAPA 3 - Contiene los servidores: el manejador de memoria, el sistema de
ficheros, el servidor de red. Se ejecuta con menor privilegio que la capa 1 y 2.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
El manejador de memoria (MM) contiene todas las llamadas al sistema
relacionadas con memoria, tales como FORK, EXEC y BRK.
El sistema de ficheros (FS) contiene todas las llamadas, relativas a ficheros
como READ, MOUNT, CHDIR, etc.
En MINIX, el manejo de recursos se realiza principalmente en el ncleo (capa 1
y 2) y las llamadas al sistema en la capa 3.
CAPA 4 - Contiene todos los procesos de usuarios, Shell, editores,
compiladores, etc.
Mapa de memoria RAM despus que MINIX se ha cargado.
memoria libre para programas de usuarios
init init 2372k - 2383k
inet tarea inet 2198k - 2372k
fs sistema de ficheros 1077k - 2198k depende n buffers
mm manejador de memoria 1024k - 1077k
memoria dispositivos I/O 640k - 1024k
memoria para el usuario 129k - 640k
kernel
tarea .... 129 k (depende de las tareas
instaladas)
tarea impresora
tarea terminal
tarea memoria
tarea reloj
tarea disco
manejo de interrupciones CPU y mensajes 2k (00800) comienzo del ncleo
no utilizado 1k - 2k
vector de interrupciones 0 - 1k
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
ARBOL DE PRECESOS
Un proceso puede crear un proceso hijo, y este a su vez otros procesos, obtenindose un
rbol de procesos.
Todos los procesos de usuario son parte de un rbol cuya cabeza es el proceso init.
Veamos como arranca MINIX:
Cuando el computador se enciende, la BIOS lee el primer sector del cilindro cero del
disco, que contiene el masterboot, que se carga en memoria y se ejecuta. El masterboot
carga en memoria el bootstrap desde el primer sector de la particin activa que ejecuta
el boot que carga el sistema operativo con sus partes kernel, mm, fs, init el primer
proceso de usuario.
El kernel se ejecuta inicializa el sistema y lanza todas las tareas de los manejadores, que
una vez inicializadas se bloquean en espera de trabajo, luego se lanza el mm, el fs, y
finalmente se ejecuta init.
Init, primeramente lee el fichero /etc/ttytab para ver cuantos terminales hay, y mediante
FORK crea un proceso hijo para cada terminal. En nuestro caso solo la consola.
Cada proceso hijo ejecuta /usr/bin/getty que presenta un mensaje y espera que se teclee
un nombre.
Cuando alguien entra en el sistema, se ejecuta /usr/bin/login/ con el nombre como
argumento y se ejecuta el Shell de ese usuario, especificado en /etc/passwd,
normalmente /bin/sh.
El Shell espera por un comando y luego lanza un FORK y un EXEC por cada comando.
De esta forma el Shell es el hijo de init, y los procesos de usuario los nietos, y todos los
procesos en el sistema son parte de un mismo rbol.
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
Cuando se ejecuta un programa, se le asigna un trozo de memoria, que la retiene a la
largo de su vida y cuyo tamao est especificado en el encabezamiento del programa
(palabra 6).
Toda la informacin de un proceso creado se guarda en la tabla de procesos, dividida en
tres partes el ncleo, manejo de memoria y sistema de ficheros.
ncleo manejador de memoria sistema de
ficheros
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
registros contador
programa palabra estado stack
pointer estado proceso t.comienzo
proceso tiempo uso CPU t. uso CPU
por hijo t. prxima alarma puntero cola
Mensajes seales pendientes id
proceso bits de flags
puntero al segmento cdigo puntero al segmento
datos puntero al segmento bss estado
salida estado seales identificador proceso
proceso padre grupo de procesos uid
real uid efectivo gid
real gid efectivo mapa
bits para seales bits de flags
Mscara umask
directorio raz
directorio de
trabajo descriptor
fichero uid
efectiva gid
efectiva
parmetros
llamadas bits de
flags
Cuando un proceso se crea o se destruye, el manejador de memoria, actualiza la tabla de
procesos y enva mensajes al ncleo y al sistema de ficheros para que actualicen su
tabla.
COMUNICACIN ENTRE PROCESOS
Modelo cliente servidor
Proceso
cliente
Proceso
cliente
Sevidor de
memoria
Servidor de
ficheros
Servidor de
red
...... Modo usuario
Ncleo
Modo ncleo
Los procesos de usuario (procesos clientes) mediante mensajes solicitan servicios a un
servidor, el cual realiza el trabajo y enva una respuesta. El ncleo se encarga del
transporte de los mensajes.
La comunicacin entre procesos se realiza, intercambiando mensajes, utilizando tres
primitivas de los procedimientos de librera en C.
- send (destino, &mensaje); Para enviar un mensaje al proceso destino
- receive (fuente, &mensaje); Para recibir un mensaje del proceso fuente (o cualquiera)
- send_rec(src_dst, &mensaje); Para enviar un mensaje a un proceso y esperar una
respuesta del mismo. La respuesta se sobrescribe en el mensaje original.
&mensaje - es la direccin local de los datos del mensaje. El tamao del mensaje viene
fijado por el tamao de la estructura message, que es una unin de seis formatos de
mensajes.
m_source m_source m_source m_source m_source m_source
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
m_type m_type m_type m_type m_type m_type
m1_i1 m2_i1 m3_i1 m4_l1 m5_c2 m5_c1 m6_i1
m1_i2 m2_i2 m3_i2 m4_l2 m5_i1 m6_i2
m1_i3 m2_i3 m3_p1 m4_l3 m5_i2 m6_i3
m1_p1 m2_l1 m3_ca1 m4_l4 m5_l1 m6_l1
m1_p2 m2_l2 m4_l5 m5_l2 m6_f1
m1_p3 m2_p1 m5_l3
m_source - quien envia el mensaje; m_type - el tipo de funcin a realizar (ejem. para
disco read, write); resto son campos de datos
Los procesos se pueden comunicar por mensajes siempre que estn en la misma capa, o
contigua. Un proceso de usuario (cap4) no puede comunicar directamente con una tarea
de I/O (capa2).
Cuando un proceso enva un mensaje a otro proceso, se bloquea, hasta que el destino
hace un receive, esto es MINIX utiliza el mtodo RENDEZVOUS o de cita. Este mtodo
es ms sencillo por no utilizar buffers.
LANIIICACICN DL kCCLSCS
La gestin o planificacin de procesos de MINIX utiliza un sistema de colas multinivel con
tres niveles.
Prioridades:
IACUL1AD DL INGLNILkIA LLLC1kCNICA SIS1LMAS CLkA1IVCS
lng. Lduardo Abanto Lopez
1. tareas de I/O tienen la mxima prioridad
2. tareas del manejador de memoria y del sistema de ficheros
3. tareas de usuario.
Mientras exista un proceso en una cola de prioridad alta, no se ejecutan los procesos de
las dems colas de prioridad menor.
Las tareas del sistema, el manejador de memoria y el sistema de ficheros nunca son
desasignados.
El planificador de CPU, trabaja por interrupciones, cada manejador de I/O, disco, reloj,
terminal, etc tiene asociada una direccin dentro del vector de interrupciones, que
contiene la direccin del procedimiento que atiende esa interrupcin.
Si cuando se esta ejecutando un proceso ocurre una interrupcin hardware, por ejemplo
el disco interrumpe, se ejecutan a grandes rasgos los siguientes pasos:
1. El hardware de interrupciones (i8259), mete el contador de programa, la palabra
de estado y algn registro en la pila del proceso que se esta ejecutando.
2. El hardware carga el contador de programa con una direccin para que la CPU
salte a una direccin dentro del vector de interrupciones donde se encuentra el
procedimiento de servicio que atiende a la interrupcin de disco.
3. El procedimiento de servicio de la interrupcin llama a SAVE, (en ensamblador)
para guardar todos los registros
4. Se prepara una nueva pila temporal con la informacin depositada por la
interrupcin
5. Se ejecuta el servicio de esta interrupcin (escrito en C)
6. El planificador marca la tarea en espera , en este caso de disco, como lista
7. Se llama al planificador para decidir que proceso debe ejecutarse a continuacin
8. El procedimiento en C regresa al cdigo en ensamblador
9. El procedimiento en ensamblador carga los registros y el mapa de memoria del
nuevo proceso actual y lo inicia.

También podría gustarte