Programa de la Asignatura Organización y Estructura del

Anuncio
Universidad Central de Venezuela
Facultad de Ciencias
Escuela de Computación
Licenciatura en Computación
Plan de Estudios 2000
Componente Básico
Asignaturas Obligatorias
ORGANIZACIÓN Y ESTRUCTURA DEL COMPUTADOR I
UC
6
HT
4
HP
2
HL
3
Semestre
II
Código
6001
Requisitos
- Algoritmos y Programación
Ult. Actualización
Marzo 2015
Fundamentación
La ciencia de la computación es una disciplina que se basa en un elemento tecnológico: el computador. Para poder desarrollar
programas en lenguajes de alto y bajo nivel, no sólo funcionales sino además que se ejecuten de forma rápida y eficiente, el
futuro egresado requiere una adecuada comprensión del sistema de computación en si mismo con la finalidad de identificar y
resolver cualquier ineficiencia en dichos programas.
Existe una relación fundamental entre el hardware y diversos aspectos de programación, por ende, con la finalidad de escribir
software de forma adecuada es muy importante comprender el sistema de computación como un todo. Esto requiere tener un
dominio de los aspectos teóricos y de los fundamentos tecnológicos involucrados en dichos sistemas. Este curso es de carácter
teórico-práctico, involucrando a su vez el desarrollo de proyectos y laboratorios que permiten poner en práctica los conocimientos
impartidos.
Resumen del Contenido
La presentación de este curso está basada en los principios de ayudar a los estudiantes a convertirse en mejores programadores,
mostrar la jerarquía de abstracciones e implementaciones que conforman un sistema de computación moderno, y sentar las
bases para cursos posteriores en el área de sistemas (Sistemas Operativos, Comunicación de Datos, Redes de Computadores,
Arquitectura de Computadores, Programación Paralela, Compiladores, Seguridad, etc.). Los estudiantes deben ser introducidos
a los sistemas de computación desde la perspectiva de un programador, en lugar de la perspectiva más tradicional de un
implementador de sistemas. Esto significa que se debe enseñar el sistema de computación como un todo, considerando tanto
el hardware, como el sistema operativo y los compiladores involucrados. Se parte de la premisa de que los estudiantes pueden
aprender mejor a partir de la evaluación de programas reales que se ejecutan sobre máquinas reales.
Entre los temas cubiertos tenemos la representación de los datos, representaciones a nivel de máquina de programas en
lenguaje C, la jerarquía de memoria, el proceso de compilación/ensamblaje/enlace, flujo de control excepcional, memoria virtual
y evaluación y optimización de rendimiento a nivel de programa. Estos conceptos son reforzados a través de ejercicios de práctica
y diversos talleres-laboratorios.
Objetivos del Curso
Conocer el funcionamiento de un computador: su estructura interna a nivel de los subsistemas procesador, bus, memoria
y entrada/salida; así como la ejecución de un programa en lenguaje máquina.
Diferenciar los distintos modos de representación de los datos y aplicar los algoritmos aritméticos básicos.
Saber representar y operar con números enteros y reales en diferentes formatos.
Saber cómo se almacenan y se acceden datos estructurados en el computador.
Saber traducir rutinas y construcciones de programación en alto nivel (expresiones, condicionales, bucles, subrutinas, etc.)
al lenguaje ensamblador de una máquina real (o vicecersa) utilizando una interfaz binaria de aplicación (ABI) estándar.
Conocer los conceptos de excepción y de interrupción y tener una noción básica de su gestión.
Conocer la estructura interna y el funcionamiento de una memoria caché, con especial énfasis en aquellos aspectos que
afectan al rendimiento de un sistema.
Entender la utilidad de la memoria virtual, su funcionamiento básico y el soporte hardware que requiere.
Comprender los procesos de compilación, montaje y carga en el desarrollo del software.
Describir la estructura interna y funcionamiento de los principales componentes de la jerarquía de memoria y las técnicas
para mejorar su rendimiento.
Aplicar optimizaciones sencillas en fragmentos de código para mejorar su rendimiento.
1
Contenidos Temáticos
1.- Introducción a la Organización y Arquitectura del Computador.
Organización, arquitectura básica y aspectos fundamentales de los computadores: El concepto de programa almacenado, la
arquitectura Von Neumann, la arquitectura Harvard. Estructura y función. Niveles de máquinas. Máquinas multinivel contemporáneas. Evolución e historia de los computadores. Componentes del computador: Diagrama de interconexión de los componentes
de hardware, subsistema de buses, subsistema de memoria, unidad de control, unidad aritmético y lógica, subsistema de entrada/salida. Funcionamiento del computador: ejecución de instrucciones.
2.- Representación y Manipulación de la Información.
Almacenamiento de información: Notación hexadecimal, bits, bytes, palabras, tamaño de los datos, direccionamiento y ordenamiento a nivel de bytes. Representación de caracteres y cadenas de caracteres. Representación de instrucciones. Sistemas
numéricos posicionales. Conversión de base numérica (binarios, octales, hexadecimales). Representación (signo y magnitud, exceso a M, complemento a 1, complemento a 2, BCD) y aritmética (suma, resta, multiplicación y división) de números enteros.
Representación de números de punto fijo. Representación de números en punto flotante. Estudio de casos.
3.- Arquitectura de Conjunto de Instrucciones.
Evolución histórica. Codificación de programas. Formatos de los datos. Propiedades del nivel de la arquitectura de conjunto
de instrucciones: Modelos de memoria, registros. Modos de direccionamiento. Formatos de las instrucciones: Elementos, tamaño.
Operandos: Número, localización, tipo y tamaño. Introducción al lenguaje ensamblador: Estructura de un programa, nemónicos, seudoinstrucciones, sintaxis, valores inmediatos (constantes), contador de posiciones, tabla de símbolos, segmentos de
ensamblador, literales, macros, desensambladores. Tipos de instrucciones: Bits de resultado, transferencia de datos, aritméticas
y lógicas, flujo de control (salto condicional e incondicional, etiquetas), llamada y retorno a procedimientos (subrutinas), corrutinas, interrupción de software y retorno de una rutina de servicio de interrupción (flujo de control excepcional), instrucciones de
entrada/salida. Mecanismos de llamada a procedimientos. Administración de la pila. Traducción de tipos de datos estructurados:
Asignación y acceso a arreglos, estructuras de datos heterogéneas, referencias a memoria fuera de límite y desbordamiento de
búfer. Estudio de casos: Procesadores de 32 y 64 bits.
4.- Nivel del Procesador del Lenguaje.
El proceso de compilación: Traductores, intérpretes y compiladores. El proceso de ensamblaje: Funciones básicas. Características de un ensamblador, ensamblador de dos pasos, ensamblador de un paso, ensamblador de varios pasos. El depurador.
Proceso de enlace y carga: Funciones básicas realizadas por el enlazador y por el cargador, interfaces binarias de aplicación
(ABI). Estructura de un módulo objeto. Archivos objeto relocalizables, símbolos y tablas de símbolos, resolución de símbolos,
relocalización, archivos objeto ejecutables, bibliotecas. Carga de archivos objeto ejecutables en memoria. Tiempo de enlace,
relocalización dinámica, relocalización estática, enlace y carga dinámicos, bibliotecas compartidas, carga y enlace de bibliotecas
compartidas desde las aplicaciones. Código independiente de la posición (PIC). Herramientas para manipular archivos objeto.
Procesos concurrentes, espacio de direcciones privado, modo kernel y modo usuario, cambios de contexto. Estudio de casos.
5.- Organización de la Jerarquía de Memoria
Tecnologías de almacenamiento: Memorias de acceso aleatorio - RAM (SRAM, DRAM, ROM, EPROM, EEPROM, etc.),
almacenamiento en disco (geometría, capacidad, operación, conexión con los dispositivos de entrada/salida, IDE, SCSI, acceso a
los discos, rendimiento de los discos, caching de disco), discos de estado sólido, memoria óptica, cintas magnéticas, tendencias en
las tecnologías de almacenamiento. Principio de localidad de referencias. La jerarquía de memoria. Memoria caché: Organización
genérica de la memoria caché, elementos de diseño, caché de correspondencia directa, caché asociativa por conjunto, caché
completamente asociativa, aspectos de desempeño. Principios para escribir código que aproveche la caché. Impacto de la caché
en el rendimiento de los programas. Memoria virtual: Direccionamiento físico y virtual, espacio de direcciones, funcionamiento
de la memoria virtual, ventajas de utilizar la memoria virtual para administrar la memoria, uso de la memoria virtual para
la protección de memoria, traducción de direcciones, relación entre memoria caché y memoria virtual, búfer de traducción
adelantada (TLB), tablas de páginas multinivel, tablas de páginas invertidas. Correspondencia de memoria. Asignación dinámica
de memoria. Recolección de memoria no referenciada. Errores comunes relacionados con la memoria que ocurren en programas.
Estudio de casos: Procesadores de 32 y 64 bits.
6.- Optimización de Rendimiento a Nivel de Programa.
Capacidades y limitaciones de los compiladores. Expresión del rendimiento de un programa. Eliminación de ineficiencias a
nivel de bucles. Reducción de las llamadas a procedimiento. Eliminación de referencias innecesarias a memoria. Comprensión de
los procesadores modernos. Desenrrollado de bucles. Mejora de paralelismo. Factores limitantes. Comprensión del rendimiento
de la memoria. Técnicas de mejora del rendimiento. Identificación y reducción de cuellos de botella en el rendimiento.
Bibliografía
El contenido de esta asignatura está basado principalmente en el libro de Bryant & O’Hallaron [1]. Para los aspectos relacionados con el lenguaje de programación C, se recomienda el clásico de Kernighan & Ritchie [2]. Otro par de textos muy completos
sobre el lenguaje de programación C son los de Harbison & Steele [15] y King [16]. Un texto algo antiguo pero con muy buen
basamento teórico para los temas de esta asignatura es el de Maccabe [3]. Excelentes complementos para los contenidos son los
libros de Parhami [4], Tanenbaum [5] y Stallings [6]. Ciertos partes del contenido pueden encontrarse en el libro de Hamacher
2
et al. [7]. Para el tema de nivel del procesador del lenguaje se recomiendan los textos de Levine [8], Beck [9] y Salomon [10]. Las
características de programación y estructura de los procesadores Intel de 32 y 64 bits puede revisarse en Irvine [11], Brey [12] y
en los manuales de Intel para desarrolladores de software [13] y para optimización de software [14].
[1] Randal E. Bryant and David R. O’Hallaron, Computer Systems: A Programmer’s Perspective, 3rd, Addison-Wesley Publishing Company, USA,
2015.
[2] Brian W. Kernighan and Dennis M. Ritchie, El Lenguaje de Programacion C, 2da, Pearson Educación, S.A., Madrid, 1995.
[3] Arthur B. Maccabe, Sistemas Computacionales: Arquitectura, Organización y Programación de Sistemas, 1ra, Irwin Professional PublishingMcGraw Hill Interamericana, España, 1995.
[4] Behrooz Parhami, Arquitectura de Computadoras: De los Microprocesadores a las Supercomputadoras, 1ra, McGraw Hill, México, 2007.
[5] Andrew S. Tanenbaum, Structured Computer Organization, 6th, Prentice Hall, USA, 2012.
[6] William Stallings, Computer Organization and Architecture: Designing for Performance, 10th, Prentice Hall, USA, 2015.
[7] Carl Hamacher, Zvonko Vranesic, Safwat Zaky, and Naraig Manjikian, Computer Organization and Embedded Systems, 6ta, McGraw Hill, USA,
2011.
[8] John R. Levine, Linkers & Loaders, 1st, Morgan Kaufmann Publishers, USA, 1999.
[9] Leland L. Beck, System Software: An Introduction to Systems Programming, 3rd, Addison-Wesley Publishing Company, USA, 1996.
[10] David Salomon, Assemblers And Loaders (1993), http://www.davidsalomon.name/assem.advertis/asl.pdf. Accessed 5 de abril de 2015. Publicado originalmente por Ellis Horwood Ltd. y disponible ahora en línea.
[11] Kip R. Irvine, Assembly Language for x86 Processors, 7th, Prentice Hall, USA, 2014.
[12] Barry B. Brey, The Intel microprocessors 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Pentium Pro processor, Pentium II, Pentium
III, Pentium 4, and Core2 with 64-bit extensions: architecture, programming, and interfacing, 8th, Prentice Hall, USA, 2008.
[13] Intel Corporation, Intel 64 and IA-32 Architectures Software Developer’s Manual: Combined Volumes: 1, 2A, 2B,
2C,
3A,
3B
and
3C
(Enero
de
2015),
http://www.intel.com/content/dam/www/public/us/en/documents/manuals/
64-ia-32-architectures-software-developer-manual-325462.pdf. Accessed 5 de abril de 2015. Conjunto de volúmenes combinados de
manuales para desarrolladores de software de las arquitecturas Intel 64 e IA-32.
[14]
, Intel 64 and IA-32 Architectures Optimization Reference Manual (Septiembre de 2014), http://www.intel.com/content/dam/www/
public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf. Accessed 5 de abril de 2015. Manual de referencia para
la optimización de software.
[15] Samuel P. Harbison and Guy L. Steele Jr., C: A Reference Manual, 5th, Prentice Hall, USA, 2002.
[16] K. N. King, C Programming: A Modern Approach, 2nd, W. W. Norton & Company, USA, 2008.
3
Descargar