Aumentar letras   Inicio   Información   Contactar   Mapa
Català   English

Proyecto de Sistemas Operativos (PROSO)

Créditos Dept.
6.0 ECTS AC

Profesores

Responsable:  Yolanda Becerra Fontal (yolandab@ac.upc.edu)
Otros:Jordi Guitart Fernandez (jguitart@ac.upc.edu)
Juan José Costa Prats (jcosta@ac.upc.edu)
Julita Corbalan Gonzalez (juli@ac.upc.edu)
Maria Luisa Gil Gomez (marisa@ac.upc.edu)
Ruben Gonzalez Garcia (ruben.gonzalez-garcia@upc.edu)

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.



El primer proyecto tendrá dos entregas de seguimiento parciales y una entrega final. El segundo proyecto tendrá una entrega de seguimiento parcial y una entrega final.

Método de evaluación

Proyecto 1: 60%Proyecto 2: 40%



El proyecto 1 tendrá dos entregas parciales (de seguimiento) y una entrega final. El proyecto 2 tendrá una entrega parcial (de seguimiento) y una entrega final. Todas las entregas puntúan.



Proyecto 1

- entrega parcial 1: 10%

- entrega parcial 2: 10%

- entrega final: 40% (total proyecto 1 es 60%)



Proyecto 2

- entrega parcial: 10%

- entrega final: 30% (total proyecto 2 es 40%)



Ninguna entrega es obligatoria. En caso de que no se entregue alguna parte, quedará una nota de 0 en la entrega correspondiente.

Bibliografía básica

  • RUBINI, Alessandro Linux device drivers, 2nd ed., O'Reilly & Associates, Inc., 2001.
  • BOVET, Daniel P.; CESATI, Marco Understanding the Linux Kernel, O'Reilly & Associates, .
  • LOVE, Robert Linux Kernel Development. A practical guide to the design and implementation of the Linux kernel, Developer's Library, .

Bibliografía complementaria

  • KERNIGHAN, Brian W and PIKE, Rob The Practice of Programming, Addison-Wesley Professional Computing Series, 1999.
  • SILBERSCHATZ, Abraham; GALVIN, Peter B Operating Systems Concepts, Addison Wesley, .
  • STALLINGS, William Operating Systems: Internals and Design Principles, Pearson Education, .

Capacidades previas

El alumno debe conocer los fundamentos básicos de la estructura de un sistema operativo.
Además, se requieren conocimientos de programación a bajo nivel, preferiblemente en los lenguajes de programación C y ensamblador del i386. También son útiles conceptos de programación en alto nivel así como conceptos de estructuras de datos. Finalmente, es conveniente que se tenga experiencia en el uso del sistema operativo linux y de herramientas básicas de programación y depuración de programas.

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



 
logo FIB © Facultad de Informática de Barcelona - webmaster@fib.upc.edu - RSS RSS