• No se han encontrado resultados

Trab 8

N/A
N/A
Protected

Academic year: 2021

Share "Trab 8"

Copied!
8
0
0

Texto completo

(1)

Instituto Tecnológico de Las Américas

Instituto Tecnológico de Las Américas

(ITLA)

(ITLA)

Oscar Javier Marte Gómez

Oscar Javier Marte Gómez

(2013-1760)

(2013-1760)

Sistema operativo I

Sistema operativo I

José Doñe

José Doñe

C-2

C-2

TRABAJO NO. 8 (COMO CREAR UN SISTEMA OPERATIVO)

(2)

TRABAJO NO. 8 (COMO CREAR UN SISTEMA OPERATIVO)

TRABAJO NO. 8 (COMO CREAR UN SISTEMA OPERATIVO)

INVESTIGAR Y PREPARAR UN TR

INVESTIGAR Y PREPARAR UN TR

ABAJO DE COMO SE

ABAJO DE COMO SE

CREA UN SISTEMA OPERATIVO, TODOS LOS P

CREA UN SISTEMA OPERATIVO, TODOS LOS P

ASOS

ASOS

NECESARIOS PARA LA CREACION DE UN SISEM

NECESARIOS PARA LA CREACION DE UN SISEM

A

A

OPERATIVO DESDE CERO.

OPERATIVO DESDE CERO.

El primer paso para l

El primer paso para la creación de un a creación de un Sistema Operativo, desde hace bastanteSistema Operativo, desde hace bastante tiempo, consiste, en los mejores casos, en

tiempo, consiste, en los mejores casos, en buscar una implementación (kernel)buscar una implementación (kernel) de Linux o similares. En

de Linux o similares. En muchas ocasiones, simplemente semuchas ocasiones, simplemente se modifican modifican distribuciones

distribuciones (como Ubuntu) modificando los paquetes que incluyen. Aun con(como Ubuntu) modificando los paquetes que incluyen. Aun con este panorama tan desalentador, quedan por la red muchos artículos

este panorama tan desalentador, quedan por la red muchos artículos sobre

sobre Cómo hacer un Sistema Operativo desde cero Cómo hacer un Sistema Operativo desde cero ((en inglésen inglés) usando) usando lenguaje ensamblador y diversas convenciones.

lenguaje ensamblador y diversas convenciones. Si bien esa última

Si bien esa última opción es la de más bajo opción es la de más bajo nivel, consiste en asumir muchasnivel, consiste en asumir muchas cosas que van a pasar factura

cosas que van a pasar factura tarde o temprano en eltarde o temprano en elSistema Operativo:Sistema Operativo: instrucciones no disponibles en al

instrucciones no disponibles en algunos microprocesadoresgunos microprocesadores, mapeos en, mapeos en

diferentes direcciones de memoria, o incluso, diferentes salidas dependiendo diferentes direcciones de memoria, o incluso, diferentes salidas dependiendo del fabricante del dispositivo, y sin duda un largo etcétera.

del fabricante del dispositivo, y sin duda un largo etcétera.

Por eso, mi idea es utilizar una arquitectura sencilla, abierta, y estándar. La que Por eso, mi idea es utilizar una arquitectura sencilla, abierta, y estándar. La que mejor se ajusta a estas condiciones es, sin duda, la

mejor se ajusta a estas condiciones es, sin duda, la Arquitectura eWa, Arquitectura eWa, que que permite ejecutarse en dispositivos nativos o virtuales como Sistemas

permite ejecutarse en dispositivos nativos o virtuales como Sistemas Operativos o páginas web.

Operativos o páginas web.

Se trata de un diseño minimalista de un Sistema Informático. En su núcleo hay Se trata de un diseño minimalista de un Sistema Informático. En su núcleo hay tan solo tres unidades: una

tan solo tres unidades: una CPU, unaABU, una MMU y una CPU, unaABU, una MMU y una bujía. Aunque estosbujía. Aunque estos nombres recuerdan a unidades existentes en otras arquitecturas, en el

nombres recuerdan a unidades existentes en otras arquitecturas, en el caso decaso de laArquitectura eWa son unas unidades, a su vez,

laArquitectura eWa son unas unidades, a su vez, muy sencillas. El núcleo estámuy sencillas. El núcleo está conectado a un Espacio de Direccionesdonde se encuentran los

conectado a un Espacio de Direccionesdonde se encuentran los distintos dispositivos y controladores.

distintos dispositivos y controladores. Los dispositivos son componentes queLos dispositivos son componentes que proveen de memoria (de escritura y/o lectura

proveen de memoria (de escritura y/o lectura constante) el Espacio deconstante) el Espacio de Direcciones; mientras que los

Direcciones; mientras que los controladores son componentesque conectancontroladores son componentesque conectan con el Sistema al

con el Sistema al través del Espacio de Direcciones.través del Espacio de Direcciones. La

La CPU CPU (Unidad de Procesamiento Central) tiene un cometido muy reducido en(Unidad de Procesamiento Central) tiene un cometido muy reducido en comparación con la complejidad habitual de otros microprocesadores. En ésta comparación con la complejidad habitual de otros microprocesadores. En ésta se encuentran sólo cuatro grupos de registros: el K (1bit), el GHIJ (4bits),

se encuentran sólo cuatro grupos de registros: el K (1bit), el GHIJ (4bits), el ZUVW(4bits) y el

el ZUVW(4bits) y el 0123456789A0123456789ABCDEF (16bits). Implementa dos funcionesBCDEF (16bits). Implementa dos funciones internas, la de lectura y la de escritura; la

internas, la de lectura y la de escritura; la primera realiza la escritura del valorprimera realiza la escritura del valor de 1 bit

de 1 bit correspondiente al registro seleccionado delcorrespondiente al registro seleccionado del grupo 0123456789ABCD

grupo 0123456789ABCDEF en el EF en el registroK, mientras que la segunda lo haceregistroK, mientras que la segunda lo hace de K a

de K a 0123456789AB0123456789ABCDEF.CDEF.

Las funciones externas que realiza están relacionadas con la obtención de Las funciones externas que realiza están relacionadas con la obtención de laslas

(3)

instrucciones (escribiendo cada instrucción, de 4 bits cada una

instrucciones (escribiendo cada instrucción, de 4 bits cada una -tiene por tanto-tiene por tanto 16 instrucciones-, en el grupo GHIJ) por medio de la MMU, y de comunicación 16 instrucciones-, en el grupo GHIJ) por medio de la MMU, y de comunicación con laABU.

con laABU. La

La ABU ABU (Unidad Básica de Aritmética) tiene el cometido más sencillo de las(Unidad Básica de Aritmética) tiene el cometido más sencillo de las tres unidades junto a la

tres unidades junto a la bujía. Básicamente lo que hace es realizar operacionesbujía. Básicamente lo que hace es realizar operaciones lógicas básicas (unarias y binarias): or, nor; nxor, nand; not; y xor, and. Tiene lógicas básicas (unarias y binarias): or, nor; nxor, nand; not; y xor, and. Tiene tres grupos de registros (MN, OP y XY) de 2 bit

tres grupos de registros (MN, OP y XY) de 2 bits cada uno. Los primeross cada uno. Los primeros corresponden a los valores de entrada, los

corresponden a los valores de entrada, los siguientes indican la operación asiguientes indican la operación a ejecutar, y en los dos últimos se pondrán los valores de salida. Por lo tanto, es ejecutar, y en los dos últimos se pondrán los valores de salida. Por lo tanto, es capaz de hacer hasta 16 (2*8) operaciones diferentes, aunque ciertamente sólo capaz de hacer hasta 16 (2*8) operaciones diferentes, aunque ciertamente sólo distingue las siete anteriores.

distingue las siete anteriores.

Esta unidad conecta exclusivamente con la CPU. Esta unidad conecta exclusivamente con la CPU. La

La MMU MMU (Unidad de Mapeo de Memoria) (Unidad de Mapeo de Memoria) es quizás la más complicada de lases quizás la más complicada de las unidades del núcleo del Sistema Informático. Es

unidades del núcleo del Sistema Informático. Es la puerta de acceso al la puerta de acceso al EspacioEspacio de Direcciones. Los registros de la MMU se llaman punteros, y hay tres tipos. de Direcciones. Los registros de la MMU se llaman punteros, y hay tres tipos. El puntero PC (o PCero, ya que es el puntero 0,

El puntero PC (o PCero, ya que es el puntero 0, aunque éste no está visibleaunque éste no está visible para el programador) es el

para el programador) es el encargado de apuntar al comienzo de la siguienteencargado de apuntar al comienzo de la siguiente instrucción a ejecutar por la

instrucción a ejecutar por la CPU. Por otra parte CPU. Por otra parte están cuatro punteros básicosestán cuatro punteros básicos llamadoswitQ, witR, witS y

llamadoswitQ, witR, witS y witT que permiten al witT que permiten al programador tener apuntadasprogramador tener apuntadas diferentes direcciones del Espacio de Direcciones. Y por

diferentes direcciones del Espacio de Direcciones. Y por último, estánúltimo, están los punteros L, que son un número

los punteros L, que son un número pseudo-

 pseudo-determinado

determinado (generalmente tres u ocho)  (generalmente tres u ocho) de punteros iguales que sirven parade punteros iguales que sirven para apuntar distintas direcciones, así como para también

apuntar distintas direcciones, así como para también guardar datos.guardar datos. Esta unidad también tiene dos tipos de

Esta unidad también tiene dos tipos de funciones. El primer tipo sirve parafunciones. El primer tipo sirve para acceder al Espacio de Direcciones, copiando al registro K de la CPU al registro acceder al Espacio de Direcciones, copiando al registro K de la CPU al registro del Espacio de Direcciones que apunte el

del Espacio de Direcciones que apunte el puntero actual, o viceversa. Elpuntero actual, o viceversa. El segundo tipo sirve para administrar los

segundo tipo sirve para administrar los punteros y páginas de lapunteros y páginas de la propia MMU dependiendo del grupo de registros

propia MMU dependiendo del grupo de registros ZUVW de la CPU.ZUVW de la CPU. La bujía es una unidad "de

La bujía es una unidad "de arranque y recuperación" y es la encargadaarranque y recuperación" y es la encargada de arrancar el sistema, al igual que una bujía arranca el motor de un coche. de arrancar el sistema, al igual que una bujía arranca el motor de un coche. Os recomiendo seguir los links de las tres unidades, ya que en la

Os recomiendo seguir los links de las tres unidades, ya que en la

documentación se pueden encontrar tablas y más información sobre cada una documentación se pueden encontrar tablas y más información sobre cada una de ellas que comento en la entrada de hoy de forma breve.

(4)

0. Resumen:

0. Resumen:

El microprocesador controla el equipo. Al

El microprocesador controla el equipo. Al iniciar la computadora, eliniciar la computadora, el

microprocesador trabaja como un 8086. A pesar de

microprocesador trabaja como un 8086. A pesar de que usted pueda tener unque usted pueda tener un

nuevo, de marca Pentium, sólo tendrá la

nuevo, de marca Pentium, sólo tendrá la capacidad de un 8086. Desde estecapacidad de un 8086. Desde este

punto, podemos utilizar algún software del

punto, podemos utilizar algún software del procesador y cambiar al modoprocesador y cambiar al modo

protegido infame. Sólo entonces podremos utilizar la potencia máxima del

protegido infame. Sólo entonces podremos utilizar la potencia máxima del

procesador.

procesador.

0.1 Nuestro objetivo

0.1 Nuestro objetivo

Inicialmente, el control está en manos de la BIOS. Esto no es sino una

Inicialmente, el control está en manos de la BIOS. Esto no es sino una

colección de programas que se almacenan en la m

colección de programas que se almacenan en la memoria ROM. BIOS realizaemoria ROM. BIOS realiza

el POST (Power On Self Test). Esto comprueba la integridad de la

el POST (Power On Self Test). Esto comprueba la integridad de la

computadora (si los periféricos funcionan correctamente, si el

computadora (si los periféricos funcionan correctamente, si el teclado estáteclado está

conectado, etc.) Esto es cuando usted oye los sonidos de

conectado, etc.) Esto es cuando usted oye los sonidos de la computadora (si esla computadora (si es

nueva la computadora, hará menos ruido, aún así l

nueva la computadora, hará menos ruido, aún así lo hace). Si todo está o hace). Si todo está bien, labien, la

BIOS selecciona un dispositivo de arranque. Se copia el

BIOS selecciona un dispositivo de arranque. Se copia el primer sector (sectorprimer sector (sector

de arranque) del dispositivo, para hacer fr

de arranque) del dispositivo, para hacer frente a la ubicación 0x7C00. El controlente a la ubicación 0x7C00. El control

se transfiere a esta

se transfiere a esta ubicación. El dispositivo de arranque puede ser unubicación. El dispositivo de arranque puede ser un

disquete, CD-ROM, disco duro u otro

disquete, CD-ROM, disco duro u otro dispositivo de su elección. Aquídispositivo de su elección. Aquí

tomaremos un disquete como el dispositivo de arranque. Si

tomaremos un disquete como el dispositivo de arranque. Si hubiéramos escritohubiéramos escrito

algo de código en el

algo de código en el sector de arranque del disquete, nuestro código seríasector de arranque del disquete, nuestro código sería

ejecutado ahora. Nuestro papel es claro: sólo escribiremos algunos programas

ejecutado ahora. Nuestro papel es claro: sólo escribiremos algunos programas

para el sector de arranque del disquete.

para el sector de arranque del disquete.

0.2 El Plan

0.2 El Plan

Primero escribe un pequeño programa en 8086 de montaje

Primero escribe un pequeño programa en 8086 de montaje (no se asusten, yo(no se asusten, yo

le enseñaré cómo escribirlo), y copiarlo

le enseñaré cómo escribirlo), y copiarlo en el sector en el sector de arranque del disquete.de arranque del disquete.

Para copiarlo, vamos a utilizar un código de un programa de C. Inicie el equipo

Para copiarlo, vamos a utilizar un código de un programa de C. Inicie el equipo

con ese disquete, y luego, a

con ese disquete, y luego, a disfrutar. Lo probaremos en una máquina virtual,disfrutar. Lo probaremos en una máquina virtual,

ya que algunas computadoras o portátiles no tienen dis

ya que algunas computadoras o portátiles no tienen disquetera. Si tienequetera. Si tiene

disquetera y un disquet, lo puede probar

(5)

0.3 Cosas que usted debe tener

0.3 Cosas que usted debe tener

as86

as86

Este es un ensamblador (compilador). El

Este es un ensamblador (compilador). El código de ensamblador se escribe,código de ensamblador se escribe,

después se convierte en un archivo/objeto con esta herramienta/aplicación.

después se convierte en un archivo/objeto con esta herramienta/aplicación.

ld86

ld86

Este es el vinculador. El

Este es el vinculador. El código objeto generado por AS86 se convierte encódigo objeto generado por AS86 se convierte en

verdadero código de lenguaje de máquina gracias esta herramienta. El

verdadero código de lenguaje de máquina gracias esta herramienta. El

lenguaje de máquina será la forma que

lenguaje de máquina será la forma que entiende 8086.entiende 8086.

gcc

gcc

El compilador de C. De momento tenemos que escribir un programa en C para

El compilador de C. De momento tenemos que escribir un programa en C para

transferir nuestro sistema operativo en el

transferir nuestro sistema operativo en el disquete.disquete.

Linux: cualquier distribución Linux. Para instalar estos paquetes debe de saber

Linux: cualquier distribución Linux. Para instalar estos paquetes debe de saber

instalar paquetes desde los repositorios oficiales de su distribución.

instalar paquetes desde los repositorios oficiales de su distribución.

Normalmente estos paquetes ya están incluidos en la distribución.

Normalmente estos paquetes ya están incluidos en la distribución.

Otros: un disquete formateado (utilizaremos una imagen .img

Otros: un disquete formateado (utilizaremos una imagen .img para usarlo en lapara usarlo en la

máquina virtual)

máquina virtual)

Un disquete se utiliza para a

Un disquete se utiliza para almacenar el sistema operativo (sus archivos). Estolmacenar el sistema operativo (sus archivos). Esto

también es nuestro dispositivo de arranque.

también es nuestro dispositivo de arranque.

Máquina virtual o computadora con disquetera.

Máquina virtual o computadora con disquetera.

Los puntos 0.X eran importante leerlos. Aunque no

Los puntos 0.X eran importante leerlos. Aunque no os interesen si los leenos interesen si los leen

ahorraremos problemas.

ahorraremos problemas.

Empecemos

(6)

1. Empecemos

1. Empecemos

1.1 El sector de arranque

1.1 El sector de arranque

Inicie su editor favorito y escriba o copie estas líneas.

Inicie su editor favorito y escriba o copie estas líneas.

entry start entry start start: start: mov ax,#0xb800 mov ax,#0xb800 mov es,ax mov es,ax seg es seg es mov [0],#0x41 mov [0],#0x41 seg es seg es mov #0x1f mov #0x1f loop1: jmp loop1 loop1: jmp loop1 Este es un programa en

Este es un programa en lenguaje ensamblador AS86 que va a entender. Lalenguaje ensamblador AS86 que va a entender. La

primera declaración especifica el punto de entrada donde el

primera declaración especifica el punto de entrada donde el control debe entrarcontrol debe entrar

en el programa. Estamos diciendo que el

en el programa. Estamos diciendo que el control debe ir inicialmente paracontrol debe ir inicialmente para

comenzar la etiqueta. La línea 2

comenzar la etiqueta. La línea 2 muestra la ubicación de la etiqueta de muestra la ubicación de la etiqueta de inicioinicio

(no se olvide de poner ":"

(no se olvide de poner ":" después de la salida). después de la salida). La primera instrucción que seLa primera instrucción que se

ejecutará en este programa es la

ejecutará en este programa es la declaración que acaba después de la puesta.declaración que acaba después de la puesta.

0xb800 es la dirección de la

0xb800 es la dirección de la memoria de vídeo. El # memoria de vídeo. El # es para representar unes para representar un

valor inmediato. Después de la ejecución de

valor inmediato. Después de la ejecución de

mov ax, # 0xb800

mov ax, # 0xb800

El registro ax contendrá el valor 0xb800, es decir, la dirección de la memoria de

El registro ax contendrá el valor 0xb800, es decir, la dirección de la memoria de

vídeo. Ahora trasladamos este valor, es el

vídeo. Ahora trasladamos este valor, es el registro. es representa el registro deregistro. es representa el registro de

segmento extra. Recuerde que 8086

segmento extra. Recuerde que 8086 tiene una arquitectura segmentada.tiene una arquitectura segmentada.

Cuenta con segmentos como segmentos de

Cuenta con segmentos como segmentos de código, segmentos de datos,código, segmentos de datos,

segmentos extras, etc., por lo tanto los registros de segmento CS, DS, ES. En

segmentos extras, etc., por lo tanto los registros de segmento CS, DS, ES. En

realidad, hemos hecho la memoria de vídeo nuestro

realidad, hemos hecho la memoria de vídeo nuestro segmento extra, así quesegmento extra, así que

cualquier cosa escrita al segmento extra irá a la memoria de vídeo.

cualquier cosa escrita al segmento extra irá a la memoria de vídeo.

Para mostrar cualquier carácter en la pantalla, tiene que escribir dos bytes en la

Para mostrar cualquier carácter en la pantalla, tiene que escribir dos bytes en la

memoria de vídeo. El primero es el valor ASCII que va a mostrar. El

memoria de vídeo. El primero es el valor ASCII que va a mostrar. El segundosegundo

es el atributo del carácter. El atributo tiene que ver con el color que debe

es el atributo del carácter. El atributo tiene que ver con el color que debe

utilizarse como el primer plano, que para el fondo, debe abrir y cerrar char y así

utilizarse como el primer plano, que para el fondo, debe abrir y cerrar char y así

sucesivamente. seg es en realidad es un prefijo que

sucesivamente. seg es en realidad es un prefijo que indica que la enseñanzaindica que la enseñanza

se va a ejecutar junto con la referencia a la serie de sesiones es. Por lo tanto,

se va a ejecutar junto con la referencia a la serie de sesiones es. Por lo tanto,

nos movemos a 0x41 valor, que es el valor ASCII del carácter A, en el primer

nos movemos a 0x41 valor, que es el valor ASCII del carácter A, en el primer

byte de la memoria

(7)

atributo del carácter a la siguiente byte. Aquí entramos en 0x1f, que es el valor

atributo del carácter a la siguiente byte. Aquí entramos en 0x1f, que es el valor

de representar a un personaje blanco sobre fondo azul.

de representar a un personaje blanco sobre fondo azul. Así que si Así que si ejecutamosejecutamos

este programa, tenemos una A blanca sobre un fondo

este programa, tenemos una A blanca sobre un fondo azul. Por último, existe elazul. Por último, existe el

bucle. Tenemos que detener la ejecución después de la presentación del

bucle. Tenemos que detener la ejecución después de la presentación del

personaje, o tenemos un lazo que los

personaje, o tenemos un lazo que los bucles tienen para siempre. Guarde elbucles tienen para siempre. Guarde el

archivo como boot.s.

archivo como boot.s.

La idea de la

La idea de la memoria de vídeo puede no ser muy clara, memoria de vídeo puede no ser muy clara, así que permítanmeasí que permítanme

explicar con más detalle. Supongamos que asumimos que la pantalla consta de

explicar con más detalle. Supongamos que asumimos que la pantalla consta de

80 columnas y 25 filas. Así

80 columnas y 25 filas. Así que para cada línea tenemos 160 bytes, uno que para cada línea tenemos 160 bytes, uno parapara

cada personaje y una para el

cada personaje y una para el atributo de cada personaje. Si tenemos queatributo de cada personaje. Si tenemos que

escribir algunos carácteres para la columna 3, entonces tenemos que saltar

escribir algunos carácteres para la columna 3, entonces tenemos que saltar loslos

bytes 0 y 1, ya que están en la columna 1, 2 y 3 como lo son para la

bytes 0 y 1, ya que están en la columna 1, 2 y 3 como lo son para la columna 2,columna 2,

y luego escribir nuestro valor ASCII para el 4 º byte y at

y luego escribir nuestro valor ASCII para el 4 º byte y atribuyen a la ubicaciónribuyen a la ubicación

de 5 º en la memoria de vídeo.

de 5 º en la memoria de vídeo.

1.2 Escribiendo el sector de arranque para el

1.2 Escribiendo el sector de arranque para el disquetedisquete

Tenemos que escribir un programa en C

Tenemos que escribir un programa en C que copie nuestro código (código delque copie nuestro código (código del

sistema operativo) para el primer sector del disquete. Aquí está:

sistema operativo) para el primer sector del disquete. Aquí está:

#include <sys/types.h> /* unistd.h necesita esto */

#include <sys/types.h> /* unistd.h necesita esto */

#include <unistd.h> /* contiene lectura/escritura */

#include <unistd.h> /* contiene lectura/escritura */

#include <fcntl.h> #include <fcntl.h> int main() int main() { { char boot_buf[512]; char boot_buf[512];

int floppy_desc, file_desc;

int floppy_desc, file_desc;

file_desc = open("./boot", O_RDONLY);

file_desc = open("./boot", O_RDONLY);

read(file_desc, boot_buf, 510); read(file_desc, boot_buf, 510); close(file_desc); close(file_desc); boot_buf[510] = 0x55; boot_buf[510] = 0x55; boot_buf[511] = 0xaa; boot_buf[511] = 0xaa;

floppy_desc = open("/dev/fd0", O_RDWR);

floppy_desc = open("/dev/fd0", O_RDWR);

lseek(floppy_desc, 0, SEEK_CUR); lseek(floppy_desc, 0, SEEK_CUR); write(floppy_desc, boot_buf, 512); write(floppy_desc, boot_buf, 512); close(floppy_desc); close(floppy_desc); } }

(8)

Lo primero es abrir el archivo de arranque en modo de sólo lectura, y copiar el

Lo primero es abrir el archivo de arranque en modo de sólo lectura, y copiar el

archivo descripter del expediente abierto a file_desc variable. Leer el

archivo descripter del expediente abierto a file_desc variable. Leer el archivo dearchivo de

510 caracteres o hasta que el

510 caracteres o hasta que el archivo termine. Aquí el código es pequeño, asíarchivo termine. Aquí el código es pequeño, así

que el último caso se produce. Es digno; cierre el archivo.

que el último caso se produce. Es digno; cierre el archivo.

Las últimas cuatro líneas de código

Las últimas cuatro líneas de código abierto el dispositivo de disco (que en abierto el dispositivo de disco (que en susu

mayoría sería / dev/fd0). Lleva

mayoría sería / dev/fd0). Lleva la cabeza hasta el comienzo de un archivola cabeza hasta el comienzo de un archivo

usando lseek, a continuación, escribe los 512 bytes del búfer

usando lseek, a continuación, escribe los 512 bytes del búfer al disquete.al disquete.

Las páginas de manual de lectura, escritura, abierta y lseek (se refieren al

Las páginas de manual de lectura, escritura, abierta y lseek (se refieren al

hombre 2) le dan

hombre 2) le dan suficiente información sobre lo que los demás parámetros desuficiente información sobre lo que los demás parámetros de

esas funciones son y cómo usarlos. Hay dos líneas en

esas funciones son y cómo usarlos. Hay dos líneas en el medio, que puede serel medio, que puede ser

un poco misterioso. Las líneas:

un poco misterioso. Las líneas:

boot_buf[510] = 0x55;

boot_buf[510] = 0x55;

boot_buf[511] = 0xaa;

boot_buf[511] = 0xaa;

Esta información es para la BIOS. Si el BIOS es el de r

Esta información es para la BIOS. Si el BIOS es el de reconocer un dispositivoeconocer un dispositivo

como un dispositivo de arranque, el dispositivo debe tener

como un dispositivo de arranque, el dispositivo debe tener los valores y 0x55los valores y 0x55

0xAA en la 510 ª y 511 ª ubicación. Ahora hemos terminado. El programa lee el

0xAA en la 510 ª y 511 ª ubicación. Ahora hemos terminado. El programa lee el

archivo de arranque a un buffer

archivo de arranque a un buffer llamado boot_buf. Hace que los cambiosllamado boot_buf. Hace que los cambios

requeridos para 510 ª y 511

requeridos para 510 ª y 511 ª bytes y luego escribe boot_buf en ª bytes y luego escribe boot_buf en un disquete. Siun disquete. Si

ejecutamos el código, los primeros 512 bytes del

ejecutamos el código, los primeros 512 bytes del disco contendrá nuestrodisco contendrá nuestro

código de arranque. Guarde el archivo como write.c.

código de arranque. Guarde el archivo como write.c.

1.3 Vamos a compilar

1.3 Vamos a compilar

Para hacer los ejecutables, usted tiene que

Para hacer los ejecutables, usted tiene que iniciar el shell de iniciar el shell de Linux y ejecutarLinux y ejecutar

estos comandos:

estos comandos:

as86 boot.s -o boot.o

as86 boot.s -o boot.o

ld86 -d boot.o -o boot ld86 -d boot.o -o boot cc write.c -o write cc write.c -o write 1.4 A ejecutarlo 1.4 A ejecutarlo

 Ahora copiamos los arc

 Ahora copiamos los archivos creados a un dishivos creados a un disquete formateado y ejecuta quete formateado y ejecuta elel

ordenador desd

ordenador desde el dise el disquet. quet. Iniciará el sistIniciará el sistema operativoema operativo

2. Ejecutar el sistema operativo en máquina virtual.

Referencias

Documento similar

En este artículo se trata de conocer la situación a la que se enfrenta el sector del juguete en España así como las respues- tas que las empresas están adoptando para adecuarse a

Este trabajo de fin de grado trata sobre la integración de las gafas de realidad aumentada Epson Moverio Bt-200 en la plataforma multimodal de Vocalia N-Terac, que consta de una

El paso siguiente es escoger de esta columna el menor valor, y en una tabla paralela se le asigna la mayor cantidad posible de unidades, podemos observar como el menor costo es «2»

[r]

Dada la endogeneidad de la respuesta de la política monetaria a la evolución prevista para la economía, esta evolución de las cotizaciones bancarias ante sorpresas monetarias puede

[r]

Se entiende por agricultura ecológica el compendio de prácticas agrarias que excluye normalmente el uso, en la agricultura y la ganadería, de productos químicos de síntesis

En la segunda reunión del mencionado Comité Consultivo se presentó el primer Informe de Actividades del GTISA (2013), que recopila las acciones llevadas a cabo durante