Microkernels - Minix Sistemas Operativos 2 – Usac 2009
Minix Un UNIX más Que se ha mantenido pequeño Que tiene un microkernel Y que aun siendo pequeño es multitarea y bien diseñado Totalmente modular Con un stack TCP/IP Hecho en C como los machos
Arquitectura . . . Lo primero que debemos entender
El kernel en minix El componente central Basicamente como dicta la filosofia de los microkernels solo maneja el acceso al hardware y la comunicación entre procesos
¿Versus Linux (el viejo linux)? * Todos los servicios se obtienen en los servidores mediante llamadas IPC
Las llamadas al sistema Desde el usuario al kernel Send, receive y sendrec Los procesos de usuario estan condenados a la ultima Si uno quiere que un susbsistema haga algo basta con enviarle un mensaje
IPC . . . en minix El IPC se maneja asi Un proceso envia un mensaje y el destinatario al kernel El kernel lo envia al destinatario correcto (mediante el UID indicado) Funcionan a manera de demonios
Las llamadas al sistema Table.c FS independiente
Y por si tenían duda Todo es a traves del kernel (sea cual sea la religión del kernel). Tanto hardware (drivers) como software (ver el caso de FORK)
¿Como se programan? Un programa accesa a una llamada a traves de una biblioteca En este caso si queremos crear una llamada tenemos que crear la llamada y la biblioteca o la función de acceso correspondiente El prototipo lo encuentran en /usr/include/unistd.h
Entrando en detalle Si queremos implementar nuestra llamada necesitamos editar y seguir la estructura de table.c no_sys, /* 0 = unused */ do_exit, /* 1 = exit */ do_fork, /* 2 = fork */ do_usac/* 77 = XXX */ nuestra llamada. Ademas de escribir el método de la llamada debemos usar el proto.h
Algunas otras Debemos informar a la biblioteca de la nueva llamada Esto se hace ubicando un archivo .c en el directorio /lib/posix con la sintaxis _llamada.c #include <lib.h> #define fork _fork #include <unistd.h> PUBLIC pid_tfork() { message m; return(_syscall(MM, FORK, &m)); }
Y este codigo significaba Se llama a _syscall Se elige entre MM o FS (cuando el kernel recibe una llamada lo primero que hace es convocar a MM/FS) El segundo parametro define el tipo de servicio (ver /usr/include/minix/callnr.h) Y repitiendo un programa de usuario NO puede ejecutar la llamada directamente, tiene que usar un mensaje (ver /usr/include/minix/type.h)
¿Y ahora? Prueben minix por si mismos Editor similar a vi – elvis Editor similar a nano – elle Buscan algo: find -name foo.c Si quieren ver el codigo de una llamada busquen el getset.c Editar el codigo y copiar por ftp, wget o ¿telnet? O ir más alla y leer esto http://www.csd.uoc.gr/~hy345/assignments/03/vim_c.pdf O esto:http://minix1.woodhull.com/faq/vmwctool.html