WikiCiencia - Informática y Computación - Sistemas operativos - Sistemas operativos y características de MS-DOS

Firenox
PRINCIPALELECTRONICAINFORMATICATECNOLOGIANOTICIASDESTACADOS
 

Sistemas operativos y características de MS-DOS

El objetivo del sistema operativo es gestionar y administrar eficientemente los recursos hardware de la computadora, permitiendo ejecutar concurrentemente varios programas sin que haya conflictos en el acceso de cada uno de ellos a cada uno de los recursos que necesita y sin que ningún programa monopolice un recurso determinado.

Es un programa o conjunto de programas de control que tiene por objeto facilitar el uso de la computadora y conseguir que esta se ejecute eficientemente.

Es un programa de control ya que se encarga de gestionar y asignar los recursos hardware a los usuarios, entendiendo por recursos hardware: la C.P.U., la memoria principal, discos y otros periféricos.

El S.O. también facilita el uso del ordenador, cada dispositivo de E/S para ser utilizado requiere varias instrucciones maquina que establezcan un diálogo entre la computadora central y el periférico, estas instrucciones dependen considerablemente de las características concretas del periférico y por otra parte estas instrucciones y operaciones son comunes para todos los programas que lo utilizan.

El S.O. con objeto de facilitar el trabajo de los ordenadores contiene rutinas y modelos de gestión de E/S evitando a los programadores y usuarios conocer las instrucciones máquina concretas de cada periférico.

Servicios de Sistema Operativo:

Servicios para facilitar la programación: ejecutar programas, operaciones E/S, manipulación del sistema de ficheros, detectar errores…

Servicios para hacer eficiente el uso del computador: Asignar recursos, llevar contabilidades, protección, dar información…

Protección:

Protección de E/S.

Protección de memoria.

Protección de la C.P.U.

Protección de E/S: el S.O. no permite a los programas que accedan directamente a la E/S, así podemos distinguir dos tipos de actuación:

El modo usuario y el modo supervisor que permite el acceso a una serie de acciones privilegiadas.

Protección de memoria: Se crea una zona límite en la memoria a partir de la cual están las aplicaciones de los usuarios y no se permite el acceso a la zona que ocupa el S.O. asimismo se crea otro límite superior para no acceder a la zona ocupada por otros programas.

Protección de la C.P.U.: Se pone un contador de tiempo para que cada cierto tiempo la C.P.U. pase a ser controlada por el S.O. para que este decida a que programa le da el control.

Evolución histórica de los S.O.

Normalmente se consideran tres etapas o generaciones que van prácticamente paralelas a las generaciones de los equipos informáticos:

1º Etapa:

Desde la construcción de las primeras computadoras (1943) hasta 1956, puede decirse que realmente no existen sistemas operativos. El programador que deseaba usar la computadora debía apuntarse a un cuaderno de reservas de horas, cuando llegaba su turno, el programador que hacía también las funciones de operador introducía su programa y esperaba que poco a poco fuesen escribiéndose en una impresora los resultados, el programa se introducía a través de tarjetas perforadas y se redactaba en lenguaje máquina, los datos también se suministraban a la computadora a través de tarjetas perforadas.

Posteriormente se idearon los ensambladores, después de ensamblar el programa, el programa objeto obtenido (en lenguaje máquina) se montaba manualmente, es decir, se unía con otros paquetes de tarjetas que contenían las funciones utilizadas en el programa y no definidas en el mismo (multiplicación o raíz cuadrada). Por último se ejecutaba el paquete total de tarjetas con los datos del programa. Con esta forma de trabajar no se obtiene provecho de la computadora, cuando la CPU trabaja los dispositivos E/S están inactivos y cuando un dispositivo E/S está actuando, las demás unidades (incluida CPU) no trabajan, las grandes posibilidades de la CPU en cuanto a velocidad de ejecución no se aprovechan adecuadamente.

Como resumen de esta primera etapa podemos decir que la introducción y la ejecución de programas se hacía manualmente, uno a uno ya que no existían S.O.

2º Etapa:

En vez de utilizar sólo lectores de tarjeta e impresoras, se utilizaban soportes de información intermedios como citas magnéticas, al principio de ella sólo se encontraban ensambladores, controles de biblioteca, necesitándose dar por tarjeta únicamente el programa y los datos de usuario.

Posteriormente se dio un paso importante, se utilizó una computadora satélite para gestionar las E/S y la computadora principal (más potente) únicamente leía y escribía sobre cinta magnética.

Esta computadora satélite volcaba sobre cinta magnética los programas en tarjeta de los usuarios, en la cinta se tenían así grabadas imágenes de tarjeta, posteriormente y una vez que en una cinta había una cola de trabajos, el operador desmontaba la cinta de la computadora satélite y la montaba en la principal, ésta leía los programas de la cinta y los resultados a imprimir los escribía en otra cinta magnética, obteniéndose así por cada programa un archivo de impresión grabado en cinta. El operador con cierta regularidad, montaba la cinta de archivos de impresión en la computadora satélite y esta los iba escribiendo por las impresoras.

El procedimiento descrito desde el punto de vista usuario-programador, es mucho más sencillo que el de la primera etapa, pero es necesario un control automático del flujo o cola de trabajos. Este tipo de funcionamiento denominado por lotes (Batch) es posible gracias a la existencia de un S.O. es decir, de un programa de control, este programa de control que facilita los trabajos se suele llamar monitor, el monitor de un sistema por lotes debe hacer fundamentalmente dos cosas:

1. Identificar e interpretar las tarjetas de control (las cuales se incluyen con el paquete de tarjetas del programa y datos para identificar el principio y fin de cada trabajo). Una vez interpretada una tarjeta de control, el monitor da paso a una rutina que realiza funciones asociadas a ella.

2. Intervenir al final de la ejecución de un trabajo para cerrar el archivo de impresión del trabajo que acaba de iniciar (pasar el control) al siguiente trabajo de la cola, es decir, hace una secuenciación automática de trabajos.

Poco a poco, estos monitores de lotes se perfeccionaron incluyendo rutinas de control de E/S. módulos de controladores del tiempo máximo de CPU (para evitar que un programa se esté ejecutando por un tiempo indefinido a causa de un error de programación), módulo de contabilidad de uso de la computadora por los usuarios, etc…

La interacción del usuario sobre el S.O. se hace básicamente por medio de tarjetas de control o en la actualidad por medio de órdenes de control, estas órdenes se dan según las reglas del lenguaje de control del sistema operativo.

3º etapa:

Esta etapa se caracteriza fundamentalmente por el perfeccionamiento del sistema de trabajo por lotes, el desarrollo del S.O. en multiprogramación (1963) y la introducción del concepto de memoria virtual.

Conceptos básicos:

Proceso: cualquier tarea o programa que se está ejecutando en el ordenador.

Fichero: es una estructura de datos almacenada en disco.

Programas de control y proceso:

Programa de control se refiere a los S.O. o al menos al núcleo de esos S.O. Puede definirse como el conjunto de programas que controla el funcionamiento de los demás programas y administra los recursos hardware, facilitando el uso de la computadora de la forma más eficiente posible. Dos tipos:

El S.O. propiamente dicho:

- Núcleo (KERNEL)

- Cargador inicial. (BOOTSTRAP)

- Módulo de gestión de memoria.

- Módulo de gestión de periféricos.

- Módulo de gestión de archivos.

- Planificador de trabajos.

El intérprete de lenguajes de control, que es un proceso que interpreta y ejecuta las órdenes del usuario

Programas de proceso:

- Traductores.

- Programas de servicio (utilidades y aplicaciones).

Programas de servicio:

- Utilidades:

            - Gestionar archivos.

            - Antivirus.

            - Editores de texto.

- Aplicaciones:

            - Programas de los usuarios en general.

            - Procesadores de texto.

            - Hojas de cálculo.

            - Aplicaciones gráficas.

            - CAD, comunicaciones, juegos…

Sistemas operativos monoprogramados Vs multiprogramados. Tiempo compartido.

Sistemas monoprogramados son aquellos que sólo son capaces de ejecutar una instrucción a la vez (MSDOS).

Sistemas multiprogramados: quizás sea la técnica más importante para obtener gran eficiencia en un sistema informático, mientras en un sistema monoprogramado cuando el programa está efectuando una operación de E/S la CPU está inactiva (pudiendo estar realizando miles o millones de instrucciones).

Se denomina proceso a un programa o rutina en ejecución, un programa en sí es un ente pasivo, mientras que un proceso es un ente activo.

La multiprogramación es una técnica que aprovecha los tiempos muertos de la computadora central, los tiempos muertos en periféricos y los espacios de memoria principal no ocupados por el proceso, consiste en esencia en cargar en la memoria principal varios procesos.

El SO y más concretamente un módulo de este llamado despachador (dispatcher) o planificador de prioridades de la CPU, va dando turno de ejecución (asignándole la CPU) a cada uno de los procesos almacenados en memoria, el tiempo asignado a cada trabajo depende del tipo de multiprogramación utilizada, pero en cualquier caso los programas se van ejecutando a lo largo del tiempo a trozos, dando la sensación a los usuarios de que todos los trabajos en memoria se están ejecutando simultáneamente, en realidad no es así ya que una CPU sólo puede, en un instante dado estar dedicada a un programa (ejecutando una instrucción).

Con más rigor se dice que la CPU está ejecutando concurrentemente varios programas, en un tiempo determinado se han estado ejecutando alternativamente varios programas ubicados en la memoria central. Con la multiprogramación también se aprovecha mejor la memoria central, ya que si un programa no la ocupa toda (que es lo habitual) se introducen otros programas para ejecutarse concurrentemente con aquel.

Hay tres tipos de multiprogramación:

- Multiprogramación clásica: El dispatcher da el turno a un trabajo P1, cuando P1 ha de realizar una operación de E/S da el turno a P2 hasta que este a su vez realiza otra instrucción de E/S pasándose a ejecutar P3 y así sucesivamente se va repartiendo el tiempo entre varios trabajos. Cuando P1 acaba la operación de E/S, el periférico utilizado para dicha operación comunica el hecho a la CPU dándole el dispatcher la vez la próxima ocasión que le toque el turno.

Tratamiento paralelo:

El tipo de multiprogramación descrito anteriormente tiene el problema de que un programa con mucha CPU y poca E/S, puede monopolizar la CPU hasta que termine su ejecución, esto se evita con el tratamiento paralelo, con el, a cada uno de los procesos en memoria se le asigna un intervalo de tiempo fijo denominado quantum, cuando finaliza el quantum de un proceso el dispatcher pasa el control al siguiente proceso.

Tiempo compartido:

El tipo de multiprogramación que se acaba de describir sigue teniendo tiempos muertos de CPU, bien porque un proceso durante su quantum pasa a E/S o bien porque cuando le toca el turno aun está en una operación de E/S .

Con el tiempo compartido (time sharing) se produce un cambio de proceso en la CPU por dos razones, que se agote el quantum del proceso en curso o que el proceso que se está ejecutando en CPU pase a E/S durante su quantum. Además, el siguiente programa sólo entrará en la CPU cuando le toque el turno y esté listo si no lo perderá y pasará al siguiente.

Sistema operativo MS-DOS (Microsoft Disk Operating System):

Fue desarrollado sobre 1980 por Paul Allen y Bill Gates.

Existen otras versiones de DOS de otras compañías como PC-DOS de IBM o DR-DOS de Digital Research.

En el DOS existen dos tipos de comandos:

- Internos: Que entiende directamente del intérprete de comandos (dir, del, type, copy…)

- Externos: utilidades a parte (format, msav…)

El DOS se compone de tres ficheros principales:

- IO.SYS

- MSDOS.SYS

- COMMAND.COM

Los dos primeros son el núcleo del SO, al arrancar el ordenador se copian en memoria y pasan a controlar la computadora. El Command.com es el intérprete de comandos, cuando el usuario teclea un comando, si este es interno lo ejecuta directamente, si es externo ejecuta ese otro programa cambiando el contador de programa para que apunte a ese nuevo programa.

Dentro del DOS distinguimos:

- Directorios.

- Ficheros.

Sistemas de ficheros en MS-DOS: 

Tres niveles: 

Nivel Hardware: es el nivel de los dispositivos que manejan el disco (FDC Floppy Disk Controller), mediante este dispositivo se accede al disco pudiéndose formatear una pista, leer un sector, fusionarse sobre una pista etc… Proporciona una serie de comandos para operar con Fidel disco. 

Nivel de implementación: trata de como el MS-DOS crea la estructura de ficheros sobre los sectores del disco. 

Nivel lógico: trata de como el MS-DOS maneja los ficheros por medio del (FCB Fail Control Block) y del Handless (identificadores).

El contenido del disco o volumen está organizado de la siguiente forma: 

Bootsector: Es el sector lógico 0 conocido como sector de arranque, contiene toda la información crítica que concierne a las características del disco como medio de almacenamiento. 

Estructura: El primer Byte de ese sector es siempre una instrucción de salto 8086, bien una JMP normal  (código de operación OE9H) seguida por un desplazamiento de 16 bits o bien un salto corto OEBH seguido por un desplazamiento de 8 bits y un NOP (no operación 9OH) si lo se encuentra alguno de estos códigos de JMP es señal de que el disco no ha sido formateado para uso bajo MS-DOS, a continuación de la instrucción inicial JMP encontramos un campo de 8 bytes reservado por Microsoft para identificación del fabricante.

0, 1, 2

JMP Ó NOP

 

3-10

FABRICANTE (8 BYTES)

 

11, 12

BYTES / SECTOR (2 BYTES)

 

13

SECTORES POR CLUSTER (1 BYTE)

14,15

SECTORES RESERVADOS (2 BYTES)

16

NUMERO DE FATS (1 BYTE)

17, 18

NUMERO DE ENTRADAS EN EL DIRECTORIO RAIZ (2 BYTES)

19, 20

SECTORES TOTALES (2 BYTES)

21

BYTE DE DESCRIPCIÓN DEL MEDIO (1 BYTE)

22

NUMERO DE SECTORES POR FAT (2 BYTES)

23, 24

NUMERO DE SECTORES POR PISTA (2 BYTES)

25, 26

NUMERO DE CABEZAS (2 BYTES)

27, 28

NUMERO DE SECTORES OCULTOS (2 BYTES)

 

RUTINA DE ARRANQUE (BOOTSTRAP)

 

El tercer componente del sector de arranque es el bloque de parámetros BIOS (BPB) (Basic Input Output System), situado entre los bytes 11 y 23, esta estructura de datos describe las características físicas del disco y permite que el gestor de dispositivos calcule las direcciones físicas adecuadas que corresponden a un sector lógico determinado, también contiene información empleada por el MSDOS y otras utilidades para calcular la dirección y tamaño de cada una de las zonas de control de disco (FAT y directorio raíz)

Ejemplo:

FD

HD

BYTES /SECTOR

512

512

SEC. CLUSTER

2

4

SEC. RESERVADOS

1

1

FAT

2

2

Nº ENT. DIR. RAÍZ

112

512

SEC. TOTALES

720

BYTE DESCRIP. MEDIO

FD(H

F8(H

Nº SEC. POR  FAT

2

41

Nº SEC. POR PISTA

9

27

Nº DE CABEZAS

2

8

Nº SEC. OCULTOS

0

27

FAT:

Cuando se crea o amplia un fichero se le asignan sectores de disco de la zona reservada al mismo en potencias de dos que reciben el nombre de clusters, el número de sectores por cluster de un medio de almacenamiento queda definido en el bloque de parámetros BIOS.

En la FAT es donde se realiza la caracterización de los clusters que conforman un fichero, se mantienen dos copias de la FAT por razones de consistencia, además de estas dos copias, el MSDOS mantiene una copia más en memoria, la FAT permite acceder desde el nivel lógico (cluster) hasta el nivel físico del disco (sectores). Se pueden distinguir dos tipos de FATS, FATS de 12 bits y de 16 bits:

La FAT de 12 bits se denomina así porque es lo que ocupa cada entrada de cluster en la FAT. Cuando hay más de 4095 clusters se requiere el uso de la FAT de 16 bits.

Estructura de una FAT de 12 bits:

Las dos primeras copias de la FAT están siempre reservadas (3 bytes), los 8 primeros bits de la primera entrada FAT reservada contienen una copia del byte descriptor del medio que puede tener los siguientes valores:

CARAS (SIDES)

SECTORES / PISTA

TAMAÑO

FF

DS

8

320 KB

FE

SS

8

160 KB

FD

DS

9

360 KB

FC

SS

180 KB

F9

DS

15

1,2 MB

F9

DS

9

720 KB

F9

DS

8

1,44 MB

F8

FIXED DISK

En algunos tipos de discos en los que las entradas FAT tienen 16 bits de largo, la extracción del número de clusters a partir de al FAT resulta mucho más sencillo.

Pasos a seguir:

1. Usar la entrada del directorio para localizar el cluster de comienzo del fichero en cuestión.

2. Multiplicar el número por 2.

3. Utilizar el producto como offset en la FAT, desplazando la palabra situada en tal offset tomándola como word a un registro.

4. Si el resultado es un valor OFFF8 (H Ó 0FFFF (H no hay más clusters en el fichero, en caso contrario los 16 bits contendrán el número correspondiente al siguiente cluster del fichero.

5. Volver al paso 2 para calcular el siguiente.

Ejemplo:

Supongamos un disco de 5,25 pulgadas con 40 pistas, 2 caras y 9 sectores por pista (12 bits).

FAT: FD FF FF 03 40 00 05 60

El número de cluster inicial es el 2 Ci = 2

Ci=2

Ci= 2*1,5 = 3 (offset)

FAT + 3 como word à 4003 (H

Ci à Par à 12 bits menos significativos à 003 => próximo cluster = 3

Ci=3

Ci= 3*1,5 = 4,5 = 4 (offset)

FAT + 4 como word à 0040 (H

Ci à impar à 12 bits mas significativos à 004 => próximo cluster = 4

El 2º 3º y 4º byte en  FATS de 16 bits  constituyen el resto de los dos primeros campos de la FAT y contienen siempre FF (H  , al margen de las dos primeras entradas reservadas de la FAT el resto de las mismas describe la utilización de sus correspondientes clusters del disco. El contenido de los campos FAT se cmplementa de la siguiente forma.

VALOR

SIGNIFICADO

(0) 000 (H

CLUSTER DISPONIBLE

(F) FF0 (H - (F) FFG (H

CLUSTER RESERVADO

(F) FF7 (H

CLUSTER EN MAL ESTADO

(F) FF8 (H - (F) FFF (H

ULTIMO CLUSTER DEL FICHERO

(X) XXX

SIGUIENTE CLUSTER DEL FICHERO

Cada entrada de fichero en el directorio de disco contiene el número del primer cluster asignado a dicho fichero, que se usa como punto de entrada en la FAT. A partir de ese punto de entrada cada entrada de la FAT contiene el número de cluster del siguiente cluster del fichero hasta encontrar una marca del último cluster.

Cuando asignamos un nuevo cluster a un fichero le asignamos el primer cluster que está libre después del primer cluster asignado, en caso de que se borre un fichero los clusters asignados pasan a estar libres, en cada operación de asignación o liberación de cluster se realiza una nueva actualización de la FAT.

Interpretación de la FAT:

Una vez comprendida la estructura del disco estudiaremos como se puede aplicar este conocimiento a la localización de una posición FAT a partir de un número de cluster.

Si la FAT tiene entradas de 21 bits:

1. Usa la entrada del directorio para localizar el cluster de comienzo del fichero en cuestión.

2. Multiplicar el número de cluster por 1,5.

3. Utilizar la parte entera del producto como offset dentro de la FAT y desplazar la palabra situada en tal offset tomándola como word a un registro.

4. Si el número de cluster es par realizar And del registro con 0FFF (H  esto es coger los 12 bits menos significativos.

5. En caso contrario, realizar un desplazamiento lógico del registro 4 bits a la derecha, esto es coger los 12 bits más significativos.

6. Si el resultado es un valor 0FF8 (H  ó 0FFF (H  no hay más clusters en el fichero, en caso contrario los 12 bits contendrían el número correspondiente al siguiente cluster del fichero.

7. Volver al paso dos para cambiar al siguiente.

NOMBRE

8 BYTES

EXTENSIÓN

3 BYTES

ATRIBUTOS

1 BYTE

RESERVADOS

10 BYTES

HORA

2 BYTES

FECHA

2 BYTES

CLUSTER

2 BYTES

TAMAÑO

4 BYTES

Nombre del fichero:

Aparece alineado a la izquierda y si es necesario se rellena con blancos. El primer byte puede contener la siguiente información especial.

- Valor 00 (H: Esta entrada de directorio no ha sido utilizada nunca , se utiliza para limitar las búsquedas.

- Valor E5 (H: El fichero ha sido borrado.

- Valor 05 (H: El primer carácter del nombre del fichero es en realidad E5 (H.

- Valor 2E (H :  La entrada es una máscara del subdirectorio actual o del directorio padre. Si el siguiente byte es también 2E el campo cluster contiene el número de cluster del directorio padre. (0 si el padre es el raíz) en caso contrario los bytes del nombre y de la extensión tienen el valor 20 ( ) y el campo cluster contiene el número de cluster de ese directorio.

Atributos:

El byte de atributos de la entrada del directorio se organiza de la siguiente forma:

- El bit 0 indica que el archivo es de sólo lectura, las operaciones que intenten escribir o borrar ese fichero producirán un error.

- El bit 1 indica que el fichero es oculto y se excluye de los procesos de búsqueda normales.

- El bit 2 indica que el fichero es de sistema.

- El bit 3 es la etiqueta de volumen y sólo puede existir en el directorio raíz.

- El bit 4 indica que es un subdirectorio.

- El bit 5 indica que es un archivo.

- Los bits 6 y 7 indican que es reservado.

Campo de hora.

Cluster inicial:

Indica el número del primer cluster del fichero, este número es utilizado para entrar en la FAT, estos 2 bytes se identifican como un word, es decir, el 1º byte es el menos significativo y el segundo byte el más significativo.

Tamaño:

Se interpreta como un entero de  4 bytes almacenándose primero los dos bytes más significativos.

Cálculo del número de sector lógico a partir de número de cluster:

# sector = (# cluster - 2) * (número de sectores por cluster) + (número del sector lógico del primer sector del área de datos).

Directorios:

Los directorios en disco pueden considerarse como catálogos que describen el contenido  de volumen de un disco lógico, en discos MSDOS existen dos tipos de directorios:

Directorio raíz:

Que tiene un tamaño fijo para un tipo de disco dado y subdirectorios que pueden crecer hasta tener cualquier tamaño. Cada disco un y sólo un directorio raíz, el tamaño y posición del directorio están determinados por el programa format en la inicialización del disco.

El número de entradas del directorio raíz, así como la posición del directorio en el disco puede averiguarse con el correspondiente bloque de parámetros BIOS en el sector de arranque.

Cada fichero del disco dispone de una única entrada de 32 byte en uno de los directorios del mismo, esta entrada define el nombre del fichero y su extensión, los privilegios de acceso al mismo, la fecha y hora, en que fichero fue creado y actualizado por última vez, el cluster de comienzo del fichero y su tamaño.

Subdirectorios:

El número de subdirectorios puede variar desde 0 hasta copar la totalidad del disco, a su vez estos subdirectorios pueden poseer cualquier número de niveles.

Una entrada de directorio que apunta a un subdirectorio tiene activado el bit 4 del byte de atributos, posee una marca de hora y fecha y su tamaño lógico es 0 el campo número de cluster apunta al primer cluster que implementa el subdirectorio.

Dentro de un fichero de subdirectorios el formato de cada entrada de 32 bytes que describe un fichero u otro subdirectorio es exactamente el mismo que se emplea en el subdirectorio raíz, además cada subdirectorio contiene dos entradas especiales . y .. al comienzo del directorio, estas dos entradas especiales se colocan en su lugar cuando se crea el subdirectorio y no pueden borrarse. La entrada con un sólo punto se refiere al subdirectorio actual y su campo cluster apunta al cluster en que se encuentra el subdirectorio. La entrada con doble punto se refiere  al directorio padre del subdirectorio actual y su campo cluster apunta al primer cluster del padre. Si el padre es el raíz este campo toma el valor 0.

Caras

Sec./pista

Sec. FAT

Sec. root

Ent. root

Sec./Clust.

1

8

1

4

64

1

FD 5,25

2

8

1

7

112

2

1

9

2

4

64

1

2

9

2

7

112

2

2

15

7

14

224

1

2

9

3

7

112

2

FD 3,5

2

18

9

14

224

1

Nivel lógico:

Funciones de los FCBs (Fail Control Blocks):

Con el término funciones FCB nos referimos al conjunto de funciones para el registro de ficheros. Estas funciones  se basan en una estructura de datos llamada bloque de control de fichero (Fail Control Block) que mantiene una cierta información de tipo de archivo sobre los ficheros abiertos, permiten al programador la creación, apertura, cierre y borrado de ficheros así como la lectura o escritura de registros de cualquier tamaño, en cualquier posición dentro de tales ficheros.

Estas estructuras se mantienen por compatibilidad con las versiones de MSDOS anteriores a la 2.0, a partir de la versión 2.0 se pasó a utilizar los handles. Cuando se abre un fichero si la operación de apertura o creación es correcta el MSDOS devuelve una cadena de 16 bit o handle que almacena en el programa de aplicación y se utiliza para especificar el fichero en operaciones posteriores. Cuando se emplean las funciones handle las estructuras de datos que contienen la información de archivo sobre el fichero son mantenidas por el SO dentro de su propio espacio de memoria y no resultan accesibles al programa de aplicación.

Un bloque FCB es una estructura de datos de 37 bytes colocada dentro del espacio de memoria destinado al programa de aplicación. Tiene la siguiente estructura:

Nº DE BYTES

IDENTIFICACIÓN DE UNIDAD

1

NOMBRE DEL FICHERO

8

EXTENSIÓN

3

Nº DEL BLOQUE ACTUAL

2

TAMAÑO DEL REGISTRO

2

TAMAÑO DEL FICHERO

4

FECHA DE CREACIÓN/ACTUALIZACIÓN

2

HORA DE CREACIÓN/ACTUALIZACIÓN

2

RESERVADO

8

Nº DE REGISTRO ACTUAL

1

Nº DE REGISTRO RELATIVO

4

Los FCBs no abiertos son aquellos que sólo necesitan rellenar los dos primeros campos, es decir, cuando se realice una llamada al sistema y especifiquemos las necesidades de un FCB no abierto solamente será necesario rellenar los tres primeros campos de la estructura. El resto de los campos los completará el MSDOS.

Se puede utilizar también una variante especial de FCB llamada bloque de control del fichero extendido que permite crear o acceder a ficheros con atributos especiales (ocultos, sólo lectura…).un FCB extendido posee un encabezamiento de 7 bytes seguido por la estructura de 37 bytes vista anteriormente.

El primer byte contiene  FF (H  y que no puede usarse lealmente como código de unidad y que se utiliza para decir al MSDOS que está tratando con un FCB extendido, los 5 bytes siguientes están reservados y el séptimo byte contiene el atributo de fichero especial que está siendo accedido.

Utilización de ficheros mediante handles:

Las funciones de gestión de ficheros mediante handles se utilizan para acceder a ficheros de una forma semejante a la empleada en el sistema operativo UNIX, cuando un programa desea abrir o crear un fichero separa la especificación de fichero a los registros Ds:Dx

Si la operación finaliza con éxito el MSDOS devuelve un handle de 16 bits al programa en Ax, este handle puede almacenarse para referencias posteriores. Toda las funciones handle retornan un flag de acarreo de la CPU inactivo cuando la operación ha sido correcta, si ha aparecido algún error el flag está activado. En este último caso el registro Ax contiene un código que describe el fallo. El número de handles que pueden estar activos simultáneamente, es decir el número de ficheros y dispositivos que pueden estar abiertos a la vez utilizando handles, queda limitado por dos caminos diferentes.

1. El número máximo de fichero abiertos concurrentemente en el sistema, para todos los procesos activos combinados queda especificado en la entrada FILES : Numero dentro del fichero Config.sys, este valor determina el número de entradas que se acomodan en la tabla de ficheros abiertos del sistema.

2.  El número máximo de ficheros abiertos concurrentemente es un sólo proceso es 20, suponiendo que se han dispuesto entradas suficientes en la tabla de ficheros abiertos del sistema, cuando se carga un programa, se asignan 5 de estas 20 handles potenciales a los dispositivos estándar. Cada vez que el proceso realiza una llamada a una función del MSDOS de creación o apertura se le asigna un handle en una zona reservada dentro de las 20 hasta que se consumen todos ellos o se llena la tabla de ficheros abiertos del sistema.

Create Handle crea un fichero y si este ya existiese lo pone a cero (lo borra), hay que especificar la ruta o path finalizada con el carácter 0H (H

3C (H

AHß3C

DS : DX ß PUNTERO (dirección de memoria) A PATHNAME

CXß ATRIBUTO

Esto devuelve:

CFß 1 ERROR

AXß 3 NO SE HA ENCONTRADO EL PATH

AXß 4 NO HAY HANDLES DISPONIBLES

AXß 5 NO SE PERMITE EL ACCESO

CFß 0 NO HAY ERROR

AXß HANDLE

3B (H : Crea un fichero pero si existe lo respeta.

3D(H : Abrir un fichero (lectura o escritura)

READß 3F (H

AHß 3F (H

BXß HANDLE

CXß NUMERO DE BYTES

DS : DX ß PUNTERO A DTA

CFß 1 ERROR

AXß 5 EL FICHERO NO FUE ABIERTO PARA LECTURA

AXà 6 NO ES VALIDO O NO HA SIDO ABIERTO ANTES

CFß 0 NO HAY ERROR

AXà NÚMERO DE BYTES QUE HA LEIDO

Estructura de la tabla de particiones:

445 PRIMEROS BYTES

RESERVADOS

16 BYTES SIGUIENTES

ENTRADA PARTICIÓN

1

16 BYTES SIGUIENTES

ENTRADA PARTICIÓN

2

16 BYTES SIGUIENTES

ENTRADA PARTICIÓN

3

16 BYTES SIGUIENTES

ENTRADA PARTICIÓN

4

2 BYTES SIGUIENTES

AA55(H

Información de las entradas:

Primer byte:

- 80(H : Partición activa.

- 0(H : Partición inactiva.

Siguiente byte: Cabeza del primer sector de la partición.

Siguientes 2 bytes:

- Pista (cilindro) del primer sector de la partición (10 bits).

- Número del sector del primer sector (6 bits).

Siguiente Byte: tipo de partición

- 1: Fat de 12 bits.

- 2: Fat de 16 bits.

- 5: Extendida.

Siguiente byte: Cabeza del último sector.

Siguientes 2 bytes: Pista/Sector del último sector.

Siguientes 4 bytes: Indican el sector inicial (relativo al comienzo del disco).

Siguientes 4 bytes: Número de sectores de la partición.

E/S EN MS-DOS:

Teclado:

Es un dispositivo autónomo que se comunica con la CPU por medio de interrupciones hardware.

Cada vez que se pulsa una tecla se genera una interrupción (interrupción 9), entonces la rutina de servicio para esa interrupción traslada el código generado del puerto del teclado al buffer del teclado.

El resto de funciones de MSDOS y BIOS para el manejo del teclado acceden directamente al buffer de teclado.

El teclado produce un código de 8 bits llamado Keycode o Scancode (código de rastreo) ordenado según la posición de las teclas. La interrupción lee el puerto del teclado situado en la dirección de E/S 60 (H y usa una tabla de traslación de códigos para transformarlo en un código de 16 bits denominado código ASCII extendido que se sitúa en el buffer de teclado.

Dentro del ASCII extendido hay dos tipos:

ASCII normal.

Teclas especiales:

La captación de un código extendido depende del estado de ciertas teclas (Alt, Control, Caps Lock, Num Lock) que poseen una función especial, este estado se halla almacenado en una variable RAM localizada en el Byte (posición) 0047 (H

BIT

 

7

INS

SI ESTÁN ACTIVADAS

6

CAPS LOCK

5

NUM LOCK

4

SCROLL LOCK

3

ALT

SI ESTÁN PULSADAS

2

LEFT SHIFT

1

RIGHT SHIFT

Hay combinaciones especiales de teclas que producen efectos especiales (control + alt +sup) (control + scrol llock) (shift + print screen) que (esta última) invoca la rutina de la BIOS para la realización de un volcado de pantalla por impresora.

Variables RAM referentes al teclado:

00417 (H à Indica el estado de las teclas especiales. (1 Byte).

00418 (H à Indica el estado de las teclas especiales. (1 Byte).

BIT

 

7

INS

 

6

CAPS LOCK

 

5

NUM LOCK

 

4

SCROLL LOCK

 

3

1 si Control . Scroll Lock

2

NO USADAS

1

0

0041E (H : En esta posición se halla el buffer de teclado, es un buffer circular de 16 palabras (32 Bytes) que funciona como una cola. Se accede a el por medio de dos punteros.

Un puntero a la cabeza de la cola por donde se extraen los datos ante un requerimiento del DOS o la BIOS y un puntero al final de la cola. Dando la interrupción 9 escribe los datos del puerto.

0041A (H  (2 Bytes): En esta posición se encuentra el puntero a la cabeza del buffer.

0041C (H (2 Bytes): Puntero al final del buffer, ambas direcciones están de la forma 0040 : Offset, si los dos punteros apuntan a la misma dirección el buffer está vacío.

La pantalla en MSDOS:

Acceso a memoria de pantalla (o vídeo).

Una parte de la memoria RAM está dedicada a los controladores de pantalla, en general va de la dirección A0000 (H a la dirección BFFFF (H (128 Kb).

La memoria RAM dedicada al controlador CGA (y superiores) está en las direcciones B800 (H a BFFFF (H (16 Kb) y en las posiciones B0000 a la B0FFF (4 Kb) para el adaptador monocromo.

Modos estandar de pantalla.

Del 0 al 7 (H , empiezan en la B800 (H

00

40x25

Modo texto

B/N

01

40x25

Modo texto

16 Colores

02

80x25

Modo texto

B/N

03

80x25

Modo texto

16 Colores

04

320x200

Modo Gráfico

4 Colores

05

320x200

Modo Gráfico

4 Colores

06

640x200

Modo Gráfico

B/N

07

80x25

Modo texto

Monocromo B000(H

En los modos de texto lo que se representa es cada carácter (2 bytes), el primer byte para el código de carácter y el segundo byte para el atributo, el byte de atributo establece el color del carácter del fondo.

En los modos de texto se puede escoger entre dos resoluciones:

40x25 : Corresponde a los modos 0 y 1, como hay dos bytes por carácter y 40 caracteres por fila necesitaremos 80 bytes por fila, por 25 filas implica que necesitaremos 2000 bytes por pantalla, (realmente se asignan 2048 bytes) según esto si la memoria es de 16 Kb entonces es posible almacenar 8 páginas.

80x25 : Corresponde a los modos 2 y 3 y necesitaremos 160 bytes por fila, por 25 filas implica que necesitaremos 4000 bytes por pantalla (realmente se asignan 4096 bytes), en 16 Kb caben 4 páginas.

Descripción de la memoria de pantalla:

MODO TEXTO.

40X25 : Esta resolución se dispone de tal forma que por ejemplo la dirección B800 : 0000 (H va el código offset:1 y el atributo, si queremos calcular el desplazamiento (offset) sobre el segmento B800 correspondiente a una fila y columna determinadas.

El byte de atributo funciona de dos modos:

1. El más corriente: es de 16 colores de letra y 8 colores de fondo junto con el parpadeo.

BIT

 

7

BLINK

FONDO

6

RED

5

GREEN

4

BLUE

3

INTENSIDAD

LETRA

2

RED

1

GREEN

0

BLUE

2. Existe otro modo relacionado por un bit del controlador con 16 colores de letra y 16 colores de fondo, en los monitores monocromo, el byte de atributos se interpreta de una forma similar.

0 (H à No se ve.

1 (H à Subrayar.

7 (H à Vídeo normal.

9 (H à Alta intensidad y subrayado.

70 (H à Vídeo inverso.

81 (H à Blink y subrayado.

87 (H à Blink vídeo normal.

8F à Blink alta intensidad y subrayado.

F0 à Blink vídeo inverso.

3800:0000

CÓDIGO

COLUMNA 0

FILA 0

3800:0001

ATRIBUTO

COLUMNA 0

FILA 0

3800:0002

CÓDIGO

COLUMNA 1

FILA 0

3800:0003

ATRIBUTO

COLUMNA 1

FILA 0

3800:0004

CÓDIGO

COLUMNA 2

FILA 0

Con cada byte se representan 4 pixels, harán falta 2 bits para cada pixel. El pixel que está más a la izquierda está representado con los bits más significativos de la posición de memoria.

Los dos posibles valores del bit representan los 4 colores posibles, los colores correspondientes dependen de la paleta seleccionada por el controlador CRT accesible mediante una función de la BIOS.

En memoria los datos correspondientes a las líneas de pantalla se encuentran entrelazadas, porque es más cómodo a la hora de iniciar el barrido de pantalla, ya que este se hace de forma que primero se ponen las líneas pares y luego las impares.

IMPARES

B800:0 (H

LÍNEA 0

80 BYTES

8000 BYTES

B805:F (H

LÍNEA 2

80 BYTES

------------------

------------------

------------------

------------------

------------------

PARES

BA000 (H

LÍNEA 1

80 BYTES

8000 BYTES

LÍNEA 3

80 BYTES

Ejemplo de acceso a memoria con 320x200:

Dada la posición en pantalla es necesario calcular el desplazamiento respecto al segmento y la posición dentro del byte preservando también los bits correspondientes a los otros pixels.

Supongamos que X está en el rango 0 – 199 e Y en el rango 0 – 319 (siendo X la columna e Y la fila). Si queremos calcular el desplazamiento con respecto al B800 (H seguiremos los siguientes pasos:

1. Tenemos un desplazamiento D1 en función de si la fila es par (0) o impar (2000 (H).

2. Desplazamiento de fila D2 que es Y/2*80.

3. Desplazamiento de columna D3 = X/4

4. Desplazamiento total = D1 + D2 + D3

Para coger los bits que indican el color del pixel seleccionado anteriormente, el desplazamiento dentro del byte es:

X MOD 4

Modo gráfico 640x200 (2 colores):

En este caso la representación en memoria es de 1 bit por pixel.

Inicialización de un PC:

Cuando se inicializa un PC se ejecuta una rutina situada en ROM, el punto de entrada de esta rutina es FFFF0 – FFFF3

Resumen de sus funciones:

1. Inicializa el Hardware.

2. Chequea el SO que está en ROM (se autochequea)

3. Establece el valor de las variables RAM en memoria en el área de variables de la RAM BIOS

4. Inicializa las localizaciones de la interrupciones que usa el SO e inicializa los vectores de interrupción

5. Inicializa las ROM externas si las hay

6. Lee, carga y ejecuta el boot del disco.

Estas funciones más a fondo:

1. Inhabilita las interrupciones.

2. Test del hardware:

- Testea el SO residente en RAM, esta opción es de tipo Checksum que consiste en sumar todos los bytes y comprobar si el bit menos significativo de la suma es 0.

- Chequeo de la memoria RAM del sistema.

- Chequeo de la memoria RAM de los controladores (pantalla).

- Chequeo de los dispositivos (controlador de pantalla, acceso directo a memoria, reloj, puertos serie etc.).

3. Chequeo de la memoria RAM no volátil.

4. Inicialización de los dispositivos.

5. Inicialización de los datos:

- Inicializa los WSR que son dos registros que mantienen información sobre la configuración del sistema. El WSR1 indica el número de drives, el modo de pantalla, y la existencia de un coprocesador matemático. El WSR2 indica la cantidad de memoria que hay

- Inicializa variables RAM con valores fijos del propio código de la rutina.

- Inicializa los 32 primeros vectores de interrupción para referenciar rutinas de SO residente en ROM.

6. Test del resto del hardware.

- Chequeo del FDC (Floppy Disk Controller): Ve si se posiciona correctamente el controlador moviendo la cabeza hacia una pista y comprobando si la operación se ha realizado correctamente.

- Test del teclado.

7. Inicialización de los controladores.

- Inicialización del controlador de pantalla con la RAM no volátil.

- Habilita algunas interrupciones (Reloj, Teclado y Controlador de disquetes).

8. Muestra un mensaje en pantalla.

9. Habilita la interrupción que indica un error de paridad en memoria.

10.  Comprueba si hay ROMs externas y en caso afirmativo transfiere el control a su puerto de entrada.

11.  Se posiciona sobre el disco 0 cara 0 pista 0 sector 1, lee el boot y lo carga en memoria en la dirección 07C00 (H y transfiere el control a esa dirección, si no se puede cargar el boot da el mensaje inserte el disco de sistema y repite el proceso de carga.

La memoria en MSDOS:

1 MB

00000 (H

7FFFF (H

RAM

MEMORIA GENERAL DE USUÁRIO

512 KB

 

80000 (H

9FFFF (H

RAM

AMPLIACIÓN

128 KB

 

A0000 (H

RAM

MEM. PARA CONTROLADORES

128 KB

 

BFFFF (H

C0000 (H

C8000 (H

CC000 (H

AMPLIACIÓN

MEMORIA SISTEMA

ROM

CONTRLADOR HARD DISK

192 KB

EFFFF (H

F0000 (H

MEMORIA SISTEMA

64 KB

S.O. RESIDENTE

FFFFF (H

HMA

MEMORIA EXTENDIDA

64 KB

 

En las primeras direcciones de memoria se encuentra la tabla de vectores de interrupción, en formato offset : segmento, hay un total de 256 vectores lo que implica 256 * 4 bytes por vector lo que es igual a 1Kb de memoria, en las posiciones siguientes se encuentra un área de almacenamiento de variables del sistema operativo residente, esta área ocupa 256 bytes, a continuación se carga el IO.sys que es el interface del MSDOS con el hardware.

A continuación se carga el MODOS.sys que contiene las rutinas de servicio para las interrupciones de MSDOS, posteriormente se cargan los buffers de control de MSDOS y los Device Drivers instalados.

A continuación se carga la parte residente del command.com que contiene las rutinas para algunas interrupciones y para cargar la parte no residente, la siguiente parte de la memoria está ocupada por un Stack para ficheros .com que consta de 256 bytes. Por último está la zona donde se almacena la parte transeúnte el command.com.

Estructura del command.com:

El command.com consta de tres partes:

1. Parte residente: Contiene las rutinas y código para cargar la parte no residente y código para la resolución de errores (interrupciones mencionadas antes).

2. Parte de inicialización: Es la parte a la que se le pasa el control cuando arranca el sistema, contiene también el procesador del fichero autoexec.bat y determina la dirección en la que pueden cargarse los programas de usuario. Esta parte sólo se necesita para arrancar el sistema, cuando el command.com carga el primer programa lo carga superponiéndolo sobre esta zona.

3. Parte transeúnte: Contiene el procesador de comandos tanto internos como externos y el procesador de ficheros batch (.bat), es la parte que produce el prompt del sistema, espera a que se introduzca un comando y lo ejecuta, si el comando es externo, llama a una función del MSDOS transfiriendo el control al programa que ejecuta el comando.

Gestión de la memoria:

Se basa en una estructura mediante la cual el MSDOS controla como están asignadas todas las zonas, esta estructura se denomina MCB, al principio de cada área de memoria hay un MCB que contiene la siguiente información:

- Tamaño del área de memoria.

- Indicador de si el proceso propietario de esa área de memoria tiene la memoria asignada o disponible.

- Puntero a la próxima área de memoria.

Cuando un programa finaliza, el MSDOS libera el bloque inicial con lo que se libera toda la memoria poseída por el programa. Un programa no puede acceder a áreas de memoria que no tiene asignadas, si ocurre esto, lo más probable es que se destruya un bloque de control de memoria, destruyendo así mismo la cadena de MCBs. La única solución a este problema es la reinicialización del sistema.

Cuando un proceso requiere un bloque de memoria accede  a la función 48 (H el MSDOS examina los MCBs de la memoria y si encuentra un bloque lo suficientemente grande cambia el nombre del propietario dentro del MCB, puede ocurrir que el bloque localizado sea mayor que el requerido entonces el MSDOS crea un MCB dentro del bloque y lo pasa a la cadena de MCBs, cuando se libera un bloque se indica su disponibilidad en el MCB correspondiente, si no se encuentra un bloque lo suficientemente grande para el requerimiento se devolverá un error.

Procesos en MSDOS:

Se trata de ver las funciones que hay para cargar, ejecutar y terminar los programas.

4B00 (H à Función para cargar los programas, la ejecuta el command.com para cargar y ejecutar un programa, pudiendo también ser usada por otro programa para realizar la misma operación.

Funcionamiento:

1. El MSDOS asigna la memoria requerida para cargar el programa en el offset 0 de dicha memoria, crea el PSP ( Program Segment Prefix ) que es el bloque de control para poder ejecutar los programas.

2. Carga el programa en memoria y le transfiere el control.

3. Cuando termina la ejecución se devuelve el control al programa que hizo la llamada a la función 4B00 (H

Esta función (4B00 (H ) permite la ejecución de otra copia del command.com y ejecutar programas desde esta copia.

En el PSP hay dos campos que son direcciones, una de ellas indica la dirección de terminación y la otra indica la dirección de Control-Break, cuando se crea el PSP se almacena en estas direcciones el valor de la instrucción que sigue a la llamada a la función 4B00 (H

Estructura y carga de los ficheros “.com” y “.exe”:

“.com” : Hay que tener en cuenta que se realiza la asignación de toda la memoria disponible, cuando se carga un programa .com se solapa la memoria asignada a la parte no residente del command.com por esto el MSDOS chequea esa memoria y si hace falta recarga la parte no residente del command.com. El código para recargarlo está en la parte residente. Esto plantea un problema si se llama a la función 31 (H (deja un programa residente) y no se libera la memoria suficiente bloqueándose el sistema (se cuelga).

“.exe” :  Los ficheros .exe son producidos por el linker de Microsoft. Tiene dos partes:

1. Información de control y relocalización al principio del fichero, esta área se llama     header y la otra parte es el módulo de carga que sigue al header, el header está formado por la siguiente información:

- Byte 0 y 1 : Tiene el valor 4D (H y es la marca de fichero .exe

- Byte 2 y 3 : Número de bytes válidos en la última página (último sector del disco)

- Byte 4 y 5 : Tamaño del fichero en páginas de 512 bytes incluido el header.

- Byte 6 y 7 : Número de entradas a relocalizar en la tabla de relocalización.

- Byte 8 y 9 : Tamaño del header en “párrafos” de 16 bytes. Se usa para encontrar el principio del módulo de carga del fichero.

- Byte A y B : MINALLOC à Número mínimo de párrafos de 16 bytes requeridos después del final del programa cargado.

- Byte C y D : MAXALLOC à Número máximo de párrafos de 16 bytes requeridos después del final del programa cargado.

- Byte E y F : Valor inicial al cargar el SS (segmento de Stack) antes de ejecutar el programa.

- Byte 10 y 11 : Valor inicial al cargar el SP (puntero de Stack) antes de ejecutar el programa.

- Byte 12 y 13 : Checksum del fichero.

- Byte 14 y 15 : Valor inicial al cargar en el contador de programa antes de ejecutar el programa.

- Byte 16 y 17 : Valor inicial a cargar en CS (segmento de código)

- Byte 18 y 19 : Byte relativo de offset desde el principio del fichero a la tabla de relocalización.

- Byte 1A  y 1B : Número de overlays generados por el linker.

- Byte 1C  y siguientes : Tabla de relocalización.

La tabla de relocalización consiste en un número variable de entradas, cada entrada consta de 4 bytes, las dos primeras para el offset y las otras dos para el segmento.

El proceso de carga para los ficheros .exe es el siguiente:

1. Leer de la memoria la parte fija del header (00...1B)

2. La memoria se asigna en función del tamaño del módulo de carga y de los parámetros MINALLOC y MAXALLOC.

3. Construye el PSP a partir del offset 0 de la memoria asignada

4. Calcula el tamaño real del módulo de carga = tamaño del fichero – tamaño del header – (tamaño de la página – Número de bytes válidos en la última página)

5. Se determina el segmento de comienzo del programa.

6. Se pasan las entradas de la tabla de relocalización a un área de trabajo.

7. Para cada entrada de la tabla de relocalización se actualizan los datos sumándole el valor del segmento de comienzo.

 

WikiCiencia - CC 2000-2008 - Algunos derechos reservados - Términos y Condiciones

Firenox