Saltar al contingut Menu
Mapa
  • Inicio
  • Información
  • Contacto
  • Mapa

Proyecto de Sistemas Operativos (PROSO)

Créditos Dept.
7.5 (6.0 ECTS) AC

Profesores

Responsable:  (-)
Otros:(-)

Objectivos Generales

1. Conocer de forma práctica cómo funciona internamente un sistema operativo (SO). 2. Ser capaz de implementar desde cero los componentes básicos del núcleo de un SO. 3. Ser capaz de desarrollar nuevas funcionalidades sobre un SO real.

Objectivos Específicos

Conocimientos

  1. Conocer el funcionamiento de un SO real desde el arranque del ordenador y la inicialización del sistema, pasando por la gestión dinámica de los recursos, hasta que se apaga el ordenador.
  2. Conocer los detalles de implementación de algunos de los componentes básicos de un SO real: código de inicialización, código de gestión de memoria, código de gestión de la entrada/salida, código de gestión de los procesos y código de carga de ficheros ejecutables.
  3. Conocer el mecanismo de inserción dinámica de código sobre un SO real: módulos en linux.
  4. Conocer el concepto de dispositivo especial en linux y el concepto de controlador de dispositivo (device driver).

Habilidades

  1. Ser capaz de implementar un programa complejo y de muy bajo nivel desde cero.
  2. Ser capaz de añadir código de bajo nivel que interaccione con un código real complejo y de muy bajo nivel.
  3. Dominio de las herramientas y metodologías de desarrollo y depuración de código de bajo nivel.

Competencias

  1. Capacidad para trabajar efectivamente en grupos pequeños de personas para la resolución de un problema de dificultad grande.
  2. Capacidad para diseñar sistemas, componentes o procesos que se ajusten a unas necesidades, utilizando los métodos, técnicas y herramientas más adecuadas en cada caso.
  3. Capacidad de abstracción. Capacidad para enfrentarse a problemas nuevos recurriendo conscientemente a estrategias que han sido útiles en problemas resueltos anteriormente.
  4. Capacidad para resolver problemas aplicando los métodos de la ciencia y la ingeniería.
  5. Capacidad y experiencia en la programación de código complejo y de muy bajo nivel.

Contenidos

Horas estimadas de:

T P L Alt L Ext. Est O. Ext.
Teoria Problemas Laboratorio Otras actividades Laboratorio externo Estudio Otras horas fuera del horario fijado

1. Proceso de boot e inicialización del sistema operativo.
T      P      L      Alt    L Ext. Est    O. Ext. Total 
1,0 0 4,0 0 5,0 0 0 10,0
Descripción del proceso de boot y la inicialización del sistema operativo.
Descripción del entorno a desarrollo sobre Linux y de las herramientas de compilación y depuración que se utilizarán en el primer proyecto.
  • Laboratorio:
    Familiarización con el entorno de desarrollo y con las herramientas de compilación y depuración.
    Familiarización con la estructura de ficheros del sistema operativo y comprensión de su proceso de boot e inicialización.
    Generación de una imagen bootable de un sistema operativo.
  • Actividades de laboratorio adicionales:
    Continuación del trabajo realizado en las clases de laboratorio.

2. Mecanismos de entrada al sistema.
T      P      L      Alt    L Ext. Est    O. Ext. Total 
2,0 0 8,0 0 10,0 0 0 20,0
Descripción de la arquitectura del modo de ejecución protegido: modo usuario y modo sistema.
Introducción a los mecanismos de entrada al sistema: excepciones, interrupciones y traps (llamadas al sistema).
Descripción de la programació y el tratamiento de los diferentes mecanismos de entrada al sistema (inicialización IDT, programación handlers y rutinas de servicio e implementación de la librería de llamadas al sistema).
  • Laboratorio:
    Programación y tratamiento de los diferentes mecanismos de entrada al sistema: excepciones, interrupciones de reloj y de teclado y llamada a sistema "write".

  • Actividades de laboratorio adicionales:
    Continuación del trabajo realizado en las clases de laboratorio.

3. Gestión básica de la memoria.
T      P      L      Alt    L Ext. Est    O. Ext. Total 
1,0 0 4,0 0 5,0 0 0 10,0
Descripción del espacio de direcciones de un proceso (espacio lógico vs. espacio físico).
Gestión de la tabla de páginas: incidencia en la creación de procesos y en el cambio de contexto.
  • Laboratorio:
    Implementación de las rutinas para la gestión simple de la memoria.

  • Actividades de laboratorio adicionales:
    Continuación del trabajo realizado en las clases de laboratorio.

4. Gestión y planificación de procesos.
T      P      L      Alt    L Ext. Est    O. Ext. Total 
3,0 0 12,0 0 15,0 0 0 30,0
Descripción de las estructuras de datos básicas para la gestión de procesos: PCB, listas.
Descripción de las rutines para la gestión de procesos: creación y destrucción de procesos, cambio de contexto entre procesos, planificación de procesos y obtención de información estadística de los procesos.
  • Laboratorio:
    Definición de las estructures de datos básicas para la gestión de procesos.
    Inicialización del proceso inicial.
    Implementación de las rutinas de creación y destrucción de procesos.
    Implementación del cambio de contexto entre procesos y de una política para su planificación en la interrupción de reloj.
    Implementación de un mecanismo para obtener información estadística de los procesos.
  • Actividades de laboratorio adicionales:
    Continuación del trabajo realizado en las clases de laboratorio.

5. Gestión básica de la entrada/salida.
T      P      L      Alt    L Ext. Est    O. Ext. Total 
2,0 0 8,0 0 10,0 0 0 20,0
Descripción de las rutines y estructuras de datos para la gestión básica de la entrada/salida en el teclado
Concepto de tabla de canales.
Llamadas al sistema para la gestión de la tabla de canales.
  • Laboratorio:
    Definición de las estructuras de datos básicas para la gestión del teclado.
    Implementación de la llamada a sistema "read" sobre el teclado y la interrupción de teclado.
    Incorporar al código el concepto de tabla de canales y llamadas al sistema para su gestión.
  • Actividades de laboratorio adicionales:
    Continuación del trabajo realizado en las clases de laboratorio.

6. Sincronización de procesos: semáforos. Otras funcionalidades.
T      P      L      Alt    L Ext. Est    O. Ext. Total 
1,0 0 4,0 0 5,0 0 0 10,0
Descripción de las estructuras de datos para la sincronización de procesos mediante semáforos.
Llamadas al sistema para la gestión de semáforos.
Descripción de otras funcionalidades que podrán escogerse por los alumnos para ser incorporadas al sistema.
  • Laboratorio:
    Implementación de las estructuras de datos y llamadas a sistema para la sincronización de procesos mediante semáforos.
    Implementación de las estructuras de datos y llamadas a sistema asociadas a las nuevas funcionalidades.
  • Actividades de laboratorio adicionales:
    Continuación del trabajo realizado en las clases de laboratorio.

7. Gestión de los dispositivos en Linux: device drivers.
T      P      L      Alt    L Ext. Est    O. Ext. Total 
1,0 0 4,0 0 5,0 0 0 10,0
Descripción de los conceptos de módulos, dispositivos y device drivers en Linux.
  • Laboratorio:
    Implementación de un device driver básico para la gestión de un dispositivo lógico en Linux.

  • Actividades de laboratorio adicionales:
    Continuación del trabajo realizado en las clases de laboratorio.

8. Implementación de un device driver en Linux.
T      P      L      Alt    L Ext. Est    O. Ext. Total 
4,0 0 16,0 0 20,0 0 0 40,0
Descripción del concepto de un device driver. Descripción de las técnicas de inserción de código en el kernel de linux.
  • Laboratorio:
    Implementación de un device driver que gestione información del kernel de Linux.
  • Actividades de laboratorio adicionales:
    Continuación del trabajo realizado en las clases de laboratorio.


Total por tipo T      P      L      Alt    L Ext. Est    O. Ext. Total 
15,0 0 60,0 0 75,0 0 0 150,0
Horas adicionales dedicadas a la evaluación 2,5
Total horas de trabajo para el estudiante 152,5

Proyecto

Descripción

El proyecto de sistemas operativos consta de dos partes:Proyecto 1: implementación del núcleo de un sistema operativo

Proyecto 2: implementación de un device driver para linux

Plan de desarrollo

Cada proyecto está organizado en varias partes. Para cada parte se hará un repaso de los conceptos teóricos asociados y una descripción del proyecto a realizar.

Al acabar cada una de las partes, se hará una entrega/seguimiento parcial consistente en una entrevista y una demostración del funcionamiento del proyecto.

Metodología docente

En las clases de teoría se repasarán los conceptos básicos de sistemas operativos que se necesitan para el proyecto y se hará una descripción del enunciado del proyecto.

En las clases de laboratorio se irá implementando el proyecto, generalmente con el apoyo del profesor de laboratorio. Aun así, el alumno dispondrá de una cantidad de horas de laboratorio para continuar y acabar el proyecto.
Es obligatorio asistir a las clases con apoyo del profesor para que el profesor pueda evaluar la evolución del proyecto.

Método de evaluación

Proyecto 1: 70%
Proyecto 2: 30%

A lo largo del curso se harán dos entregas parciales (de seguimiento) para el proyecto 1 y una entrega final para cada proyecto. Todas las entregas puntúan, aunque ninguna es imprescindible (si no se hace una entrega determinada, se puntúa con un 0). Durante las clases de laboratorio, el tutor hará un seguimiento de los estudiantes para evaluar la evolución del proyecto. Después de cada entrega, el tutor hará saber a cada estudiante los aspectos de su proyecto que son incorrectos y que debe corregir/mejorar de cara a las siguientes entregas. Al final de cada entrega, el estudiante tendrá que validar el código que ha entregado. Para ello, responderá a su tutor una serie de preguntas sobre los conceptos que ha aplicado para su desarrollo. La evaluación de cada proyecto tendrá en cuenta tres componentes: la corrección del código entregado, una valoración global de la evolución del estudiante y una nota de seguimiento del proyecto (que incluye las respuestas dadas a su tutor tanto en las clases de laboratorio como en el cuestionario final de cada entrega).

Bibliografía básica

  • Jonathan Corbet, Alessandro Rubini and Greg Kroah-Hartman Linux device drivers, O'Reilly, 2005.
  • Daniel P. Bovet & Marco Cesati Understanding the Linux kernel, O'Reilly, 2005.
  • Robert Love Linux kernel development, Novell Press, 2005.

Bibliografía complementaria

  • Brian W. Kernighan, Rob Pike The Practice of programming, Addison-Wesley, 1999.
  • Abraham Silberschatz, Peter Baer Galvin, Greg Gagne Operating system concepts, John Wiley & sons, 2005.
  • William Stallings Operating systems : internals and design principles, Pearson Education International, 2005.

Enlaces web

  1. http://www.xml.com/ldd/chapter/book/


  2. http://bochs.sourceforge.net/


  3. http://www.kernel.org/


Capacidades previas

El alumno debe conocer:
- Conceptos básicos, estructuras y algoritmos de un sistema operativo: mecanismos de entrada al sistema, gestión de procesos, gestión de entrada/salida y gestión de memoria.
- La utilización a nivel usuario de les llamadas a sistema de Linux.
- Programación de bajo nivel: Lenguaje C y ensamblador i386.
- Programación de alto nivel: algoritmos y estructures de datos.
- Herramientas básicas de desarrollo de programes en C sobre Linux: Makefiles, compilador de C y depuradores.

Por lo tanto, las asignaturas que se deberán cursar antes de esta son SO, EC2 y PRED.


Compartir

 
logo FIB © Facultad de Informática de Barcelona - Contacto - RSS
Esta web utiliza cookies propias para ofrecerle una mejor experiencia y servicio. Si continúa la navegación, entendemos que acepta nuestra política de cookies. Versión clássica Versión móvil