Professional Documents
Culture Documents
Docentes:
Prof. Oscar Montes
Prof. Obadiah Oghoerore Alegbe
Prof. Roberto Garca
Tema:
Apuntes de la asignatura
Ao:
2011
Procesos
En el modelo de procesos todo software ejecutable de la computadora, inclusive el sistema operativo, se organiza en varios procesos secuenciales que de aqu en adelante llamaremos PROCESOS. Un proceso es en general parte de un programa con determinadas caractersticas: incluye el
estado propio del proceso, adems del estado del registro de la CPU y tiene la intencin de ser
ejecutado por el SO (est cargado en RAM). Las antiguas CPUs slo podan ejecutar un proceso
a la vez, pero como lo ejecutaban muy rpidamente, el operador poda tener la sensacin de que
haba muchos procesos ejecutndose a la vez. En este momento existen CPUs capaces de ejecutar
dos, tres y hasta cuatro procesos juntos, dependiendo de su estructura interna.
La diferencia entre un proceso y un programa es sutil pero crucial. Podramos utilizar la siguiente
analoga para aclarar este punto. Consideremos un cientfico de la computacin con una mente
culinaria, que est cocinando el pastel de cumpleaos de su hija. l tiene una receta para un pastel
de cumpleaos y una cocina bien abastecida con los ingredientes necesarios. En esta analoga la
receta es el programa (un algoritmo expresado en cierta notacin adecuada), el cientfico es el
procesador (CPU) y los ingredientes necesarios para el pastel son los datos de entrada. El proceso
es la actividad en la que el cocinero lee la receta, busca los ingredientes, y cocina el pastel (listo,
bloqueado, en ejecucin).
Imaginemos ahora que un hijo del cientfico entra corriendo, llorando y diciendo que lo pic una
abeja. El cientfico registra el punto de la receta donde se qued (el estado del proceso activo se
resguarda, se memoriza), busca un libro de primeros auxilios, comienza a leer las instrucciones
de ste y busca los elementos en el botiqun. El cientfico atiende la picadura de su hijo y luego
de que ste se calma, regresa al punto de elaboracin del pastel.
El proceso entonces se puede entender como una actividad especial de cierto tipo, en donde hay
un programa, entradas y salidas de datos y tiene un estado determinado.
Estados de un proceso
Aunque cada proceso se debe considerar como una entidad independiente (contador de programa,
estado interno, uso de memoria, etc.) es frecuente que los procesos deban interactuar unos con
otros. Un proceso podra generar cierta salida que fuera la entrada necesaria para otro proceso.
Desde este modelo, se utilizan tres estados fundamentales:
a) Listo: el programa (o parte de l) se carga en la memoria de trabajo (RAM). La caracterstica de estar cargado en RAM, es decir, la intencin cierta del SO de ejecutar esas instrucciones, convierten al programa en un proceso.
b) Ejecucin: en este estado la CPU tiene el control de las operaciones de ese proceso y las
va cumpliendo en un orden determinado. Este estado es propio del ncleo de la CPU, y
cada uno de ellos (si es que tuviera varios) puede tener a un proceso en este estado en un
tiempo muy breve que tomaremos como menor al tiempo de instruccin.
c) Bloqueado: cuando el proceso requiere de datos que se deban buscar en perifricos de entrada lentos (cuyo acceso involucre una cantidad razonablemente grande de tiempos de
instruccin) el SO pone al proceso en este estado de espera y conmuta a la CPU a otro
proceso.
Planificacin de procesos
Cuando hay ms de un proceso ejecutable, el SO debe decidir el orden de ejecucin. Esta parte
del SO se denomina PLANIFICADOR, y la lgica para esas decisiones estn implcitas en el
algoritmo de planificacin.
En los tiempos pasados, los sistemas de procesamiento eran por lotes (batch), porque eran grupos
o lotes de tarjetas perforadas que se deban procesar desde el comienzo hasta el fin. Cuando se
pens en multiprocesamiento, el planificador ya no era un operador, sino que deba ser algo que
tomara decisiones ms rpidamente. El planificador debe poder atender a ciertas caractersticas
para su operacin:
a) Equidad: garantizar que cada proceso obtiene un tiempo de CPU.
b) Eficacia: mantener a la CPU ocupada el 100 % del tiempo.
c) Tiempo de respuesta: minimizar el plazo de ejecucin entre varios procesos.
d) Tiempo de regreso: minimizar el tiempo que deben esperar otros procesos para entrar en
ejecucin.
e) Rendimiento: maximizar el nmero de tareas procesadas en la unidad de tiempo.
Un poco de reflexin muestra que algunas de estas condiciones se excluyen mutuamente. Se puede demostrar (Kleinrock 1975) que cualquier algoritmo de planificacin que favorezca algn tipo
de tarea afecta a otra. Por ejemplo: para darle ms tiempo de CPU a un usuario (proceso), hay
que darle menos a otro, ya que el tiempo de CPU es finito.
Una primera aproximacin a un algoritmo de planificacin ser la eleccin entre dos modos de
asignacin de la CPU: El modo apropiativo y el modo no apropiativo, vistos desde el SO, es
decir: si el SO va a poder conmutar la CPU en cualquier instante de la ejecucin de un proceso
(apropiativa) o el proceso se va a ejecutar de principio a fin sin ceder el uso de la CPU (no apropiativa).
Algunos de los tipos ms comunes de planificacin son:
a) FCFS: (First Come First Served) es una cola de espera tradicional en la que los procesos
se van ejecutando en el orden de llegada. Esta cola se puede considerar aleatoria (al azar)
y por lo tanto no implica planificacin alguna. Es en general el peor algoritmo de planificacin para cualquier recurso, aunque tambin el ms fcil de implementar.
b) Round Robin: este mtodo es apropiativo y bsicamente es el otorgamiento de la CPU
durante tiempos definidos denominados Quantum.
c) Por Prioridades: la hiptesis implcita en la planificacin anterior es que todos los procesos tienen igual importancia. Esto no es cierto en la realidad, ya que el proceso de actualizacin del reloj no puede esperar. Un defecto propio de la ejecucin por prioridades es
que procesos de muy baja prioridad lleguen a no ejecutarse jams; este jams es literal, ya
3
que en una universidad de EEUU se encontr por casualidad un proceso que llevaba meses esperando la ejecucin. Esta deficiencia de este tipo de planificaciones se soluciona
habitualmente incorporando la variable tiempo de espera haciendo que la prioridad del
proceso se incremente automticamente con el transcurso del tiempo.
d) Colas Mltiples: trata de solucionar algunos problemas de la planificacin por prioridades, teniendo en cuenta una caracterstica de los procesos que lleva a considerar el tiempo
necesario de ejecucin dado por el uso de la CPU en operaciones matemticas o la preponderancia del trabajo con datos externos. Estas clasificaciones se conocen con el nombre de limitado por CPU y limitado por E/S.
e) SJF (Shortest Job First): esta planificacin tiende a mejorar el tiempo de respuesta, poniendo en ejecucin primero los trabajos ms cortos y luego los ms largos; el tiempo de
regreso tambin se acorta, aunque el tiempo total es el mismo. Una desventaja importante
de este tipo de planificaciones es que el SO debera conocer con anticipacin cunto
tiempo de CPU requiere cada proceso, y el sistema no cuenta con capacidad de adivinacin.
Interrupciones
En una interrupcin se debe guardar el estado de la CPU (los registros ms importantes) y luego
comenzar la ejecucin del proceso siguiente.
El Bloque de control del proceso o en ingls PCB (Process Control Block) es un registro especial
donde el sistema operativo agrupa toda la informacin que necesita conocer respecto a un proceso particular. Cada vez que se crea un proceso el sistema operativo crea el PCB correspondiente
para que sirva como descripcin en tiempo de ejecucin durante toda la vida del proceso.
Cuando el proceso termina, su PCB es borrado y el registro puede ser utilizado para otros procesos. Un proceso resulta conocido para el sistema operativo y por tanto elegible para competir por
los recursos del sistema slo cuando existe un PCB activo asociado a l. El bloque de control de
proceso es una estructura de datos con campos para registrar los diferentes aspectos de la ejecucin del proceso y de la utilizacin de recursos. La informacin almacenada en un PCB incluye
tpicamente algunos o todos los campos siguientes:
Permisos asignados.
En la figura anterior se esquematiza el modelo de Harvard, siendo cada uno de los bloques un
perifrico y uno de ellos la CPU.
El bus de datos puede incluir entre 32 y cientos de lneas, cuyo nmero se conoce como anchura
del bus de datos. Puesto que cada lnea solo puede transportar un bit en cada instante, el nmero
de lneas determina cuntos bits se pueden transferir al mismo tiempo. La anchura del bus es un
factor clave a la hora de determinar las prestaciones del conjunto. Por ejemplo, si el bus de datos
tiene una anchura de 8 bits (1 byte) y las instrucciones son de 16 bits, entonces el procesador debe acceder al mdulo de memoria dos veces por cada ciclo de instruccin y si busca un dato numrico tipo doble precisin, deber acceder 4 veces.
Las lneas de direccin se utilizan para designar el emisor y el receptor de la comunicacin y/o la
ubicacin del dato o instruccin buscado (RAM). Claramente, la anchura del bus de direcciones
determina la mxima capacidad de memoria direccionable en forma directa del sistema. En algunos casos de esta estructura se posiciona el programa en la parte baja de la memoria y los datos
en la parte alta de la memoria, como la manera de hacer sencillo el cambio entre instrucciones y
datos, cambiando el bit ms significativo (MSB).
Las lneas de control se utilizan como procedimientos pre y post comunicacionales (Handshaking).
Las seales de control transmiten tanto rdenes como informacin entre los mdulos del sistema.
Entre las ms comunes estn las seales de: Memory Write; Memory Read; I/O Read; I/O Write;
diferentes seales tipo ACK (Aknowledge); Bus Request; Bus Grant; Interrupt Req; Interrupt
ACK; etc.
Temporizacin de los buses
Las comunicaciones se pueden clasificar en Sncronas o Sincrnicas y Asincrnicas. Las primeras estn relacionadas directamente a un reloj (clock). Las comunicaciones en los buses son sincrnicas, aunque la frecuencia del reloj que las rige es diferente del reloj que comanda la CPU.
En la actualidad se pueden encontrar buses de 400 MHz y 800 MHz, cuando el de la CPU est
cerca de los 2000 MHz (2 GHz).
La figura siguiente representa en forma simplificada un ciclo de lectura/escritura de la RAM.
En el grfico aparecen los datos del reloj, el bus de direcciones, el bus de control y el de datos.
Generalmente se utilizan los flancos de bajada de la seal para efectuar la operacin indicada por
el nombre de la seal en cuestin.
La comunicacin comienza en el bus de control con las lneas de estado y despus de un breve
lapso aparecen la direccin del perifrico (en un gran porcentaje de casos, las comunicaciones
involucran como emisor o receptor a la CPU). Los perifricos leen esta direccin en el flanco de
bajada de la seal validacin de direccin y tienen un tiempo para compararla con su propia
direccin. Esta comparacin resulta vlida slo para el perifrico que debe intercambiar con la
CPU, en este caso, suponemos que es la RAM. Lo que sigue es la activacin de la RAM en el
modo de lectura (desde el punto de vista de la CPU lectura implica requerir de la RAM un dato
especfico), a partir de all la RAM coloca el dato en el bus de datos lnea de datos y con el
flanco descendente de la seal de lectura, la RAM le avisa a la CPU que puede copiar ese dato a
sus registros. En la operacin de escritura es la CPU la que avisa a la RAM a travs de la seal
escritura que el dato que est en el bus es el que se debe guardar.
Las seales de control involucradas en esta comunicacin son las de: lneas de estado, validacin
de la direccin, lectura y escritura.
Una vez completado este ciclo que, segn la figura, ocupara tres ciclos del reloj (7,5 nseg), los
buses de datos y direcciones se debern ocupar de otras comunicaciones. Dado que el tiempo es
no-humano, un humano supondra que el bus lleva una cantidad de datos muy grande; este proceso se denomina multiplexin, en este caso, de tiempo.
Debido a la complejidad cada vez mayor del uso del bus de datos, se incorpor al sistema un
RBITRO DE BUS.
Esta figura representa el mtodo antiguo de arbitraje a travs de un terminador de bus, en donde
cada perifrico o bloque solicitaba el uso del bus a travs de un contacto elctrico. La ubicacin
fsica de los bloques determinaba su prioridad, lograda por el tipo de conexin, denominado
Daisy Chain.
En la actualidad, el rbitro del bus es un perifrico ms al que acceden cada uno de los bloques
solicitando el bus de datos con una lnea (control), para identificarse pueden utilizar una lnea
cada perifrico o el bus de direcciones. El rbitro compara esa direccin para otorgarle un nivel
de prioridad, y sta a su vez, indicar cundo puede usar el bus de datos para la comunicacin
(ver esquema de Modelo Harvard).
Como estudio de caso, daremos algunas caractersticas del bus tipo PCI (Peripheral Component
Interconnect), patentado inicialmente por la empresa Intel en 1990 para su procesador Pentium,
posteriormente la patente fue cedida por Intel al dominio pblico, lo que motiv a muchos fabricantes de hardware a incorporar esas especificaciones a sus componentes. Como resulta de aplicacin electrnica sencilla, y por lo tanto es barato, ha ganado popularidad rpidamente, suplantando a los anteriores (ISA, EISA, Local bus, etc.).
El Standard PCI es un bus de 64 bits de datos, con una frecuencia de reloj de 66 MHz y transferencias mltiples de datos (hasta 528 MB/seg o 4,224 Gb/seg.). Esto es decir que el rbitro (tambin centralizado) puede otorgar el bus a un perifrico para que ste transmita un tren de datos
seguidos, dependiendo del trfico de datos en cada instante. Este tipo de transferencia hace a la
eficiencia y rapidez de transmisin, caractersticas necesarias para adaptarse mejor a las frecuencias de la CPU.
A este bus se le pueden acoplar adaptadores para conectar perifricos ms lentos o ms rpidos
que las velocidades normalizadas.
El arbitraje es centralizado y sincrnico, utiliza un esquema maestro-esclavo (master-slave) y
prioridades para la cesin del bus. Cada dispositivo del bus PCI se conecta al rbitro a travs de
una lnea de peticin identificada con un nmero que por simplificacin supondremos relacionado al orden de prioridad de ese dispositivo; el rbitro contesta con una lnea tambin numerada
para que el dispositivo reconozca su posibilidad de uso del bus.
Ciclos de instruccin
Cuando hablamos de los procesos los relacionamos con un programa. Habitualmente estamos
acostumbrados a programar en lo que denominamos lenguajes de alto nivel (el nivel se corres-
ponde con el grado de abstraccin y, por lo tanto, el nivel ms alto es el del programador y el
nivel ms bajo la CPU); como esas instrucciones las debe entender la CPU lo que denominamos
compilador es el encargado de traducir las estructuras de alto nivel a niveles compatibles con la
CPU.
En los prrafos siguientes trataremos de conceptualizar cmo es una instruccin de bajo nivel
suponiendo una sentencia de asignacin del tipo
A=B+A
Esta sentencia debe entenderse como: tomar el contenido de la direccin B de memoria e ingresarlo a uno de los registros de la CPU; tomar el contenido de la direccin A, ubicarlo en otro registro de la CPU; sumar los valores de los datos obtenidos y, por ltimo, ubicar el resultado en la
direccin A (el dato previo de la direccin A se pierde).
El mtodo que vamos a ejemplificar supone un direccionamiento directo de la memoria RAM
(ms adelante veremos que hay otros modos de direccionamiento de la RAM).
Proponemos considerar que las primitivas del procesador usado son 16, lo cual implica cdigos
de operacin para la CPU de cuatro bits. En la actualidad se usa combinar en una instruccin los
cdigos de operacin y las direcciones de memoria. Para este esquema, si queremos direccionar
hasta 2.048 Bytes de RAM necesitaremos un formato de instruccin de 16 bits, como indica la
siguiente figura.
En la figura, los cdigos de operacin a usar se limitan a cargar la instruccin de bajo nivel al
registro acumulador desde la memoria; sumar a ese acumulador un dato desde la memoria y almacenar el resultado del acumulador en una posicin de memoria.
En la figura siguiente se esquematiza la operacin A=B+A simplificando el formato de instruccin a nmeros decimales y suponiendo que A=941 y B=940, siendo stas las direcciones que
contendrn los datos a sumar.
AC representa el registro Acumulador (o de trabajo para el PIC)
IR representa el registro del decodificador de instrucciones
10
Las posiciones de RAM estn identificadas por su direccin y el contenido (en este caso se respeta el orden bajo para el programa y el alto para datos).
11
12
Direccionamiento Inmediato
Es la forma ms sencilla de direccionamiento porque en realidad no es un direccionamiento. En
la instruccin (codop+operando) el cdigo de operacin siempre indica la operacin matemtica
o lgica a realizar. En el resto del cdigo de la instruccin en este modo simplemente est el valor
para usar en la operacin, es decir, no hay acceso adicional a memoria para tener el valor.
Direccionamiento Directo
13
Los bits que en la instruccin anterior contenan el operando ahora contienen una direccin fsica
de la memoria donde reside el dato a utilizar. La limitacin de este direccionamiento est en la
cantidad de bits destinada a las direcciones.
Direccionamiento Indirecto
En este caso los bits contienen una direccin de memoria cuyo contenido es la direccin de memoria que contiene el dato. Con este esquema podramos usar, por ejemplo, 4 bits en el campo de
direcciones de la instruccin (16 posibilidades) y a travs de una tabla residente en RAM de 16
posiciones de 1 byte, accederamos en realidad a 256 posiciones por cada una de las entradas de
la tabla, en total, 16x256=4096 posiciones. Dependiendo del microprocesador esta tabla puede
estar dentro de alguna zona de memoria interna con lo cual se ahorrara uno de los accesos a memoria externa.
Direccionamiento con Desplazamiento
Dentro de estos los ms conocidos son el relativo y el indexado.
Relativo: Este direccionamiento requiere que las instrucciones tengan dos campos de direcciones; el valor contenido en uno de los campos es utilizado directamente y el otro campo de direcciones contiene habitualmente una referencia implcita. La direccin efectiva se consigue sumando la direccin explcita al contenido de la direccin implcita. Esto si bien es complicado de entender mediante texto, es fcilmente entendible si pensamos en una tabla de conversiones de doble entrada. La tabla estar ubicada en forma secuencial en memoria a partir de la direccin explcita de la instruccin. El desplazamiento a los otros renglones de la tabla se guarda en una posicin de memoria referenciada indirectamente. Variando el valor de esta ltima posicin de memoria, obtenemos el acceso a cada uno de los renglones de la tabla.
Indexado: En este caso la primera porcin de la direccin es tambin relativa, es decir, referencia a una posicin de la memoria externa.
Memoria
Cuando nos referimos a Memoria, estamos hablando, especficamente, de la RAM. Es uno de
los recursos ms importantes de una mquina, ya que interviene en una relacin muy estrecha con
el microprocesador. En forma bsica podemos pensar la memoria fsica como un estante con muchos cajones y dentro de cada cajn lo que llamamos un dato; cada cajn se podr abrir mediante
una direccin especfica.
Administracin de la Memoria
El esquema ms sencillo es el direccionamiento directo, lineal, de la memoria fsica. Para este
tipo de direccionamiento no hay otra planificacin ms que comprobar si el espacio fsico libre de
memoria permite cargar el programa y los datos que queremos ejecutar. Este tipo de esquema fue
el utilizado en las primeras computadoras para el modo monoprocesamiento.
14
Cuando se comenz a pensar en mejorar la eficiencia de la CPU, esto llev a considerar lo que se
llama multiprocesamiento. En este contexto la CPU se conmuta entre varios procesos (cada proceso podra pertenecer a un programa diferente); la RAM debe contener a los procesos y, por lo
tanto, la RAM va a estar compartida. Los algoritmos de administracin de la memoria tienen sentido en el contexto de multiprogramacin.
Multiprogramacin lineal
ste es el esquema ms sencillo de la administracin y se basa en usar la memoria para cargar la
mayor cantidad de procesos posibles. El SO no utiliza otro algoritmo que no sea el de buscar un
espacio lo suficientemente grande como para que quepa el proceso.
En la primera carga de la memoria se puede llegar a aprovechar valores muy cercanos al 100 %
de la memoria, pero a medida que el SO debe cambiar los procesos para su futura ejecucin, y ya
que los procesos no ocupan todos el mismo lugar, van quedando huecos cada vez ms pequeos y
distribuidos, lo que los convierte en intiles (los procesos deben cargarse en posiciones contiguas
de la memoria). A este problema se lo llama Fragmentacin Externa y puede dejar espacios muy
grandes de la memoria inutilizables.
La forma de solucionar esto es efectuando la compactacin de la memoria. En este modelo el SO
debe analizar todo el espacio de memoria e ir reubicando procesos de manera de ir acumulando
esos huecos de manera de volverlos tiles. Este procedimiento ocupa mucho tiempo de CPU,
haciendo que el rendimiento del sistema disminuya notablemente.
Multiprogramacin por pginas
La primera forma de solucionar la fragmentacin externa es dividiendo el espacio de memoria
RAM en subespacios (frames), todos de la misma capacidad. Se suele denominar Frames a los
marcos de pgina, es decir, al espacio fsico sin datos que conformar la pgina (datos). Este esquema tiene, como todos, sus ventajas y sus desventajas. Como ventajas principales estn:
a) Un direccionamiento jerarquizado, tipo rbol
b) La posibilidad de extender la memoria RAM a travs de un concepto denominado Memoria Virtual, en el que se usa el disco como extensin de la RAM disponible.
Como desventajas se pueden citar:
a) Que el direccionamiento es ms complejo y requiere apoyo de la arquitectura de la CPU
b) Dependiendo del tamao de las pginas, aparecen en la ltima pgina de un proceso zonas
libres (a menos que el proceso ocupe exactamente un mltiplo entero de la capacidad de
las pginas), que se denomina fragmentacin interna, y que, estadsticamente, podra estimarse en la mitad de la capacidad de una pgina.
c) Aparece el concepto de Direccin Lgica, que debe ser transformada a una direccin fsica, como vemos en el siguiente ejemplo:
15
En este esquema, los procesos pueden cargarse en zonas de memoria que no sean contiguas, la
que s debe ser secuencial es la tabla de pginas. Dentro del programa, cada direccin lgica est
constituida por un nmero de pgina y una direccin relativa dentro de la pgina (desplazamiento).
La tabla de pginas est implcita en los PCB, en la forma de registro Base y registro Lmite.
Existen mecanismos dentro de la arquitectura del procesador que verifican que las direcciones
fsicas obtenidas sean congruentes con esta tabla de pgina, para evitar que el Program Counter
est direccionado a una direccin de memoria errada.
El esquema siguiente representa el modo de direccionamiento del Pentium con un poco ms de
precisin.
16
17
Con este algoritmo, de 19 pedidos hubo 12 fallos. Tener en cuenta que esto es una cola en donde
los nuevos datos entran por la parte superior y los ltimos datos se pierden.
PTIMO
18
En este algoritmo se reemplaza la pgina que no se usar durante el mayor perodo de tiempo que
sigue, es decir, el SO debe adivinar la secuencia de pginas que usar el programa.
LRU
Este algoritmo se podra llevar a cabo asociando cada posicin de la tabla de pginas a un contador que se vaya incrementando con unidades de tiempo predefinidas. La pgina que se cambia es
la que tiene el mayor nmero asociado. En el caso de no haber fallo de pgina, el contador asociado a ella se vuelve a 0.
LFU
En el ejemplo, al querer aplicar el algoritmo, nos encontramos con que dos de las pginas han
sido usadas igual nmero de veces, en este caso adoptamos cambiar la que ms lejana en el tiempo estuvo, o sea que, en realidad, hemos hecho una mezcla de dos algoritmos.
Multiprogramacin por segmentos
Conceptualmente se puede entender como un conjunto de espacios de longitud variable. La ventaja de esta imagen sobre el enfoque de paginacin estriba en que se puede proporcionar proteccin a nivel de byte si fuera necesario. Para el Pentium existe una referencia al segmento de 16
bits y un desplazamiento de 32 bits. Dos de los bits de la referencia al segmento se utilizan para
proteccin y los 14 restantes para especificar el segmento. En total se dispone entonces de 246, o
19
sea 64 TeraBytes; el espacio de direcciones fsicas utiliza 32 bits, lo que da una memoria de trabajo de 4 GigaBytes (lmite de los SO actuales).
20
Memoria Cach
Glosario
Capacidad: normalmente se expresa en trminos de Bytes, aunque dependiendo de la jerarqua
de memoria se puede expresar en palabras. Lamentablemente nunca se pusieron de acuerdo en
cuanto a la definicin de cantidad de bits de una palabra. En general se toma como la unidad natural de la jerarqua de memoria de la que se est hablando, y de la CPU asociada. Hay palabras
de 32, 64, 128 bits.
Tiempo de acceso: es el tiempo que tarda en realizarse una operacin de lectura/escritura completo, es decir: el tiempo que transcurre desde el instante en que se presenta una direccin a la
memoria hasta que el dato (Byte o palabra) est disponible para su uso en el bus de datos.
21
Tiempo de ciclo de memoria: es el tiempo de acceso ms los tiempos de las seales de control
involucradas.
Ubicacin: indica si la memoria es interna o externa al computador. La memoria interna suele
identificarse con la memoria principal (RAM). El punto de vista para determinar la ubicacin
podra ser tambin la CPU; en este caso la memoria interna estar constituida por los registros y
la memoria cach, y la memoria externa pasara a ser la RAM.
Unidad de transferencia: indica cuntos bits o Bytes se transfieren en un ciclo de lectura/escritura. Algunas veces coincide con la palabra, pero en otros casos es mayor (256 bits o
ms).
Unidades direccionables: en la mayora de los casos, coincide con la palabra; en algunos, especialmente los registros, se permite direccionar a nivel de bits. En cualquier caso, la relacin entre
las unidades direccionables A y el nmero de unidades direccionables es 2A=N.
Velocidad de transferencia: es la velocidad a la que se pueden transferir datos (actualmente se
habla de bits por el tipo de transmisin usado). Se puede utilizar la siguiente relacin:
TN TA
N
R
Jerarqua de memoria
Memoria en
tarjetas/CPU
Registros
Alto costo
por bit
Muy baja
capacidad
Muy rpida
Accesos
CPU a L2
Muy bajo
costo por bit
Alta capacidad
Lenta
Accesos
CPU a L1
Cach
RAM
Almacenamiento
Discos
fuera de tarjetas
Almacenamiento
WORM
fuera de lnea
Existe un compromiso entre las tres caractersticas clave (costo, capacidad y tiempo de acceso).
A menor tiempo de acceso, mayor costo; a mayor capacidad, menos costo por bit; a mayor capacidad, mayor tiempo de acceso.
Existe una solucin de compromiso que implica tener memorias en diferentes niveles (Levels),
estos se enumeran con valores en incremento de acuerdo a la lejana relativa a la CPU; as el L1
es la memoria ms cercana a la CPU y la L3 la ms lejana. Este esquema implica tener varios
niveles ordenados por capacidad-velocidad; en este caso, L1 es la ms veloz, aunque de menor
capacidad.
22
La ltima columna de la tabla de jerarquas supone que los acccesos a memoria lenta son cada
vez menos frecuentes. Esto es moderadamente verdad, siempre que se cumpla la condicin de
que la ejecucin de un proceso sea efectuado genricamente en pocas pginas de instruccin (o
datos); con la disminucin de los costos de cach al ser integrados al chip de la CPU esta condicin es mucho ms frecuente y por lo tanto la eficiencia del uso de cach se nota mucho ms.
Esta caracterstica de los programas o procesos fue denominada localidad de las referencias
(temporal y espacial) y establece que durante perodos de tiempo largos (tiempos de CPU), las
agrupaciones de memoria en uso cambian, pero considerando perodos cortos, el proceso tiende a
usar las mismas referencias a memoria. Estudios realizados sobre programas realizados en C demuestran que con 8 bloques de cach por proceso, slo hay fallos de pgina en menos del 1% de
los accesos a cach.
En el clculo de los tiempos de acceso para memorias de dos niveles, debemos considerar el concepto de tasa de aciertos. En una configuracin de dos niveles, la tasa de aciertos de un nivel
corresponder a la inversa (Tasa de fallos) del otro nivel.
TM H * T1 (1 H ) * (T2 T1 )
TM T1 T2 * (1 H )
H= tasa de aciertos del nivel 1
T1= tiempo de acceso medio al nivel 1
(1-H)= tasa de fallos del nivel 1 (certeza aciertosL1 = fallosL1)
T2= tiempo medio de acceso al nivel 2
TM= tiempo medio de acceso a los dos niveles
Si H fuera el 100%, el tiempo medio sera T1; si H fuera 0, el tiempo medio sera T1+T2
Supongamos que el procesador tiene que acceder a dos niveles de memoria: L1 contiene 1K palabras y un T1 = 10 nseg.; L2 contiene 100K palabras y T2 = 100nseg. y H = 0,95. El mtodo de
escritura de la cach es WT (write through), lo que lleva a considerar que si debe acceder al L2
debe haber efectuado un ciclo de lectura de L1 para buscar la pgina y, al no encontrarla, busca
en L2; cuando la encuentra debe grabarla en L1 para que la CPU pueda acceder al dato (o instruccin en V.Neumann). Despreciando los tiempos de handshaking, el tiempo medio de acceso
ser:
Ct
C1M 1 C2 M 2
M1 M 2
23
El nivel 2 es ms barato, de modo que interesa conseguir que Ct sea muy prximo a C2. Esto se
consigue haciendo que M1 << M2, cosa que se cumple en la realidad. Tambin debemos conseguir que TM sea cercano a T1, lo que se consigue con una cach de gran tamao.
Se deben considerar las dos variables: tiempo de
acceso (funcin de los aciertos) y costo (funcin
del tamao). Sabiendo que la relacin de los
tiempos de acceso medio entre la memoria principal y la cach es un nmero cercano a 50 y que
una relacin entre tiempo medio del sistema y
tiempo de acceso a cach puede ser 10, obtenemos una tasa de aciertos mnima del 82%. La
cuestin de la cantidad ser funcin de la localidad de las referencias a memoria, para una localidad entre moderada y fuerte conseguimos tasas
de acierto en ese orden con un 20% de memoria
cach.
Comprobar si se cumplen estas condiciones
usando la memoria principal como cach de disco, suponiendo que la relacin de costos es 1/200 y la relacin de tiempos 1000/1.
El clculo se complica un poco al considerar tres niveles, pero se puede resolver de a dos sistemas por vez, como un sistema lineal.
Partimos de que tenemos la certeza de que la pgina buscada est en alguno de los tres niveles:
H1 H 2 H 3 1
Reagrupando:
tm tt H1 H 2 H 3 t2 H 2 H 3 t3 H 3
H1 H 2 H 3 1
tm tt t2 1 H1 t3 1 H 2 H1
m
3.108
c
seg 1,5.10 1 m 15cm
f
2.109 Hz
24
Para que no oficie de antena, la longitud de la lnea debe ser alrededor del 10% de , o sea 1,5
cm. Resumiendo lo anterior: no se deben mover seales elctricas con frecuencias cercanas a los
2GHz a distancias mayores de 1,5cm.
La figura siguiente describe la estructura de un sistema de memoria cach/principal. La memoria
principal consta de hasta 2n unidades direccionables y cada palabra tiene una nica direccin de
m bits. La memoria est dividida en bloques (podran ser pginas) de K palabras por bloque, es
decir que hay M bloques (pginas), siendo M = 2n/K. La cach consta de C filas, cada fila contiene K palabras, es decir que en cada fila de la cach entra un bloque de los considerados para la
memoria; tiene adems unos bits de ms como etiqueta, que habitualmente es parte de la direccin del bloque e informacin sobre modificaciones en el bloque (si fue modificado por el proceso hay que grabarlo a disco antes de eliminarla de la cach, en caso contrario slo se elimina). Se
cumple la condicin de que C<<M. En todo momento un subconjunto de bloques de la memoria
est copiado en la cach.
Unidades de Entrada/Salida
Uno de los elementos clave de un computador es el conjunto de mdulos de Entrada/salida. Cada
mdulo se conecta al bus del sistema o a un conmutador central y controla uno o ms dispositivos
perifricos. Las razones por las cuales un perifrico no se conecta directamente al bus son, entre
otras:
a) Existe una amplia variedad de perifricos con lgicas de funcionamiento diferentes
b) A menudo la velocidad de transferencia de datos es mucho menor que la del bus
25
c) Algunos pocos perifricos pueden tener velocidades que superen a la del bus
d) Los perifricos usan datos con formatos y tamaos de palabra diferentes a los del computador.
26
memoria RAM actan como un almacenamiento de datos temporal (buffer) que compensa las
diferencias de velocidad.
En el modo de transmisin, la CPU coloca el dato a transferir en la posicin de RAM asignada,
habilita al mdulo con una seal de control denominada Chip Select (CS) y, a continuacin, otra
seal de control denominada Write. En el ciclo de lectura, el chip coloca al dato en otra posicin
de memoria, solicita una interrupcin y, cuando sta es aceptada, la CPU le indica al mdulo que
est lista a leer el dato con la seal Read; esta ltima aparentara no ser necesaria, ya que la CPU
puede leer el dato estrictamente con un acceso a memoria, esta seal, en realidad, le sirve al mdulo para saber que el dato fue ledo y que, eventualmente, puede colocar otro dato en la memoria.
Este mdulo, en particular, es programable en una cantidad de modos de funcionamiento. Esos
diferentes modos se eligen a travs de un dato denominado Palabra de control, al que se le
asigna otra posicin de memoria, efectundose la programacin a travs de un ciclo de escritura y
el conocimiento del estado del chip a travs de uno de lectura.
El mtodo anterior, denominado E/S programada tiene como ventaja la sencillez de la implementacin, pero la desventaja de emplear mucho tiempo en ciclos de lectura/escritura de RAM para
obtener el/los datos necesarios. Como ejemplo, supongamos que el proceso en ejecucin requiere
como operando a un valor codificado en PuntoFlotanteDoblePrecisin; esto requiere leer 64 bits
(8Bytes) y tambin 8 ciclos de lectura del mdulo de E/S.
Mientras la CPU carga el/los datos necesarios no puede hacer otra cosa que esperar respuesta del
mdulo. Como las velocidades de E/S son considerablemente menores que la RAM y la CPU, la
solicitud y carga del dato requiere mucho tiempo de inactividad de la CPU. En computadoras
personales, esto es un inconveniente menor ya que se resume a que el operador obtenga una baja
velocidad y use el tiempo de
inactividad de su CPU en penControladores
sar cmo puede hacer para
de interrupciones
esclavos
comprarse una PC ms rpida.
Si cambiamos nuestro punto de
Dispositivo externo 00
IRQ 0
vista a los negocios, ese tiempo
IRQ
1
Dispositivo externo 01
INT
representa dinero quieto en funIRQ 2
Dispositivo externo 02
IRQ 3
cin de dinero movindose y,
IRQ 4
por supuesto, el dinero movinIRQ 5
dose genera ganancias as que
IRQ 6
hay que hacer ms eficiente al
Dispositivo externo 07
Controlador
IRQ 7
de interrupciones
sistema.
Dispositivo externo 08
Dispositivo externo 15
Dispositivo externo 56
Dispositivo externo 63
IRQ 0
IRQ 1
IRQ 2
IRQ 3
IRQ 4
IRQ 5
IRQ 6
IRQ 7
IRQ 0
IRQ 1
IRQ 2
IRQ 3
IRQ 4
IRQ 5
IRQ 6
IRQ 7
maestro
INT
IRQ 0
IRQ 1
IRQ 2
IRQ 3
IRQ 4
IRQ 5
IRQ 6
IRQ 7
INT
INTR
CPU
INT
27
controlador y a la RAM. La CPU sigue con otras tareas mientras el controlador de interrupciones
prepara al mdulo de E/S correspondiente a la direccin suministrada por la CPU. Cuando el sistema de E/S (mdulo + hardware correspondiente) est listo, lo comunica al controlador de interrupciones (CI) por una lnea de control de las 8 que dispone el CI. Dependiendo de la lnea solicitante, el CI las ordena por prioridades y solicita a la CPU la interrupcin por la lnea IntR, junto
con la identificacin del perifrico que requiere atencin. El SO determina si se va a atender o no
esa interrupcin a travs de mscaras de comparacin. Las mscaras no son otra cosa que
datos contra los cuales se compara la identificacin del perifrico que requiere atencin con algn
orden de prioridad preestablecido.
El 8259 de Intel (CI) se puede cablear en modo rbol para manejar hasta 64 dispositivos de E/S.
La programacin normal determina que la lnea IRQ 0 es ms prioritaria que la INT 7, por lo tanto en la figura tienen prioridades relacionadas en forma inversa a la identificacin del dispositivo.
En el caso de que la interrupcin sea aceptada, el SO entra en un ciclo de cambio de proceso
guardando los registros de la CPU y los datos necesarios para retomar el proceso actual y cuando
estn preservados, solicita al CI la direccin correspondiente del vector de interrupciones para
seguir el proceso de lectura/escritura del dato.
Aparentemente todo este proceso es ms largo que el anterior y es cierto, pero usando interrupciones, la CPU puede hacer otras cosas entre el pedido del dato y la lectura del mismo. El resultado es un aumento en la eficiencia de la CPU y por ello de todo el conjunto.
El manejo de E/S por interrupciones no soluciona el problema de tener varios ciclos para leer un
dato compuesto de varios Bytes, una alternativa ms moderna es usar una CPU ayudante denominada Direct Memory Access (DMA). Este chip se interpone en la comunicacin de los datos
con perifricos que habitualmente requieren datos largos y tiempos de respuesta menores a sus
transferencias a la memoria RAM, como por ejemplo la placa de red, la controladora de sonido y
el disco rgido, entre otros posibles.
La ventaja de agregar esta CPU ayudante es que la CPU principal le comunica el tipo de dato que
necesita y la direccin inicial de memoria en que hay que ubicarlo. El DMA se encarga de la tarea rutinaria de ir cargando las posiciones consecutivas de memoria hasta completar el dato y
avisarle a la CPU la disponibilidad del mismo a travs de una interrupcin. En este procedimiento, la CPU slo acta para pedir el dato y para obtenerlo.
En el caso de existir un solo Bus de Datos, van a tener que compartirlo entre la CPU y el DMA,
lo cual hace que la eficiencia del sistema se incremente comparado al uso sin DMA, pero no lo
deseable. La alternativa ms costosa es construir otro Bus que se llamar de E/S conectado directamente al DMA, con lo cual los procesamientos de E/S se delegan al DMA y los procesos ms
rpidos a la CPU, cada una de ellas con su propio canal de comunicaciones.
El ltimo concepto relacionado con las operaciones de E/S es el denominado Canal de E/S. El
mdulo de E/S tiene una zona de memoria propia, Buses propios y maneja un repertorio reducido
de instrucciones (es capaz de ejecutar procesos) tendientes a las comunicaciones con los dispositivos de E/S, desde un punto de vista es otra computadora cuya tarea es comunicar datos a una
computadora ms rpida (esquema de cliente-servidor). El rendimiento, la amplitud de datos y la
seguridad obtenida en el uso de la WideWorldWeb (internet) hizo que se pensara en esquemas
distribuidos an dentro del mismo gabinete y ahora existen configuraciones de E/S (FireWire,
Infiniband, USB) que usan protocolos de comunicaciones similares a los usados en Internet, aunque con menos capas y mucho ms rpidos, llegndose en algunos casos de uso de fibra ptica a
28
velocidades de transferencia de 30 Gb/seg y a 300m de distancia, cuando por cobre el PCI llega a
1Gb/seg a distancias de pocos centmetros.
Interrupciones en el Pentium
Hay dos tipos de eventos que hacen que el Pentium suspenda la ejecucin del flujo de instrucciones en curso y responda al evento: las interrupciones y excepciones. Una interrupcin se genera
por una seal del hardware y puede ocurrir en cualquier momento. Una excepcin se genera desde el software y es provocada por la ejecucin de una instruccin. Hay dos fuentes de interrupciones y dos fuentes de excepciones.
Excepciones programadas: hay instrucciones que generan una excepcin (por ejemplo: fallo de pgina, depuracin, etc.)
El procesamiento de las interrupciones usa una tabla de vectores, cada tipo de interrupcin tiene
asignado un nmero que se usa para identificarla. Este nmero se usa como entrada a la tabla de
vectores de interrupcin. La tabla contiene 256 datos de 32 bits cada uno, que representan la direccin (segmento y desplazamiento) de la rutina de servicio a ejecutar. Si se generan ms de una
interrupcin o excepcin, la CPU las atiende en un orden determinado por el SO.
ID
0
1
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DESCRIPCIN
Error al dividir; desbordamiento de divisin o divisin por cero
Excepcin de depuracin. Incluye fallos e interceptaciones relacionadas con la depuracin de procesos.
Punto de parada causado por la instruccin INT3
Desbordamiento detectado por INT0
Instruccin fuera de lmites de la memoria
No definido
Dispositivo no disponible
Doble fallo: dos interrupciones ocurres durante la misma instruccin
Reservado
Segmento en estado de tarea no vlido
Segmento no presente
Error en la pila
Violacin de proteccin general
Fallo de pgina
Reservado
Error de coma flotante
Acceso a una palabra almacenada en direccin de Byte impar o doble palabra en
una direccin que no sea mltiplo de 4
Verificacin de la CPU (Watchdog)
29
19-31
2
32-255
Reservados
Interrupcin no enmascarable
Vectores de interrupcin del usuario (seal INTR)
Las dos ltimas son interrupciones y el resto excepciones. Cuando se produce una interrupcin y
es atendida tiene lugar la siguiente secuencia de eventos:
1) Si la transferencia supone un cambio de nivel de privilegio, los contenidos del registro del segmento de pila y puntero de pila ampliado se introducen en la pila.
2) El valor actual del bit EFLAGS se introduce en la pila.
3) Los indicadores de interrupciones y de trampa se ponen a cero. Ello inhabilita
otras interrupciones y la interceptacin o modo paso a paso.
4) Los contenidos actuales del puntero del segmento de cdigo y del puntero de instrucciones se guardan en la pila.
5) Si la interrupcin viene acompaada de un cdigo de error se guarda tambin en la
pila.
6) Se captan los contenidos del vector de interrupcin y se cargan los registros necesarios para la ejecucin de la interrupcin.
7) La instruccin IRED vuelve a cargar los registros desde la pila para continuar la
ejecucin anterior a la interrupcin.
tiempo o antes de aquella. Una vez que se han identificado tales dependencias, el procesador
puede emitir y completar la ejecucin de instrucciones en un orden diferente al cdigo original.
El procesador puede eliminar algunas dependencias innecesarias a travs del uso y renombramiento de algunos de su gran cantidad de registros internos.
Para mejorar el valor del paralelismo de las instrucciones se puede usar una combinacin entre
software (el compilador) y hardware. Algunas de las limitaciones que se encuentran para mejorar
ese valor son:
Conflicto de recursos
31
El programa a ejecutar consiste de una secuencia de instrucciones, tal como sale del compilador.
El proceso de captacin de instrucciones tiene una lgica para predecir saltos y genera un flujo
dinmico de instrucciones que enva a una ventana de ejecucin. En esta ventana, las instrucciones no forman un flujo secuencial sino que estn estructuradas de acuerdo a sus dependencias de
datos verdaderas. Aqu podran aparecer instrucciones fantasma, necesarias para completar una
lgica de programacin crtica (PERT). Las instrucciones se ejecutan y se desechan los resultados
irrelevantes o de tareas fantasma y se reordena secuencialmente el flujo de salida.
Los procesadores de Intel han ido modificando su estructura de escalar (80486), modesta arquitectura superescalar (Pentium: dos unidades independientes ALU para enteros), hasta ser completamente superescalares (Pentium Pro).
Arquitectura IA-64
Esta soporta desde el hardware el paralelismo de instrucciones y es bastante diferente a las aproximaciones seguidas por la historia de lo superescalar. Como siempre, est acompaada de la
tecnologa que permite grandes cantidades de registros y cach de hasta tres niveles integradas
dentro del chip. Tiene mltiples unidades de ejecucin completas, siendo hasta ahora cuatro, se
piensa que es posible llegar a ocho.
Un resumen que no expresa todo su potencial es que ahora las instrucciones se ejecutan con predicado, esto es que los ciclos de saltos condicionales se ejecutan completos: ambas ramas llegan a
sus resultados y luego se comprueba cul de las ramas ejecutadas sirve como dato, la otra se
desecha.
La teora de hacer y luego comprobar se aplica tambin en el caso de instrucciones de control y
datos.
Referencias bibliogrficas:
32
33
34
Los lenguajes de programacin tratan de simplificar la vida del programador a medida que incrementan su nivel. El nivel de mquina, donde hay que escribir cada instruccin con los cdigos
de operacin y los argumentos en secuencias de unos y ceros, resulta ser el ms complicado; a
este nivel le sucede el assembler, en donde cada instruccin se identifica por una cantidad de letras (tres o cuatro) y los argumentos escritos en numeracin decimal o hexadecimal; a estos le
suceden los de mayor nivel, en donde la programacin ya acepta lenguajes matemticos y sintcticos simples, cuyo parecido al lenguaje convencional es cada vez mayor.
El reloj
Tiene un circuito interno que puede oficiar de reloj con slo dos componentes externos que pueden oscilar entre 100KHz y 1MHz aproximadamente, este reloj sencillo es poco preciso, variando
con la tensin de alimentacin, la temperatura, la variacin de valor de los componentes, etc. Para
osciladores ms precisos se deben usar cristales y se pierden dos patas del controlador. Este controlador puede funcionar con frecuencias de reloj desde 0Hz (parado) hasta 20 MHz. Estos extremos de frecuencias daran tiempos de instruccin entre infinito y 200 nanosegundos.
Como reloj interno para contar tiempos se usa el tiempo de instruccin que equivale a cuatro ciclos del reloj.
Timer cero (TMR0)
Como habamos dicho antes, los temporizadores son, en realidad, contadores de eventos. Si estos
eventos se realizan en tiempos iguales, la cuenta de estos implicara un tiempo conocido.
Este timer en particular se puede configurar como contador de eventos externos, que entraran
por una de las patas, o contador de eventos internos, provenientes de los tiempos de instruccin.
Tambin puede programarse lo que se denomina prescaler, que es en realidad un divisor programable en 8 etapas que van desde 1:2 a 1:256. El registro usado para poder configurar los
tiempos es el TMR0, de 8 bits, lo que permite divisiones de hasta 256 en pasos de a 1. La mxima
divisin que obtendramos usando el prescaler y el registro es de 1:65536.
La salida es un bit (flag) del registro INTCON, denominado TMR01F (bit 2 del INTCON). Este
flag, que habitualmente est en 0, cambia a 1 cuando el registro TMR0 pasa del valor FFh a 00h
(OVERFLOW). Si se configuran las interrupciones, este temporizador puede generar en el overflow una interrupcin.
Timer uno (TMR1)
Las diferencias con el timer 0 son las siguientes: el prescaler tiene 4 rangos configurables de 1:1 a
1:8, el registro TMR1 pasa a ser de 16 bits, pudiendo cargarse en 2 partes como TMR1L y
TMR1H. El timer este no genera interrupciones y su cuenta mxima ser de 524288
Timer dos (TMR2)
Muy parecido a los otros dos, salvo por la estructura, que en este caso tiene un prescaler configurable entre 1 y 16 en tres pasos, el registro TMR2 de 8 bits y un postscaler configurable entre 1 y
3, tambin en tres pasos. Este Timer puede generar interrupciones y su cuenta mxima ser por
12288.
PORTA
Tiene 6 patitas configurables como entradas digitales o analgicas o salidas digitales, esto se realiza a travs del registro TRISA (bits 0 al 5) y se configuran con el ADCON1 en lo referente a
digitales/analgicas.
35
PORTB
Tiene 8 patitas configurables como entradas/salidas en ambos casos digitales. Se pueden habilitar
unas resistencias de pull up internas, con lo cual el estado lgico sin conexin al exterior sern
1s. Otra caracterstica muy interesante de este puerto es que las patitas RB7:RB4 se comparan en
cada instruccin con el valor anterior y, de haber cambios, puede generar una interrupcin.
PORTC
Compuesto de 8 patitas bidireccionales configurables. Este, a diferencia del anterior, no puede
generar interrupciones y a diferencia del PORTA las entradas/salidas son siempre digitales.
INTERRUPCIONES
Todos estos controladores tienen la capacidad de manejar interrupciones, si bien mucho ms simples que lo explicado para microprocesadores. El modelo que estamos estudiando acepta diez
causas de interrupcin, de las cuales slo nos dedicaremos a tres:
a) Cambios en las entradas de mayor peso en el puerto B (bits 7 a 4)
b) Overflow en el registro del Timer 0
c) Oiverflow en el registro del Timer 1
d) Overflow en el registro del Timer 2
El bit 7 del registro INTCON, denominado GIE (Global Interrupts Enable), habilita (en 1) las
interrupciones o las inhabilita (en 0), ms all de que estn habilitadas por los bits correspondientes a cada una de ellas. El controlador, cuando acepta una interrupcin, guarda el contenido del
PC (program counter) en una zona de memoria RAM e inhabilita las interrupciones cambiando
de valor a GIE; es decir que slo puede atender a una interrupcin por vez. Al volver del programa de atencin a la interrupcin con RETFIE, habilita nuevamente las interrupciones y carga el
PC con el valor guardado en memoria, as puede continuar con la ejecucin del programa principal.
Hay que tener presente que el controlador no guarda otros valores de registros que no sea el PC,
si el procesador necesita otros valores de configuracin o registros (sobre todo el W) que pudieron ser modificados por la subrutina de interrupcin, corresponde al programador incluir en esa
subrutina de atencin, loos pasos necesarios para guardar valores importantes del programa principal. Un ejemplo de las instrucciones necesarias para esta operacin est explicitada en el ejemplo de Tips & Tricks, ms adelante en este apunte.
Adems del GIE deben estar habilitados los flags correspondientes a cada una de las interrupciones que queramos atender:
a) Se habilita con el flag RBIE (bit 3 del INTCON)
b) Se habilita con TMR0IE (bit 5 del INTCON)
c) Se habilita con TMR2IF (bit 1 del PIR1)
Como el controlador tiene un solo vector de interrupciones (ubicado en 04h), desde esta direccin
debemos ir a una primera subrutina en la que determinaremos cul es el flag que nos indica la
36
37
La tercera son las subrutinas o funciones asociadas al programa, las cuales empiezan con
una etiqueta que las identifica y terminan con algunas de las variantes de RETURN.
SET DE INSTRUCCIONES
Todas las instrucciones pueden tener una etiqueta (Label) que las identifique.
Las lneas del programa no necesitan numerarse.
f identifica una direccin de RAM (registro).
k se usa para denotar un valor explcito (literal).
b se usa para identificar un bit en particular.
d se usa para direccionar el resultado de una operacin. Por defecto, es 1, lo que indica que el
resultado se guardar en la direccin marcada por f (en el mismo registro que se usa para la
operacin); en el caso de ser 0, el resultado de la operacin se guardar en el registro de trabajo que denominaremos W.
38
ADDLW
Sintaxis
Operandos
Operacin
Flags
Descripcin
ADDWF
Sintaxis
Operandos
Operacin
Flags
Descripcin
Sumar w con f
Addwf f,d
0<=f<=127 d= [0,1]
(w)+(f) -> destino (d)
C; DC; Z
El contenido del registrto
w se suma al contenido
de la direccin f
ANDLW
ANDWF
Multiplicacin lgica
entre w y f
Andwf f,d
0<=f<=127 d= [0,1]
(w).and.(f) -> destino (d)
Z
El contenido del registro
w es andeado con el contenido de f
Sintaxis
Operandos
Operacin
Flags
Descripcin
BCF
Sintaxis
Operandos
Operacin
Flags
Descripcin
Bcf f,b
0<=f<=127 ; 0<=b<=7
0 -> (f<b>)
BTFSS
Sintaxis
Operandos
Operacin
Flags
Descripcin
CALL
Sintaxis
Operandos
Operacin
Flags
Descripcin
Llamada a su rutina
Call k [label]
0<=k<=2047
(pc)+1 -> tos
K -> pc
Guarda el contenido actual
del PC y pone el contenido
Sintaxis
Operandos
Operacin
Flags
Descripcin
BSF
Sintaxis
Operandos
Operacin
Flags
Descripcin
Poner en 1 un bit de la
posicin f
Bsf f,b
0<=f<=127 ; 0<=b<=7
1 -> (f<b>)
Pone a 1 el bit b del contenido en f
BTFSC
Sintaxis
Operandos
Operacin
Flags
Descripcin
CLRF
Sintaxis
Operandos
Operacin
Flags
Descripcin
Borrar el contenido de f
Clrf f
0<=f<=127
00h -> (f)
Z
El contenido del registro
sealado por f pasa 00h
39
de k en el PC
40
CLRW
Borrar el contenido de w
COMF
Sintaxis
Operandos
Operacin
Flags
Descripcin
Clrw
Sintaxis
Operandos
Operacin
Flags
Descripcin
DECFSZ
Sintaxis
Operandos
Operacin
Flags
Descripcin
Decrementa f, salta si es 0
Decfsz f,d
0<=f<=127 d= [0,1]
(f)-1 -> (destino); salto si 0
INCF
Sintaxis
Operandos
Operacin
Flags
Descripcin
Complementa el contenido de f
Comf f,d
0<=f<=127 d= [0,1]
(f)-1 -> destino
Z
Decrementa en 1 el contenido de f
GOTO
Sintaxis
Operandos
Operacin
Flags
Descripcin
Salto incondicional
Goto k [label]
0<=k<=2047
K -> pc
Incrementa contenido de f
Incf f,d
0<=f<=127 d= [0,1]
(f)+1 -> (destino)
Z
Se incrementa en 1 el contenido de f
INCFSZ
Sintaxis
Operandos
Operacin
Flags
Descripcin
Incrementa f, salta si es 0
Incfsz f,d
0<=f<=127 d= [0,1]
(f)+1 -> (destino)
IORLW
Sintaxis
Operandos
Operacin
Flags
Descripcin
IORWF
Sintaxis
Operandos
Operacin
Flags
Descripcin
Or inclusivo entre w y f
Iorlwf f,d
0<=f<=127 d= [0,1]
(w).or.(f) -> (destino)
Z
El contenido del registro
w se orea con el contenido de f
MOVF
Sintaxis
Operandos
Mueve el contenido de f
Movf f,d
0<=f<=127 d= [0,1]
MOVLW
Sintaxis
Operandos
Mueve un literal a w
Movlw k
0<=k<=255
41
Operacin
Flags
Descripcin
(f)->(destino)
Z
El contenido del registro f
se mueve a otro destino
Operacin
Flags
Descripcin
k-> (w)
MOVWF
Mueve el contenido de w a
la direccin f
Movwf f
0<=f<=127
(w) -> (f)
NOP
No opera
Sintaxis
Operandos
Operacin
Flags
Descripcin
Nop
Sintaxis
Operandos
Operacin
Flags
Descripcin
RETFIE
Sintaxis
Operandos
Operacin
Flags
Descripcin
RLF
Sintaxis
Operandos
Operacin
1 -> gie
registro
RETLW
Sintaxis
Operandos
Operacin
Flags
Descripcin
RRF
Sintaxis
Operandos
Operacin
El literal k se mueve al
registro w
registro
Flags
Descripcin
C
El contenido del registro f
es rotado un bit hacia la
izquierda usando el carry
Flags
Descripcin
C
El contenido del registro f
es rotado un bit hacia la
derecha usando el carry
RETURN
SUBLW
Sintaxis
Operandos
Operacin
Flags
Descripcin
Return
Sintaxis
Operandos
Operacin
Flags
Descripcin
42
Tos -> pc
Retorna al programa principal desde una subrutina
tado en w
43
SUBWF
Sintaxis
Operandos
Operacin
Flags
Descripcin
XORWF
Sintaxis
Operandos
Operacin
Flags
Descripcin
XORLW
Sintaxis
Operandos
Operacin
Flags
Descripcin
O exclusivo entre w y el
literal
Xorlw k
0<=k<=255
(w).xor.k -> (w)
Z
El contenido de w se xorea con el literal y el
resultado va a w
O exclusivo entre w y f
Xorwf f,d
0<=f<=127 d= [0,1]
(w).xor.(f) -> (destino)
Z
El contenido de w se xorea con el contenido de f y
el resultado va al destino
Esta traduccin puede (y de hecho arreglamos varios) tener errores. Conviene verificarlas antes
de ponerse de lleno a programar con ellas.
44
Ejemplo de un archivo de texto cuya denominacin debe ser p16F628.inc para configurar el
ensamblado.
LIST
; P16F628.INC Standard Header File, Version 1.01
Inc.
NOLIST
Microchip Technology,
; This header file defines configurations, registers, and other useful bits of
; information for the PIC16F628 microcontroller. These names are taken to
match
; the data sheets as closely as possible.
; Note that the processor must be selected before this file is
; included. The processor may be selected the following ways:
;
;
;
;
;
;==========================================================================
;
;
Revision History
;
;==========================================================================
;Rev:
;1.01
;1.00
Date:
Reason:
13 Sept 2001 Added _DATA_CP_ON and _DATA_CP_OFF
10 Feb 1999 Initial Release
;==========================================================================
;
;
Verify Processor
;
;==========================================================================
IFNDEF __16F628
MESSG "Processor-header file mismatch.
ENDIF
;==========================================================================
;
;
Register Definitions
;
;==========================================================================
W
F
EQU
EQU
H'0000'
H'0001'
45
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0000'
H'0001'
H'0002'
H'0003'
H'0004'
H'0005'
H'0006'
H'000A'
H'000B'
H'000C'
H'000E'
H'000F'
H'0010'
H'0011'
H'0012'
H'0015'
H'0016'
H'0017'
H'0018'
H'0019'
H'001A'
H'001F'
OPTION_REG
TRISA
TRISB
PIE1
PCON
PR2
TXSTA
SPBRG
EEDATA
EEADR
EECON1
EECON2
VRCON
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0081'
H'0085'
H'0086'
H'008C'
H'008E'
H'0092'
H'0098'
H'0099'
H'009A'
H'009B'
H'009C'
H'009D'
H'009F'
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'
46
EQU
H'0007'
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0004'
H'0002'
H'0001'
H'0000'
EQU
EQU
EQU
EQU
EQU
EQU
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'
EQU
EQU
EQU
EQU
EQU
EQU
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'
47
C2OUT
C1OUT
C2INV
C1INV
CIS
CM2
CM1
CM0
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0004'
H'0002'
H'0001'
H'0000'
EQU
EQU
EQU
EQU
EQU
H'0003'
H'0001'
H'0000'
H'0000'
H'0000'
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0004'
H'0002'
H'0001'
H'0000'
48
EQU
EQU
H'0003'
H'0002'
WR
RD
EQU
EQU
H'0001'
H'0000'
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'0007'
H'0006'
H'0005'
H'0003'
H'0002'
H'0001'
H'0000'
;==========================================================================
;
;
RAM Definition
;
;==========================================================================
__MAXRAM
__BADRAM
__BADRAM
__BADRAM
__BADRAM
H'01FF'
H'07'-H'09', H'0D', H'13'-H'14', H'1B'-H'1E'
H'87'-H'89', H'8D', H'8F'-H'91', H'93'-H'97', H'9E'
H'105', H'107'-H'109', H'10C'-H'11F', H'150'-H'16F'
H'185', H'187'-H'189', H'18C'-H'1EF'
;==========================================================================
;
;
Configuration Bits
;
;==========================================================================
_BODEN_ON
_BODEN_OFF
_CP_ALL
_CP_75
_CP_50
_CP_OFF
_DATA_CP_ON
_DATA_CP_OFF
_PWRTE_OFF
_PWRTE_ON
_WDT_ON
_WDT_OFF
_LVP_ON
_LVP_OFF
_MCLRE_ON
_MCLRE_OFF
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'3FFF'
H'3FBF'
H'03FF'
H'17FF'
H'2BFF'
H'3FFF'
H'3EFF'
H'3FFF'
H'3FFF'
H'3FF7'
H'3FFF'
H'3FFB'
H'3FFF'
H'3F7F'
H'3FFF'
H'3FDF'
49
_ER_OSC_CLKOUT
_ER_OSC_NOCLKOUT
_INTRC_OSC_CLKOUT
_INTRC_OSC_NOCLKOUT
_EXTCLK_OSC
_LP_OSC
_XT_OSC
_HS_OSC
LIST
50
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
H'3FFF'
H'3FFE'
H'3FFD'
H'3FFC'
H'3FEF'
H'3FEC'
H'3FED'
H'3FEE'
W_TEMP
STATUS, W
STATUS
STATUS_TEMP
PCLATH, W
PCLATH_TEMP
PCLATH
PCLATH_TEMP, W
PCLATH
STATUS_TEMP, W
STATUS
W_TEMP, F
W_TEMP, W
Copia PCLATH en W
Restaura el valor de PCLATH
Copia los bits del banco de m. usado en el progr. Ppal.
Se posiciona en el banco de memoria
Transpone nibbles del reg. W_TEMP
Reposiciona W al estado original
Retorna de la int. Activando las interrupciones globales
En esta subrutina deben haberse previsto registros usables de la RAM para ubicar los valores de
W , STATUS y PCLATH que aqu se denominaron W_TEMP , PCLATH_TEMP y STATUS_TEMP.
Subrutina de exploracin para conocer la causa de una interrupcin
BTFSC
CALL
INTCON, 1
INTE
BTFSC
CALL
BTFSC
CALL
INTCON, 2
TIMER
INTCON, 0
IPORTB
51
REG1, 0
REG2, 0
ESTADO, 2
IGUAL
REG1, 0
REG2, 0
ESTADO, 0
MAYOR
MENOR
REG1 se carga en W
REG1 xor REG2 y se carga en W
Si Z = 0 son diferentes y brinca
Si Z = 1 son iguales y llama a la subrutina IGUAL
REG1 se carga en W (puede tener cualquier valor)
Se opera como: REG1 REG2 y se carga en W
Si C = 0 REG2 > REG1 y brinca
Si C = 1 REG2 < REG1 y llama a MAYOR
Viene de C = 0 REG2 > REG1 y llama a MENOR
BANCO1
BANCO2
BANCO3
BCF
BCF
RETURN
BSF
BCF
RETURN
BCF
BSF
RETURN
BSF
BSF
RETURN
STATUS, RP0
STATUS, RP1
STATUS, RP0
STATUS, RP1
STATUS, RP0
STATUS, RP1
STATUS, RP0
STATUS, RP1
Teniendo escrita esta subrutina, cuando hay que cambiar de banco, se usar un llamado a alguna
de las entradas, por ejemplo CALL BANCO1.
Tablas
En el siguiente ejemplo se usa una tabla para que, dado un valor del 0 al 7 colocado en W, se obtenga el cdigo binario para prender un indicador de siete segmentos y nos muestre el valor que
haba en W. Los segmentos estn conectados desde la a hasta la g en patas consecutivas del puerto B comenzando con RB0 y hasta RB6. El punto decimal (dp) est cableado a la pata RB7.
Hacemos una tabla en papel para ver las equivalencias entre los valores a visualizar y los segmentos que
deben prender en esa condicin:
52
org 5
15
16
17
18 nada
19
20
21 display
22
23
24
25
26
27
28
29
30
31
movlw
call
movwf
goto
0x03
display
portb
nada
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
pcl
0x3F
0x06
0x5B
0x4F
0x66
0x6D
0x7D
0x07
0x7F
0x6F
0x00..al..0x09
Decimal
0
1
2
3
4
5
6
7
8
9
PortB
0011 1111
0000 0110
0101 1011
0100 1111
0110 0110
0110 1101
0111 1101
0000 0111
0111 1111
0110 1111
Ninstr PC W
15
16 03
Wret
----
Hexa
3F
06
5B
4F
66
6D
7D
07
7F
6F
PortB
-----
La ventaja de este cdigo es su extrema simpleza, la desventaja (y muy importante) es que las
tablas que podemos usar son limitadas porque ocupan posiciones de memoria destinadas al programa. Si se requieren tablas ms largas hay que cablear una memoria ROM externa y usar direccionamiento indirecto, es decir que el cdigo se complica bastante y la rapidez tambin se ve
afectada.
53
equ
0x20
F1
equ
0x21
F2
equ
0x22
aux
equ
0x23
org
clrf
aux
movlw 0x04
movwf cant
movlw 0x07
movwf f1
movlw 0x06
movwf f2
swapf f2,f
sigue
54
movfw cant
btfsc
status,z
goto
termina
bcf
status,c
rlf
aux,f
rlf
f2,f
btfsc
status,c
call
suma
decf
cant,f
goto
sigue
suma
movfw aux
addwf f1,w
movwf aux
return
termina
goto
termina
end
Programa para dividir un binario de 8 bits por uno de 4 bits, sin signo
#INCLUDE<P16F628.INC>
numerador
equ
0x20
divisor
equ
0x21
indice
equ
0x22
resultado
equ
0x23
org
sigue
divide
movlw
0x5a
movwf
numerador
movlw
0x05
movwf
divisor
clrf
resultado
clrf
indice
incf
indice
movfw
divisor
subwf
numerador,0
btfsc
status,c
goto
correr
bcf
status,c
rrf
divisor
55
bcf
status,c
rrf
indice
btfsc
status,c
goto
termina
bcf
status,c
movfw
divisor
subwf
numerador,1
btfss
correr
termina
tatus,c
goto
divide
movfw
indice
addwf
resultado,1
goto
divide
bcf
status,c
rlf
divisor
bcf
status,c
rlf
indice
goto
sigue
goto
termina
end
Referencias bibliogrficas:
Microchip: PIC16F62X datasheet.
56
Apndice A
Configuracin del MPLab 8.3
Les prepar esta gua para que puedan configurar el MPLab como yo lo tengo configurado. No
quiere decir que sea la mejor ni la nica, pero funciona.
Se comienza por generar un nuevo proyecto con el ayudante (Project Wizard)
Fig. 2
La primera pantalla es
como la Fig.2, simplemente una confirmacin. En la siguiente
deberemos elegir el modelo de PIC, en nuestro caso el
16F628/872.
En la prxima seleccionamos la herramienta
para compilar, elegimos el MPASM (opcin
por defecto)
En la siguiente seleccionamos un disco, carpeta
y nombre para guardar el proyecto.
La siguiente sirve para agregar archivos al proyecto. Agregamos el P16F628.INC para usarlo
como encabezado (#include)
57
Finalizacin del wizard para generar el proyecto. Aceptamos para volver a la pantalla del
MPLab.
.
Por
defect
o,
habr
dos ventanas:
a) el contenido actual del proyecto donde
debe aparecer entre las carpetas la de
encabezado con el archivo INC elegido
antes y
b) la ventana Salida (output) que aparece
vaca.
Ir al men Project, Build options y elegir la solapa para
configurar el MPASM Assembler.
Tildar la opcin para deshabilitar la distincin entre maysculas y minsculas, de forma que si editamos el programa
con minsculas, el ensamblador reconozca el archivo de
encabezado que habitualmente est escrito en maysculas.
Verificar la opcin de que trabaje en hexadecimal por defecto.
58
59
60
Escribir el programa como en un editor de texto comn usando TAB o SPACE para espaciar y
ENTER para cambiar de lnea.
Agregar END al final para avisarle al pre-procesador que ah termina la compilacin.
COMPILACIN:
Finalizada la edicin del programa hay que compilarlo haciendo click aqu
Aparecer una ventana de dilogo preguntando si quieren direcciones relativas o absolutas, responder absolutas. En la ventana salida (output) se ver el progreso de la compilacin, figurando
en primer lugar las advertencias (warning) y los errores. Hay que corregir los errores de sintaxis
hasta que slo aparezcan advertencias y la leyenda de compilacin exitosa (building succeeded). Las advertencias son generalmente porque faltaron argumentos en las instrucciones y el
compilador tom los valores que tiene por defecto o porque hay registros que estn ubicados en
bancos de memoria diferentes al cero y les avisa que ese registro est en el banco xx.
Si el programa funciona, quiere decir que las advertencias no tienen importancia.
Si el programa no funciona, comenzar a depurarlo verificando las advertencias que hizo el compilador. Si cambian algo del programa hay que compilarlo nuevamente.
Para correr el programa hay que hacer click ac
Para resetear el programa se usa este botn (debe estar previamente parado)
61
Depurar un programa sin ver el valor de los registros sera imposible, es por eso que el MPLab
tiene una cantidad de herramientas para poder echar un vistazo a lo que ocurre dentro del PIC a
medida que transcurre el programa. Veremos slo las que podran usar ms:
a) Men Ver, opcin Watch:
b) Men Ver, opcin Hardware stack
c) Men Ver, opcin EEPROM
d) Men Debugger, opcin StopWatch
Watch:
Abierta la ventana, conviene configurarla haciendo
click con el botn derecho del mouse, elegir
Properties, solapa Preferences y tildar la opcin
Expand SFR registers, esto permite ver cada
uno de
los bits (flags) que componen los registros del
PIC;
por ejemplo el registro de estado de la ALU
tiene
los flags que indican un desbordamiento (C),
si la
operacin dio cero (Z) o el banco de memoria
en
uso. Para no tener que decodificar el estado de
cada
uno de ellos desde el valor hexadecimal del
registro, con esta opcin se despliegan dentro del
registro que queramos cada uno de esos flags y el
valor
(0 o 1).
Una vez compilado, en la opcin add symbol
aparecen las variables que hayamos usado en
RAM
para el diseo de nuestro programa. La opcin
Add
SFR contiene los registros especiales como el de estado, el de trabajo y los puertos, entre muchos otros.
Esta es la ventana indispensable para la depuracin.
Hardware stack
Si tenemos problemas de lgica, habiendo usado varias llamadas a subrutinas, puede ser que hayamos olvidado algn RETURN y se est llenando la pila. En esta ventana podemos ver cada
una de las llamadas y si regresa o no de cada una de ellas.
EEPROM
Nos muestra el contenido de la memoria permanente de lectura/escritura y permite, adems, escribir en ella. Los valores que escribamos aqu sern puestos en el PIC cuando grabemos el programa en l.
StopWatch
Esta ventana nos muestra cuntos ciclos de instruccin (o tiempo) tard nuestro programa hasta
que par, sea esto porque termin o por una parada programada por nosotros con el smbolo B
rojo que vimos antes.
62
Existen otras herramientas de software para simular el uso de los PIC, algunas ms visuales, pero
como esta es gratuita y est hecha por el fabricante del PIC, me merece ms confianza que las
otras. Ahora resta que usen este software para acostumbrarse a las posibilidades que tiene y que
practiquen porque es una de las bases de la programacin.
63