Story Transcript
Nociones Básicas de un Sistema Computador Clase 2 Introducción a la Programación
Antes de empezar a programar • Veremos algunos conceptos muy básicos sobre: – Computadoras – Sistemas Operativos – Programas, lenguajes de programación y algoritmos
Computadora, Sistema Operativo, Programas • Computadora: – Formada por: • Procesador • Dispositivos de entrada y salida con sus correspondientes chips dedicados para controlar el flujo de información entre los dispositivos y el procesador • Memoria : donde residen los programas y los datos cuando se están «ejecutando» • Buses que interconectan estos componentes entre sí.
Arquitectura Von Neumann
Modelo Secuencial de Ejecución • El procesador (su unidad de control) obtiene las instrucciones de la memoria una a una y las ejecuta (en la unidad de proceso) en el orden en que están almacenadas. • Tanto las instrucciones como los datos residen en Memoria, y no hay ninguna distinción entre ellos: son todos secuencias de ceros y unos, es decir, todos son números. • ¿Como sabe el procesador qué es una instrucción y qué es un dato?
Instrucciones • Cada familia de procesadores tiene su propio conjunto de instrucciones, es decir, Intel, PowerPc, Alpha, Mips, Sparc, en fin... Cada uno de ellos define qué instrucciones tendrá su máquina. • Por ejemplo: Intel tiene una instrucción de multiplicar: – MUL BX;; DX:AXAX*BX – Observen que la multiplicación devuelve un resultado en DOBLE precisión: es decir el doble de largo (como máximo) que los operandos.
• Yo podría diseñar una máquina SIN una instrucción de multiplicar. Por lo tanto, si mi programa necesita realizar una multiplicación, debería utilizar repetidas sumas para obtener el resultado…
Instrucciones y Formatos • Decíamos entonces que cada arquitectura (ISA) define un repertorio propio de instrucciones, estas instrucciones se codifican siguiendo un formato también definido por el ISA. • Ejemplo: formato de una operación aritmética en MIPS (32 bits)
Las programas residen en memoria • Para poder ser ejecutado, un programa debe residir en memoria (principal). (luego veremos como llega allí….) • O sea, cualquiera sea el lenguaje en que escribamos nuestros programas, al final éste estará en memoria organizado como una secuencia de instrucciones del formato de la arquitectura (ISA).
Memoria • La memoria principal es un chip (circuito integrado) que se localiza fuera del procesador. 01000010111100000100001011110000 00001111000010101000011110000111 00011100011000010001000100010010
00010010101010101000010000100000
La memoria: leyendo instrucciones dirección Procesador
instrucción
01000010 00001111 00011100
00010010
• La unidad de control repite este ciclo infinito: 1. Pone la dirección de la siguiente instrucción en las señales de dirección y lee la instrucción (Fetch) 2. Decodifica y Ejecuta la instrucción 3. Incrementa el contador de direcciones y vuelve al paso 1
Los Datos • No tendrían sentido las instrucciones sin los datos. Las instrucciones operan sobre los datos. Y dijimos que los datos, también están guardados en la memoria. Así, por ejemplo: programa
datos
• Los datos, a diferencia de las instrucciones, pueden ser leídos o escritos de/a la memoria por parte del procesador.
Modelo Procesador-Memoria dirección de dato o instrucción Procesador
01000010 00001111 00011100
dato
Instrucción o dato
00010010
• Las direcciones de los datos están especificadas en las instrucciones. • Ejemplo: ISA Intel – ADD BX, Variable;; BXBX+[Variable]
Ciclo de Ejecución de una instrucción 1. Poner la dirección de la siguiente instrucción en las señales de dirección y leer la instrucción (Fetch de instrucción) 2. Decodificar la instrucción 3. Por cada operando en memoria: Poner la dirección del dato en las señales de dirección y leer el operando (fetch del dato) 4. Ejecutar 5. Si hay que escribir el resultado en memoria, poner la dirección de memoria y escribir el resultado 6. Incrementar el contador de direcciones y volver al paso 1
Ciclo de ejecución de una instrucción • Cuando el procesador está en el paso 1, trae una instrucción. • Cuando el procesador está en el paso 3, trae un dato.
Mas sobre la memoria • La memoria está organizada como una colección de bytes (8 bits). • Cada posición de memoria de 8 bits, tiene asociado un número, que es su posición dentro de la colección. Este número se llama dirección y va desde la posición 0 hasta la 2n-1, siendo 2n el tamaño de la memoria medida en bytes. • Esa dirección es un número, por ejemplo: 100 . Su contenido es el número binario natural: 01101100 0 01000010 1 00001111 00011100 100 01101100
00010010
Sistema Binario y otros • Todos los números, tanto los que representan instrucciones, como datos, como direcciones (son tres cosas!) están representados en el sistema binario. • El sistema binario, cuando se implementa sobre la lógica, se expresa en volts (0 y 5). • Podemos subir el nivel de abstracción para la representación numérica, tanto de datos como de direcciones como de instrucciones, a otros sistemas de numeración mas convenientes para el caso: – Por ejemplo: el decimal para los números – Hexadecimal para números y direcciones
Interface software-hardware • Cuando hablemos de variables en los lenguajes de programación estaremos hablando de direcciones de datos. Una variable, es el nombre simbólico de la dirección de un dato. En nuestro ejemplo, a la dirección 100, que contiene el dato 01101100, la llamamos simbólicamente: VAR1. • Las variables almacenan valores en memoria. • Las variables son posiciones de memoria a las que habrá que darles un valor, un contenido, de lo contrario, tendrán… cualquier cosa…
Microarquitectura del Procesador
Entrada/Salida • Discos, Memorias Flash, teclado, Monitor, mouse, enfin… toda una cantidad importante de complementos que comunican el procesador y su memoria con el mundo exterior. • Cada dispositivo físico (disco, por ej) tiene un hardware asociado a él que sirve para programarlo, enviar y recibir datos. Este hardware, o controlador del dispositivo, también deberá comunicarse con el procesador. CPU
E/S Direcciones/datos
disco
Entrada/Salida • Afortunadamente para los programadores, toda la programación para acceder a los dispositivos está hecha. • Capas de software, que van desde las librerías de los lenguajes de programación hasta el sistema operativo, se encargan de facilitarnos la tarea.
Memoria
Programa usuario
Datos usuario
Programa SO
Datos SO
Libre
Sistemas Operativos • Se crearon para hacer que el programador pudiera tener un acceso mas sencillo a los recursos de la computadora. Es software.
Sistemas Operativos
Estimación del uso de SO´s en 2009
Algoritmos, Programas y Lenguajes de Programación • Sea el siguiente problema (Euler 1): Hallar la suma de todos los números enteros menores que 1000 que sean múltiplos de 3 y de 5.
• Un algoritmo: Paso 0: Tomar el primer número Paso 1: Si es múltiplo de 3, sumar el número a la salida Paso 2: Si es múltiplo de 5, sumar el número a la salida Paso 3: Avanzar al siguiente número. Paso 4: Si es igual a 1000, terminar, sino Ir al paso 1
Algoritmo • Definición del Diccionario de Lengua Española, de la Real Academia «Conjunto ordenado y finito de operaciones que permite hallar la solución de un problema.» • Ejemplos de algoritmos: – Instrucciones para poner en marcha la heladera que acabo de comprar. – Instrucciones para dividir dos números
• Representación de los algoritmos – – – –
En lenguaje natural (ejemplo página anterior) Mediante diagramas de flujo Mediante grafos de estado Etc…
Programas y LP´s • En C:
• En Python:
#include int main() { int suma,i; suma=0; for(i=3;igcc -o euler1 euler1.c
Comando para Compilar
C:\Users\Patricia\programas_c>dir
Directorio de C:\Users\Patricia\programas_c 27/03/2011 27/03/2011 25/03/2011 27/03/2011
11:47 a.m. . 11:47 a.m. .. 10:42 a.m. 236 euler1.c 11:47 a.m. 25.126 euler1.exe
C:\Users\Patricia\programas_c>euler1.exe El resultado es 233168 C:\Users\Patricia\programas_c>
Programa fuente
Programa ejecutable Comando para Ejecutar
prompt de python prompt de SO
Interpretación
C:\Users\Patricia\programas_python>python Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> def euler1(): ... result = 0 ... for i in range(1,1000): ... if i % 3 == 0 or i % 5 == 0 : ... result = result + i ... print result ... >>> euler1() 233168 >>> euler1() 233168
Invocación al intérprete
Sentencias del programa de usuario
Invocación de la función dentro del interprete
Comenzamos a Programar: en C Windows • CodeBlocks , incluye el entorno para windows llamado MinGW que a su vez incluye al compilador gcc (de gnu) • Si lo tenemos instalado , ejecutamos el primer programa… hello word! • (que ademas ya viene escrito)
Linux • Escribimos, compilamos y ejecutamos hello.c • Escribimos: con algún editor • Compilamos: – gcc –o hello hello.c
• Ejecutamos – ./hello
• (También hay CodeBlocks bajo linux)
Comenzamos a Programar: en Python Windows • Python 2.7 incluye: – Command line – IDLE (entorno que permite editar y luego ejecutar)
• EasyEclipse for Python – Entorno de desarrollo incluye Proyectos, Edición y Ejecución.
Linux • Abrimos una consola e invocamos a Python • Desde el prompt de python escribimos : – Hello , world
Hello world, en C y en Python C #include
Python
int main() { printf("Hello world!\n"); }
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print "hello world" hello world >>>
Fin