If you can't read please download the document
Upload
edgar-pimentel
View
217
Download
0
Embed Size (px)
DESCRIPTION
sistema
Citation preview
Nociones Bsicas de un Sistema Computador
Clase 2
Introduccin a la Programacin
Antes de empezar a programar
Veremos algunos conceptos muy bsicos sobre:
Computadoras
Sistemas Operativos
Programas, lenguajes de programacin 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 informacin entre los dispositivos y el procesador
Memoria : donde residen los programas y los datos cuando se estn ejecutando
Buses que interconectan estos componentes entre s.
Arquitectura Von Neumann
Modelo Secuencial de Ejecucin
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 estn almacenadas.
Tanto las instrucciones como los datos residen en Memoria, y no hay ninguna distincin entre ellos: son todos secuencias de ceros y unos, es decir, todos son nmeros.
Como sabe el procesador qu es una instruccin 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 mquina. Por ejemplo: Intel tiene una instruccin de multiplicar:
MUL BX;; DX:AXAX*BX Observen que la multiplicacin devuelve un resultado en DOBLE precisin: es decir el doble de largo (como mximo) que los operandos.
Yo podra disear una mquina SIN una instruccin de multiplicar. Por lo tanto, si mi programa necesita realizar una multiplicacin, debera utilizar repetidas sumas para obtener el resultado
Instrucciones y Formatos
Decamos entonces que cada arquitectura (ISA) define un repertorio propio de instrucciones, estas instrucciones se codifican siguiendo un formato tambin definido por el ISA.
Ejemplo: formato de una operacin aritmtica 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
La unidad de control repite este ciclo infinito: 1. Pone la direccin de la siguiente instruccin en las
seales de direccin y lee la instruccin (Fetch) 2. Decodifica y Ejecuta la instruccin 3. Incrementa el contador de direcciones y vuelve al paso 1
Procesador
01000010 00001111 00011100 00010010
direccin
instruccin
Los Datos
No tendran sentido las instrucciones sin los datos. Las instrucciones operan sobre los datos. Y dijimos que los datos, tambin estn guardados en la memoria. As, por ejemplo:
programa
datos
Los datos, a diferencia de las instrucciones, pueden ser ledos o escritos de/a la memoria por parte del procesador.
Modelo Procesador-Memoria
Las direcciones de los datos estn especificadas en las instrucciones. Ejemplo: ISA Intel
ADD BX, Variable;; BXBX+[Variable]
Procesador
01000010 00001111 00011100 00010010
direccin de dato o instruccin
Instruccin o dato
dato
Ciclo de Ejecucin de una instruccin
1. Poner la direccin de la siguiente instruccin en las seales de direccin y leer la instruccin (Fetch de instruccin)
2. Decodificar la instruccin 3. Por cada operando en memoria: Poner la direccin
del dato en las seales de direccin y leer el operando (fetch del dato)
4. Ejecutar 5. Si hay que escribir el resultado en memoria, poner la
direccin de memoria y escribir el resultado 6. Incrementar el contador de direcciones y volver al
paso 1
Ciclo de ejecucin de una instruccin
Cuando el procesador est en el paso 1, trae una instruccin.
Cuando el procesador est en el paso 3, trae un dato.
Mas sobre la memoria
La memoria est organizada como una coleccin de bytes (8 bits). Cada posicin de memoria de 8 bits, tiene asociado un nmero, que es su posicin dentro de la coleccin. Este nmero se llama direccin y va desde la posicin 0 hasta la 2n-1, siendo 2n el tamao de la memoria medida en bytes. Esa direccin es un nmero, por ejemplo: 100 . Su contenido es el nmero binario natural: 01101100
01000010 00001111 00011100 01101100 00010010
0 1
100
Sistema Binario y otros
Todos los nmeros, tanto los que representan instrucciones, como datos, como direcciones (son tres cosas!) estn representados en el sistema binario.
El sistema binario, cuando se implementa sobre la lgica, se expresa en volts (0 y 5).
Podemos subir el nivel de abstraccin para la representacin numrica, tanto de datos como de direcciones como de instrucciones, a otros sistemas de numeracin mas convenientes para el caso:
Por ejemplo: el decimal para los nmeros
Hexadecimal para nmeros y direcciones
Interface software-hardware
Cuando hablemos de variables en los lenguajes de programacin estaremos hablando de direcciones de datos. Una variable, es el nombre simblico de la direccin de un dato. En nuestro ejemplo, a la direccin 100, que contiene el dato 01101100, la llamamos simblicamente: 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, tendrn 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 fsico (disco, por ej) tiene un hardware asociado a l que sirve para programarlo, enviar y recibir datos. Este hardware, o controlador del dispositivo, tambin deber comunicarse con el procesador.
disco E/S CPU
Direcciones/datos
Entrada/Salida
Afortunadamente para los programadores, toda la programacin para acceder a los dispositivos est hecha. Capas de software, que van desde las libreras de los lenguajes de programacin hasta el sistema operativo, se encargan de facilitarnos la tarea.
Programa usuario
Datos usuario
Programa SO
Datos SO
Libre
Memoria
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
Estimacin del uso de SOs en 2009
Algoritmos, Programas y Lenguajes de Programacin
Sea el siguiente problema (Euler 1):
Hallar la suma de todos los nmeros enteros menores que 1000 que sean mltiplos de 3 y de 5.
Paso 0: Tomar el primer nmero Paso 1: Si es mltiplo de 3, sumar el nmero a la salida Paso 2: Si es mltiplo de 5, sumar el nmero a la salida Paso 3: Avanzar al siguiente nmero. Paso 4: Si es igual a 1000, terminar, sino Ir al paso 1
Un algoritmo:
Algoritmo
Definicin del Diccionario de Lengua Espaola, de la Real Academia
Conjunto ordenado y finito de operaciones que permite hallar la solucin de un problema.
Ejemplos de algoritmos: Instrucciones para poner en marcha la heladera que acabo de comprar. Instrucciones para dividir dos nmeros
Representacin de los algoritmos En lenguaje natural (ejemplo pgina anterior) Mediante diagramas de flujo Mediante grafos de estado Etc
Programas y LPs
En Python: #include int main() { int suma,i; suma=0; for(i=3;i
Programas y LPs
En la sintaxis, hay algunas diferencias y algunas similitudes entre los dos lenguajes.
En ejecucin, las diferencias son mayores: El programa escrito en C, es necesario compilarlo para poder ser ejecutado.
El programa escrito en python NO es necesario compilarlo para poder ejecutarlo.
El lenguaje C es un lenguaje compilado
El lenguaje Python es un lenguaje interpretado.
Compilados vs. Interpretados
Esto significa que hay una diferencia en el modo en que se traducen ambos al lenguaje de la mquina (recuerden, unos y ceros, instrucciones, ISA) y en el modo en que ambos lenguajes se ejecutan
Ventajas de la compilacin (lenguajes fuertemente compilados, como C):
Ms rpida la ejecucin porque ya est en cdigo escrito en lenguaje mquina, y el procesador solo tiene que ejecutar.
Mas eficiente el cdigo generado porque el compilador tiene mas tiempo para pensar y generar cdigo mas optimizado.
Compilados vs. Interpretados
Ventajas de la interpretacin
Menor el tiempo de desarrollo: escribo y veo si funciona inmediatamente.
El programa fuente es portable entre distintos SO o mquinas.
Desventaja de los compilados:
los ejecutables NO son portables. Hay que volver a compilar si cambiamos de SO y de ISA.
C:\Users\Patricia\programas_c>gcc -o euler1 euler1.c C:\Users\Patricia\programas_c>dir Directorio de C:\Users\Patricia\programas_c 27/03/2011 11:47 a.m. . 27/03/2011 11:47 a.m. .. 25/03/2011 10:42 a.m. 236 euler1.c 27/03/2011 11:47 a.m. 25.126 euler1.exe C:\Users\Patricia\programas_c>euler1.exe El resultado es 233168 C:\Users\Patricia\programas_c>
Comando para Compilar
Programa ejecutable
Programa fuente
Comando para Ejecutar
Compilacin
Interpretacin
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
Invocacin al intrprete
prompt de SO
Sentencias del programa de usuario
Invocacin de la funcin dentro del interprete
prompt de python
Comenzamos a Programar: en C
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)
Escribimos, compilamos y ejecutamos hello.c
Escribimos: con algn editor
Compilamos: gcc o hello hello.c
Ejecutamos ./hello
(Tambin hay CodeBlocks bajo linux)
Windows Linux
Comenzamos a Programar: en Python
Python 2.7 incluye:
Command line
IDLE (entorno que permite editar y luego ejecutar)
EasyEclipse for Python
Entorno de desarrollo incluye Proyectos, Edicin y Ejecucin.
Abrimos una consola e invocamos a Python
Desde el prompt de python escribimos :
Hello , world
Windows Linux
Hello world, en C y en Python
#include 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 >>>
C
Python
Fin