Serie de aprendizaje del sistema operativo (1. Vela) - conceptos básicos del sistema operativo

prefacio

Esta serie de publicaciones de blog se utiliza principalmente para el examen de ingreso de posgrado de contenido profesional 408 para una comprensión profunda en la segunda etapa. Es decir, antes de comenzar esta serie, es mejor tener una comprensión básica de 408. Los conceptos básicos repetidos no se repetirán. Además, esta serie de publicaciones de blog también completará la revisión y aplicación de la programación en lenguaje C y la estructura de datos, aunque esta serie es una serie de aprendizaje del sistema operativo.

Esta serie combinará el examen de ingreso de posgrado de Wangdao como el esquema de navegación, combinado con libros excelentes como "Sistema operativo hecho a sí mismo en 30 días", consolidará el contenido del libro paso a paso y usará lenguaje ensamblador y C para completar el funcionamiento simple. diseño de sistemas. En esta serie, el propio blogger está constantemente registrando el contenido en el proceso de aprendizaje, por lo que puede haber muchas partes inexactas antes del final de la serie, ¡perdónenme!

Además, este artículo también necesita completar la operación basada en CPU Intel, AMD aquí no.

Descripción básica del sistema operativo

Entonces, antes de comenzar, presentemos el concepto del sistema operativo básico. En primer lugar, debemos aclarar qué nos proporciona el sistema operativo.

En primer lugar, el sistema operativo nos proporciona varias gestiones básicas:

  1. gestión de la memoria
  2. gestión de dispositivos
  3. gestión de archivos
  4. gestión del procesador

Al mismo tiempo, sabemos que el sistema operativo tiene varias características básicas:

  1. simultaneidad
  2. asincrónico
  3. virtual
  4. compartido

Si no recuerdo mal, este debería ser el contenido del primer capítulo en Wangdao PubMed. No diré mucho aquí, el libro es más detallado que yo.
Así que aquí quiero agregar más.

interrumpir

El sistema operativo me proporciona una interfaz de programa, que se compone de una serie de llamadas al sistema. Al mismo tiempo, para llamadas al sistema, como leer y escribir archivos, en este momento, se activará una interrupción para realizar operaciones de E/S. Este es todo el contenido del primer capítulo.Todos sabemos por qué se activa la interrupción porque esta operación de E/S es una llamada a nivel de sistema y de kernel. Entonces, de hecho, el proceso es correcto, pero la realización de esta parte es en realidad una base muy importante. A menudo nos referiremos al modo real y al modelo protegido más adelante cuando entremos en los detalles de la implementación real de un sistema operativo. Pero aquí sobre la interrupción, no nos importa tanto, solo quiero explicar que esta interrupción es uno de los mecanismos muy importantes.

Además, cabe mencionar que las interrupciones también son soportadas a nivel de hardware. Para Ring0, 1 y 3, esto es realmente compatible con la CPU. Bajo nuestro modo de protección, realizaremos el procesamiento de esta parte a través de DRT.

Interacción básica con el hardware

Aún con la misma oración, antes de leer este artículo, esperamos que tenga una comprensión general del sistema operativo, y aquí realmente recomendamos el sistema operativo para el examen de ingreso de posgrado de Wangdao. Aunque está sesgado hacia las preguntas, algunos conceptos son muy bien explicado Lo que se describe en esta serie de publicaciones de blog está aquí nuevamente.
inserte la descripción de la imagen aquí

A través del principio de composición de la computadora, sabemos que para la CPU, hay ALU, CU, unidad de control de operación y lógica en ella. Al mismo tiempo, hay muchos registros en el interior. Por ejemplo, los ocho registros comunes:

AX: registro de acumulación
BX: registro base
CX: registro de conteo
DX: registro de datos
SP: registro de aguja de pila
BP: registro de pila base
SI: registro de dirección de origen
DI: registro de dirección de destino
CS: registro de estado

(Tenga en cuenta que varios registros aquí son de 2 bytes, y esto se usa en modo real. Es de 16 bits en modo real y de 32 bits en modo protegido)

Por supuesto, hay muchos registros en la CPU. Al mismo tiempo, aquí hay un concepto muy importante que necesitamos saber a grandes rasgos. En el principio de composición informática, sabemos que tenemos direcciones para diferentes dispositivos. Nuestras operaciones en diferentes dispositivos en realidad se realizan cambiando los valores en estas direcciones, es decir, accedemos a las direcciones a través de registros y manipulamos los valores de las direcciones, y podemos completar el control de los dispositivos básicos.

Por supuesto, tenemos que ser claros aquí. La mayor parte de nuestro trabajo de programación aquí se realiza controlando la CPU. Cuando necesitamos controlar, como el teclado y la pantalla, se controla modificando los datos del registro. Por lo tanto, cuando lo implementamos en la etapa inicial, necesitamos interactuar con el ensamblaje hasta cierto punto y haber completado el control básico del hardware. Por supuesto, la buena noticia aquí es que el fabricante de hardware proporciona una buena interfaz o que Intel y el fabricante de hardware tienen un buen acuerdo.

dirección base

Como dijimos antes, es decir, completamos el control básico del programa a través de la CPU. Al mismo tiempo, completamos el control del dispositivo encontrando la dirección del dispositivo y luego operando el valor correspondiente en el registro (a continuación daremos una salida de Hello World. ejemplo)

Por lo tanto, aquí aclaramos un concepto, es decir, la esencia de una computadora es en realidad realizar diferentes operaciones sobre datos en diferentes ubicaciones. Es solo que hacemos que la computadora presente un mundo colorido a través de diferentes regulaciones. Por ejemplo, un archivo exe es una cadena de códigos binarios, al igual que una imagen jpg, pero sus efectos son completamente diferentes.

Por lo tanto, hemos aclarado la importancia de las direcciones. Al mismo tiempo, es similar a los dispositivos. Los dispositivos también tienen direcciones. Como se mencionó anteriormente, necesitamos operar a través de registros para controlarlos, y los registros contienen la dirección o los datos. Por lo tanto, para llamar al dispositivo con normalidad, también debemos acordar algunas direcciones.
Por ejemplo esto:
inserte la descripción de la imagen aquí

concepto de dirección

Luego está el concepto de dirección. De hecho, en nuestro sistema operativo, todo lo que usamos son direcciones lógicas. Cuando se ejecuta un programa, extraemos datos de la dirección física y los ponemos en la memoria, que es muy importante en el sistema operativo. Un punto, es decir, debemos dejar que la aplicación piense que está acaparando la CPU, desde la dirección lógica 0 hasta la dirección lógica 100, suponiendo que hay un programa escrito así, entonces de hecho puede ser físicamente desde 0x6000 - 0x6545 y así sucesivamente. Por lo tanto, muchas preguntas del examen tienen una pregunta de conversión de dirección. Al mismo tiempo, también necesitamos saber que cuando la cpu realiza cálculos, usamos binario, pero cuando el sistema operativo expresa, usamos hexadecimal. El sistema hexadecimal tiene una ventaja, primero, puede representar fácilmente un gran número en el sistema decimal sin perder demasiado espacio, después de eso, es muy conveniente convertir el sistema hexadecimal al sistema binario.

Además, se enfatiza aquí nuevamente que primero debemos leer el libro del sistema operativo del examen de ingreso de posgrado de Wangdao y tener una comprensión básica del mismo, porque nuestro lado es en realidad diferente del contenido del examen de ingreso de posgrado de Wangdao. De hecho, primero debemos comenzar desde el disco, extraer nuestro programa del disco y luego cargarlo, y así sucesivamente, hasta que necesitemos procesar el programa en nuestro sistema operativo, debemos considerar el diseño de programación múltiple. , concurrencia, compartida. Operaciones pv probadas con frecuencia, algoritmos de reemplazo, algoritmos de rotación, etc.

proceso de inicio

Este debería ser el contenido del primer capítulo del examen de ingreso de posgrado de Wangdao. A continuación, vamos a presentarlo brevemente.

En primer lugar, al iniciar, iniciaremos el Bios. En el BIOS, encontraremos el mbr debajo del sistema operativo Boot, y luego lo cargaremos en nuestro programa de carga a través del mbr, y luego lo cargaremos en el kernel del sistema a través del cargador. Entonces mbr es uno de nuestros guías. Pase, guíe y completaremos las operaciones de seguimiento. Entonces viene la pregunta, ¿por qué necesitamos mbr->loader->keneral primero? La razón es muy simple, en la bios, el espacio que nos dan es de solo 512 bytes, lo que obviamente no es suficiente para iniciar un sistema y el kernel. .

Entonces necesitamos completar la operación de inicio a través de este proceso.

Su proceso general es en realidad así:
inserte la descripción de la imagen aquí

En este proceso trasladamos la ejecución de la cpu al sistema operativo

Relación entre la aplicación y el sistema operativo

Genial, finalmente llegué a este concepto que necesito agregar.

Nosotros hasta, un programa, como este programa.

#include<stdio.h>
int main(){
    
    
	printf("Hello world");
	return 0;
}

Podemos traducir este código en un archivo binario bin para su ejecución cuando el archivo ejecutable .exe está programado en la capa inferior. El archivo .exe será ejecutable en el sistema de Windows.

Bueno, de hecho, sabemos que el sistema operativo es en realidad un software especial en esencia, por lo que si el software que escribimos también se puede colocar en el BIOS cuando se inicia, y la ejecución de la CPU se transfiere a nuestro programa, entonces ¿Significa también que nuestro software también puede ser el mismo que el sistema operativo? De hecho, esto se llama un "sistema operativo" especial también es posible. Sin embargo, la situación real es que iniciamos el software a través del sistema operativo, no solo mencionado, si es de la manera que se acaba de decir, entonces el sistema operativo parece no tener efecto.

Entonces, de hecho, un programa completo (win) de un programa es así:
inserte la descripción de la imagen aquí
Entonces, si queremos implementar nuestro sistema operativo, debemos proporcionar la interfaz dependiente del programa correspondiente, sí, también necesitamos definir los ejecutables de nuestro sistema operativo. Esto es realmente muy similar al navegador. Nuestros programas son equivalentes a cada página web. Los programas en la página web necesitan confiar en el navegador para mostrar el efecto y completar el análisis a través del motor v8. Lo mismo es cierto para nuestro sistema operativo.

Así que volvamos a nuestro programa ahora mismo.
Es tan simple para nosotros generar "Hello Word" a través del lenguaje C.
De hecho, llamamos stdio.h, que es equivalente a un paquete de python, proporciona funciones de salida, entrada y salida, sabemos que esto requiere llamadas al sistema, por lo que debemos implementarlo a nivel del sistema operativo. Debido a que el programa de aplicación no tiene este permiso, solo nuestro sistema operativo lo tiene.

Entonces, si queremos generar una oración desde la pantalla, es muy problemático para nosotros implementarla en la capa inferior. Al mismo tiempo, al implementarla, no podemos llamar a ninguna implementación del sistema, es decir, funciones como printf( ), pero necesita implementar funciones similares a través del ensamblaje. El código para este:

(Sí, este es el contenido de salida que mencionamos anteriormente, encontramos xb800, esta es la dirección de la pantalla plana)

mov ax,0xb800               ;在bios当中将指针指向文本显示地方
mov es,ax

mov byte [es:0x00],'L'      ;找到的文本显示的地址,然后写入内容
mov byte [es:0x01], 0x07    ;设置颜色
mov byte [es:0x02],'Y'
mov byte [es:0x03], 0x06

time 510 - ($-$$) db 0      ;填充剩下的空间,引导区是512
dw 0xaa55                   ;以这个结尾才会别biso识别

Lanzamiento de Hola mundo

Muy bien, hemos agregado el contenido que no es lo mismo que Wang Dao. Por supuesto, es una pena que el espacio sea limitado aquí, y el código correspondiente a la pieza de ensamblaje no se explicará aquí. Pero creo que la explicación del ensamblaje correspondiente en el libro "Sistema operativo casero de 30 días" es muy buena. Aunque el libro usa el ensamblaje de preguntas, en realidad es una versión personalizada de nasm, que generalmente es consistente con el ensamblaje.

Así que ahora, comenzamos con la primera palabra de saludo. Aquí, no seguiremos el libro, sino que usaremos un esquema similar.

En primer lugar, comenzamos a escribir el primer programa de inicio, este es nuestro mbr.

org 07c00h
mov ax,cs
mov ds,ax
mov es,ax
call DD
jmp $
DD:
	mov ax,BOOTMSG
	mov bp,ax
	mov cx,16
	mov ax,01301h
	mov bx,000ch
	mov dl,0
	int 10h
	ret
BOOTMSG:	db "hello, OS World!"
times 510-($-$$)	db 0
dw 0xaa55

Entonces, en este punto necesitamos compilar este código.

Antes de volver a necesitar preparar nasm usted mismo.
inserte la descripción de la imagen aquí
En este punto hemos terminado de compilar. Después de eso, también necesitamos crear un disco duro virtual, luego iniciaremos en la máquina virtual.
inserte la descripción de la imagen aquí

Después de eso, escribimos el "primer sistema operativo" en el disco.
inserte la descripción de la imagen aquí

Luego podemos crear una máquina virtual, estoy usando Virtual Box aquí

Luego haga clic en Iniciar para completar el primer Hello OS World

Resumir

Este artículo es solo un ensayo de un blogger y se complementará por completo más adelante. Por supuesto, de hecho, para la fiesta del examen de ingreso de posgrado, es más importante escribir preguntas, y este es un elemento adicional para la operación práctica. Además, los blogueros tienen por defecto que los lectores y los blogueros tienen un nivel similar.

Supongo que te gusta

Origin blog.csdn.net/FUTEROX/article/details/130926862
Recomendado
Clasificación