Anda di halaman 1dari 9

MÉTODOS DE

DIRECCIONAMIENTO DEL
PROCESADOR Y CONJUNTO
DE INSTRUCCIONES

Direccionamiento de memoria

El direccionamiento de la memoria puede considerarse desde dos puntos de vista: Físico


y lógico. El primero se refiere a los medios electrónicos utilizados en el ordenador para
acceder a las diversas posiciones de memoria. El segundo, a la forma en que se expresan
y guardan las direcciones.

El sistema de numeración utilizado por los informáticos para representar las direcciones
de memoria en el texto escrito no suele ser la decimal (como parecería razonable), sino
el hexadecimal

La razón es que los números hexadecimales guardan cierta concordancia con las
potencias de 2. Por ejemplo, un bus de direcciones de 8 bits puede acceder a 256
posiciones (en hexadecimal es el rango 00-FFh). En caso de direcciones de 16 bits, se
puede acceder 65.536 posiciones (es el rango 0000-FFFFh). El bus de direcciones del
PC XT, que tiene 20 bits, las posibilidades son 1.048.576 (es el rango 00000-FFFFFh).

Como veremos a continuación, puede utilizarse una doble notación: Direcciones


absolutas, indicadas por un hexadecimal de cinco dígitos, en el rango 00000-FFFFFh, o
en direcciones segmentadas, que utiliza dos grupos de cuatro dígitos hexadecimales.
DIRECCIONAMIENTO DE MEMORIA EN MODO
PROTEGIDO.
El direccionamiento de memoria en modo protegido (a partir del 80286 y posteriores)
permite acceder a datos y programas localizados por encima y dentro del primer
megabyte de memoria. Para direccionar esta sección extendida el sistema de memoria se
requiere un cambio en el esquema de direccionamiento de segmento más
desplazamiento usado en el modo real. Cuando los datos y programa se direccionan la
memoria extendida, se sigue utilizando la dirección de desplazamiento para acceder a la
información en el segmento de memoria. Una diferencia consiste en la dirección del
segmento ya que no existe en modo protegido. En lugar de una dirección de segmento,
el registro de segmento contiene un SELECTOR que elige un descriptor de una tabla.
El descriptor especifica la ubicación del segmento en memoria, su longitud y sus
derechos de acceso. Dado que el registro de segmento y la dirección de
desplazamiento aún acceden a la memoria, las instrucciones del modo protegido son
idénticas a las de modo real. De hecho, la mayoría de los programas escritos para
funcionar en modo real funcionarán sin cambios en el modo protegido.
La diferencia entre los dos modos es la forma en que el microprocesador interpreta el
registro de segmento para acceder al segmento de memoria. Otra diferencia, en los
80386 y posteriores, es que en modo protegido la dirección de desplazamiento puede
ser un número de 32 bits en vez de utilizar uno de 16 bits como en modo real. Es por
esto que puede direccionar hasta 4 Gb de longitud.
El SELECTOR, ubicado en el registro del segmento, elige uno de 8192 descriptores en
una de las dos tablas de descriptores. El DESCRIPTOR especifica la ubicación, la
longitud y los derechos de acceso del segmento de memoria, aunque no directamente
como en el modo real. Por ejemplo, en el modo real, si CS=0008H, el segmento de
código inicia en la localidad 00080H. En modo protegido, este número de segmento
puede direccionar cualquier localidad de memoria en todo el sistema para el segmento
de código.
Existen dos tablas de descriptores utilizadas con los registros de segmentos: una
contiene descriptores globales y otra, descriptores locales. Los descriptores globales
contienen las definiciones de los segmentos que se aplican a todos los programas,
mientras que los descriptores locales son generalmente exclusivos de una aplicación.
Podríamos llamar descriptor de sistema a un descriptor global, y descriptor de
aplicación a uno local. Cada tabla de descriptores contendrá 8192 entradas, por lo
tanto una aplicación podría disponer en cualquier momento de 16.384 descriptores.
Puesto que un descriptor describe un segmento de memoria, esto permite que puedan
ser descriptos hasta 16.384 segmentos de una aplicación.

DIRECCIONAMIENTO DE MEMORIA EN TIEMPO


REAL.
El modo real (también llamado modo de dirección real en los manuales de Intel) es un
modo de operación del 80286 y posteriores CPUs compatibles de la arquitectura x86. El
modo real está caracterizado por 20 bits de espacio de direcciones segmentado
(significando que solamente se puede direccionar 1 MB de memoria), acceso directo del
software a las rutinas del BIOS y el hardware periférico, y no tiene conceptos de
protección de memoria o multitarea a nivel de hardware. Todos los CPUs x86 de las
series del 80286 y posteriores empiezan en modo real al encenderse el computador; los
CPUs 80186 y anteriores tenían solo un modo operacional, que era equivalente al modo
real en chips posteriores.
La arquitectura 286 introdujo el modo protegido, permitiendo, entre otras cosas, la
protección de la memoria a nivel de hardware. Sin embargo, usar estas nuevas
características requirió instrucciones de software adicionales no necesarias previamente.
Puesto que una especificación de diseño primaria de los microprocesadores x86 es que
sean completamente compatibles hacia atrás con el software escrito para todos los chips
x86 antes de ellos, el chip 286 fue hecho para iniciarse en ' modo real ' - es decir, en un
modo que tenía apagadas las nuevas características de protección de memoria, de modo
que pudieran correr sistemas operativos escritos para microprocesadores más viejos. Al
día de hoy, incluso los más recientes CPUs x86 se inician en modo real al encenderse, y
pueden correr el software escrito para cualquier chip anterior.

Bajo el modo real no existe ningún mecanismo para tener varias tareas ejecutándose
concurrentemente, aunque si se pueden tener varios programas cargados en memoria al
mismo tiempo, pero inactivos.
En el modo real se puede lograr un pequeño grado de multitarea si interceptamos
algunos de los vectores de interrupción que se ejecutan periódicamente, como el
temporizador, e insertamos una rutina de usuario bajo esa interrupción. Como puede
verse, este tipo de multitarea no tiene ni punto de comparación con la que ofrece el
modo protegido del 80386.

En el modo real no se puede controlar que un programa, por ejemplo, no pueda acceder
a una zona específica de memoria. Un programa en modo real puede acceder a cualquier
dirección de memoria direccionable por el procesador, con lo que un programa maligno
puede modificar estructuras del sistema operativo o redireccionar vectores de
interrupción y tener un control total sobre el sistema.

Debido a esta escasa protección que se ofrece en el modo real, aparecen los temibles
virus informáticos y otros programas malignos. Tras conocer el modo protegido y haber
trabajado con él, me atrevo a afirmar que es imposible realizar un virus para un sistema
operativo que trabaje en modo protegido, siempre y cuando ese sistema operativo no
deje ninguna puerta de entrada libre al usuario para controlar el sistema.

Todas las interrupciones hardware y software son controladas por el procesador en el


modo real leyendo de una tabla de interrupciones que se encuentran en las primeras
posiciones de memoria física. Cuando se produce una interrupción, se lee de la tabla
anterior la dirección donde encontrar su rutina de tratamiento. Como cualquier
programa pude acceder a cualquier dirección de memoria, pude manipular este área de
memoria e interceptar diversos vectores de interrupción y apuntarlas a rutinas propias,
con lo que cualquier programa puede controlar el sistema según desee.

Instrucciones Del Procesador


Cada procesador tiene un conjunto de instrucciones que puede realizar. Por medio de
éstas se especifica el programa que queremos que ejecute el procesador. Este conjunto
de instrucciones se le conoce como juego de instrucciones.

Las mayoría de las instrucciones están formadas por dos partes: la operación y los
operandos. La operación es la acción que debe realizarse. Los operandos son los
elementos sobre los que se realizará ésta acción. Por lo tanto, dependiendo de su tipo,
las instrucciones pueden tener cero uno o más operandos. Sin embargo en todas las
instrucciones existe la operación.

Cada operación está codificada mediante una secuencia binaria única llamada código de
la operación. Como los operandos son también secuencias binarias, cada instrucción se
codifica mediante una secuencia de bytes: uno o más para el código de la operación y
cero, uno o más para los operandos. Un programa donde sus instrucciones están
codificadas como secuencias binarias está en lenguajemáquina.

Para ilustrar lo anterior, supongamos un microprocesador básico en el que los códigos


de operación sean de un byte y los operandos sean también de un byte. Supongamos
también que el juego de instrucciones que tiene nuestro procesador básico contiene
entre otras, las instrucciones mostradas en la tabla.

TÉCNICAS DE
SINCRONIZACIÓN DE DATOS
TEMPORIZACIÓN DEL SISTEMA
Reloj del sistema

El reloj de una computadora se utiliza para dos funciones principales:


1. Para sincronizar las diversas operaciones que realizan los diferentes subcomponentes
del sistema informático.
2. Para saber la hora.
El reloj físicamente es un circuito integrado que emite una cantidad de pulsos por
segundo, de manera constante. Al número de pulsos que emite el reloj cada segundo se
llama Frecuencia del Reloj.

La frecuencia del reloj se mide en Ciclos por Segundo, también llamados Hertzios,
siendo cada ciclo un pulso del reloj. Como la frecuencia del reloj es de varios millones
de pulsos por segundo se expresa habitualmente en Megaherzios.

El reloj marca la velocidad de proceso de la computadora generando una señal periódica


que es utilizada por todos los componentes del sistema informático para sincronizar y
coordinar las actividades operativas, evitando el que un componente maneje unos datos
incorrectamente o que la velocidad de transmisión de datos entre dos componentes sea
distinta.

Cuanto mayor sea la frecuencia del reloj mayor será la velocidad de proceso de la
computadora y podrá realizar mayor cantidad de instrucciones elementales en un
segundo.

El rango de frecuencia de los microprocesadores oscila entre los 4,77 megaherzios del
primer PC diseñado por IBM y los 200 megaherzios de las actuales computadoras
basadas en los chips Intel Pentium.

En máquinas de arquitectura Von Neumann la mayoría de las operaciones son


serializadas, esto significa que la computadora ejecuta los comandos en un orden
preestablecido. Para asegurarnos de que todas las operaciones ocurren justo en el tiempo
adecuado, las máquinas 80x86 utilizan una señal alternante llamada el reloj del sistema.

En su forma básica, el reloj del sistema maneja toda la sincronización de un sistema de


cómputo. El reloj del sistema es una señal eléctrica en el bus de control que alterna entre
los valores de cero y uno a una tasa dada. La frecuencia en la cual el reloj del sistema
alterna entre cero y uno es llamada frecuencia del reloj de sistema. El timepo que toma
para cambiar de cero a uno y luego volver a cero se le llama periodo de reloj, también
llamado ciclo de reloj. La frecuencia del reloj es simplemente el número de ciclos de
reloj que ocurren en un segundo, en sistemas actuales, éste valor excede los 200 ciclos
por segundo, siendo ya común frecuencias del orden de los 366 Mhz. (MegaHertz, que
equivale a un millón de ciclos por segundo). Observe que el periodo de reloj es el valor
inverso de la frecuencia, por lo tanto, para un sistema de 200 Mhz el periodo es igual a
5 nanosegundos. Para asegurar la sincronización, el CPU inicia una operación ya sea en
el flanco ascendente (cuando la señal cambia de cero a uno) ó en el descendente
(cuando la señal cambia de uno a cero). Como todas las operaciones de un CPU están
sincronizadas en torno a su reloj, un CPU no puede ejecutar operaciones más rápido que
la velocidad del reloj.

Acceso a memoria y el reloj del sistema


El acceso a memoria es probablemente la actividad más común de un CPU, se trata en
definitiva de una operación sincronizada al reloj del sistema, esto es, la lectura o
escritura no puede ser más rápida que un ciclo de reloj, de hecho, en muchos sistemas
80x86 el acceso a memoria toma varios ciclos de reloj. El tiempo de acceso a memoria
es el número de ciclos de reloj que el sistema necesita para acceder a una ubicación de
memoria, este es un valor importante ya que a mayor número de ciclos menor
desempeño. El tiempo de acceso a memoria es la cantidad de tiempo que transcurre
desde que se solicita una operación (sea de lectura ó escritura) y el tiempo en que la
memoria completa dicha operación. En procesadores de 5 Mhz (80x88, 80x86) el
tiempo de acceso a memoria es de aproximadamente 800 ns. (nanosegundos), en
cambio, un procesador de 50 Mhz (80x486) el tiempo es de aproximadamente 20 ns. El
tiempo de acceso a memoria en el procesador 80x486 es casi 40 veces más rápido que
en el caso del procesador 80x86 porque éste último consume más ciclos de reloj para el
acceso a memoria además del incremento en la velocidad de reloj.

Los dispositivos de memoria presentan varias características pero las principales son su
capacidad de almacenamiento y el tiempo de acceso. Una memoria de acceso aleatorio
(RAM) típica tiene una capacidad de 16 ó más megabytes y un tiempo de acceso de 70
nanosegundos ó menos, con estos datos seguramente se estará preguntando cómo es
posible que éstas memorias relativamente lentas trabajan en procesadores mucho más
rápidos. La respuesta son los estados de espera. Un estado de espera es una señal que se
coloca en el bus de control por parte del dispositivo de memoria para detener
temporalmente el trabajo realizado por el CPU, como consecuencia utilizar uno o más
estados de espera tiene el mismo efecto que reducir proporcionalmente la velocidad de
reloj, obviamente introducir estados de espera no es una opción deseable por la
reducción en el desempeño del sistema. Los diseñadores de hardware han encontrado un
mecanismo que tiene un efecto similar a introducir estados de espera pero sin afectar
notablemente el rendimiento de la computadora, a este mecanismo se le llama memoria
cache ( se pronuncia "cash").

Una memoria cache es un dispositivo sin estados de espera que se encuentra construida
como parte integral del CPU, físicamente se encuentra entre el CPU y los módulos de
memoria RAM, su función es evitar la generación de estados de espera por parte de los
módulos de memoria RAM y así aprovechar al máximo el rendimiento esperado por el
CPU, sin embargo la memoria cache no es un dispositivo perfecto pues hay ocasiones
en que no es posible colocar en memoria cache los datos que requiere el programa para
ejecutarse forzando al sistema a leer dichos datos directamente de los módulos de
memoria RAM y por lo tanto generando estados de espera, cuando ocurre éste
fenómeno se le llama pérdida cache (cache miss), cuando tienen éxito las operaciones
en memoria cache se le llama éxito cache (cache hit). Por lo general el radio entre éxito
y pérdida en memoria cache está entre 85 y 90%. Este rendimiento disminuye al
aumentar la cantidad de memoria cache y por esta razón la memoria cache es
relativamente pequeña, sus valores de almacenamiento oscilan entre 256 y 512 Kb.

ESTADOS DE ESPERA
Cuando se conectan tarjetas al bus de la PC, un problema común es igualar la
velocidad de los ciclos del bus con la de las tarjetas. Es común que una tarjeta
sea más lenta que el bus. Así, el bus de la PC esta diseñado para resolver este
problema. La señal READY del bus se puede usar para extender la longitud del
ciclo del bus para igualar una tarjeta lenta o parar el bus del sistema hasta que
se sincronice con el ciclo de la tarjeta.

Como se mencionó anteriormente, los ciclos del bus del 8088 normalmente son
de cuatro pulsos y se describen por T1 hasta T4. En algunos ciclos el hardware
de la PC, automáticamente inserta un pulso ocioso extra llamado TW. La señal
READY se usa para insertar estados nuevos o adicionales de espera. Debido a
que los diferentes ciclos del bus requieren distintos tiempos, la señal READY
se debe controlar de manera diferente.

Generación de estados de espera en ciclos de bus de


memoria

El hardware de la PC no inserta estados de espera en los ciclos de lectura o


escritura a memoria, sino que esto lo hace la tarjeta usando la señal READY.
La figura 22 ilustra las señales de tiempo necesarias para generar un estado de
espera para un ciclo de lectura o escritura a memoria.

Los circuitos de la tarjeta madre muestran la señal READY en el flanco de


subida del tiempo T2. Esta señal debe ser valida (activo alto) 75 nanosegundos
antes del flanco de subida de T2 para que no se genere un estado de espera.
Si se requiere un estado de espera, la señal READY debe ser valida (activo
bajo) 60 nanosegundos antes del flanco de subida de T2. Si la señal READY se
mantiene en bajo hasta el flanco de subida del siguiente pulso, se inserta un
estado de espera adicional.

Para las operaciones de lectura y escritura de E/S también se usa la señal


READY, y los tiempos son los mismos que para acceso a memoria, excepto
que la señal READY se muestrea en T3.

INTERRUPCIONES HARDWARE
Durante la ejecución de un programa, el procesador debe interactuar con una serie de
dispositivos de entrada/salida: El teclado, las unidades de disco, los puertos serie y
paralelo, la tarjeta de red, etc. Normalmente, la velocidad de procesamiento de estos
dispositivos es inferior a la del procesador. Así que el procesador tendrá que esperar un
tiempo para que el dispositivo se desocupe antes de hacerle una nueva solicitud. ¿Cómo
sabe el procesador que el dispositivo ya está listo para la nueva petición?. También,
algunos dispositivos requieren la atención del procesador en forma asíncrona, es decir,
no en forma periódica. ¿Cómo sabe el procesador que el dispositivo requiere que se le
atienda? Hay dos formas en que el procesador puede saber si el dispositivo está listo o si
el dispositivo requiere atención: La primera forma es que el procesador esté
periódicamente sondeando al dispositivo en cuestión. A fin de asegurarse de poder
atender rápidamente a un dispositivo cuando se lo solicita, la frecuencia con el que
procesador sondea a los dispositivos debe ser muy alta. Lo anterior produce que el
procesador ocupa mucho tiempo interrogando a los dispositivos y en la mayoría de las
veces éstos no están listos o requieren de la atención del procesador. La segunda forma,
una más eficiente, es hacer que sea el dispositivo el que le avise al procesador cuando
esté listo o requiera atención, interrumpiendo al procesador. El procesador dejará de
hacer lo que está haciendo para atender al dispositivo para posteriormente regresar a la
tarea que estaba ejecutando antes de ser interrumpido. Los dispositivos utilizan una de
las líneas del procesador para interrumpirlo. A este tipo de interrupción se le conoce
como Interrupción por Hardware. Para atender a un dispositivo el procesador ejecuta
una rutina especial llamada Rutina de Servicio a Interrupciones. Las rutinas de
servicio a interrupciones, por lo general, se cargan a la memoria RAM como parte del
proceso de iniciación de la computadora.
Las interrupciones de cada dispositivo están priorizadas de tal manera que si dos
dispositivos desean interrumpir al procesador al mismo tiempo, sólo la de mayor
prioridad interrumpirá al procesador.

INTERRUPCIONES SOFTWARE
Un programa escrito en un lenguaje de alto nivel utiliza funciones de la biblioteca
estándar, provistas por el compilador empleado, para realizar la mayoría de las tareas
relacionadas con el manejo de los dispositivos de entrada y salida, y la gestión de los
archivos y memoria. La mayoría de dichas funciones hacen su trabajo mediante
llamadas al sistema. Una llamada al sistema invoca a una rutina provista por el sistema
operativo para realizar una tarea. En algunas ocasiones la función de biblioteca accesa
directamente al hardware para realizar su tarea si es que no existe una rutina del sistema
operativo o el desempeño de ésta no es adecuado.

Si el programa escrito en un lenguaje de alto nivel necesita realizar una tarea para la
cual no existe una función de biblioteca o si el desempeño de ésta no es adecuado,
entonces puede ejecutar una llamada al sistema operativo para realizar dicha tarea. De
igual manera, si el sistema operativo no provee de una rutina para ejecutar esa tarea o si
el desempeño de ésta no es adecuado, entonces el programa puede accesar directamente
al hardware.

Un programa escrito en ensamblador, normalmente no tiene a su disposición una


biblioteca de funciones estándar y por lo tanto para realizar las tareas relacionadas con
el manejo de los dispositivos de entrada y salida, y la gestión de los archivos y memoria
deberá hacerlo mediante llamadas al sistema. También puede accesar directamente al
hardware para realizar su tarea si es que no existe una rutina del sistema operativo o el
desempeño de ésta no es adecuado.

En la figura 8-1 se muestra como un programa puede acceder a las funciones de


biblioteca, rutinas del sistema operativo y hardware para realizar una tarea que implica
el manejo del hardware. Las flechas representan las llamadas a funciones de la
biblioteca, llamadas al sistema o acceso directo al hardware.

Anda mungkin juga menyukai