Вы находитесь на странице: 1из 20

El ncleo del sistema operativo

Sebastin Snchez Prieto

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

1999-2003 S2P, OGP & IGT

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

Objetivos del sistema

Dispositivos HW
El ncleo del SO 3

1999-2003 S2P, OGP & IGT

Funciones (bsicas)

Proporcionar el entorno adecuado para la existencia de procesos

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

1999-2003 S2P, OGP & IGT

El ncleo del SO 4

Diagrama de estados (bsico)

Ejecucin
Dormir Despachar Desalojar

Espera
Despertar

Listo

1999-2003 S2P, OGP & IGT

El ncleo del SO 5

Comunicacin entre procesos

Para comunicacin intramquina se emplea memoria compartida con primitivas de sincronizacin (P y V) Para una comunicacin ms general se utilizan los mensajes:

Sncronos o bloqueantes (i. e. L4) Asncronos o no bloqueantes (i. e. Mach)

Se pueden considerar tambin las llamadas a procedimientos remotos o RPC Las interrupciones HW se transforman en mensajes a los niveles superiores

1999-2003 S2P, OGP & IGT

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)

1999-2003 S2P, OGP & IGT

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

1999-2003 S2P, OGP & IGT

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

Manejadores de dispositivo (drivers)


Comunicacin entre procesos


Subsistema de red

1999-2003 S2P, OGP & IGT

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:

... syscall N ... }

case 1:

case N:

1999-2003 S2P, OGP & IGT

El ncleo del SO 10

Llamadas al sistema

Tanto su nmero como su tipo depende del sistema operativo

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

1999-2003 S2P, OGP & IGT

Ejemplo de llamadas

Manipulacin de archivos

Archivo

Archivo

Interfaz de usuario

Interfaz del sistema

1999-2003 S2P, OGP & IGT

El ncleo del SO 12

Operaciones (archivos)

int open (const char *pathname, int flags, mode_t mode); int close (int fd)

int creat (const char *pathname, mode_t mode)


int unlink (const char *pathname); ssize_t read (int fd, void *buf, size_t count);

ssize_t write (int fd, const void *buf, size_t count);


off_t lseek (int fildes, off_t offset, int whence); int rename (const char *oldpath, const char *newpath);

1999-2003 S2P, OGP & IGT

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

1999-2003 S2P, OGP & IGT

El ncleo del SO 14

Operaciones (procesos y tiempo)


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);

1999-2003 S2P, OGP & IGT

El ncleo del SO 15

Implementacin de las llamadas

Depende de la arquitectura del ordenador


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:

1999-2003 S2P, OGP & IGT

El ncleo del SO 16

Caso de Linux i386

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

1999-2003 S2P, OGP & IGT

El ncleo del SO 17

Caso de Linux i386

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); \ }

1999-2003 S2P, OGP & IGT

El ncleo del SO 18

Caso de Linux mips

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; \ }

1999-2003 S2P, OGP & IGT

El ncleo del SO 19

Caso de Linux m68k

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); \ }

1999-2003 S2P, OGP & IGT

El ncleo del SO 20

Вам также может понравиться