PDF de programación - El cargador del sistema operativo OSO

Imágen de pdf El cargador del sistema operativo OSO

El cargador del sistema operativo OSOgráfica de visualizaciones

Publicado el 10 de Febrero del 2017
1.426 visualizaciones desde el 10 de Febrero del 2017
127,3 KB
12 paginas
Creado hace 19a (27/04/2005)
El cargador del sistema operativo OSO

Departamento de Ingeniera y Tecnologa de Computadores

Universidad de Murcia

27 de abril de 2005

Introduccin

˝ndice
1.
2. Arranque de un ordenador PC-compatible
3. El programa cargador

. . .
3.1. El chero cargador.c . . .
3.2. La funcin cargarSO . . . .
. . .
3.3. Salto del cargador al sistema operativo . . .
3.4. El chero c0t_car.asm . .
. . .

. . . .
. . . .

. . . .
. . . .
. . . .
. . . .

. . . .
. . . .
. . . .
. . . .

. . . .
. . . .
. . . .
. . . .

. . .
. . .
. . .
. . .

. . . .
. . . .
. . . .
. . . .

. . . .
. . . .
. . . .
. . . .

. . . .
. . . .
. . . .
. . . .

.
.
.
.

1
1
2
3
5
5
6
7
9

. . . .

4. El programa mkboot32
5. El programa mkboot

1.

Introduccin

En este documento vamos a describir un programa cargador que se podrÆ almacenar en el sector de arranque
de un dispositivo de almacenamiento que posea un sistema de cheros FAT. Sus funciones serÆn las de cargar en
una posicin determinada de memoria el cdigo de un sencillo sistema operativo denominado OSO, establecer
un entorno de ejecucin adecuado para dicho sistema operativo, cargando en ciertos registros del procesador
valores adecuados, y ceder el control de la CPU al sistema operativo cargado.

Para entender mejor como funciona dicho cargador, vamos a ver primero cmo arranca un ordenador PC-

compatible.

2. Arranque de un ordenador PC-compatible

Cuando se arranca un ordenador su propio hardware comprueba la presencia de, e inicializa, una serie de
dispositivos que son esenciales para el funcionamiento del sistema. Al nalizar todas las comprobaciones el
hardware carga en memoria el contenido del primer sector («sector de arranque») de un disco y le cede el control
de la CPU. A partir de ese momento lo que haga el ordenador dependerÆ del programa almacenado en dicho
sector de arranque.

1

En los ordenadores PC compatibles el disco del que se carga el sector de arranque se puede congurar medi-
ante el programa «setup». Aunque se puede especicar un œnico dispositivo de arranque, lo habitual es indicar
una secuencia de dispositivos de tal manera que el hardware cargarÆ en memoria el sector de arranque del primer
dispositivo disponible. Generalmente, el primer dispositivo de arranque indicado en dicha secuencia suele ser
el disco duro que posee el ordenador (o uno de ellos si posee varios) seguido de otros dispositivos de almace-
namiento como disquete, CD-ROM, etc. El orden de estos dispositivos se puede cambiar para as poder arrancar
el ordenador directamente desde, por ejemplo, un disquete o un CD-ROM.

Los ordenadores PC-compatibles actuales arrancan en lo que se denomina «modo real» del procesador. En
este modo el procesador se comporta como un antiguo procesador 8086 de Intel y ofrece una visin del hardware
muy sencilla.

El problema del modo real es que no es el mÆs adecuado para la ejecucin de muchos sistemas operativos
modernos por lo que es habitual que, durante el arranque del sistema operativo, se pase del modo real al «mo-
do protegido» del procesador. El modo protegido presenta una visin mucho mÆs compleja del hardware pero
tambiØn ofrece ciertos mecanismos hardware que son esenciales para los sistemas operativos actuales como la
memoria virtual, el modo dual de funcionamiento del procesador, etc.

3. El programa cargador

Como hemos comentado antes, durante el arranque, y tras ciertas comprobaciones, el hardware carga en memo-
ria el programa contenido en un sector de arranque. La direccin de memoria en la que se hace la copia es la
0:7C001, a la que se salta para ceder la CPU al programa cargador.

El programa cargador se ejecuta en el modo real. En este modo, slo hay 20 bits para direccionar la memoria,
es decir, se puede usar hasta 1 MB de memoria. De ese megabyte, el primer KB contiene la tabla de interrupciones
y los siguientes 256 bytes contienen variables utilizadas por la propia BIOS. Por lo tanto, el sistema operativo se
podrÆ cargar a partir de la direccin 1280 o 50:0 de memoria.

Para simplicar el diseæo del cargador, vamos a suponer que el sistema operativo a cargar se encuentra en un
disquete de 3.5, de 1.44MB de capacidad, con un sistema de cheros FAT12 que es el sistema de cheros usado
por MS-DOS y Windows para dichos disquetes. TambiØn vamos a suponer que el chero que contiene el nœcleo
del sistema operativo es el primer chero creado en el disquete y que tiene un tamaæo mÆximo de 8 KB.

Al ser el primer chero creado su contenido se encontrarÆ tras el directorio raz. En un disquete como el
descrito esto supone que el chero se encontrarÆ en sectores consecutivos a partir del sector 33 (si vemos el
disquete como un array lineal de sectores numerados desde 0 hasta 2879).

La funcin del cargador en este caso es muy simple: slo tiene que cargar en memoria 16 sectores a partir del
sector 33 del disquete. Observe que no es importante ni el nombre ni el tamaæo del chero que contiene el nœcleo
del sistema operativo, siempre que dicho chero sea el primer chero creado y siempre que no supere los 8 KB
de tamaæo. Tampoco es importante el hecho de que se carguen en memoria sectores que no contienen cdigo del
sistema operativo. De hecho los œltimos sectores cargados podran contener «basura».

El chero que contiene el nœcleo del sistema operativo debe tener formato COM. En este formato de ejecutable
los programas se cargan y ejecutan a partir de la direccin X:100 de memoria. En nuestro caso, el sistema
operativo se va a cargar y ejecutar a partir de la direccin 50:100. Los 256 bytes anteriores, desde 50:0 hasta
50:FF, se dejarÆn libres (en MS-DOS estos 256 bytes se utilizan para almacenar distintos datos que no son
importantes en nuestro caso).

El utilizar un disquete con un sistema de cheros FAT12 nos va a facilitar el desarrollo del sistema operativo
OSO ya que vamos a poder copiar y borrar cheros del disquete haciendo uso de los programa que incluye
el propio sistema operativo Windows. Sin embargo, esta comodidad tambiØn presenta un problema y es que el
cargador debe ser pequeæo.

1Recordemos que una direccin X:Y, donde X e Y son nœmeros en hexadecimal, se corresponde con la posicin de memoria X*16+Y

2

En un sistema FAT12 o FAT16 el sector de arranque no slo contiene el cdigo del cargador sino tambiØn
datos sobre el propio sistema de cheros (sectores por bloque lgico o «cluster», tamaæo del directorio raz, etc.)
y una posible tabla de particiones. Estas dos estructuras de datos reducen el espacio disponible para el cargador
en el sector de arranque de 512 a 384 bytes.

Otro aspecto importante a tener en cuenta es que el cargador slo va a disponer de los servicios ofrecidos por
la BIOS para realizar su trabajo, ya que no existe ningœn sistema operativo en memoria cuando se ejecuta el
cargador.

Vamos a describir ahora los dos cheros que componen nuestro programa cargador, cargador.c y

c0t_car.asm, y algunos aspectos importantes de los mismos. Debe tener presente que los programas estÆn
preparados para ser compilados con la versin 3.0 de Turbo C++ que slo genera cheros COM y EXE de MS-
DOS. Esta observacin es especialmente importante a la hora de analizar los cheros en ensamblador ya que
determinadas instrucciones y directivas son particulares de este compilador.

3.1. El chero cargador.c

A continuacin mostramos el cdigo del cargador que hemos implementado y que cumple todo lo que hemos

descrito hasta ahora.

operativos.

/* - FICHERO: cargador.c
* - DESCRIPCIN: contiene el cdigo de nuestro cargador de sistemas
*
* - REQUISITOS: disquete de 3.5 y 1.44MB formateado en MS-DOS. El cdigo
*
*
*
* - RESULTADO: carga el cdigo del sistema operativo en X:0100h, con todos
*
*
*/

del SO debe ser un chero .COM y debe ser el primer chero del
directorio raz (sector 33, numerando desde 0). El tamaæo mÆximo de
ese chero no debe ser superior a 8 KB.

los registros de segmento correctamente inicializados para un chero
.COM

/* Direccin donde se cargarÆ en memoria el sistema operativo */
#dene DIRECCION SO ((char far *)0x00500100)

/* Tamaæo mÆximo del sistema operativo: 8 KB */
#dene SECTORES SO 16

static void escribe cad(char far * cadena, int longitud)
{

asm {

mov ah, 03h
mov bh, 0
int 10h
mov ah, 13h
mov al, 1
mov bl, 07h
mov cx, longitud /* Cuidado, bp se utiliza para acceder a longitud, y se

* modica justo a continuacin. */

les bp, dword ptr cadena
int 10h

}

}

unsigned int
leersector (unsigned char far *buffer, char pista, char cabeza, char sector)
{

int i;

for(i = 0; i < 3; i++)
{

asm {

3

5

10

15

20

25

30

35

40

les
mov
mov
mov
mov
mov
mov
int
xor
jnc
dec

bx, dword ptr buffer
al , 1
ch , pista
cl , sector
dh , cabeza
dl , 0
ah , 02
13h
ax , ax
noError
ax

/* 1 sector */

/* Unidad 0 */
/* De disco a memoria. */

/* Devolvemos 0 indicando que la operacion tuvo Øxito. */
/* Si no se produce error salimos del bucle. */
/* Devolvemos -1 indicando que la operacion fall. */

}

}
noError:

}

unsigned int cargarSO (unsigned char far *buffer)
{

char pista = 0, sector = 16, cabeza = 1;
char i;

for(i = 0; i < SECTORES SO; i++)
{

if (leersector(buffer, pista, cabeza, sector))

return 1;

escribe cad(".", 1);
sector++;
if (sector > 18)
{

sector = 1;
cabeza++;
if (cabeza >= 2)
{

cabeza = 0;
pista++;

}

}
buffer += 512;

}
return 0;

}

void main(void)
{

unsigned char far * direccionSO = DIRECCION SO;

escribe cad("Cargando SO", 11);
if (!cargarSO(direc
  • Links de descarga
http://lwp-l.com/pdf2395

Comentarios de: El cargador del sistema operativo OSO (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad