Está en la página 1de 35

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
01000010
dirección 00001111
Procesador 00011100

00010010
instrucción

• 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
• Los datos, a diferencia de las
instrucciones, pueden ser leídos
datos o escritos de/a la memoria por
parte del procesador.
Modelo Procesador-Memoria
01000010
dirección de dato o instrucción 00001111
Procesador 00011100
dato

00010010
Instrucción o dato

• 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 disco
Direcciones/datos
Entrada/Salida Memoria

Programa usuario
• Afortunadamente para los
programadores, toda la
programación para acceder Datos usuario
a los dispositivos está
hecha.
• Capas de software, que van
Programa SO
desde las librerías de los
lenguajes de programación
hasta el sistema operativo,
se encargan de facilitarnos Datos SO

la tarea.
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() def euler1():


{ result = 0
int suma,i; for i in range(1,1000):
if i % 3 == 0 or i % 5 == 0 :
suma=0; result = result + i
for(i=3;i<1000;i++) print result
{
if((i%3==0)||(i%5==0)) suma=suma+i;
}
printf("El resultado es %d\n",suma);
return 0;
}
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 11:47 a.m. <DIR> .


27/03/2011 11:47 a.m. <DIR> .. Programa fuente
25/03/2011 10:42 a.m. 236 euler1.c
27/03/2011 11:47 a.m. 25.126 euler1.exe Programa ejecutable

C:\Users\Patricia\programas_c>euler1.exe Comando para Ejecutar


El resultado es 233168

C:\Users\Patricia\programas_c>
prompt de python

prompt de SO Interpretación
C:\Users\Patricia\programas_python>python Invocación al intérprete
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 : Sentencias del programa de usuario
... result = result + i
... print result
...
>>> euler1() Invocación de la función
233168 dentro del interprete
>>> euler1()
233168
Comenzamos a Programar: en C
Windows Linux
• CodeBlocks , incluye el • Escribimos, compilamos
entorno para windows y ejecutamos hello.c
llamado MinGW que a • Escribimos: con algún
su vez incluye al editor
compilador gcc (de gnu) • Compilamos:
• Si lo tenemos instalado , – gcc –o hello hello.c
ejecutamos el primer
• Ejecutamos
programa… hello word!
– ./hello
• (que ademas ya viene
escrito) • (También hay
CodeBlocks bajo linux)
Comenzamos a Programar: en Python
Windows Linux
• Python 2.7 incluye: • Abrimos una consola e
– Command line invocamos a Python
– IDLE (entorno que • Desde el prompt de
permite editar y luego python escribimos :
ejecutar)
– Hello , world

• EasyEclipse for Python


– Entorno de desarrollo
incluye Proyectos,
Edición y Ejecución.
Hello world, en C y en Python
C

#include <stdio.h>

int main()
{
printf("Hello world!\n");
}
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.
>>> print "hello world"
hello world
>>>
Fin

También podría gustarte