Un recorrido por sistemas informaticos

15
CAPÍTULO 1 Un recorrido de Sistemas Informáticos Un sistema informático se compone de hardware y sistemas de software que trabajan juntos para ejecutar programas de aplicación. Implementaciones específicas de los sistemas cambian con el tiempo, pero los conceptos subyacentes no. Todos los sistemas informáticos tienen componentes similares de hardware y software que realizan funciones similares. Este libro está escrito para programadores que quieren mejorar en su oficio mediante la comprensión de cómo funcionan estos componentes y cómo afectan a la exactitud y el rendimiento de sus programas. Usted está encaminado hacia un apasionante viaje. Si dedicas tu duende para el aprendizaje de los conceptos en este libro, entonces usted estará en su camino a convertirse en un "programador de potencia," raro iluminados por una comprensión del sistema informático subyacente y su impacto en los programas de aplicación Usted va a aprender habilidades prácticas, tales como la forma de evitar errores numéricos extraños causados por la forma en que los ordenadores representan números. Usted aprenderá cómo optimizar su código C mediante el uso de trucos ingeniosos que explotan los diseños de los procesadores modernos y sistemas de memoria. Usted aprenderá cómo el compilador implementa llamadas a procedimientos y cómo utilizar este conocimiento para evitar los agujeros de seguridad de vulnerabilidades de desbordamiento de búfer que afectan a la red de Internet y software. Usted aprenderá a reconocer y evitar los errores desagradables durante la vinculación que confunden el programador medio. Usted aprenderá cómo escribir su propio shell de Unix, su propio paquete de asignación de almacenamiento dinámico, e incluso su propio servidor Web. Usted aprenderá las promesas y peligros de la concurrencia, en un tema de creciente importancia como múltiples núcleos de procesador están integrados en chips individuales. En su texto clásico sobre el lenguaje de programación C [58], Kernighan y Ritchie introducen a los lectores a C utilizando el programa hola se muestra en la Figura 1.1. Aunque hola es un programa muy simple, cada parte importante del sistema debe trabajar de manera concertada con el fin de que se ejecute hasta su finalización. En cierto sentido, el objetivo de este libro es ayudar a entender lo que sucede y por qué, cuando se ejecuta hola en su sistema. Comenzamos nuestro estudio de los sistemas de rastreo de toda la vida del programa hola, desde el momento

description

Sistemas operativos

Transcript of Un recorrido por sistemas informaticos

CAPTULO 1

Un recorrido de Sistemas Informticos

Un sistema informtico se compone de hardware y sistemas de software que trabajan juntos para ejecutar programas de aplicacin. Implementaciones especficas de los sistemas cambian con el tiempo, pero los conceptos subyacentes no. Todos los sistemas informticos tienen componentes similares de hardware y software que realizan funciones similares. Este libro est escrito para programadores que quieren mejorar en su oficio mediante la comprensin de cmo funcionan estos componentes y cmo afectan a la exactitud y el rendimiento de sus programas.Usted est encaminado hacia un apasionante viaje. Si dedicas tu duende para el aprendizaje de los conceptos en este libro, entonces usted estar en su camino a convertirse en un "programador de potencia," raro iluminados por una comprensin del sistema informtico subyacente y su impacto en los programas de aplicacinUsted va a aprender habilidades prcticas, tales como la forma de evitar errores numricos extraos causados por la forma en que los ordenadores representan nmeros. Usted aprender cmo optimizar su cdigo C mediante el uso de trucos ingeniosos que explotan los diseos de los procesadores modernos y sistemas de memoria. Usted aprender cmo el compilador implementa llamadas a procedimientos y cmo utilizar este conocimiento para evitar los agujeros de seguridad de vulnerabilidades de desbordamiento de bfer que afectan a la red de Internet y software. Usted aprender a reconocer y evitar los errores desagradables durante la vinculacin que confunden el programador medio. Usted aprender cmo escribir su propio shell de Unix, su propio paquete de asignacin de almacenamiento dinmico, e incluso su propio servidor Web. Usted aprender las promesas y peligros de la concurrencia, en un tema de creciente importancia como mltiples ncleos de procesador estn integrados en chips individuales.En su texto clsico sobre el lenguaje de programacin C [58], Kernighan y Ritchie introducen a los lectores a C utilizando el programa hola se muestra en la Figura 1.1. Aunque hola es un programa muy simple, cada parte importante del sistema debe trabajar de manera concertada con el fin de que se ejecute hasta su finalizacin. En cierto sentido, el objetivo de este libro es ayudar a entender lo que sucede y por qu, cuando se ejecuta hola en su sistema. Comenzamos nuestro estudio de los sistemas de rastreo de toda la vida del programa hola, desde el momento en que es creado por un programador, hasta que se ejecuta en un sistema, imprime su mensaje simple, y termina. Al seguir el curso de la vida del programa, vamos a introducir brevemente los conceptos claves, la terminologa y los componentes que entran en juego. En captulos posteriores se ampliar en estas ideas

1.1 Informacin Es Bits + Contexto

Nuestro programa hola comienza su vida como un (o archivo de origen) programa de cdigo que el programador crea con un editor y guarda en un archivo de texto llamado hello.c. El programa de cdigo es una secuencia de bits, cada uno con un valor de 0 o 1, organizado en trozos de 8 bits llamados bytes. Cada byte representa un cierto carcter de texto en el programa. La mayora de los sistemas modernos representan los caracteres de texto utilizando el estndar ASCII que representa cada personaje con un valor nico nmero entero bytes de tamao. Por ejemplo, la Figura 1.2 muestra la representacin ASCII del programa hello.c

Figura 1.2: La representacin de texto ASCII de hello.c.Figure 1.2: The ASCII text representation of hello.c.

El programa hello.c se almacena en un archivo como una secuencia de bytes. Cada byte tiene un valor entero que se corresponde con un poco de carcter. Por ejemplo, el primer byte tiene el valor entero 35, que corresponde al carcter "#". El segundo byte tiene el valor entero 105, que corresponde al carcter 'i', y pronto. Observe que cada lnea de texto termina con el carcter de nueva lnea invisible '\ n', que est representado por el valor entero 10 archivos como hello.c que consiste exclusivamente en caracteres ASCII se conocen como archivos de texto. Todos los dems archivos se conocen como archivos binarios.

La representacin de hello.c ilustra una idea fundamental: Toda la informacin en un sistema - incluyendo archivos de disco, los programas almacenados en la memoria, los datos del usuario almacenados en la memoria, y los datos transferidos a travs de una red - se representa como un montn de bits. La nica cosa que distingue diferentes objetos de datos es el contexto

1.2. PROGRAMAS SE CONVIERTEN EN OTROS PROGRAMAS EN DIFERENTES FORMAS

En los que los vemos. Por ejemplo, en diferentes contextos, la misma secuencia de bytes podra representar un nmero entero, el nmero de punto flotante, cadena de caracteres, o instruccin de mquina. Como programadores, necesitamos entender las representaciones de la mquina de los nmeros, ya que no son los mismos que los nmeros enteros y nmeros reales. Son aproximaciones finitas que pueden comportarse de maneras inesperadas. Esta idea fundamental se explora en detalle en el Captulo 2

Aparte: Orgenes del lenguaje de programacin C. C se desarroll desde 1969 hasta 1973 por Dennis Ritchie de los Laboratorios Bell. El Instituto Nacional Americano (ANSI) ratific el estndar ANSI C en 1989, y esta estandarizacin ms tarde pas a ser responsabilidad de la Organizacin Internacional de Normalizacin (ISO). Las normas definen el lenguaje C y un conjunto de funciones de la biblioteca conocida como la biblioteca estndar de C. Kernighan y Ritchie describen ANSI C en su libro clsico, que se conoce cariosamente como "K & R" [58]. En palabras de Ritchie [88], C es "peculiar, defectuoso, y un enorme xito." Entonces por qu el xito? C estaba estrechamente vinculada con el sistema operativo Unix. C fue desarrollado desde el principio como el lenguaje de programacin del sistema de Unix. La mayor parte del ncleo de Unix, y todas sus herramientas de apoyo y bibliotecas, fueron escritos en C. Como Unix se hizo popular en las universidades en las finales de 1970 y principios de 1980, muchas personas estuvieron expuestas a C y descubrieron que les gustaba. Desde Unix fue escrito casi en su totalidad en C, que podra ser fcilmente portado a nuevas mquinas, lo que cre un pblico an ms amplio, tanto para C y Unix C es un lenguaje pequeo, sencillo. El diseo fue controlado por una sola persona, en lugar de un comit, y el resultado fue un diseo limpio, consistente con poco equipaje. El libro de K & R describe el lenguaje completo y biblioteca estndar, con numerosos ejemplos y ejercicios, en slo 261 pginas. La simplicidad de C hace que sea relativamente fcil de aprender y de portar a diferentes ordenadores C fue diseado para un propsito prctico. C fue diseado para implementar el sistema operativo Unix. Ms tarde, otras personas descubrieron que podan escribir los programas que ellos queran, sin el idioma en el caminoC es el lenguaje de eleccin para la programacin a nivel de sistema, y hay una enorme base instalada de los programas a nivel de aplicacin tambin. Sin embargo, no es perfecto para todos los programadores y todas las situaciones. C punteros son una fuente comn de confusin y errores de programacin. C tambin carece de apoyo explcito a abstracciones tiles, tales como clases, objetos y excepciones. Nuevos lenguajes como C ++ y Java abordan estos temas para los programas a nivel de aplicacin. Fin Aparte.

1.2 Programas estn traducidos por otros programas en diferentes formas

El programa hola comienza su vida como un programa de alto nivel C, ya que puede ser ledo y entendido por los seres humanos en esa forma. Sin embargo, con el fin de ejecutar hola.c en el sistema, las sentencias en C. individuales deben ser traducidos por otros programas en una secuencia de instrucciones en lenguaje mquina de bajo nivel. Estas instrucciones estn empacadas en una forma llamada un programa objeto ejecutable y se almacena como un archivo de disco binario. Programas de objetos tambin se hace referencia a los archivos de objetos como ejecutables

En un sistema Unix, la traduccin del archivo de origen para oponerse archivo se realiza por un conductor compilador:

unix> gcc -o hello hello.c

En este caso, el conductor del compilador GCC lee el hola.c archivo de origen y la traduce en un archivo objeto ejecutable hola. La traduccin se realiza en la secuencia de cuatro fases que se muestran en la Figura 1.3. Los programas que realizan las cuatro fases (preprocesador, compilador, ensamblador y enlazador) se conocen colectivamente como el sistema de compilacin

Printf.o

enlanzadorHello.Hello.oHello.sensambladorcompiladorHello.iHello.cPre-procesador

programa objeto ejecutableprograma objeto reubicablePrograma de montajePrograma fuente modificadoPrograma fuente

Figura 1.3: El sistema de compilacin

Fase de preprocesamiento. El preprocesador (cpp) modifica el programa C original de acuerdo con las directivas que comienzan con el carcter #. Por ejemplo, el comando # include en la lnea 1 de hello.c dice al preprocesador para leer los contenidos del archivo de cabecera del sistema stdio.hand insertarlo directamente en el texto del programa. El resultado es otro programa de C, por lo general con el. i sufijo Fase de compilacin. El compilador (CC1) traduce el archivo de texto de saludo. i en el archivo de texto Hola. s, que contiene un programa de lenguaje ensamblador. Cada declaracin en un programa en lenguaje ensamblador describe exactamente un bajo nivel de instruccin de lenguaje de mquina en forma de texto estndar. El lenguaje ensamblador es til porque proporciona un lenguaje comn de salida para diferentes compiladores para diversos lenguajes de alto nivel. Por ejemplo, los compiladores de C y Fortran compiladores tanto generan archivos de salida en el mismo lenguaje ensamblador Fase de montaje. A continuacin, el ensamblador (as) se traduce hola. s en instrucciones de lenguaje de mquina, las empaqueta en una forma conocida como un programa objeto reubicable, y almacena el resultado en el archivo objeto hola. o. El hola. o archivo es un archivo binario cuyos bytes codificar instrucciones en lenguaje de mquina en lugar de caracteres. Si furamos a ver hola. o con un editor de texto, que parece ser un galimatas. La vinculacin de fase. Tenga en cuenta que nuestro programa hola llama a la funcin printf, que es parte de la biblioteca estndar de C proporcionada por cada compilador C. La funcin printf reside en un archivo objeto pre compilado separada llamada printf. o, que de alguna manera debe ser fusionado con nuestro hola. programa o. El enlazador (ld) se encarga de esta fusin. El resultado es el archivo de hola, que es un archivo objeto ejecutable (o simplemente ejecutable), que est listo para ser cargado en la memoria y ejecutado por el sistema

Aparte: El proyecto GNU. GCC es una de muchas herramientas tiles desarrollados por la GNU (siglas de GNU No es Unix 's) del proyecto. El proyecto GNU es una organizacin benfica exenta de impuestos iniciado por Richard Stallman en 1984, con el ambicioso objetivo de desarrollar un sistema de tipo Unix completo cuyo cdigo fuente est exento de restricciones sobre cmo puede ser modificada o distribuida. El proyecto GNU ha desarrollado un entorno con todos los componentes principales de un sistema operativo Unix, excepto para el kernel, el cual fue desarrollado por separado por el proyecto Linux. El entorno GNU incluye el editor Emacs, el compilador GCC, GDB depurador, ensamblador, enlazador, utilidades para manipular archivos binarios, y otros componentes. El compilador GCC ha crecido para apoyar a muchos idiomas diferentes, con la posibilidad de generar cdigo para muchas mquinas diferentes. Los idiomas soportados incluyen C, C ++, Fortran, Java, Pascal, Objective-C y Ada. El proyecto GNU es un logro notable, y sin embargo, a menudo se pasa por alto. El movimiento de cdigo abierto moderno (comnmente asociado con Linux) debe sus orgenes intelectuales al concepto de software libre del proyecto GNU ("libre" como en "libertad de expresin" no "barra libre"). Adems, Linux debe gran parte de su popularidad a las herramientas GNU, que proporcionan el ambiente para el kernel de Linux. Fin Aparte

1.3. VALE LA PENA ENTENDER CMO LOS SISTEMAS DE RECOPILACIN DE OBRAS 1.3 vale la pena entender cmo los sistemas de compilacin Trabajo

Para programas sencillos como hello.c, podemos confiar en el sistema de compilacin para producir cdigo mquina correcta y eficiente. Sin embargo, hay algunas razones importantes por las que los programadores necesitan para entender cmo funcionan los sistemas de compilacin. Optimizacin del rendimiento del programa. Las computadoras modernas son herramientas sofisticadas que generalmente producen un buen cdigo. Como programadores, nosotros no necesitamos saber el funcionamiento interno del compilador para escribir cdigo eficiente. Sin embargo, con el fin de tomar buenas decisiones de codificacin en nuestros programas en C, necesitamos una comprensin bsica de cdigo a nivel de mquina y de cmo el compilador traduce diferentes declaraciones C a cdigo mquina. Por ejemplo, es una sentencia switch siempre ms eficiente que una secuencia de si - else? Cunto sobrecarga se incurre por una llamada a la funcin? Es un bucle while ms eficiente que un bucle? Son referencias de puntero ms eficiente que los ndices de matriz? Por qu nuestro bucle ejecuta mucho ms rpido si sumamos en una variable local en lugar de un argumento que se pasa por referencia? Cmo puede una funcin de correr ms rpido cuando simplemente reordenamos los parntesis en una expresin aritmtica?

En el captulo 3, vamos a introducir dos lenguajes de mquina relacionados: IA32, el cdigo de 32 bits que se ha convertido en omnipresente en equipos que ejecutan Linux, Windows, y ms recientemente el sistemas operativos Macintosh, y x86-64, una extensin de 64 bits se encuentra en microprocesadores ms recientes. Describimos cmo los compiladores traducen diferentes construcciones C a estos idiomas. En el captulo 5, usted aprender cmo ajustar el rendimiento de sus programas en C al hacer transformaciones simples para el cdigo C que ayudan a que el compilador haga su trabajo mejor. En el captulo 6, aprender acerca de la naturaleza jerrquica del sistema de memoria, cmo arreglos de datos C tienda compiladores en la memoria, y cmo sus programas en C pueden aprovechar este conocimiento para ejecutar de manera ms eficiente La comprensin de los errores en tiempo de enlace. En nuestra experiencia, algunos de los errores de programacin ms desconcertantes estn relacionados con el funcionamiento del enlazador, especialmente cuando usted est tratando de construir grandes sistemas de software. Por ejemplo, qu significa cuando el vinculador informa de que no puede resolver una referencia? Cul es la diferencia entre una variable esttica y una variable global? Qu ocurre si define dos variables globales en diferentes archivos de C con el mismo nombre? Cul es la diferencia entre una biblioteca esttica y una biblioteca dinmica? Por qu importa qu orden listamos las bibliotecas en la lnea de comandos? Y ms espantoso de todo, por qu no aparecen algunos errores relacionados con el enlazador-hasta el tiempo de ejecucin? Usted aprender las respuestas a este tipo de preguntas en el captulo 7 Evitando agujeros de seguridad. Durante muchos aos, las vulnerabilidades de desbordamiento de bfer han representado la mayora de los agujeros de seguridad en los servidores de red y de Internet. Estas vulnerabilidades existen porque muy pocos programadores entienden la necesidad de restringir cuidadosamente la cantidad y tipos de datos que acepten a partir de fuentes no confiables. Un primer paso en el aprendizaje de programacin segura es comprender las consecuencias de la informacin de datos y control de vas estn almacenados en la pila del programa. Cubrimos la disciplina pila y vulnerabilidades de desbordamiento de bfer en el captulo 3, como parte de nuestro estudio de lenguaje ensamblador. Tambin vamos a aprender acerca de los mtodos que pueden ser utilizados por el programador, compilador y sistema operativo para reducir la amenaza de ataque

1.4 Procesadores de leer e interpretar las instrucciones almacenadas en la memoria

En este punto, nuestro programa fuente hola.c ha sido traducida por el sistema de compilacin en un archivo objeto ejecutable llamado hola que se almacena en el disco. Para ejecutar el archivo ejecutable en un sistema Unix, escribimos su nombre a un programa de aplicacin conocido como un shell

El shell es un intrprete de lnea de comandos que muestra un aviso, espera a que escriba una lnea de comandos, y luego ejecuta el comando. Si la primera palabra de la lnea de comandos no se corresponde con un comando integrado cscara, entonces la cscara se supone que es el nombre de un archivo ejecutable que se debe cargar y ejecutar. As que en este caso, las cargas de shell y ejecuta el programa de hola y luego espera a que termine. El programa hola imprime su mensaje a la pantalla y luego termina. La cscara se muestra un aviso y espera a la siguiente lnea de comandos de entrada.

1.4.1 Organizacin de Hardware de un Sistema

Para entender lo que sucede a nuestro programa hola cuando lo ejecutamos, tenemos que entender la organizacin de hardware de un sistema tpico, que se muestra en la Figura 1 4. Esta imagen en particular es el modelo de la familia de sistemas Intel Pentium, pero todos los sistemas tener un aspecto similar. No te preocupes por la complejidad de esta figura hace un momento. Vamos a llegar a sus diferentes detalles en etapas a lo largo del curso del libro

Figura 1.4: organizacin de hardware de un sistema tpico. CPU: Unidad Central de Procesamiento, ALU: Arith metic-Unit / Logic, PC: contador de programa, USB: Universal Serial Bus

1.4. PROCESADORES leer e interpretar instrucciones almacenadas en MEMORIA

Buses (auto-buses)Ejecucin de todo el sistema es una coleccin de conductos elctricos llamados buses que transportan bytes de informacin de ida y vuelta entre los componentes. Los autobuses estn tpicamente diseados para transferir trozos de tamao fijo de bytes conocidos como palabras. El nmero de bytes en una palabra (la palabra) es un parmetro fundamental del sistema que vara segn los sistemas. La mayora de las mquinas de hoy en da tienen tamaos de palabra ya sea de 4 bytes (32 bits) o 8 bytes (64 bits). Por el bien de nuestra discusin aqu, vamos a suponer un tamao de palabra de 4 bytes, y vamos a suponer que los autobuses transfieren slo una palabra a la vez.

Dispositivos de E / S De entrada / salida (I / O) son dispositivos de conexin del sistema para el mundo exterior. Nuestro sistema de ejemplo tiene cuatro E / S de dispositivos: un teclado y ratn para la entrada del usuario, una pantalla para la salida de usuario, y una unidad de disco (o simplemente de disco) para el almacenamiento a largo plazo de datos y programas. Inicialmente, el programa ejecutable hola reside en el disco. Cada dispositivo de E / S est conectado al bus I / O por cualquiera de un controlador o de un adaptador. La distincin entre los dos es principalmente uno de los envases. Los controladores son conjuntos de chips en el propio dispositivo o en la tarjeta de circuito impreso principal del sistema (a menudo llamada la placa madre). Un adaptador es una tarjeta que se conecta a una ranura de la placa madre. Independientemente, el propsito de cada uno es para transferir informacin de ida y vuelta entre el bus I / O y un dispositivo de E / S. Captulo 6 tiene ms que decir acerca de cmo dispositivos E / S, tales como discos trabajo yo. En el captulo 10, usted aprender cmo utilizar la interfaz de E / S de Unix que a dispositivos de acceso de los programas de aplicacin. Nos centramos en la clase especialmente interesante de dispositivos conocidos como redes, pero las tcnicas generalizar a otros tipos de dispositivos tambin.

Memoria principal

La memoria principal es un dispositivo de almacenamiento temporal que contiene tanto un programa y los datos que manipula mientras que el procesador est ejecutando el programa. Fsicamente, la memoria principal se compone de una coleccin de memoria dinmica de acceso aleatorio (DRAM). Lgicamente, la memoria se organiza como un conjunto lineal de bytes, cada uno con su propia direccin nica (ndice de matriz) a partir de cero. En general, cada una de las instrucciones de mquina que constituyen un programa puede consistir en un nmero variable de bytes. Los tamaos de los elementos de datos que corresponden a las variables del programa C variar segn el tipo. Por ejemplo, en una mquina que ejecute Linux IA32, los datos de tipo corto requiere dos bytes, tipos int, float, y largos cuatro bytes, y el tipo de doble ocho bytes. Captulo 6 tiene ms que decir acerca de cmo las tecnologas de memoria como DRAM chips de trabajo, y la forma en que se combinan para formar la memoria principal.

Procesador

La unidad central de procesamiento (CPU), o simplemente procesador, es el motor que interpreta (y ejecuta) instrucciones almacenadas en la memoria principal. En su esencia es un dispositivo de almacenamiento de palabras de tamao (o registro) llamado el contador de programa (PC). En cualquier punto en el tiempo, los puntos de PC en (contiene la direccin de) alguna instruccin en lenguaje de mquina de la memoria principal

Desde el momento en que se aplica potencia al sistema, hasta el momento en que l se desconecta la alimentacin, un procesador ejecuta repetidamente la instruccin sealado por el contador de programa y actualiza el contador de programa para apuntar a la siguiente instruccin. Un procesador parece funcionar de acuerdo con un modelo de ejecucin de la instruccin muy simple, definida por su arquitectura del conjunto de instrucciones. En este modelo, las instrucciones se ejecutan en secuencia estricta, y ejecutar una sola instruccin implica la realizacin de una serie de pasos. El procesador lee la instruccin de la memoria apuntado por el contador de programa (PC), interpreta los bits en la instruccin, realiza alguna operacin sencilla dictada por la instruccin y, a continuacin actualiza el PC para apuntar a la siguiente instruccin, que puede o no puede ser contiguos en la memoria de la instruccin que acaba de ser ejecutado.

Hay slo unas pocas de estas operaciones simples, y que giran en torno a la memoria principal, el archivo de registro, y la unidad aritmtica / lgica (ALU). El archivo de registro es un pequeo dispositivo de almacenamiento que consiste en una coleccin de registros de tamao de texto, cada una con su propio nombre nico. La ALU calcula nuevos valores de datos y de direcciones. Estos son algunos ejemplos de las operaciones simples que la CPU puede llevar a cabo a peticin de una instruccin:

Carga: Copiar un byte o una palabra de la memoria principal en un registro, sobrescribiendo los contenidos anteriores de la caja registradora. Tienda: Copiar un byte o una palabra de un registro a una ubicacin en la memoria principal, sobrescribir el contenido anterior de ese lugar. Operar: Copiar el contenido de dos registros a la ALU, realizar una operacin aritmtica de las dos palabras, y guardar el resultado en un registro, sobrescribiendo los contenidos anteriores de ese registr. Salto: Extraer una palabra de la propia instruccin y copiar esa palabra en el contador de programa (PC), sobrescribiendo el valor previo de la PC.

Decimos que un procesador parece ser una simple aplicacin de su arquitectura del conjunto de instrucciones, pero en realidad los procesadores modernos utilizan mecanismos ms complejos para acelerar la ejecucin del programa. Por lo tanto, podemos distinguir arquitectura del conjunto de instrucciones del procesador, que describe el efecto de cada instruccin de cdigo mquina, de su micro arquitectura, que describe cmo se aplica realmente el procesador. Cuando estudiamos el cdigo mquina en el captulo 3, consideraremos la abstraccin proporcionada por la arquitectura del conjunto de instrucciones de la mquina. Captulo 4 tiene ms que decir sobre cmo se implementan en realidad procesadores.

1.4.2 Ejecucin del programa de hola

Teniendo en cuenta este simple vista de la organizacin de un sistema de hardware y funcionamiento, podemos empezar a entender lo que sucede cuando ejecutamos nuestro programa de ejemplo. Debemos omitir muchos detalles aqu que se llenarn en adelante, pero por ahora vamos a estar contentos con el cuadro grande. Inicialmente, el programa de shell ejecuta sus instrucciones, esperando a que escriba un comando. Como escribimos los caracteres "./hola" en el teclado, el programa de shell lee cada uno en un registro, y luego lo almacena en la memoria, como se muestra en la Figura 1.5.

1.5. MATERIA CACHE

Figura 1.5: Leyendo el comando hola desde el teclado

Cuando llegamos a la enter tecla en el teclado, el shell sabe que hemos terminado de escribir el comando. La cscara continuacin, carga el ejecutable hello presentar mediante la ejecucin de una secuencia de instrucciones que copia el cdigo y los datos en el hello archivo del disco de oponerse a la memoria principal. Los datos incluyen la cadena de caracteres "hello, world\n"Que con el tiempo se imprimirn. Usando una tcnica conocida como acceso directo a memoria (DMA, discutido en el captulo 6), los datos viajan directamente desde el disco a la memoria principal, sin pasar por el procesador. Este paso se muestra en la Figura 1.6. Una vez que el cdigo y los datos en el hello archivo de objeto se carga en memoria, el procesador comienza a ejecutar las instrucciones de lenguaje de mquina en la hello programa de main de rutina. Estas instrucciones copiar los bytes en el "hello, world\n "Cadena de la memoria en el archivo de registro, y desde all al dispositivo de visualizacin, donde se muestran en la pantalla. Este paso se muestra en la Figura 1.7

1.5 Caches MateriaUna leccin importante de este ejemplo sencillo es que un sistema pasa mucho tiempo mover la informacin de un lugar a otro. Las instrucciones de la mquina en la hello programa se almacenan inicialmente en el disco. Cuando se carga el programa, que se copian en la memoria principal. Como el procesador ejecuta el programa, las instrucciones se copian de la memoria principal al procesador. Del mismo modo, la cadena de datos hello,world\n originalmente en el disco, se copia a la memoria principal, y luego se copia de la memoria principal para el dispositivo de visualizacin. Desde la perspectiva de un programador, gran parte de este proceso de copiado est sobrecarga que ralentiza el "trabajo real" del programa. Por lo tanto, un objetivo importante para los diseadores de sistemas es hacer que estas operaciones de copia de correr tan rpido como sea posible. Debido a las leyes fsicas, los dispositivos de almacenamiento ms grandes son ms lentos que los dispositivos de almacenamiento ms pequeos. Y dispositivos ms rpidos son ms caros de construir que sus contrapartes ms lentas. Por ejemplo, la unidad de disco en un sistema tpico podra ser 1000 veces mayor que la memoria principal, pero puede ser que tome el procesador de 10 millones veces ms largo.

Figura 1.6: Cargando el ejecutable desde el disco a la memoria principal

Figura 1.7: Escribir la cadena de salida de la memoria a la pantalla.