Download Nociones Básicas de un Sistema Computador

Document related concepts
no text concepts found
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:AXAX*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;; BXBX+[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 <stdio.h>
int main()
{
int suma,i;
suma=0;
for(i=3;i<1000;i++)
{
if((i%3==0)||(i%5==0)) suma=suma+i;
}
printf("El resultado es %d\n",suma);
return 0;
}
def euler1():
result = 0
for i in range(1,1000):
if i % 3 == 0 or i % 5 == 0 :
result = result + i
print result
Programas y LP´s
• En la sintaxis, hay algunas diferencias y algunas
similitudes entre los dos lenguajes.
• En ejecución, 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 máquina
(recuerden, unos y ceros, instrucciones, ISA) y en el
modo en que ambos lenguajes se ejecutan
• Ventajas de la compilación (lenguajes «fuertemente»
compilados, como «C»):
– Más rápida la ejecución porque ya está en código escrito
en lenguaje máquina, y el procesador solo tiene que
ejecutar.
– Mas eficiente el código generado porque el compilador
tiene mas tiempo para «pensar» y generar código mas
optimizado.
Compilados vs. Interpretados
• Ventajas de la interpretación
– Menor el tiempo de desarrollo: escribo y veo si
funciona inmediatamente.
– El programa fuente es portable entre distintos SO
o máquinas.
• Desventaja de los compilados:
– los ejecutables NO son portables. Hay que volver a
compilar si cambiamos de SO y de ISA.
Compilación
C:\Users\Patricia\programas_c>gcc -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. <DIR>
.
11:47 a.m. <DIR>
..
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 <stdio.h>
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