Nociones Básicas de un Sistema Computador. Clase 2 Introducción a la Programación

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 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

6 downloads 29 Views 483KB Size

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: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 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

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.