Concepto+de+sistema


 * {$page} **

====La computadora se ubica desde cuando aparece la necesidad de contar y tener el control adecuado desde nuestras pertenencias, así como la necesidad de registrar o guardar memoria; al transcurrir el tiempo el ser humano ha desarrollado conceptos y herramientas de apoyo para actuar cada vez con mayor facilidad, precisión y con menor tiempo en el proceso y registro de la información.====

**2. DESARROLLO**
Se define un sistema como cualquier colección de elementos (o partes ) que están interrelacionadas en función de un objetivo. El **bus ISA** ( Industry Standard Architecture) es un  bus creado por IBM en 1980 en Boca Raton, Florida para ser empleado en los IBM PCs.
 * CONCEPTO DE SISTEMA **
 * QUE ES ISA **

La versión original era de 8 bits y funcionaba a 4,77 MHz, la misma velocidad que el procesador Intel 8088 empleado en el IBM PC. Posteriormente, cuando se lanzaron nuevos PCs con el procesador Intel 80286, se creó una extensión de 16 bits y se aumentó su velocidad a 8 MHz. Esta extensión es compatible de forma descendente con el bus ISA de 8 bits. Una computadora es una combinación de dispositivos y circuitos digitales que pueden realizar una secuencia programada de operaciones con un mínimo de intervención humano. La secuencia de operaciones se llama programa. El programa es un conjunto de instrucciones codificadas que se almacenas en la memoria interna de la computadora. Junto con todos los datos que requiere el programa. Cuando la computadora recibe un comando para ejecutar el programa. Lleva a cabo las instrucciones en el orden que están almacenadas en la memoria hasta que se complete el programa. Esto se hace a una velocidad extremadamente alta. El bit es la unidad mínima de información empleada en  informática, en cualquier dispositivo digital, o en la teoría de la información. Con él, podemos representar dos valores cuales quiera, como verdadero o falso, abierto o cerrado, blanco o negro, norte o sur, masculino o femenino, rojo o azul, etc. Basta con asignar uno de esos valores al estado de "apagado" (0), y el otro al estado de "encendido" (1). Término genérico para nombrar las instrucciones del programa, utilizadas en dos sentidos generales. El primero se refiere al código fuente, legible a simple vista, que son las instrucciones escritas por el programador en un lenguaje de programación. El segundo se refiere al código máquina ejecutable, que son las instrucciones convertidas de código fuente a instrucciones que el ordenador o computadora puede comprender. El mundo de la programación se puede dividir en dos, lenguajes de alto nivel y lenguajes de bajo nivel. No, esto no se refiere a su dificultad o estructura del código, sino como los algoritmos se expresan: A nivel maquina o nivel humano.  Los lenguajes de programación de alto nivel(como Java y Python) suelen ser sencillos y permiten crear programas rápidamente. Por que muchas de las tareas básicas a nivel sistema(como el valor de algunas variables a nivel memoria, el lugar que esas variables ocuparán, etc.) se la dejan a la computadora. Esto hace más sencillo hacer programas para diferentes computadoras(con diferentes arquitecturas) y sistemas operativos, incluso a veces se puede usar el mismo código.  Los lenguajes de bajo nivel requieren código mucho más específico. Es necesario expresar con algoritmos a nivel maquina cada instrucción, es más, en algunos lenguajes como Assembly es necesario conocer la estructura del procesador para la maquina que se esta programando y como este guarda las variables en los registros. Tienen la ventaja de que se puede sacar provecho de cada bit y byte procesado con mayor precisión
 * QUE ES UNA COMPUTADORA **
 * BIT **
 * QUE ES CODIGO **
 * <span style="font-family: Arial,sans-serif; font-size: 12pt;">DIFERECIA DE LENGUAJE DE ALTO NIVEL Y BAJO NIVEL **

<span style="font-family: Arial,sans-serif; font-size: 12pt;"> **ASTRACION** <span style="font-family: Arial,sans-serif;">La **abstracción** consiste en aislar un elemento de su contexto o del resto de los elementos que lo acompañan. En programación, el término se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" (Característica de caja negra ). El común denominador en la evolución de los lenguajes de programación, desde los clásicos o imperativos hasta los orientados a objetos , ha sido el nivel de abstracción del que cada uno de ellos hace uso. <span style="background-color: white; font-family: Arial,sans-serif;">Los lenguajes de programación son las herramientas mediante las cuales los diseñadores de lenguajes pueden implementar los modelos abstractos. La abstracción ofrecida por los lenguajes de programación se puede dividir en dos categorías: abstracción de datos (pertenecientes a los datos) y abstracción de control (perteneciente a las estructuras de control ). <span style="background-color: white; font-family: Arial,sans-serif; font-size: 12pt;">La instrucción se puede utilizar de dos formas, o bien indicando el número de veces que se ha de repetir el proceso, o bien indicando una variable con un valor final y un incremento. <span style="font-family: Arial,sans-serif;">Cuando hablamos de tipos de datos básicos nos referimos a un conjunto de valores más sus operaciones asociadas, por ejemplo, dentro del computador un número entero se representa con un par de bytes (16 bits), con ello, sólo puede almacenar valores en un rango de [-2 16/2, +216/2] y disponer de los operadores aritméticos: +, -, *, / y mod. Extendiendo el concepto, si agrupamos un conjunto de valores de igual o distinto tipo de dato básico y enseguida definimos la manera de cómo operar sobre ellos, es decir, sus métodos de acceso, estaríamos en presencia de una ESTRUCTURA DE DATOS. <span style="background-color: white; font-family: Arial,sans-serif;">La definición de una **Estructura de Datos** posee un primer nivel de abstracción en donde simplemente se identifica la colección de elementos a agrupar y sus operaciones de acceso. En un segundo nivel, el de implementación, ya pensamos en un lenguaje de programación específico y es ahí donde surgen preguntas como ¿cuál es la estructura óptima? o ¿qué funciones y/o procedimientos definir? <span style="font-family: Arial,sans-serif; font-size: 12pt;">Lenguajes de Programación de Bajo Nivel
 * <span style="font-family: Arial,sans-serif; font-size: 12pt;">INTRUCCION **
 * Instrucciones** Conjunto de reglas o indicaciones que se dan para hacer una actividad o para manejar un objeto:
 * <span style="font-family: Arial,sans-serif; font-size: 12pt;">ESTRUCTURA DE DATOS **
 * <span style="font-family: Arial,sans-serif; font-size: 12pt;">LENGUAJE DE BAJO, ALTO NIVEL, MAQUINA, ENSANBLADOR **

<span style="font-family: Arial,sans-serif; font-size: 12pt;"> Los lenguajes de bajo nivel, son aquellos que dependen intrínsecamente del ordenador. Aquellos programas informáticos, programados con lenguajes de bajo nivel, al ser exclusivamente dependientes del hardware, no pueden migrarse, ya que están justamente diseñados, para un hardware específico. <span style="font-family: Arial,sans-serif; font-size: 12pt;">Existen dos tipos de lenguajes de bajo nivel: el lenguaje máquina y el lenguaje ensamblador. <span style="font-family: Arial,sans-serif; font-size: 12pt;">El lenguaje de máquina (también denominado lenguaje de primera generación) es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de una computadora o el microcontrolador de un autómata. Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la máquina. Un programa consiste en una cadena de estas instrucciones de lenguaje de máquina (más los datos). Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de máquina es específico de cada máquina o arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre ellas. <span style="font-family: Arial,sans-serif; font-size: 12pt;">Un **lenguaje ensamblador**, o **assembler** (assembly language) es un lenguaje de programación de bajo nivel para los ordenadores, microprocesadores, microcontroladores, y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador. Esta representación es usualmente definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria, y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto, específico a cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que, idealmente son portables.
 * <span style="font-family: Arial,sans-serif; font-size: 12pt;">MAQUINA **
 * <span style="font-family: Arial,sans-serif; font-size: 12pt;">ENSANBLADOR **

<span style="font-family: Arial,sans-serif; font-size: 12pt;"> **ALTO NIVEL**

<span style="font-family: Arial,sans-serif; font-size: 12pt;"> Los lenguajes de alto nivel, son aquellos cuya característica principal, consiste en una estructura sintáctica y semántica legible, acorde a las capacidades cognitivas humanas. A diferencia de los lenguajes de bajo nivel, **son independientes de la arquitectura del hardware**, motivo por el cual, asumen mayor portabilidad. <span style="font-family: Arial,sans-serif; font-size: 12pt;">Son ejemplo de lenguajes de alto nivel: Python, Perl, PHP, Ruby, Lisp, Java, Fortran, C++, C#, entre otros. **<span style="font-family: Arial,sans-serif; font-size: 12pt;">COMPILADORES Y TRADUCTORES ** <span style="font-family: Arial,sans-serif; font-size: 12pt;">El compilador deriva su nombre de la manera en que trabaja, buscando en todo el código fuente, recolectando y reorganizando las instrucciones. Un compilador difiere de un intérprete en que el intérprete toma cada línea de código y la analiza y ejecuta mientras que el compilador mira el código por completo. <span style="font-family: Arial,sans-serif; font-size: 12pt;">Los compiladores requieren de un tiempo antes de poder generar un ejecutable, sin embargo los programas creados con compiladores se ejecutan mucho más rápido que un mismo programa ejecutado con un intérprete. <span style="font-family: Arial,sans-serif; font-size: 12pt;">Cada lenguaje de programación de alto nivel (excepto los estrictamente imperativos) viene con un compilador. <span style="font-family: Arial,sans-serif; font-size: 12pt;">Dado que los compiladores traducen código fuente a código objeto, el cual es único para cada tipo de maquina, existen múltiples compiladores para un mismo lenguaje. Por ejemplo lenguaje C tiene un compilador para PC, otro para Apple Macintosh, además existen muchas casa que desarrollan compiladores para una misma plataforma y un mismo lenguaje, por ejemplo Microsoft y Borland tienen sus compiladores propios para lenguaje C.  **<span style="font-family: Arial,sans-serif; font-size: 12pt;">Tipos de compiladores ** <span style="font-family: Arial,sans-serif; font-size: 12pt;">Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías: <span style="font-family: Arial,sans-serif; font-size: 12pt;">ENTRADA Y SALIDA <span style="background-color: white; font-family: Arial,sans-serif; font-size: 12pt;">Son aquellos que permiten la <span style="font-family: Arial,sans-serif; font-size: 12pt;"> comunicación entre la computadora y el usuario. <span style="font-family: Arial,sans-serif; font-size: 12pt;">ENTRADA: <span style="font-family: Arial,sans-serif; font-size: 12pt;">Son aquellos que sirven para introducir datos a la computadora para su proceso. Los datos se leen de los dispositivos de entrada y se almacenan en la memoria central o interna. Los dispositivos de entrada convierten la información en señales eléctricas que se almacenan en la memoria central. <span style="font-family: Arial,sans-serif; font-size: 12pt;">Los dispositivos de entrada típicos son los teclados, otros son: lápices ópticos, palancas de mando (joystick), CD-ROM, discos compactos ( CD ), etc. Hoy en día es muy frecuente que el usuario utilice un dispositivo de entrada llamado ratón que mueve un puntero electrónico sobre una pantalla que facilita la interacción usuario-máquina. <span style="font-family: Arial,sans-serif; font-size: 12pt;">SALIDA: <span style="font-family: Arial,sans-serif; font-size: 12pt;">Son los que permiten representar los resultados (salida) del proceso de datos. El dispositivo de salida típico es la pantalla o monitor. Otros dispositivos de salida son: impresoras (imprimen resultados en papel), trazadores gráficos (plotters). <span style="font-family: Arial,sans-serif;">La **arquitectura de computadoras** es el diseño conceptual y la estructura operacional fundamental de un sistema de computadora. Es decir, es un modelo y una descripción funcional de los requerimientos y las implementaciones de diseño para varias partes de una computadora, con especial interés en la forma en que la unidad central de proceso (UCP) trabaja internamente y accede a las direcciones de memoria. <span style="background-color: white; font-family: Arial,sans-serif;">También suele definirse como la forma de seleccionar e interconectar componentes de hardware para crear computadoras según los requerimientos de funcionalidad, rendimiento y costo.
 * **<span style="font-family: Arial,sans-serif; font-size: 12pt;">Compiladores cruzados: **<span style="font-family: Arial,sans-serif; font-size: 12pt;"> generan código para un sistema distinto del que están funcionando.
 * **<span style="font-family: Arial,sans-serif; font-size: 12pt;">Compiladores optimizadores: **<span style="font-family: Arial,sans-serif; font-size: 12pt;"> realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
 * **<span style="font-family: Arial,sans-serif; font-size: 12pt;">Compiladores de una sola pasada: **<span style="font-family: Arial,sans-serif; font-size: 12pt;"> generan el código máquina a partir de una única lectura del código fuente.
 * **<span style="font-family: Arial,sans-serif; font-size: 12pt;">Compiladores de varias pasadas: **<span style="font-family: Arial,sans-serif; font-size: 12pt;"> necesitan leer el código fuente varias veces antes de poder producir el código máquina.
 * **<span style="font-family: Arial,sans-serif; font-size: 12pt;">Compiladores JIT (//Just In Time//): **<span style="font-family: Arial,sans-serif; font-size: 12pt;"> forman parte de un**intérprete** y compilan partes del código según se necesitan.
 * <span style="font-family: Arial,sans-serif; font-size: 12pt;">DEFINICION DE ARQUITECTURA DE COMPUTADORAS **

**4. REFERENCIAS BIBLIOGRAFICAS**
<span style="font-family: Arial,sans-serif; font-size: 12pt;">Alvaro Galvis Panqueva(1987). Tecnologia educativa. Ed: EUNED primera edición <span style="font-family: Arial,sans-serif; font-size: 12pt;">Tocci,Widmer(2003).Sistemas digitales principios y aplicaciones. ed: Pearson educación 8va edición. <span style="font-family: Arial,sans-serif; font-size: 12pt;">Estaban Leyva Cortes, Ignacio Prieto Tinoco(2004). Informatica. Ed: MAD S.L. primera edición. <span style="font-family: Arial,sans-serif; font-size: 12pt;">Roberto flores Rueda(2005). Algoritmo, estructura de datos y progrmacion Orientado a objetos. Ed: Ecoe Ediciones Ltda. primera edición

**Seguimiento de aportes: (*) Esto es para hacer un seguimiento de los aportes, copiar la linea siguiente cada ves que se edite, no borrar las existentes.**
(Estudiante: Nombre_Completo ) en fecha fecha de la edición