Monografias.com > Computación > General
Descargar Imprimir Comentar Ver trabajos relacionados

CLASIFICACIÓN DE LAS COMPUTADORAS




Enviado por lynx013



     

    Indice
    1. El
    procesador

    2. Arquitectura de su
    procesador

    3. Memoria
    4. Efecto de
    tuberías

    5. Lenguajes De
    Programación

    1. El
    procesador

    El procesador es el
    cerebro del
    ordenador. Controla el funcionamiento de la computadora
    y lleva a cabo las funciones de
    procesamiento de
    datos. La velocidad del
    microprocesador
    se mide en Mega Hertz, aunque solo es la fuerza bruta
    del procesador. Este
    va montado sobre un socket de la mother board, existe otra
    velocidad, la
    FBS, que es la velocidad con la que se comunican el procesador y
    la mother board.

    Partes De Un Microprocesador
    1. – Encapsulado: rodea el chip, sirve para protegerlo contra los
    agentes externos y para montar los conectores externos para
    montarlo en la mother board.
    2. – La memoria
    caché: memoria muy
    rápida donde el procesador almacena los datos que
    está usando o los que va a usar próximamente.
    3. – FPU, floating point unit: parte especializada en
    cálculos de punto flotante.
    4. – Existen otras piezas que no es necesario mencionar por el
    momento.
    Por su estructura
    Por su fuente de energía.
    La forma más común de alimentación de una
    computadora
    pues es la energía
    eléctrica, antes las computadoras
    gastaban muchísima electricidad, hoy
    en día gracias a las nuevas
    tecnologías en los componentes se ahorra mucha
    electricidad.
    Entre esta clase de computadoras están las
    analógicas y las digitales.
    Las computadoras analógicas basan su funcionamiento en
    comparar parámetros y hacer mediciones, analogía
    quiere decir comparación. Sus cálculos los hacen
    con base a comparaciones que realizan por medio de instrumentos
    mecánicos.
    Las computadoras digitales realizan todas sus operaciones
    basándose en cálculos matemáticos
    exclusivamente. Se basan en el sistema
    binario y en las matemáticas discretas, de estado finito,
    a diferencia de las analógicas que siguen unas matemáticas continuas.
    En el siglo XIX Charles Babbage desarrolló una computadora
    analógica que funcionaba a base de engranes, Claro
    está que su propulsión era puramente mecánica, fue ayudado por Ada Lovelace, a
    quien se le atribuye el haber escrito el primer algoritmo de
    computación. La idea de la máquina
    de Babbage era buena, pero nunca funcionó bien debido a
    que la precisión que requerían las piezas
    sobrepasaba la tecnología de aquel
    tiempo.
    Por su tamaño.
    La característica es su tamaño,
    refiriéndose a su capacidad de cómputo.
    Macrocomputadora: máquina utilizada en grandes organizaciones,
    es capaz de comunicarse con varios usuarios a la vez. El trabajar
    con varios usuarios a la vez se logra debido a la gran capacidad
    de esta clase de máquina y a un método que
    se llama tiempo
    compartido. El tiempo compartido se basa en que el procesador
    tiene tiempos muertos, entonces para evitar esto se asignan
    pequeños espacios de tiempo a cada usuario en los cuales
    se realizan parte de las operaciones que
    solicita el usuario, dado el corto espacio de tiempo entre las
    interrupciones de un usuario a otro no se siente ninguna clase de
    retraso o de tiempo de espera. Además también se
    debe a la gran rapidez del sistema.
    Minicomputadora: también es una máquina
    multiusuario, pero no es tan grande como una
    macrocomputadora.
    Estación de trabajo: esta es más potente que una
    microcomputadora, también tiene potencia para ser
    multiusuario, pero es mas frecuentemente utilizada por ingenieros
    o científicos que requieran una gran cantidad de
    cálculos. Entre la comunidad de
    desarrolladores de software una estación
    de trabajo es muy útil, porque además de hacer
    el trabajo en
    red mas
    dinámico se requiere de bastante potencia para
    compilar programas de gran
    tamaño. Aunque se puede decir que una estación de
    trabajo es solo una PC pero más potente.
    Microcomputadora: es una PC, son utilizadas para trabajos de
    oficina o para
    entretenimiento multimedia. Las
    hay de escritorio o portátiles.

    2. Arquitectura de
    su procesador

    Procesadores CISC y RISC.
    Agrupados en dos familias, la más antigua es la CISC,
    complex instruction set computer. Corresponde a procesadores
    capaces de ejecutar un gran número de instrucciones
    pre-definidas en lenguaje
    máquina, en un orden de centenas.
    Los procesadores
    RISC, reduced instruction set computer. Permite una
    ejecución más rápida, pero requiere de
    compiladores
    más complejos ya que el RISC admite menos instrucciones
    que un CISC.

    RISC
    Las características comunes a todos los
    procesadores RISC, fuente de sus capacidades de altas prestaciones,
    son:
    1.Modelo de
    conjunto de instrucciones Load/Store (Cargar/Almacenar).
    Sólo las instrucciones Load/Store acceden a memoria; las
    demás operaciones en un RISC, tienen lugar en su gran
    conjunto de registros. Ello
    simplifica el direccionamiento y acorta los tiempos de los ciclos
    de la CPU, y
    además facilita la gestión
    de los fallos de paginas (page faults) en entornos de memoria
    virtual. Además, permite un elevado nivel de
    concurrencia a consecuencia de la independencia
    de las operaciones de Load/Store de la ejecución del resto
    de las instrucciones.
    2.Arquitectura
    no destructiva de tres direcciones. Los procesadores CISC
    destruyen la información que existe en alguno de los
    registros,
    como consecuencia de la ejecución normal de instrucciones;
    esto es debido a su arquitectura de dos direcciones, por la cual
    el resultado de una operación sobrescribe uno de los
    registros que contenía a los operandos. Por contra, las
    instrucciones RISC, con tres direcciones, contienen los campos de
    los dos operándoos y de su resultado. Por lo tanto, tanto
    los operandos origen como el destino, son mantenidos en los
    registros tras haber sido completada la operación. Esta
    arquitectura "no destructiva" permite a los compiladores
    organizar las instrucciones de modo que mantengan llenos los
    conductos (pipelines) del chip, y por tanto reutilizar los
    operandos optimizando la concurrencia.
    3.Instrucciones simples, de formato fijo, con pocos modos de
    direccionamiento. Las instrucciones simples reducen de manera muy
    significativa el esfuerzo para su descodificación, y
    favorecen su ejecución en pipelines. Las instrucciones de
    longitud fija, con formatos fijos, implican que los campos de
    códigos de operación (opcodes) y de los operandos
    están siempre codificados en las mismas posiciones,
    permitiendo el acceso a los registros al mismo tiempo que se
    está descodificando el código
    de operación. Todas las instrucciones tienen una longitud
    equivalente a una palabra y están alineadas en la memoria en
    límites
    de palabra (word
    boundaries), ya que no pueden ser repartidas en pedazos que
    puedan estar en diferentes páginas.
    4.Ausencia de microcódigo. El microcódigo no se
    presta a la ejecución en ciclos únicos, ya que
    requiere que el hardware sea dedicado a su
    interpretación dinámica. La programación en microcódigo no hace
    que el software sea
    más rápido que el programado con un conjunto de
    instrucciones simples. Todas las funciones y el
    control, en los
    procesadores RISC, están "cableados" (hardwired), para
    lograr una máxima velocidad y eficiencia.
    5.Ejecución en conductos (pipelined). Las instrucciones
    simples, de formato fijo y ciclo único permiten que las
    diferentes etapas de los ciclos de ejecución
    (búsqueda o fetch, descodificación,
    ejecución, y escritura del
    resultado o result write-back) para instrucciones
    múltiples, se puedan realizar simultáneamente, de
    un modo más simple y eficaz.
    6.Ejecución en ciclos únicos (single-cycle). El
    resultado directo de los conjuntos de
    instrucciones que ofrecen los procesadores RISC, es que cada
    instrucción puede ser ejecutada en un único ciclo
    de la CPU. Esto
    invalida la creencia de que las microinstrucciones en
    microcódigo, creadas para ser ejecutadas en un solo ciclo
    de procesador, son más rápidas que las
    instrucciones del lenguaje
    ensamblador. Ya que el caché esta construido partiendo
    de la misma tecnología que el
    almacenamiento de
    control del
    microprograma, una única instrucción puede ser
    ejecutada a la misma velocidad que una microinstrucción.
    La ejecución en ciclos únicos también
    simplifica la gestión
    de las interrupciones y los conductos (pipelines).

    RISC frente a CISC:
    Existen varios mitos que
    contraponen las ventajas de la tecnología RISC frente a la
    CISC, que es importante descalificar:
    a. Los procesadores RISC ofrecen peor soporte para los lenguajes
    de alto nivel o HLL (High Level Language) que lo CISC. Esta
    creencia se argumenta en que un conjunto de instrucciones de
    "alto nivel" (CISC) es mejor soporte para lenguajes de alto
    nivel. Sin embargo, la característica fundamental de los
    lenguajes de alto nivel, implica que el programador sólo
    interacciona con el ordenador a través del propio lenguaje de
    alto nivel (programación, depuración, mensajes
    del sistema, etc.),
    por lo que todos los problemas a
    "bajo nivel", deben de ser transparentes y desconocidos para
    él. Por ello, son de nulas consecuencias para el
    programador y los lenguajes de alto nivel, como se implementan
    las funciones, en función
    del tipo de CPU.
    b. Es más complicado escribir compiladores RISC que CISC.
    Dado que los procesadores CISC tienen un mayor número de
    instrucciones y modos de direccionamiento, existen por tanto
    más formas de hacer la misma tarea, lo que puede confundir
    tanto al compilador como al que lo escribe. Por ello,
    subjetivamente es posible escoger una forma de hacerlo poco
    adecuada, por el tipo de instrucciones o por el tiempo de
    ejecución que requieren. En cambio, en un
    procesador RISC, hay menos opciones, por lo que el compilador es
    más simple, aunque se genere, habitualmente, un 20-30%
    más código;
    a cambio, se
    consigue un incremento de la velocidad de hasta un 500%.
    c. Un programa es
    más rápido cuanto más pequeño. La
    velocidad a la que un programa puede
    ser ejecutado no depende en absoluto de su tamaño, sino
    del tiempo de ejecución de cada una de sus instrucciones.
    Dado que las instrucciones RISC son más rápidas, y
    admiten mejor los pipelines, puede haber mayor paralelismo y
    simultaneidad en la ejecución de pequeñas secciones
    de código. Dichas secciones de código pueden ser
    ejecutadas en una fracción del tiempo que requiere una
    sola instrucción CISC.

    Resumiendo:
    No es un hecho meramente académico, sino puramente
    comercial y económico. La "era RISC" ha alcanzado a todos
    los fabricantes de semiconductores:
    AMD, Intel, MIPS, Motorola, ROSS, …; y todos ellos son productos
    usados por fabricantes de ordenadores y estaciones de trabajo:
    Apple, DEC, HP, IBM, SUN, etc. y sus correspondientes
    clónicos.
    El tiempo de diseño
    de estos productos se
    reduce sensiblemente, lo que disminuye su coste final, y por
    tanto, se incrementan sus expectativas, al poder llegar
    al mercado en un
    tiempo más adecuado, y con menos posibilidades de
    errores.
    Además, son globalmente más eficaces, de menores
    dimensiones y más bajo consumo,
    ofreciendo siempre claras ventajas técnicas
    frente a los más avanzados CISC.
    Actualmente, las estaciones de trabajo RISC multiprocesadoras de
    mayor éxito,
    se basan en diferentes versiones de la tecnología SPARC:
    superSPARC e HyperSPARC.
    Esta claro que el futuro pertenece a los RISC y a los sistemas
    multiprocesador, a no ser que la física y la electrónica logren superar las barreras
    tecnológicas para incrementar muy por encima de las cotas
    actuales, las velocidades y prestaciones
    de una única CPU.
    También cabe esperar, y por que no, la pronta
    aparición de otras tecnologías que compitan con
    CISC y RISC.

    Arquitectura Von Newman.
    En los primeros tiempos de los ordenadores se utilizaba el
    sistema decimal, por lo tanto una electrónica sumamente complicada y propensa
    a fallos. Además un sistema de programación
    cableado o mediante fichas, Von
    Newman propuso dos conceptos básicos que revolucionaron la
    informática.
    a) La utilización del sistema
    binario. Esto simplificaba muchísimo la
    electrónica de las operaciones matemáticas y
    lógicas, a la vez este sistema era más inmune a los
    fallos, esto es la electrónica digital.
    b) Almacenamiento de
    la secuencia de instrucciones de que consta el programa en una
    memoria interna, fácilmente accesible, lo cual reduce el
    tiempo de espera.

    Multiprocesamiento
    Multiprocesadores débilmente acoplados. Consiste en un
    conjunto de sistemas
    relativamente autónomos, donde cada CPU tiene su propia
    memoria principal y sus canales E / S.
    Procesadores de uso específico. Por ejemplo los
    procesadores de E / S, en este caso hay un procesador maestro, y
    los procesadores de uso específico están
    controlados por la CPU maestra.
    Multiprocesadores fuertemente acoplados. Conjunto de procesadores
    que comparten la misma memoria principal.
    Procesadores paralelos. Multiprocesadores fuertemente acoplados
    que pueden cooperar en la ejecución en paralelo de una
    misma tarea.

    Procesador
    Unidad de control
    Controla las operaciones que se deben realizar. Su
    operación obedece a las instrucciones aportadas por el
    programa que se esté ejecutando, recoge las instrucciones
    del programa directamente de la memoria central y administra las
    operaciones de los demás componentes del procesador,
    ordenando y guardando los datos en la
    memoria antes y después de haber sido tratados por la
    unidad aritmética-lógica.
    Realiza dos tareas básicas:
    SECUENCIAMIENTO. Hace que la CPU avance a través de las
    micro operaciones al tiempo debido.
    EJECUCIÓN. Se encarga de que las operaciones sean
    ejecutadas.
    ENTRADAS. Permiten determinar el estado del
    sistema.
    SALIDAS. Permiten controlar el estado del
    sistema.

    Unidad de ejecución
    Es la que ejecuta las instrucciones y realiza los cálculos
    a partir de las señales de control.
    Bus interno.
    Conecta todos los componentes de la CPU al chipset y a la memoria
    principal. La velocidad de este es muy importante, ya que si la
    velocidad del bus es muy poca,
    aumentará el tiempo de espera del procesador, no obstante
    se tenga un procesador muy bueno, claro, en todo debe haber un
    equilibrio,
    por ejemplo el procesador PI de 166 MHz trabaja sobre un bus de
    sistema de 66 MHz y el PIIII trabaja con un bus de 400 MHz,
    aunque trabajaría mejor con un bus de 800, este bus no
    salió por problemas con
    los fabricantes de tarjetas
    madre.

    Memoria caché
    Memoria ultra rápida donde la CPU almacena los datos que
    va a usar o que está usando, haciendo que el tiempo de
    respuesta no se ralentice debido a la menor velocidad de la
    RAM. Esta memoria
    es sumamente rápida, unas 5 o 6 veces más
    rápida que la memoria RAM,
    hablando de equilibrio se
    debe mantener este en todos los aspectos, una caché muy
    pequeña puede hacer que el procesador se tarde mucho en
    encontrar los datos que necesita al buscarlos en la memoria RAM, y
    por el contrario una caché muy grande puede hacer que el
    procesador se tarde más en encontrar los datos que
    busca.
    Pila y cola
    Pila.
    Colección de elementos donde se pueden suprimir o insertar
    nuevos elementos por un lado.
    Cola.
    Colección de elementos donde se pueden insertar elementos
    nuevos por un lado llamado final y eliminarlos por un lado llamado frente.

    3. Memoria

    En un sistema los programas a
    ejecutarse deben ser almacenados en una memoria para que la CPU
    pueda acceder a ellos y realizar operaciones con ellos, una
    computadora sin memoria sería totalmente
    inservible.

    Memoria Principal
    Es la unidad de almacenamiento central, es aquí donde se
    almacenan los datos y los programas que la computadora
    está usando en ese momento, debe de ser suficientemente
    grande para soportar al sistema. La mayoría de esta
    memoria es memoria RAM, pero
    también está la memoria ROM, que
    contiene las instrucciones base de la computadora, es la que
    reconoce los dispositivos que esta posee, así como el
    conjunto de instrucciones para su funcionamiento.

    Memoria RAM
    Es una memoria bastante rápida, de acceso aleatorio, es
    volátil, así que solo almacena los datos
    temporalmente para ser usados mientras se ejecuta el programa en
    curso.

    Memoria ROM
    Memoria de solo lectura, esta
    memoria no se puede borrar, es programada por el proveedor de la
    computadora, esto de solo lectura es
    relativo, ya que si se puede borrar o alterar, pero no es
    volátil como la memoria RAM.
    EPROM. Esta memoria solo se puede borrar con rayos ultravioleta,
    se puede usar para un propósito especial en hardware.
    EEPROM. Es eléctricamente borrable y se puede programar
    mediante una interfase especial conectada a una computadora.
    PROM. Esta puede ser programada una sola vez por el usuario o por
    el fabricante.

    Memoria Secundaria
    En esta memoria se almacenan los datos de manera permanente, para
    ser utilizados después. Estos datos pueden ser manipulados
    por el usuario ya que es aquí donde se guardan todos los
    archivos de
    este, incluyendo los programas que utiliza el sistema para
    funcionar, entre otros programas del usuario.

    Disco duro.
    Unidad fija de gran capacidad, hasta de 120 Giga Bytes, Almacena
    los datos de forma permanente.

    Discos flexibles.
    Unidad extraíble de pequeña capacidad, hasta 1.6
    Mega Bytes dependiendo del sistema de archivos,
    almacena los datos como cargas magnéticas al igual que el
    disco
    duro.
    Puertos
    Definición:
    Un puerto es el lugar donde el CPU
    se comunica con otros dispositivos, existen de varios tipos, hay
    puertos de entrada, de salida y ambos. Además estos pueden
    ser seriales o paralelos.
    Puertos de entrada:
    Estos puertos recogen datos de algún dispositivo externo,
    externo se refiere a estar fuera del CPU, no del gabinete.
    Existen muchos dispositivos
    periféricos que se conectan a un puerto de entrada,
    por ejemplo tenemos al teclado y al
    mouse,
    también están los lápices ópticos,
    los lectores de código se barras, etc.
    Puertos de salida:
    Son todos aquellos por donde el CPU envía datos a otros
    dispositivos, por ejemplo están la salida de video y de
    sonido.
    Puertos de entrada / salida: 
    Estos son una clase de puertos por donde el CPU puede enviar y
    recibir información. Son muy importantes, ya que
    entre estos se encuentran las memorias del
    CPU como son la RAM, ROM, los floppys y discos duros.
    Estos puertos pueden ser usados para controlar dispositivos,
    tales como las impresoras y
    los quemadores externos, por ejemplo.
    Nosotros vamos a hablar acerca de los puertos que se encuentran
    fuera del gabinete, hablaremos de los puertos de teclado,
    mouse,
    impresoras,
    etc. La computadora por si misma no seria capaz de realizar
    operaciones útiles para nosotros si no podemos
    comunicarnos con ella, necesita dispositivos periféricos por donde pueda darnos mensajes
    y nosotros podamos enviarle órdenes. Ahora bien, existen
    infinidad de dispositivos que sirven de extensión a la
    computadora, muchos son para fines muy específicos y no se
    pueden abarcar, entre los dispositivos que son de uso
    común se encuentra la impresora, el
    teclado, el mouse y el monitor.

    Puerto serial:
    El puerto serial es
    aquel que envía y recibe los datos BIT por BIT, entre los
    puertos seriales se puede mencionar el puerto de teclado, o el
    puerto del MODEM.

    Puerto paralelo:
    Este tipo de puerto transmite la información byte por
    byte, o sea que transmite ocho bits al mismo tiempo, de forma
    paralela. un puerto
    paralelo por excelencia pues es el puerto para impresora
    Se puede observar que un puerto de entrada puede ser paralelo o
    serial, lo mismo que un  puerto de entrada o de entrada /
    salida.
    A cada puerto la bios le asigna
    una dirección de memoria para que pueda
    trabajar, dependiendo de que clase de puerto sea se le asigna un
    determinado espacio exclusivo para él. Por medio de estas
    localidades de memoria el sistema puede enviarles o recibir
    información, es una especie de memoria de intercambio para
    la transmisión de dados de un lugar a otro. A esto se le
    llama espacio de localidades de memoria y se realiza dentro del
    primer kilo bite de la memoria principal. Existen otras
    asignaciones de memoria en otras capas superiores de memoria pero
    estas son hechas por el sistema operativo
    y por los demás programas, pero estas asignaciones son
    para fines específicos de los demás programas.
    Los puertos no solo se limitan a recibir la información, o
    enviarla, según sea el caso. El puerto provee la corriente
    eléctrica necesaria para el funcionamiento del
    dispositivo y revisa el estado de
    este.

    4. Efecto de
    tuberías

    Las tuberías son el medio mediante dos procesos se
    comunica entre sí, son unidireccionales, o sea que existe
    un proceso que
    genera la tubería y otro que recibe la información.
    En UNIX la
    tubería se genera mediante una pipa o pipe en inglés:
    Root@darkstar# <proceso 1>
    | <proceso 2>
    Esto genera una tubería del proceso uno al proceso dos,
    pero, ¿qué es esto? Esto significa que la salida
    del proceso uno servirá de entrada al proceso dos.
    Lógica
    Predictiva
    Aquí el procesador puede decidir el curso que
    seguirán los procesos a
    ejecutar, lo cual permite adelantarse al "curso natural de los
    sucesos" y "adelantarse" a las siguientes instrucciones.
    Así es que el procesador predice en cada
    bifurcación si el proceso tomará o no la
    bifurcación y por lo tanto las búsquedas y
    ejecuciones de las instrucciones subsecuentes. Si la
    predicción es correcta la ejecución seguirá
    sin interrupción. En cambio si es incorrecta cualquier
    instrucción ejecutada después de la
    bifurcación será cancelada y el procesador retorna
    al estado en que estaba antes de tomar dicha bifurcación y
    continua con el camino correcto.

    Segmentación
    La segmentación permite al programador
    considerar la memoria como un conjunto de bloques o segmentos,
    pueden ser de tamaño desigual.
    La segmentación simplifica el manejo de
    estructuras de
    datos dinámicas, asignando un segmento del tamaño
    adecuado para la estructura y
    agregando o reduciendo el espacio según se vaya
    requiriendo espacio en la memoria. Permite alterar y recompilar
    los programas de forma independiente sin tener que volver a ligar
    y cargar el conjunto entero de programas. Además como se
    conoce el espacio del segmento se pueden tener restricciones o
    privilegios al acceder a este espacio de memoria.

    Computadoras Matriciales
    Procesadores vectoriales.
    Existe un problema que está fuera del alcance de las
    computadoras convencionales, es cuando se requiere una gran
    cantidad de cálculos que a una computadora convencional le
    tomaría días resolver. Para este fin se
    desarrollaron las supercomputadoras con capacidades especiales
    para resolver problemas tales como simulaciones
    aerodinámicas y espaciales y sistemas
    expertos.

    Supercomputadoras
    Sistema con capacidades procesamiento paralelo y de gran
    potencia. Capaces de realizar cientos de millones de operaciones
    en coma flotante por segundo, diseñadas para la
    multiprogramación y las entradas y saldas intensivas.
    Hay otro tipo de sistemas conocidos como procesadores
    matriciales, que han sido diseñados para realizar
    cálculos vectoriales, están configurados como
    dispositivos
    periféricos para que los usuarios de computadoras
    centrales y minicomputadoras puedan ejecutar partes vectorizadas
    de sus programas.

    Sistemas Multiprocesadores
    La industria
    informática, ha tenido siempre un objetivo
    primordial, repetido a lo largo de toda su cadena (fabricantes de
    semiconductores, fabricantes de sistemas y
    usuarios): la búsqueda de la velocidad. Para alcanzar este
    objetivo se
    han invertido ingentes cantidades de recursos, hasta
    alcanzar los límites
    físicos del silicio.
    Obviamente, la velocidad va ligada a las prestaciones, y por lo
    general, la primera ha sido la principal medida para decidirse
    por un sistema u otro. Sin embargo, por muy evidente que parezca,
    y dados los límites físicos de los semiconductores,
    las prestaciones pueden no estar forzosamente ligadas a la
    velocidad. Hoy es posible construir sistemas, que aún
    teniendo procesadores más "lentos" que otros, ofrezcan
    unas prestaciones significativamente superiores. Son los sistemas
    multiprocesador, que como su denominación indica,
    incorporan varios procesadores para llevar a cabo las mismas
    funciones.
    No es un concepto nuevo,
    ya que los "minicomputadores" construidos por
    compañías como NCR, Sequent y Stratus, ya empleaban
    varios nodos de proceso como alternativas económicas a
    otros productos de otras compañías. Sin embargo,
    aquellos sistemas aún duplicaban recursos caros
    del sistema, como memoria y dispositivos de
    entrada/salida, y por tanto, confinaban a los sistemas
    multiprocesador al mundo de los sistemas de alto nivel.
    Ahora, y en gran medida gracias a los procesadores de
    arquitectura RISC, el soporte multiprocesador es una
    solución integrada y fácilmente disponible en
    estaciones de trabajo de sobremesa, que resuelve, a través
    de hardware VLSI, los complejos problemas de compartición
    de recursos (memoria compartida) de aquellas primeras máquinas.
    Evidentemente, estas mejoras en el hardware, para ser
    funcionales, requieren importantes desarrollos en el software, y
    de hecho, muchos sistemas
    operativos admiten extensiones multiproceso (Match, SCO,
    Solaris, System V, etc.), que proporcionan paralelismo "en bruto"
    (asignando múltiples tareas a múltiples
    procesadores) a nivel del sistema
    operativo.
    Las aplicaciones escritas para facilitar el paralelismo en su
    ejecución, incrementan significativamente las prestaciones
    globales del sistema; esto es lo que se denomina multi-enhebrado
    (multithreading), que implica dividir una sola aplicación
    entre varios procesadores. Sin embargo, los desarrolladores de
    software y programadores de aplicaciones sólo han
    comenzado a explorar las vastas posibilidades de incremento de
    prestaciones que ofrecen los sistemas con capacidades reales de
    proceso en paralelo.
    El multiproceso no es algo difícil de entender: más
    procesadores significan mas potencia computacional. Un conjunto
    de tareas puede ser completado más rápidamente si
    hay varias unidades de proceso ejecutándolas en paralelo.
    Esa es la teoría,
    pero otra historia es la
    práctica, como hacer funcionar el multiproceso, lo que
    requiere unos profundos conocimientos tanto del hardware como del
    software. Es necesario conocer ampliamente como están
    interconectados dichos procesadores, y la forma en que el
    código que se ejecuta en los mismos ha sido escrito para
    escribir aplicaciones y software que aproveche al máximo
    sus prestaciones.
    Para lograrlo, es necesario modificar varias facetas del sistema
    operativo, la
    organización del código de las propias
    aplicaciones, así como los lenguajes de
    programación.
    Es difícil dar una definición exacta de un sistema
    multiprocesador, aunque podemos establecer una
    clasificación de los sistemas de procesadores en:
    SISD o secuencia única de instrucciones y datos (Single
    Instruction, Single Data): una sola secuencia de instrucciones
    opera sobre una sola secuencia de datos (caso típico de
    los ordenadores personales).
    SIMD o secuencia única de instrucciones y múltiple
    de datos (Single Instruction, Multiple Data): una sola secuencia
    de instrucciones opera, simultáneamente, sobre
    múltiples secuencias de datos (array processors).
    MISD o múltiples secuencias de instrucciones y
    única de datos (Multiple Instruction, Single Data):
    múltiples secuencias de instrucciones operan,
    simultáneamente, sobre una sola secuencia de datos (sin
    implementaciones útiles actualmente).
    MIMD o múltiples secuencias de instrucciones y datos
    (Multiple Instruction, Multiple Data): múltiples
    secuencias de instrucciones operan, simultáneamente, sobre
    múltiples secuencias de datos.
    Los sistemas multiprocesadores pueden ser clasificados con mayor
    propiedad como
    sistemas MIMD. Ello implica que son máquinas
    con múltiples y autónomos nodos de proceso, cada
    uno de los cuales opera sobre su propio conjunto de datos. Todos
    los nodos son idénticos en funciones, por lo que cada uno
    puede operar en cualquier tarea o porción de la misma.
    El sistema en que la memoria está conectada a los nodos de
    proceso establece el primer nivel de distinción entre
    diferentes sistemas multiprocesador:
    1.Multiprocesadores de memoria distribuida (distributed-memory
    multiprocessors), también denominados multiprocesadores
    vagamente acoplados (loosely coupled multiprocessors). Se
    caracterizan porque cada procesador sólo puede acceder a
    su propia memoria. Se requiere la
    comunicación entre los nodos de proceso para coordinar
    las operaciones y mover los datos. Los datos pueden ser
    intercambiados, pero no compartidos. Dado que los procesadores no
    comparten un espacio de direcciones común, no hay
    problemas asociados con tener múltiples copias de los
    datos, y por tanto los procesadores no tienen que competir entre
    ellos para obtener sus datos. Ya que cada nodo es un sistema
    completo, por si mismo (incluso sus propios dispositivos de
    entrada/salida si son necesarios), el único
    límite práctico para incrementar las prestaciones
    añadiendo nuevos nodos, esta dictado por la topología empleado para su
    interconexión. De hecho, el esquema de
    interconexión (anillos, matrices,
    cubos, …), tiene un fuerte impacto en las prestaciones de estos
    sistemas. Además de la complejidad de las interconexiones,
    una de las principales desventajas de estos sistemas, como es
    evidente, es la duplicación de recursos caros como
    memoria, dispositivos de entrada/salida, que además
    están desocupados en gran parte del tiempo.
    2.Multiprocesadores de memoria compartida (shared-memory
    multiprocessors), también llamados multiprocesadores
    estrechamente acoplados (tightly coupled multiprocessors). Son
    sistemas con múltiples procesadores que comparten un
    único espacio de direcciones de memoria. Cualquier
    procesador puede acceder a los mismos datos, al igual que puede
    acceder a ellos cualquier dispositivo de entrada/salida. El
    sistema de interconexión más empleado para estos
    casos, es el de bus compartido (shared-bus). Tener muchos
    procesadores en un único bus tiene el inconveniente de
    limitar las prestaciones del sistema a medida que se
    añaden nuevos procesadores. La razón es la
    saturación del bus, es decir, su sobre utilización;
    en un sistema de bus compartido, se deriva por la contienda entre
    los diferentes dispositivos y procesadores para obtener el
    control del bus, para obtener su utilización.
    Es evidente, que los sistemas actuales tienden al uso de
    arquitecturas de memoria compartida, fundamentalmente por razones
    de costes, a pesar del problema de la contienda por el bus. Los
    tres fuentes
    fundamentalmente responsables de dicha disputa son la memoria
    (cada CPU debe usar el bus para acceder a la memoria principal),
    la comunicación (el bus es usado por los "bus
    masters" para la
    comunicación y coordinación), y la latencia de la memoria
    (el subsistema de memoria mantiene al bus durante las
    transferencias de datos, y en función de
    la velocidad a la que la memoria puede responder a las
    peticiones, puede llegar a ser un factor muy
    significativo).

    Los sistemas de memoria caché y el
    multiproceso:
    Los sistemas de memoria multinivel (caché) son un esfuerzo
    para evitar el número de peticiones realizadas por cada
    CPU al bus. Los caches son pequeñas y rápidas (y
    por tanto caras) memorias, que
    hacen de tampón (buffer) entre la CPU y la memoria
    externa, para mantener los datos y/o instrucciones. Se basan en
    el principio de la "localidad", lo que significa que, dada la
    fundamental naturaleza
    secuencial de los programas, los siguientes datos o instrucciones
    requeridas, estarán localizadas inmediatamente a
    continuación de las actuales.
    Los datos contenidos en la memoria caché se organizan en
    bloques denominados líneas. Las líneas son cargadas
    en el caché como copias exactas de los datos situados en
    la memoria externa. Para referenciar a los datos de la memoria
    caché, se emplean marcas (tags) que
    identifican a cada línea. Las marcas o tags
    emplean una porción de la dirección física de los datos,
    para compararla con la dirección física solicitada
    por la CPU. Cuando existe una coincidencia exacta de la
    dirección y de otros cualificadores (estado, privilegio,
    contexto, etc.), se dice que ha tenido lugar un acierto (hit) de
    caché; en caso contrario, tiene lugar un fallo (miss) del
    caché, y en ese caso, los datos han de ser recuperados
    desde la memoria.
    El empleo de
    memoria caché se ha popularizado, como medida para
    acelerar el tiempo de acceso a la memoria principal, incluso en
    los sistemas monoprocesador, evitando así, según se
    incrementa la velocidad de los propios procesadores, aumentar la
    velocidad de dicha memoria, y por tanto encarecer el sistema.
    La forma en que la memoria es actualizada por los cachés
    locales puede tener un gran impacto en las prestaciones de un
    sistema multiprocesador. Básicamente hay dos métodos:
    1.Escritura
    continua (write-through). Requiere que todas las escrituras
    realizadas en el caché actualicen asimismo los datos de la
    memoria principal. De esta forma, la memoria principal siempre
    tiene la última copia de los datos, y por tanto no hay
    nunca ninguna incoherencia con el caché. El inconveniente
    es que se producen frecuentes accesos a memoria, especialmente
    superfluos cuando el software está modificando las mismas
    secciones de datos repetidamente (por ejemplo ejecutando
    bucles).
    2.Copia posterior (copy-back). Es un sistema mucho más
    eficiente, aunque también más complejo de
    implementar. En este caso, la CPU puede modificar la línea
    de caché sin necesidad de actualizar inmediatamente la
    memoria principal. Los datos sólo son copiados a la
    memoria principal cuando la línea de caché va a ser
    reemplazada con una nueva. Ello no solo minimiza el
    tráfico del bus, de vital importancia para el resto de los
    procesadores, sino que también libera al procesador de la
    tarea de escribir en la memoria principal. Sin embargo, este
    sistema, en una arquitectura de bus compartido, implica un nuevo
    nivel de dificultad, denominado coherencia o consistencia
    (coherency o consistency); dado que cada caché puede tener
    una copia de los datos existentes en la memoria principal, el
    desafío es asegurar que los datos permanecen iguales entre
    todos los caches. Hay dos métodos
    para mantener cada línea de caché idéntica a
    las demás:
    a. Escritura radiada (write-broadcast), que requiere que la CPU
    que modifica los datos compartidos actualice los otros caches,
    para lo cual escribe en el bus la dirección de los datos,
    y los datos mismos, de modo que todos los dispositivos
    interesados (otras CPU’s) los capturen. Esto asegura que
    cada línea de caché en el sistema es una copia
    exacta de las demás.
    b. Escritura invalidada (write-invalidate), impide a una CPU
    modificar los datos compartidos en su caché hasta que
    otros caches han invalidado sus copias. En cuanto otros caches
    invalidan sus líneas, el caché modificado tiene la
    única copia; de este modo, se garantiza que un sólo
    caché escribe una línea compartida en un momento
    dado. Tiene la ventaja de conservar el ancho de banda del bus ya
    que los datos modificados no tienen que ser enviados a otros
    caches.
    Ambos sistemas requieren que los caches sean capaces de
    identificar peticiones en el bus que afecten a sus datos, lo que
    se realiza con una técnica conocida como "sondeo del bus"
    (bus snooping). Cada caché compara las direcciones de las
    peticiones en el bus compartido con los datos en su propio cache,
    usando las marcas (tags).
    Este sistema requiere un acceso concurrente a las marcas (tags)
    del caché por parte del bus del sistema y del bus del
    procesador. Sin dicho acceso concurrente, el procesador no
    podría acceder al caché durante las operaciones de
    sondeo del bus (que tienen que tener prioridad de acceso a las
    marcas, para poder mantener la coherencia del caché). El
    resultado son frecuentes atascos del procesador y
    consecuentemente, bajo rendimiento.
    A su vez, hay varios protocolos
    asociados con el sondeo del bus para el movimiento de
    los datos y los mensajes entre los caches:
    1.Intervención indirecta de los datos (indirect data
    intervention). Es el método
    más simple de intercambio de datos entre
    procesadores, aunque también el menos eficiente. La
    1ª CPU hace una petición de datos, que es sondeada
    por la 2ª; tiene lugar un acierto de sondeo (snoop hit) si
    dichos datos están en el caché de la 2ª CPU,
    entonces esta obtiene el control del bus e indica a la 1ª
    que lo reintente más tarde. La 2ª CPU escribe los
    datos de su caché a la memoria, y la 1ª CPU obtiene
    el control del bus de nuevo, reiniciando la petición. Los
    datos son ahora suministrados por la memoria.
    2.Intervención directa de los datos (direct data
    intervention). Los datos son suministrados directamente por la
    2ª CPU a la 1ª. Este mecanismo es aplicable
    fundamentalmente a los sistemas con sistemas de cache de copia
    posterior (copy-back). Aunque pueden evitar muchos ciclos
    comparados con la intervención indirecta, la memoria
    principal permanece inconsistente con el caché, y debe de
    ser actualizada cuando la línea de caché es
    vaciada.
    3.Reflexión a memoria (memory reflection) con
    intervención directa. La memoria captura los datos que han
    sido depositados en el bus, mientras son enviados a la CPU
    solicitante. Si la línea de caché no ha sido
    modificada antes de que tenga lugar la última
    transacción de intervención de datos, no es
    necesario escribir a la memoria, con lo que se conserva el ancho
    de banda. Esta actualización del cache solicitante y la
    memoria puede tener lugar en un mismo y único ciclo de
    reloj.

    5. Lenguajes De
    Programación

    Al desarrollarse las primeras computadoras
    electrónicas se dio la necesidad de programarlas para
    realizar tareas útiles. En un principio se programaban
    conectando cables en distintas posiciones para lograr así
    un resultado, se usaban como calculadoras simples para realizar
    operaciones de una por una. En los años cincuentas se
    empezaron a desarrollar lenguajes para programar las tareas de
    las computadoras. El más primitivo de los lenguajes de
    alto nivel es FORTRAN, COBOL
    también es un veterano. FORTRAN mostró el uso de
    expresiones simbólicas y subrutinas y COBOL el
    concepto de
    descripción de datos.

    Evolución
    Los lenguajes más primitivos eran lenguajes de
    máquina, o sea programar con base a números que la
    máquina entendiera. Esto es muy complicado y propenso a
    errores, pero no había alternativa.
    El primer gran logro fue el lenguaje
    ensamblador,
    junto con él, el nacimiento de herramientas
    automáticas para generar el lenguaje
    máquina. Aunque en este lenguaje sigue siendo
    difícil no equivocarse, ya que se debe trabajar de la
    misma forma en que trabaja el procesador y entender bien su
    funcionamiento.
    El lenguaje
    ensamblador es una abstracción del lenguaje
    máquina, que asocia palabras fáciles de entender
    para el ser humano con números que puede entender la
    maquina. Traduciendo así los códigos del lenguaje
    al lenguaje máquina directamente. Esto se hacía
    mediante unas tablas de códigos, haciendo la
    traducción a mano, pero dada la sencillez de la
    traducción pronto aparecieron los primeros programas
    ensambladores que realizaban dichas traducciones al lenguaje
    maquina, también conocido como código objeto.
    Con el desarrollo en
    los años cincuentas y sesentas de los algoritmos de
    mas alto nivel, junto con el aumento del poder del hardware,
    científicos de otras ramas empezaron a utilizar las
    computadoras, pero no sabían mucho de computación. Entonces se creó el
    primer lenguaje de alto nivel junto con el propio concepto,
    nació el primer compilador FORTRAN. Aumentando la productividad al
    escribir un código sencillo, con la herramienta del
    compilador que traduce el código al lenguaje
    máquina de manera automática. A partir de esto se
    han desarrollado otros lenguajes de alto nivel, entre ellos el
    lenguaje c, y
    cobol.
    Cabe destacar que dadas ciertas características del
    lenguaje c,
    este se considera de nivel medio ya que puede ser usado como
    lenguaje de alto nivel con sus instrucciones en ingles y sus
    librerías, pero tiene características de un
    lenguaje de bajo nivel, ya que fue escrito para diseñar
    sistemas
    operativos.

    Lenguajes de alto nivel.
    Los lenguajes de alto nivel se caracterizan porque utilizan
    palabras y frases más fáciles de entender para las
    personas. Como palabras en ingles o frases abreviadas.
    FORTRAN. FORmula TRANslator, traductor de formula, uno de los
    primeros de alto nivel.
    COBOL. Comon Business Oriented Languaje, lenguaje orientado a
    negocios
    comunes. Uno de los primeros.
    BASIC. Beginners Allpurpose Symbolic Instruction Code,
    código de instrucción simbólica de
    propósito general dirigido a principiantes, Comenzó
    como un lenguaje herramienta para enseñar
    programación a principiantes.
    PASCAL. Se
    diseñó para enseñar programación
    estructurada, se considera que es excelente en este aspecto y aun
    se sigue usando con el mismo fin.
    Lenguaje C.
    Predecesor del lenguaje B, fue desarrollado para escribir
    UNIX, es muy
    poderoso, ya que con este lenguaje se puede hacer casi todo lo
    que la computadora puede realizar, es portable, o sea que puede
    ser compilado en diferentes sistemas
    operativos con muy pocos cambios, a diferencia de otros que
    no pueden ser compilados en diversos sistemas
    operativos. Es sumamente ligero y rápido, un programa
    hecho en vbasic es de 50 a 100 veces más pesado que uno
    echo en c.
    Nunca podrá desligarse el software del hardware, es
    importante tomar en cuenta qué lenguaje se
    utilizará para desarrollar alguna clase de proyecto. Por
    ejemplo, si se requiere alguna aplicación de oficina en modo
    gráfico, que no requiera de mucho desempeño tal vez visual basic o
    visual C++
    para Windows sea
    buena opción, o si se requiere de una aplicación
    para Internet donde
    se tiene un buen ancho de banda pues Java sería
    una buena opción, en cambio, si se quiere un desempeño eficaz, donde este sea crucial,
    pues c es el lenguaje apropiado, o para aplicaciones de internet que requieran
    rapidez en la respuesta, HTML + lenguaje c
    sería eficaz. Aunque sería una perdida de tiempo y
    esfuerzo tener que hacer un programa en c si se cuenta con un
    software potente que soporte bien lenguajes más pesados
    como Fox pro o Python,
    y en cambio sería una tontería querer implementar
    una base de datos en
    basic si se cuenta con pocos recursos.

      

     

     

    Autor:

    Mario Andres cuevas Gutierrez

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter