Taller de Sistemas Operativos. System Calls 2012

Documentos relacionados
Sistemas Operativos. Curso 2014 Estructura de los sistemas operativos

Sistemas Operativos. Estructura de los sistemas operativos

Usando el Sistema Operativo

Fundamentos de los Sistemas Operativos. Tema 1. Conceptos generales Estructura del sistema operativo ULPGC - José Miguel Santos Espino

Taller de Sistemas Operativos. Módulos del kernel

Informática Electrónica Manejadores de Dispositivos (Device Drivers)

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

Parte I:Teoría. Tema 3:Introducción a los Sistemas operativos. Instalación

Interfaces y Manejadores de Dispositivos

Analista Universitario en Sistemas. Sistemas Operativos. Instituto Politécnico Superior INTRODUCCIÓN

Funciones Definición de función

Sistemas Operativos. Curso 2016 Sistema de Archivos

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS

Taller de Sistemas Operativos. Direccionamiento de Memoria 2012

Sist s em e a m s s O per e ativos o. s Unidad V Entrada Sali l d i a.

Introducción. Sistemas Operativos. Pedro Chávez Lugo 23 de marzo de 2010

Procesos e Hilos en C

2.- Estructuras de Sistemas Operativos

LABORATORIO 2. La biblioteca a nivel de usuario semso (semáforos Sistemas Operativos) brinda las siguientes primitivas:

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid

Tema 2 Introducción a la Programación en C.

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Introducción al Sistema GNU/Linux

Sistemas Operativos. Procesos

Introducción a los sistemas operativos

Arquitectura de I/O Para que una computadora funcione correctamente, deben ser provistos data paths para permitir que la información fluya entre la CP

Sistemas operativos: una visión aplicada. Capítulo 2 Introducción a los sistemas operativos

Tema 2: Implementación del núcleo de un Sistema Operativo

Construyendo Programas más Complejos

Sistemas Operativos. Curso 2016 Procesos

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Programación estructurada (Introducción a lenguaje C)

Procesadores de 64 bits

Conversión entre Tipos

Sistemas Operativos - Intro

Linux. Kernel Linux Modulos y procfs

Introducción al kernel Linux

Tecnología de software para sistemas de tiempo real

Tema: Clases y Objetos en C#. Parte II.

Arquitectura (Procesador familia 80 x 86 )

Unidad 1: Conceptos generales de Sistemas Operativos.

Entrada/Salida. Nano Semelman Maximiliano Geier Maximiliano Sacco. Sistemas Operativos, 2c DC - FCEyN - UBA

Estructura del Sistema Operativo. Módulo 2. Estructuras de Sistemas Operativos

Arquitectura de computadoras

MONITOREO DE EVENTOS PARA PENTIUM CON MMX

Sistemas Operativos. Tema 1. Arquitectura Básica de los Computadores

FUNDAMENTOS DE INFORMÁTICA. Principios Básicos de Sistemas Operativos. Definición de Sistema Operativo

Adaptación de la arquitectura linux lib de MaRTE OS a multiprocesadores

Estructura del Sistema Operativo. Módulo 2. Estructuras de Sistemas Operativos

Threads, SMP y Microkernels. Proceso

Tema 12: El sistema operativo y los procesos

SISTEMAS OPERATIVOS. Informática Básica

Procesadores IA-32 e Intel R 64 Inicialización

funciones printf scanf

Arquitecturas cliente/servidor

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

The Atomik Microkernel API Reference, version 0.1 february 2014 (Spanish)

Una introducción a LaTeX y LyX. Alberto Sánchez, PhD

Sistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos

Gestión de Entrada-salida

Contenidos. Sistemas operativos Tema 3: Estructura del sistema operativo. Componentes típicos de un SO. Gestión de procesos.

Programación Modular. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Ingeniería de Software II. SETEPROS Plan de pruebas. Versión 1.0

Unidad I: Organización del Computador. Ing. Marglorie Colina

Sistema Operativo Linux

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Sistemas Distribuidos: Migración de Procesos

Principios de Computadoras II

Cátedra de Sistemas Operativos UNLaM Trabajo Práctico Nro. II Implementación estándar POSIX

Introducción a los Sistemas Operativos

Matías Zabaljáuregui

Informática Electrónica Interfaces para los programas de aplicación (APIs)

Manual de usuario del PicKit2. Manual de usuario del PicKit2

Contenido. 1. El proceso 2. Los modelos 3. Los diagramas 4. Ejemplo

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Historia de revisiones

CIAA NXP. Alcances y limitaciones de un port basado en Buildroot/Linux. Ezequiel García. 12 de agosto de VanguardiaSur

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas

LINUX fork() execv() wait() exit() kill signal pipe creat close open read write fstat Chmod getuid, setuid, getgid setgid

Conmutación de Tareas

La Pila en los Procesadores IA-32 e Intel c 64

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

Herramientas Informáticas I Software: Sistemas Operativos

Práctica 1. Introducción a la programación en ensamblador

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Entrada/Salida y bloqueo mutuo. Dr. Alonso Ramírez Manzanares 19-Oct-2010

5 Gestión de E/S. Servicios de E/S que suministra el SO Hardware de Entradas/salidas Implementación de los servicios Mejora del redimiento de E/S SOI

Práctica 2. Implementación de un driver básico para la transmisión de datos a través de la UART.

Resolución de Problemas y Algoritmos

Arquitectura de Computadoras

T5-multithreading. Indice

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

PROGRAMACIÓN CON ACCESO A DATOS

HP - UX. Qué es HP UX?

101 Sombras del Malware. Israel Aráoz Severiche C EH,C HFI,

CAPITULO 5 RESULTADOS Y CONCLUSIONES

Sistemas Operativos I Manual de prácticas

Tiempo real. Juan Antonio de la Puente DIT/UPM. Tiempo real. Comprender el papel del tiempo en el diseño y realización de sistemas de tiempo real

Transcripción:

Taller de Sistemas Operativos System Calls 2012

Agenda Conceptos generales La API POSIX y las System Calls Syscalls System Call Handler Como implementar una System Call Contexto de una System Call Utilizar una System Call Conclusiones

Conceptos generales El kernel provee un conjunto de interfaces para que procesos de usuario interactuén con él (System Calls) Acceso a HW y otros recursos del SO Actúan como mensajeros entre los procesos y el kernel Las System Calls tienen 3 propósitos principales Abstraer el HW hacia el espacio de usuario Al actuar el kernel como intermediario entre los recursos del sistema puede arbitrar en el acceso Provee una capa de acceso única entre el espacio de usuario y el resto del sistema. Esto permite exponer un sistema virtualizado a los procesos

La API Posix y los System Calls Las aplicaciones son programadas sobre APIs y no directamente sobre system calls Una API define un conjunto interfaces usada por aplicaciones. Estas interfaces pueden ser programadas con 0 o más llamadas a system calls POSIX es una serie de estándares (IEEE) cuyo objetivo es proveer un estándar de SO portable POSIX es un excelente ejemplo de relación entre API y system calls En sistemas Unix las llamadas a funciones de la POSIX API tienen una fuerte relación con las system calls La Interface de system calls en Linux es provista en parte por la biblioteca de C

La API Posix y los System Calls La biblioteca C implementa el API principal en sistemas UNIX incluyendo la biblioteca estándar de C y la system call interface Puntos de vista Para el programador el API es lo esencial Para el kernel las system calls es todo

Syscalls Típicamente accedidas por function calls Se definen 1 o más argumentos de entrada Provocan efectos laterales Pueden retornar un long que denota éxito o error Si terminan con error modifican la variable errno (perror ()) Las system calls tienen un comportamiento definido El kernel debe proveer el comportamiento esperado sin importar la implementación siempre y cuando sea correcto

Syscalls asmlinkage long sys_getpid(void) { } return current->tgid; Observaciones asmlinkage significa que el compilador debe buscar los parámetros solamente en el stack. Esto es requerido para las system calls. La system call getpid se define como sys_getpid en el kernel. Esto es una convención de nombrado para todas las system calls en Linux.

Syscalls En Linux a cada system call se le asigna un número único. Cuando un proceso de usuario quiere ejecutar un system call la identifica por ese número y no por su nombre. Si una system call es quitada del sistema, su número de system call no puede ser reciclado Linux provee una system call not implemented sys_ni_syscall() que no hace nada y retorna ENOSYS El kernel tiene una lista con todas las system calls registradas llamada sys_call_table y definida en syscall_32.tbl Depende de la arquitectura y para x86 está en arch/x86/syscalls/

System Call Handler Para aplicaciones de espacio de usuario no es posible ejecutar código del kernel directamente (mem protegida) Las aplicaciones de espacio de usuario deben hacer un signal al kernel avisando que quieren ejecutar una Sys Call El mecanismo utilizado es una interrupción de software El manejador de la exepción en este caso es el sytem call handler. En x86 se dispara con la ejecución de int $0x80 Dispara un switch a modo kernel y la ejecución del vector de interrupción 128 que es la función system_call() Es dependiente de la arquitectura y se define en entry.s

System Call Handler El número de system call debe ser pasado al kernel En x86, este número se pasa al kernel mediante el registro eax La función system_call () verifica la validez del número comparándolo con NR_syscalls. Si es mayor o igual, la función retorna ENOSYS. De otra manera se llama la system call correspondiente

System Call Handler Las sycalls requieren 0 o más parámetros De alguna manera se deben pasar Se utilizan los registros del procesador En x86 los registros ebx, ecx, edx, esi y edi contienen los primeros cinco argumentos Si hay más se usa un solo registro con un puntero a user-space En x86 el para el valor de retorno se usa eax

Como implementar una SysCall El primer paso es definir el propósito Definir argumentos, valor de retorno, códigos de error. Debe tener una interface simple con el menor número de parámetros. Diseñe la system call para ser lo más general posible Es la system call portable? Es importante darse cuenta de la necesidad de portabilidad y robustez; no hoy sino para el futuro Las system calls básicas de Unix han sobrevivido por más de 30 años

Como implementar una SysCall Las syscalls deben verificar que los parámetros son válidos y legales. La seguridad y estabilidad del sistema están en juego Cada parámetro debe ser verificado para asegurarse que no sólo sea válido y legal sino correcto Un chequeo importante: verificar los punteros que el usuario provee. Se debe asegurar que: El puntero apunta a una región en user-space El puntero apunta a una región en el espacio del proceso Si lee que la memoria esté habilitada para lectura; si escribe que esté habilitada para escritura El kernel provee funciones para hacer el check de los requisitos y copiar desde y hacia user-space copy_to_user() y copy_from_user ()

Contexto de una System Call El kernel se encuentra en process context durante la ejecución de una syscall El puntero current apunta al proceso que ejecutó la syscall En contexto de proceso el kernel puede dormirse (si la syscall se bloquea) y es completamente preemptible El hecho que process context es preemptible implica que la current task puede ser preempted por otra task. La tarea nueva podría ejecutar la misma syscall, por lo que se debe asegurar que las syscalls sean reentrantes. Cuando la syscall retorna, el control continúa en system_call() quien cambia a user-space y continúa con la ejecución del proceso de usuario.

Registrar una System Call Es trivial registrar una system call Agregar una entrada al final de tabla de system calls para cada arquitectura soportada Para cada arquitectura soportada, el número de system call debe ser definido en <asm/unistd.h> La system call debe ser compilada dentro del kernel. Se debe poner en cualquier archivo relevante bajo como por ejemplo sys.c

Utilizar una System Call Generalmente C provee mecanismos para llamar una syscall utilizando headers (.h) estandar y linkeditando con la biblioteca de C Linux provee una macro para acceder a las syscalls Configura los registros e invoca las instrucciones de trap. Se llama syscall y se incluye desde unistd.h Recibe como parámetros El número del system call Los parámetros de la misma (número variable) Retorna un entero que es lo mismo que retorna el system call (en general 0 es ok)

Conclusiones Ventajas de implementar una interface como syscall Las system calls son fáciles de implementar La performance de las system call en Linux es muy alta Las desventajas Se necesita un número de syscall (asigando oficialmente) durante el desarrollo de una serie del kernel Una vez que el kernel queda estable, ese número queda permanente Cada arquitectura debe registrar ese número por separado y dar soporte a la system call Las system calls no se pueden usar facilmente desde scripts ni desde el filesystem Para un simple intercambio de información, una system call es demasiado

Las alternativas Conclusiones Implementar un device node y manejarlo con read(), write() e ioctl() Algunas interfaces como los semáforos pueden ser representadas como file descriptors y manipuladas de esa manera Agregar la información como un archivo bajo /proc Para algunas interfaces, las system calls son la solución La baja tasa de agregado de nuevas system calls es una señal que Linux es un sistema operativo relativamente estable y completo en funcionalidades.