La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

El núcleo del sistema operativo

Presentaciones similares


Presentación del tema: "El núcleo del sistema operativo"— Transcripción de la presentación:

1 El núcleo del sistema operativo
Sebastián Sánchez Prieto

2 Introducción Objetivo: presentar la estructura interna y funciones del núcleo de un sistema operativo Corresponde al primer nivel jerárquico Suele permanecer en el almacenamiento primario porque su código se ejecuta muy frecuentemente Otros niveles Núcleo HW  S2P, OGP & IGT

3 Características generales
Es la parte más dependiente del HW de todo el sistema operativo Parte en ensamblador Algunas veces con dispositivos cableados Servicios a capas superiores NÚCLEO Decisiones de diseño Objetivos del sistema Dispositivos HW  S2P, OGP & IGT

4 Funciones (básicas) Proporcionar el entorno adecuado para la existencia de procesos Manejo de interrupciones. Se transforman generalmente en mensajes para los siguientes niveles Conmutación del procesador entre hilos o procesos (soporte al diagrama de estados) Mecanismos básicos de comunicación entre hilos y procesos Mecanismos básicos de gestión de memoria Carga inicial y activación de la configuración del sistema  S2P, OGP & IGT

5 Diagrama de estados (básico)
Ejecución Desalojar Dormir Despachar Espera Listo Despertar  S2P, OGP & IGT

6 Comunicación entre procesos
Para comunicación intramáquina se emplea memoria compartida con primitivas de sincronización (P y V) Para una comunicación más general se utilizan los mensajes: Síncronos o bloqueantes (i. e. L4) Asíncronos o no bloqueantes (i. e. Mach) Se pueden considerar también las llamadas a procedimientos remotos o RPC Las interrupciones HW se transforman en mensajes a los niveles superiores  S2P, OGP & IGT

7 Ejemplo -kernel L4 Proporciona:
Espacio de direcciones (address space) Hilos (threads) Comunicación entre procesos (IPC) Manejo de interrupciones Manejo de identificadores de tareas, hilos y canales de comunicación Véase: On -Kernel Construction de Jochen Liedtke. 15th ACM Symposium on Operating Systems Principles (SOSP)  S2P, OGP & IGT

8 Ejemplo: Linux Proporciona: Facilidades básicas Gestión de memoria
Manejo de interrupciones Manejo del reloj y temporizador Manejo del estado de los procesos Planificación de procesos Manejo de señales Gestión de memoria Memoria virtual Protección Memoria compartida Carga dinámica Proyección de archivos en memoria  S2P, OGP & IGT

9 Linux: continuación Sistema de archivos
Archivos, directorios Bloqueo de archivos Mecanismos de journaling VFS Manejadores de dispositivo (drivers) Modo carácter Modo bloque Comunicación entre procesos Señales Tuberías Colas de mensajes Semáforos Memoria compartida Sockets (TCP/IP) Subsistema de red Pilas de protocolos (IPv4, IPv6, IPX, etc.)  S2P, OGP & IGT

10 Llamadas al sistema Son el mecanismo controlado de acceso por parte de los procesos a los recursos del S.O. Método: a través de una instrucción máquina específica Al ejecutarse esta instrucción toma el control el S.O. Modo usuario Modo núcleo switch N { case 0: case 1: case N: } ... syscall N  S2P, OGP & IGT

11 Llamadas al sistema Tanto su número como su tipo depende del sistema operativo Amoeba: sólo una llamada al sistema (RPC) WNT: ni se sabe (su interfaz no es pública) Tipos de llamada Comunicación y sincronización de procesos Ejecución de programas Manejo de operaciones de E/S Manipulación del sistema de archivos Detección y control de errores en tiempo de ejecución Comunicaciones en red Funciones de tiempo Manipulación de la interfaz gráfica  S2P, OGP & IGT

12 Ejemplo de llamadas Manipulación de archivos Archivo Archivo
Interfaz de usuario Interfaz del sistema  S2P, OGP & IGT

13 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);  S2P, OGP & IGT

14 Ejemplo: open() Buscar el archivo en el directorio
Comprobar que el proceso que hace la llamada tiene los privilegios necesarios Comprobar si la operación es coherente Identificar el dispositivo y obtener la dirección física Conseguir espacio si fuera necesario Crear el descriptor de archivo Devolver un código al programa que lo ha llamado En caso de que se produzca un error, el código de retorno de open() es –1 y errno contiene el número de error  S2P, OGP & IGT

15 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);  S2P, OGP & IGT

16 Implementación de las llamadas
Depende de la arquitectura del ordenador IBM 360: instrucción SVC MIPS: instrucción syscall i386: int # Paso de parámetros: En registros internos del procesador En zona de memoria cuya dirección se pasa en registros En la pila  S2P, OGP & IGT

17 Caso de Linux i386 include/asm-i386/unistd.h #define __NR_exit 1
#define __NR_fork #define __NR_read #define __NR_write #define __NR_open #define __NR_close #define __NR_waitpid #define __NR_creat #define __NR_link ···  S2P, OGP & IGT

18 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); \ }  S2P, OGP & IGT

19 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; \ }  S2P, OGP & IGT

20 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); \ }  S2P, OGP & IGT


Descargar ppt "El núcleo del sistema operativo"

Presentaciones similares


Anuncios Google