Última actualización:
12 enero 2010.
El objetivo general de TPBN es el estudio de la
interacción entre el hardware y el software en un computador: cómo afectan las
características del hardware en las prestaciones, fiabilidad, y la arquitectura
de elementos software como son el sistema operativo, los lenguajes de
programación, compiladores, depuradores, etc.
Más específicamente, podemos dividir los contenidos de la
asignatura en 4 áreas de interés:
Sistemas
operativos. Se haber cursado o cursar simultáneamente las asignaturas
Sistemas Operativos y Laboratorio de Sistemas Operativos, ya que en la segunda
mitad de TPBN se utilizan conceptos relacionados con las características
generales de un sistema operativo, su funcionalidad y estructura, gestión de la
ejecución de tareas, la gestión de memoria y las operaciones con ficheros.
Contenidos.
El contenido de la asignatura se divide en dos partes. La
primera trata la arquitectura ISA (Instruction
Set Architecture) de un procesador y su relación con las prestaciones y
diseño de lenguajes de alto nivel y software de sistemas, en general. Utiliza
fundamentalmente el lenguaje ensamblador como herramienta de aprendizaje. En la
segunda parte nos ocupamos del software de sistemas, centrándonos en la gestión
de entrada/salida (+).
La primera parte comienza con una revisión de los niveles
de abstracción en el estudio de un computador en el tema 1. Nos permite situar
el contexto del estudio de la arquitectura ISA realizado en la asignatura. El
tema 2 se centra en la parte de la ISA que implementa lo que se conoce como el
modelo de programación de aplicaciones o
modelo de programación de usuario.
Incluye las características del procesador usadas en los programas de
aplicación. El tema siguiente está dedicado al lenguaje ensamblador, ligando su
estudio al de algunos elementos que intervienen en la ejecución y desarrollo de
programas: cargadores del sistema operativo, ficheros ejecutables, librerías
estáticas y dinámicas, etc.
El tema 4 es el primero de la parte dedicada a software
de sistema. Estudia el modelo ISA para la programación de sistemas. El tema 5
se ocupa de los dispositivos básicos de entrada/salida y el modelo de drivers.
En este tema y el siguiente se trata en profundidad, tanto en teoría como en
prácticas, el modelo de drivers estructurados, que usan sistemas operativos
como Unix/Linux y Windows 2000 y sucesores (+).
Por último, el tema 6 cierra el curso con el estudio de
algunas características avanzadas de los sistemas de entrada/salida.
Temario.
Tema 0. Presentación de la asignatura.
3
Tema 1. Arquitectura interna de un procesador (+).
4
Tema 2. Modelo de programación de un procesador para
software de aplicación (+).
4
Tema 3. Estructura interna y generación de código
ejecutable.
5
Tema 4. Modelo de programación de un procesador para
software de sistema (+).
6
Tema 5. Sistemas básicos de entrada/salida (+).
6
Tema 6. Sistemas avanzados de entrada/salida (+).
7
0.1.
Profesorado.
0.2.
Contenido.
0.3.
Metodología
y actividades docentes.
0.4.
Criterios
y sistema de evaluación.
0.5.
Programación
de la asignatura.
0.6.
Prerrequisitos.
0.7.
Bibliografía
recomendada.
En este primer tema informa sobre el contenido general de
la asignatura y las normas que rigen su docencia, incluyendo horario y lugar de
las tutorías, documentación necesaria, cómo acceder a ella, temario, etc.
También se especifican los prerrequisitos de la asignatura.
Tema 1.
Arquitectura
interna de un procesador (+).
1.1.
Máquinas multinivel. Máquinas virtuales.
1.2.
Procesadores CISC y RISC.
1.3.
Procesadores con encadenamiento.
1.4.
Resumen y conclusiones.
El primer tema revisa algunos conceptos sobre
la arquitectura interna de un procesador que se tratan en asignaturas de cursos
anteriores: Estructura de Computadores (1º) y Arquitectura de Computadores
(2º). La intención es relacionarlos con los nuevos conocimientos que tratará
TPBN, e introducir el concepto de máquinas
virtuales.
Al final del tema se debe comprender la
utilidad de tener “visiones” de un sistema informático a distintos niveles para
manejar su complejidad. Usaremos esta división en niveles para introducir y
contextualizar una serie de conceptos que se utilizarán con frecuencia a lo
largo de la asignatura: máquinas virtuales, arquitectura del conjunto de
instrucciones (ISA), portabilidad y compatibilidad binaria, encadenamiento de
instrucciones, procesadores RISC y CISC.
Horas de clase: Teoría:
2.
Laboratorio: 0.
Bibliografía:
Los
contenidos del tema pueden encontrarse en los capítulos 1
y 2 de
[TAN00], 3ª Edición.
2.1.
Arquitectura
ISA. Software de aplicación/software de sistemas.
2.2.
Familias
de procesadores.
2.3.
Almacenamiento
y acceso a datos.
2.4.
Juego
de instrucciones.
2.5.
Resumen
y conclusiones.
El objetivo de este tema son los aspectos más importantes
relacionados con la arquitectura del juego de instrucciones de un procesador,
que configuran su modelo de programación.
El modelo de programación engloba la información necesaria para generar
programas que ejecuten en un procesador. Aunque esta información también puede
ser útil directamente en cualquier tipo de programas sus áreas de aplicación
naturales son los compiladores, herramientas de desarrollo, en general, y
sistemas operativos.
En TPBN trataremos fundamentalmente las características
que intervienen en el almacenamiento y acceso a datos, y el juego de
instrucciones.
El estudio del nivel ISA, y del modelo de programación
asociado, se ha dividido en dos partes:
●
El modelo para la programación de software de
aplicación (tema 2). Engloba todas las características del procesador
accesibles a programas ejecutando sin ningún nivel de privilegio (nivel de
usuario o modo usuario del procesador).
●
El modelo para la programación de software de
sistema (tema 4). Es una extensión del anterior para incluir las
características accesibles sólo a código ejecutando en modos con mayores
privilegios que los del modo usuario (los llamaremos niveles privilegiados o
modos kernel, ya que algunos procesadores pueden tener más de un nivel).
Horas de clase: Teoría:
4.
Laboratorio: 2.
Bibliografía.
●
El planteamiento y parte de los contenidos del
tema son los del capítulo 5 de
[TAN00],
que presenta el nivel ISA para software de aplicación, usando como ejemplo las
arquitecturas IA32 y UltraSPARC II.
3.1.
Tipos de
programas
ejecutables.
3.2. Estructura
de un fichero ejecutable.
3.3.
Enlace
estático y enlace dinámico.
3.4.
Resumen y conclusiones.
Este tema presenta los tipos de código
ejecutable, y conceptos asociados a la carga, ejecución y
estructura interna de los ficheros ejecutables.
Al finalizar el tema el estudiante deberá ser capaz de
comprender los conceptos necesarios para usar
ficheros objeto y/o librerías compiladas con distintos lenguajes de
programación.
·
Horas de clase: Teoría:
4. Laboratorio:
4.
Bibliografía:
●
[TAN00] tiene un tratamiento
muy completo del proceso de ensamblado/compilación en el capítulo 7, que también se puede
usar para los contenidos relacionados con el enlace de módulos, librerías y DLLs.
4.1.
Arquitectura del modelo.
4.2.
Mecanismos de protección.
4.3.
Conexión con el sistema operativo.
4.4.
Gestión de memoria.
4.5.
Espacio de direcciones de entrada/salida.
4.6.
Interrupciones y excepciones.
4.7.
Gestión de multitarea.
4.8.
Arranque
e inicialización.
4.9.
Resumen y conclusiones.
Este tema
extiende el modelo de la arquitectura ISA visto en los dos anteriores,
incluyendo las características necesarias para el software de sistema,
encargado de gestionar los recursos de un computador. Nos centraremos
fundamentalmente en la gestión del tiempo de CPU, la memoria y los dispositivos
de entrada/salida.
Horas de clase: Teoría:
5.
Laboratorio: 4.
Bibliografía:
●
El tema está estructurado siguiendo el modelo de
la mayoría de manuales sobre alguna arquitectura ISA concreta (como
[INT00],
[MIP01], o
[SHA94]). Aunque estas obras dan un excesivo
nivel de detalle y no pueden servir como referencia básica.
●
Un nivel más adecuado al tema se da en
[TAN00], aunque la información
está dispersa en parte de los temas 5 (al principio trata los mecanismos de
protección y al final las interrupciones) y 6. El tema 6 es especialmente
adecuado para ver la gestión de memoria virtual y multitarea desde el punto de
vista del sistema operativo, aunque da poca información sobre el hardware que
hace posible estas dos últimas funciones.
5.1.
Hardware
básico de entrada/salida.
5.2.
Modelos de gestión de entrada/salida.
5.3.
Modelos con drivers. Estructura básica.
5.4.
Gestión
de interrupciones.
5.5.
Excepciones.
5.6.
Resumen y conclusiones.
Este tema y el siguiente tratan los mecanismos que
permiten la interacción entre los dispositivos de entrada/salida y el resto del
computador. Aunque trata conjuntamente del hardware y software, prestaremos
especial atención a los principios de gestión software de la entrada/salida.
Horas de clase: Teoría:
9. Laboratorio:
10, en:
Bibliografía:
●
La mayor parte de los contenidos del tema pueden
encontrarse en [TAN03],
capítulos 5, 11 y 12.
●
En los capítulos 1 y 3 de
[RUB01] encontramos la mayor parte de los
contenidos sobre drivers de caracteres de Linux utilizados en este tema. El
libro al completo es una referencia muy recomendable sobre el modelo de drivers
en Linux.
m.
6.1.
Acceso
directo a memoria (DMA).
6.2.
Buses de entrada/salida.
6.3.
Canales
de entrada/salida.
6.4.
Características
avanzadas del modelo de drivers.
6.5.
Resumen y conclusiones.
Este tema es una continuación y ampliación del anterior.
Se ocupa de algunos de los elementos avanzados de entrada/salida más comunes en
computadores modernos. Se pretende que el estudiante comprenda sus principios
de funcionamiento y la arquitectura general del hardware y software.
Horas de clase: Teoría: 5.
Bibliografía:
●
Muchas
de las obras de la bibliografía del tema anterior tratan el hardware o software
DMA como parte de los capítulos dedicados a entrada/salida. En concreto, los
conceptos que damos sobre hardware de DMA son bastante generales y podemos
encontrarlos en
[TAN00],
[TAN03],
o [RUB01].
●
El
tema sigue la estructura y parte de los contenidos del capítulo 3 de
[STA00] para tratar los buses de entrada/salida, usando el
bus PCI para ilustrar un bus paralelo.
Prácticas.
Práctica 1. Introducción a los entornos de desarrollo. Modos de direccionamiento
en un compilador de C.
9
Práctica 2. Llamadas a procedimientos y paso de parámetros9
Práctica 3. Introducción a la programación de sistemas en Linux.
10
Práctica 4. Desarrollo de controladores para dispositivos sencillos.
10
Práctica 5. Programación de dispositivos con gestión de
interrupciones.
10
Distribución de aulas de
prácticas:
Lunes
10:30
a
12:30: Aulas
B1.32, B1.33, A0.30 (14).
oMartes
10:30
a
12:30:
Aulas B1.32, B1.33, A0.30 (14).
Martes
17:30
a
19:30:
Aulas B1.32, B1.33, A0.30 (14).
o
(2 horas de laboratorio).
El principal objetivo es mostrar cómo podemos usar un sistema
de desarrollo de software para estudiar el nivel ISA de un procesador. Para
ello, trataremos las principales características de uno de los entornos de
desarrollo usados en la asignatura, Visual C++ .Net, prestando especial
atención a la parte que nos será más útil: el depurador.
También veremos cómo utiliza un compilador C los modos de
direccionamiento del procesador para acceder a distintos tipos de variables.
La práctica tiene dos objetivos: el primero es comprender
y utilizar los mecanismos de llamada entre funciones y procedimientos. Se
estudiarán los pasos necesarios para llamar una función desde lenguaje
ensamblador y responder correctamente a una llamada desde un lenguaje de alto
nivel.
El segundo objetivo es profundizar en el concepto de
stack frame. Es también parte del
mecanismo de llamada pero se trata con más detalle porque es fundamental para
comprender cómo se manejan las variables locales en un lenguaje de alto nivel.
(4 horas de
laboratorio).
Esta es la
primera práctica que entra en la programación de sistemas. Por ello, sus
objetivos fundamentales son:
●
Introducir los elementos prácticos que
intervienen en la programación de sistemas.
●
Introducir las técnicas y herramientas de
desarrollo básicas.
●
Profundizar en el concepto de protección de
recursos en un sistema operativo.
·
(6 horas de
laboratorio).
El objetivo de
esta práctica es comprender las operaciones necesarias para el manejo de un
dispositivo de entrada/salida y las alternativas que podemos usar: gestión
directa desde la aplicación o a través del sistema operativo. Qué implica cada
una de ellas desde el punto de vista de la aplicación y del software del
sistema.
Otro objetivo
importante es comprender y aplicar los fundamentos y operaciones básicas de la
gestión de entrada/salida en un sistema operativo. Por último, profundizaremos en la estructura
y funcionamiento del modelo de drivers de Linux y las técnicas de depuración
asociadas.
(4 horas de
laboratorio).
En esta práctica
se profundiza en el concepto de driver de dispositivo como sistema que
independiza las particularidades del hardware, creando una capa de abstracción
que ofrece la funcionalidad requerida por un programa de usuario.
Nos centraremos
en el funcionamiento genérico de los dispositivos que ofrecen datos de forma
asíncrona. Veremos las implicaciones y limitaciones de las técnicas basadas en
polling para interrogar al dispositivo,
y cómo usar el muestreo por interrupciones para evitar tiempos muertos de
espera.
El último
objetivo es consolidar los conocimientos sobre gestores de interrupción,
interrupciones rápidas e interrupciones lentas expuestos en las clases de
teoría.
Evaluación.
Se realizarán dos tipos de pruebas de
evaluación, tanto en evaluación alternativa como en la ordinaria: pruebas
escritas y pruebas de prácticas:
Prueba o examen escrito.
El examen escrito
es un examen realizado al modo tradicional, que consta de dos partes:
●
Cuestiones. Son ejercicios de análisis sobre los
contenidos teóricos vistos en clase o de abstracción sobre los contenidos de
las prácticas. En esta parte no se permite usar ningún tipo de documentación.
Se puntúa sobre 10, necesitándose una puntuación mínima de 3 para poder superar
el examen escrito.
●
Problemas. Consiste en problemas donde se deben
aplicar los conocimientos y habilidades adquiridos indistintamente en clase de
teoría o en prácticas. Se puede usar toda la documentación impresa que se
estime necesaria. También se puntúa sobre 10, necesitándose 3 puntos, como
mínimo, para poder superar el examen.
·
En el examen se valorará el análisis de los problemas,
esquemas de razonamiento, eficiencia de las soluciones y la claridad en la
exposición.
La importancia de cada parte en la nota final viene dada
por:
Nota Examen= 0.4 x Nota Cuestiones + 0.6 x Nota
Problemas.
·
El examen se supera si la nota total es mayor o igual a
5, cada nota parcial de teoría y problemas supera los 3 puntos, y se ha
superado el examen de práctica en la misma convocatoria o alguna de las
anteriores del mismo curso.
Prueba o examen de prácticas.
Debe superarse el examen de prácticas
antes de poder aprobar el
escrito. El examen de prácticas se califica como apto o no apto.
Las prácticas son un componente fundamental de la
asignatura, hasta el punto de que más de la mitad del tiempo que un alumno debe
dedicarle se invierte en actividades relacionadas con ellas. La evaluación de
prácticas se hace en dos partes:
●
El examen escrito. Como se ha señalado en la
sección anterior, los contenidos de prácticas son evaluados conjuntamente con
el resto de la asignatura en un examen escrito, donde se determina la nota
final. Se ha pretendido integrar al máximo los contenidos de clases de teoría y
prácticas, y, de hecho, suele ser necesario usar contenidos de teoría y
práctica para contestar la mayoría de los problemas y cuestiones del examen.
●
El examen de prácticas. Es una evaluación de
mínimos. Para poder realizar el examen escrito se exige superar el de
prácticas. En el de prácticas se exige el dominio de una serie de contenidos y
habilidades teórico-prácticas mínimos. El estudiante debe demostrar que supera
ese mínimo antes de poder continuar el proceso de evaluación.
El examen de prácticas consiste en un ejercicio de
programación con un nivel de dificultad algo más bajo que los que se plantean
en los enunciados de las prácticas anteriores. Normalmente se resuelve
realizando parte de una aplicación o un driver.
El estudiante tiene dos horas para terminar el examen,
que superará si el programa realizado cumple
todas las especificaciones del enunciado.
Al elaborar los ejercicios de examen tenemos en cuenta,
principalmente, los siguientes aspectos:
●
Evidentemente, para realizarlo el estudiante
debe dominar la mayor parte posible de los contenidos y habilidades mínimos
teórico-prácticos que pretendemos evaluar:
o
El funcionamiento general de
los programas y técnicas vistos en clase de prácticas.
o
Las técnicas de depuración
básicas.
o
El manejo de las herramientas
de desarrollo.
●
Tendrán una dificultad algo menor que las
cuestiones que realizan en las prácticas. No hay que olvidar que es una
evaluación de mínimos.
●
Se corregirán en el mismo momento del examen. El
resultado del examen se da inmediatamente.
Por último, hay una prueba de prácticas en la evaluación
alternativa, y un examen de prácticas coincidiendo coinciden con las tres
convocatorias de examen oficiales. En cada convocatoria, se realiza el examen
de prácticas antes que el escrito. Si se el alumno ha superado el examen de
prácticas en esa convocatoria o en alguna de las oportunidades anteriores,
puede presentarse al examen escrito en esa convocatoria.
Evaluación
Alternativa.
Consta de dos pruebas:
·
Prueba
práctica. Se realizarán en las
siguiente fechas:
o
Grupo 1:
Martes 9 de junio, de 10:30 a 12:30.
o
Grupo 2:
Martes 9 de junio, de 17:30 a 19:30.
o
Grupo 3:
Lunes 8 de junio, de 10:30 a 12:30.
o
Grupo 4:
Martes 9 de junio, de 17:30 a 19:30.
o
Para
presentarse a esta prueba, es obligatorio hacerlo el día correspondiente al
grupo en el que se está matriculado.
·
Prueba
escrita. Solo se evaluará si se obtiene “Apto” en la prueba práctica. Dos
turnos:
o
Turno
mañana: Viernes 12 de junio, de 10:30 a 12:30.
o
Turno
tarde: Viernes 12 de junio, de 17:30 a 19:30.
o
El
estudiante podrá elegir libremente el turno al que desea presentarse.
Se aprueba la evaluación alternativa obteniendo Apto
en la prueba práctica y una nota superior a 5 en la prueba escrita.
Si se obtiene “Apto” en la prueba práctica, se dan por
superados todos los exámenes de
prácticas del curso.
Evaluación ordinaria.
Consta de dos exámenes: el examen de prácticas y el
escrito. Para aprobar la asignatura en una convocatoria, hay que aprobar el
examen escrito y tener aprobado el examen de prácticas en la misma
convocatoria, o en una anterior del mismo curso.
Bibliografía.
[INT00] Intel Corp. “Intel Architecture Software Developer's
Manual (P6 family)”.
Son 3 volúmenes:
Volume 1: Basic Architecture.
Disponible en
http://www.intel.com/design/PentiumII/manuals/243190.htm.
Volume 2: Instruction Set Reference Manual.
En
http://www.intel.com/design/PentiumII/manuals/243191.htm.
Volume 3: System
Programming Guide. En
http://www.intel.com/design/PentiumII/manuals/243192.htm.
No son los últimos manuales de la arquitectura IA32 (Pentium 4), sino los
correspondientes a la familia P6 (Pentium II). No usaremos los últimos manuales
porque contienen muchas características que no veremos en la asignatura, y que
además son diferentes de las características equivalentes en su competidor
inmediato: AMD.
[KER91] B.W. Kernighan
y D.M. Ritchie.
“El
lenguaje de programación C”. Prentice-Hall, 1991.
[MIP01] MIPS Technologies.
“MIPS32 Architecture for Programmers”. MIPS Technologies, Document
Number MD00086, Rev. 0.95, 2001. Disponible en
http://www.mips.com/content/Documentation/MIPSDocumentation/ProcessorArchitecture/doclibrary.
Contiene 3 partes:
à Volume I: Introduction to the
MIPS32™ Architecture.
à Volume II: The MIPS32™
Instruction Set.
à Volume III: The MIPS32™
Privileged Resource Architecture.
[PIE98] M. Pietrek.
“Under the Hood”. Microsoft Systems Journal, Feb. 1998. San
Francisco (CA): Miller Freeman. Disponible
en dos ficheros:
http://www.microsoft.com/msj/0298/hood0298.aspx, y
http://www.microsoft.com/msj/0698/hood0698.aspx.
[RUB01] A. Rubini, J. Corbet.
“Linux device drivers”.
O'Reilly and Associates, 2001.
[SHA94] T. Shanley.
“PowerPC 601 System Architecture”.
Mindshare, 1994.
[STA00] W. Stallings.
“Organización y arquitectura de computadores. Diseñando para optimizar
las prestaciones”. Prentice Hall, 1997 (4ª edición), 2000 (5ª edición).
[TAN00]
A. S.
Tanenbaum.
“Organización de computadoras: un enfoque estructurado”.
Prentice Hall, 1992 (3ª edición). , 2000 (4ª
edición).
[TAN03] A. S. Tanenbaum.
“Sistemas Operativos Modernos”. 2ª ed. Prentice Hall, 2003.