Академический Документы
Профессиональный Документы
Культура Документы
Introduccin
Objetivo: presentar la estructura interna y funciones del ncleo de un sistema operativo Corresponde al primer nivel jerrquico Suele permanecer en el almacenamiento primario porque su cdigo se ejecuta muy frecuentemente
Otros niveles Ncleo HW
El ncleo del SO 2
Caractersticas generales
Es la parte ms dependiente del HW de todo el sistema operativo Parte en ensamblador Algunas veces con dispositivos cableados
Servicios a capas superiores
Decisiones de diseo
NCLEO
Dispositivos HW
El ncleo del SO 3
Funciones (bsicas)
Manejo de interrupciones. Se transforman generalmente en mensajes para los siguientes niveles Conmutacin del procesador entre hilos o procesos (soporte al diagrama de estados) Mecanismos bsicos de comunicacin entre hilos y procesos Mecanismos bsicos de gestin de memoria Carga inicial y activacin de la configuracin del sistema
El ncleo del SO 4
Ejecucin
Dormir Despachar Desalojar
Espera
Despertar
Listo
El ncleo del SO 5
Para comunicacin intramquina se emplea memoria compartida con primitivas de sincronizacin (P y V) Para una comunicacin ms general se utilizan los mensajes:
Se pueden considerar tambin las llamadas a procedimientos remotos o RPC Las interrupciones HW se transforman en mensajes a los niveles superiores
El ncleo del SO 6
Ejemplo -kernel L4
Proporciona:
Espacio de direcciones (address space) Hilos (threads) Comunicacin entre procesos (IPC) Manejo de interrupciones Manejo de identificadores de tareas, hilos y canales de comunicacin
Vase: On -Kernel Construction de Jochen Liedtke. 15th ACM Symposium on Operating Systems Principles (SOSP)
El ncleo del SO 7
Ejemplo: Linux
Proporciona:
Facilidades bsicas
Manejo de interrupciones Manejo del reloj y temporizador Manejo del estado de los procesos Planificacin de procesos Manejo de seales Memoria virtual Proteccin Memoria compartida Carga dinmica Proyeccin de archivos en memoria
Gestin de memoria
El ncleo del SO 8
Linux: continuacin
Sistema de archivos
Archivos, directorios Bloqueo de archivos Mecanismos de journaling VFS Modo carcter Modo bloque Seales Tuberas Colas de mensajes Semforos Memoria compartida Sockets (TCP/IP) Pilas de protocolos (IPv4, IPv6, IPX, etc.)
El ncleo del SO 9
Subsistema de red
Llamadas al sistema
Son el mecanismo controlado de acceso por parte de los procesos a los recursos del S.O. Mtodo: a travs de una instruccin mquina especfica Al ejecutarse esta instruccin toma el control el S.O.
Modo usuario
Modo ncleo
switch N {
case 0:
case 1:
case N:
El ncleo del SO 10
Llamadas al sistema
Amoeba: slo una llamada al sistema (RPC) WNT: ni se sabe (su interfaz no es pblica) Comunicacin y sincronizacin de procesos Ejecucin de programas Manejo de operaciones de E/S Manipulacin del sistema de archivos Deteccin y control de errores en tiempo de ejecucin Comunicaciones en red Funciones de tiempo Manipulacin de la interfaz grfica
El ncleo del SO 11
Tipos de llamada
Ejemplo de llamadas
Manipulacin de archivos
Archivo
Archivo
Interfaz de usuario
El ncleo del SO 12
Operaciones (archivos)
int open (const char *pathname, int flags, mode_t mode); int close (int fd)
El ncleo del SO 13
Ejemplo: open()
Buscar el archivo en el directorio Comprobar que el proceso que hace la llamada tiene los privilegios necesarios Comprobar si la operacin es coherente Identificar el dispositivo y obtener la direccin fsica Conseguir espacio si fuera necesario Crear el descriptor de archivo Devolver un cdigo al programa que lo ha llamado En caso de que se produzca un error, el cdigo de retorno de open() es 1 y errno contiene el nmero de error
El ncleo del SO 14
pid_t fork (void); int execve (const char *file, char *const argv[ ], char *const envp[ ]); void exit (int status); pid_t getpid (void); pid_t wait (int *status); int nanosleep (const struct timespec *req, struct timespec *rem); int gettimeofday (struct timeval *tv, struct timezone *tz); int getitimer (int which, struct itimerval *value); int setitimer (int which, const struct itimerval *value, struct itimerval *ovalue);
El ncleo del SO 15
IBM 360: instruccin SVC MIPS: instruccin syscall i386: int # En registros internos del procesador En zona de memoria cuya direccin se pasa en registros En la pila
Paso de parmetros:
El ncleo del SO 16
include/asm-i386/unistd.h
#define #define #define #define #define #define #define #define #define __NR_exit __NR_fork __NR_read __NR_write __NR_open __NR_close __NR_waitpid __NR_creat __NR_link 1 2 3 4 5 6 7 8 9
El ncleo del SO 17
include/asm-i386/unistd.h
#define _syscall1(type,name,type1,arg1) \ type name(type1 arg1) \ { \ long __res; \ __asm__ volatile ("int $0x80" \ : "=a" (__res) \ : "" (__NR_##name),"b"((long)(arg1))); \ __syscall_return(type,__res); \ }
El ncleo del SO 18
include/asm-mips/unistd.h
#define _syscall1(type,name,atype,a) \ type name(atype a) \ { \ register long __res __asm__ ("$2"); \ register long __err __asm__ ("$7"); \ __asm__ volatile ("move\t$4,%3\n\t" \ "li\t$2,%2\n\t" \ "syscall" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)) \ : "$4","$8","$9","$10","$11","$12","$13","$14","$15","$24"); \ if (__err == 0) \ return (type) __res; \ errno = __res; \ return -1; \ }
El ncleo del SO 19
include/asm-m68k/unistd.h #define _syscall1(type,name,atype,a) \ type name(atype a) \ { \ register long __res __asm__ ("%d0") = __NR_##name; \ register long __a __asm__ ("%d1") = (long)(a); \ __asm__ __volatile__ ("trap #0" \ : "=d" (__res) \ : "" (__res), "d" (__a) \ : "%d0"); \ __syscall_return(type,__res); \ }
El ncleo del SO 20