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.