Notas de ensamblaje de Windows 32 (1): conocimientos básicos
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. Modo de trabajo del procesador 80x86
1.1 Modo real
Descripción general del modo real
El Modo Real es el modo de trabajo más antiguo admitido por el procesador 80x86 y también es el modo de trabajo más básico. El modo real se utiliza principalmente en los primeros sistemas operativos MS-DOS y otros entornos operativos simples. En modo real, el procesador tiene acceso directo a 1 MB de espacio de memoria física. Este modo es totalmente compatible con el funcionamiento del procesador 8086, de ahí el nombre "modo real".
Funciones del modo real
-
Restricciones de espacio de direcciones
- En modo real, el procesador sólo puede acceder a 1 MB de espacio de memoria (de 0x00000 a 0xFFFFF).
- El espacio de memoria está limitado por el bus de direcciones de 20 bits.
-
Dirección de segmento y dirección de compensación
- El modo real utiliza el método segmento: desplazamiento (segmento) para el direccionamiento de la memoria.
- La dirección del segmento se multiplica por 16 (es decir, se desplaza 4 bits a la izquierda) y se suma a la dirección de desplazamiento para formar una dirección física de 20 bits.
- Por ejemplo, si la dirección del segmento es 0x1234 y la dirección de desplazamiento es 0x5678, la dirección física es: Dirección física = (0x1234×16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8text{dirección física} = (0x1234 multiplicado por 16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8 dirección física = (0x1234 × 16) +0x5678 = 0x12340 + 0x5678 = 0x179B8
-
Sin protección de memoria
- El modo real no tiene ningún mecanismo de protección de la memoria y el programa puede acceder arbitrariamente a todo el espacio de memoria de 1 MB, incluido el área del sistema operativo y áreas de otros programas.
- Esto hace posible que los programas interfieran entre sí y provoquen fácilmente fallos del sistema.
-
acceso directo al hardware
- El modo real permite el acceso directo a dispositivos de hardware y puertos de E/S.
- En modo real, los programas pueden interactuar con dispositivos de hardware directamente mediante instrucciones de E/S como IN y OUT.
-
Interrupciones e inicialización del procesador.
- El modo real admite interrupciones de hardware y de software, que se gestionan mediante la tabla de vectores de interrupción (IVT).
- La tabla de vectores de interrupción se almacena en el área de memoria más baja de 1 KB (de 0x00000 a 0x003FF).
- Después de encender o reiniciar el procesador, ingresará automáticamente al modo real y comenzará a ejecutar el código desde la dirección 0xFFFF0.
-
Limitaciones del código ejecutable
- El tamaño del segmento de código ejecutable en modo real es limitado; normalmente un segmento de código tiene hasta 64 KB (0x0000 a 0xFFFF).
Diseño de memoria en modo real
En modo real, el diseño de la memoria suele incluir las siguientes partes:
-
Área de BIOS
- La memoria de alta gama (de 0xF0000 a 0xFFFFF) generalmente se usa para almacenar códigos y datos del BIOS.
- Al encenderlo o restablecerlo, el procesador comienza a ejecutar el código BIOS en 0xFFFF0.
-
Tabla de vectores de interrupción
- El área de memoria más baja de 1 KB (de 0x00000 a 0x003FF) almacena la tabla de vectores de interrupción.
- Cada vector de interrupción ocupa 4 bytes (dirección de segmento de 2 bytes y dirección de desplazamiento de 2 bytes).
-
Sistemas operativos y aplicaciones.
- El área de memoria restante se utiliza para el código del sistema operativo, el código de la aplicación y los datos.
1.2 Modo de protección
Descripción general
El modo protegido es un modo de trabajo avanzado introducido por el procesador 80x86. En comparación con el modo real, proporciona funciones de protección y administración de memoria más potentes. El modo protegido se introdujo por primera vez en el procesador 80286 y se ha ampliado y mejorado en los procesadores 80386 y posteriores.
Características del modo protegido
-
Espacio de direcciones de memoria extendida
- El modo protegido admite bus de direcciones de 24 o 32 bits y puede acceder a 4 GB de espacio de memoria física (en 80386 y posteriores).
- Los selectores y descriptores de segmentos se utilizan para la gestión de la memoria, lo que permite una gestión y un diseño de la memoria más complejos.
-
protección de memoria
- A través de descriptores de segmento y tablas de páginas, el modo protegido puede implementar protección de memoria para evitar que los programas accedan ilegalmente a la memoria de otros programas o sistemas operativos.
- Admite segmentos de código y datos de diferentes niveles de privilegios (nivel 0 a nivel 3) para lograr el aislamiento entre el modo de usuario y el modo kernel.
-
Mecanismo de paginación
- Admite el mecanismo de paginación y asigna direcciones virtuales a direcciones físicas a través de tablas de páginas para mejorar aún más las capacidades de administración de memoria.
- El tamaño de la página suele ser de 4 KB, pero también se admiten páginas grandes (como 4 MB).
-
Multitarea soportada por hardware
- Proporciona conmutación de tareas múltiples compatible con hardware, incluido el segmento de estado de tarea (TSS) y el registro de tareas (registro de tareas).
- Admite puerta de tareas para conmutación y protección entre tareas.
-
Manejo mejorado de interrupciones y excepciones
- En modo protegido, la tabla de descriptores de interrupciones (IDT) se utiliza para gestionar las interrupciones y el manejo de excepciones.
- IDT admite descriptores de puerta (Gate Descriptor), incluidas puertas de interrupción, puertas de trampa y puertas de tareas.
-
Memoria virtual
- Admite memoria virtual e implementa espacio de direcciones virtuales a través del mecanismo de paginación, lo que permite que el programa utilice un espacio de direcciones mayor que la memoria física real.
Gestión de memoria en modo protegido
-
Selectores de segmentos y descriptores de segmentos
- Cada selector de segmento apunta a un descriptor de segmento, que contiene la dirección base del segmento, el límite del segmento y los atributos del segmento (como permisos y tipo).
- Los selectores de segmentos y los descriptores de segmentos son administrados por la Tabla de descriptores globales (GDT) y la Tabla de descriptores locales (LDT).
-
Mecanismo de paginación
- El mecanismo de paginación divide la dirección virtual en directorio de páginas (directorio de páginas), tabla de páginas (tabla de páginas) y marco de página (marco de página).
- A través del directorio de páginas y la tabla de páginas, las direcciones virtuales se asignan a direcciones físicas para lograr la protección y administración de la memoria.
Aplicación en modo protegido
El modo protegido se usa ampliamente en los sistemas operativos modernos, como Windows, Linux, Unix, etc. Utilizan las características del modo protegido para implementar funciones avanzadas como multitarea, multiusuario y protección de memoria. A través del modo protegido, el sistema operativo puede administrar eficazmente los recursos de hardware y proporcionar un entorno operativo estable y seguro.
El modo protegido es la base de las aplicaciones y sistemas operativos modernos y aprovecha al máximo las funciones avanzadas del procesador 80x86 para mejorar la estabilidad y la seguridad del sistema.
1.3 Modo virtual 8086
Descripción general del modo virtual 8086
El modo virtual 8086 (modo virtual 8086) es un modo especial proporcionado por el procesador 80x86 en modo protegido, que permite al procesador ejecutar programas 8086 como si se ejecutaran en modo real. Este modo se utiliza principalmente para compatibilidad con versiones anteriores, lo que permite ejecutar versiones anteriores de programas de DOS en sistemas operativos modernos como Windows y Linux sin salir del modo protegido.
Características del modo virtual 8086
-
Compatibilidad en modo real
- El modo virtual 8086 permite al procesador simular el entorno operativo en modo real y admite el conjunto de instrucciones y el espacio de direcciones 8086.
- El procesador puede ejecutar programas 8086 en modo protegido y al mismo tiempo conservar las características y beneficios del modo protegido.
-
Mecanismos de paginación y protección.
- En el modo virtual 8086, el procesador aún puede usar el mecanismo de paginación en modo protegido para implementar la memoria virtual y la protección de la memoria.
- A través de la tabla de páginas, el espacio de direcciones en modo virtual 8086 se puede asignar a la memoria física, proporcionando aislamiento y protección de la memoria.
-
Manejo de interrupciones y excepciones
- El modo virtual 8086 admite el manejo de interrupciones y excepciones, que se pueden administrar a través de la tabla de descriptores de interrupciones (IDT) del modo protegido.
- Las interrupciones y excepciones pueden ser manejadas por el monitor virtual 8086 (generalmente el núcleo del sistema operativo), lo que garantiza la estabilidad y seguridad del sistema.
-
Soporte de virtualización de hardware
- Algunos procesadores modernos proporcionan tecnología de virtualización compatible con hardware que puede implementar el modo virtual 8086 de manera más eficiente.
- Por ejemplo, la tecnología VT-x de Intel y AMD-V de AMD pueden proporcionar soporte de virtualización acelerada por hardware y mejorar el rendimiento.
Gestión de memoria en modo virtual 8086
-
Segmento: direccionamiento compensado
- En el modo virtual 8086, el método de direccionamiento de la memoria es el mismo que en el modo real, utilizando el modo segmento: desplazamiento (segmento).
- La dirección de segmento y la dirección de desplazamiento juntas forman una dirección física de 20 bits, que puede acceder a hasta 1 MB de espacio de memoria.
-
Mecanismo de paginación
- El modo virtual 8086 admite el mecanismo de paginación, que puede asignar la dirección del modo real de 20 bits al espacio de direcciones virtuales en modo protegido.
- A través de tablas de páginas, se puede lograr la protección y el aislamiento de la memoria para evitar que los programas en modo virtual 8086 accedan ilegalmente a otras áreas de la memoria.
Aplicación del modo virtual 8086
-
Ejecutar programas DOS antiguos
- El modo virtual 8086 se utiliza principalmente para ejecutar versiones anteriores de programas y aplicaciones de DOS, lo que proporciona compatibilidad con versiones anteriores.
- En los sistemas operativos modernos, el modo virtual 8086 le permite ejecutar algunos programas antiguos que deben ejecutarse en modo real.
-
Máquinas virtuales y emuladores.
- Algunas máquinas virtuales y emuladores utilizan el modo virtual 8086 para admitir software y sistemas operativos más antiguos.
- Por ejemplo, emuladores como DOSBox simulan el entorno DOS a través del modo virtual 8086, lo que permite a los usuarios ejecutar juegos y aplicaciones clásicos de DOS.
Limitaciones del modo virtual 8086
-
espacio de direcciones de memoria
- En el modo virtual 8086, el programa solo puede acceder a 1 MB de espacio de direcciones de memoria, que está restringido por el modo real.
-
Gastos generales de rendimiento
- La implementación del modo virtual 8086 requiere la compatibilidad con el modo protegido, lo que puede provocar cierta sobrecarga de rendimiento.
- El manejo de interrupciones y excepciones requiere la intervención del monitor virtual 8086 (kernel del sistema operativo), lo que aumenta la complejidad del procesamiento.
-
Limitaciones de hardware
- No todo el hardware es totalmente compatible con el modo virtual 8086 y es posible que algunas funciones de hardware no estén disponibles en el modo virtual 8086.
Resumir
El modo virtual 8086 es un modo especial proporcionado por el procesador 80x86 en modo protegido, principalmente para compatibilidad con versiones anteriores de programas DOS. El modo virtual 8086 permite al procesador simular un entorno operativo en modo real en modo protegido conservando al mismo tiempo las características y ventajas del modo protegido. Este modo se utiliza ampliamente para ejecutar software heredado, máquinas virtuales y emuladores.
2. Gestión de memoria de Windows
2.1 Disposición de la memoria del sistema operativo DOS
La gestión de la memoria del sistema operativo DOS (Disk Operating System) se basa principalmente en el modelo de memoria en modo real del procesador 8086/8088. El espacio de direcciones de memoria en modo real es 1 MB, de 0x00000 a 0xFFFFF. Este espacio de direcciones de 1 MB se divide en varias áreas principales, cada una con un propósito específico. La siguiente es una introducción detallada a la disposición de la memoria del sistema operativo DOS.
modelo de memoria en modo real
En modo real, se accede a la dirección de memoria combinando la dirección del segmento y la dirección de desplazamiento en una dirección física de 20 bits. La dirección del segmento se desplaza 4 bits hacia la izquierda y la dirección de desplazamiento se agrega para formar la dirección física real.
diseño de memoria
El diseño del espacio de memoria de 1 MB en modo real es aproximadamente el siguiente:
-
Tabla de vectores de interrupción (IVT): 0x00000 - 0x003FF
- Ocupa 1 KB (256 vectores, 4 bytes cada uno).
- Almacene la dirección de entrada y la información relacionada de la rutina del servicio de interrupción.
-
Área de datos del BIOS (BDA): 0x00400 - 0x004FF
- Aproximadamente 256 bytes.
- Almacena parámetros del sistema y del dispositivo de hardware, como información del disco duro, puerto serie, puerto paralelo, etc.
-
Memoria heredada (memoria convencional): 0x00500 - 0x9FFFF
- 640 KB, utilizado principalmente para sistemas operativos DOS, aplicaciones DOS y programas de memoria residente (TSR).
- Se puede utilizar como código de programa, datos, pila, etc.
-
Búfer de visualización: 0xA0000 - 0xBFFFF
- El área de memoria utilizada por el adaptador de pantalla.
- 0xA0000 - 0xAFFFF: 64 KB, generalmente utilizado en el modo gráfico de tarjetas gráficas EGA/VGA.
- 0xB0000 - 0xB7FFF: 32 KB, generalmente utilizado para adaptadores de pantalla monocromáticos (MDA).
- 0xB8000 - 0xBFFFF: 32 KB, generalmente utilizado para visualización de texto en color (modo de texto CGA, EGA, VGA).
-
Área de datos BIOS extendida (EBDA): 0xC0000 - 0xC7FFF
- Aproximadamente 32 KB, que almacena algunos datos de BIOS extendidos y código de BIOS del adaptador.
-
Área de extensión del BIOS: 0xC8000 - 0xEFFFF
- Se utiliza principalmente para BIOS y controladores de tarjetas de expansión (como adaptadores de red, controladores SCSI, etc.).
-
BIOS del sistema: 0xF0000 - 0xFFFFF
- 64 KB, almacena el código BIOS del sistema.
- Proporciona inicialización básica del sistema, rutina de servicio de interrupción, control de hardware y otras funciones.
2.2 Mecanismo de direccionamiento de memoria 80386
El procesador Intel 80386 introdujo un mecanismo de direccionamiento de memoria más avanzado, proporcionando capacidades de protección y administración de memoria más poderosas que sus predecesores. El 80386 admite dos modos de direccionamiento de memoria principal:modo realymodo protegido . En modo protegido, también se introduce un mecanismo de paginación para mejorar aún más las capacidades de administración de memoria. La siguiente es una introducción detallada:
1. modo real
En modo real, el procesador 80386 tiene el mismo método de direccionamiento de memoria que el 8086/8088. Utiliza un bus de direcciones de 20 bits y puede acceder a 1 MB de espacio de memoria. La dirección se calcula a partir de la dirección del segmento y la dirección de desplazamiento:
- dirección de segmento: Desplazamiento a la izquierda de 4 bits.
- dirección compensada: Sumado al resultado del desplazamiento a la izquierda de la dirección del segmento, se obtiene la dirección física de 20 bits.
物理地址 = (段地址 << 4) + 偏移地址
2. Modo protegido
El modo protegido es el modo de trabajo principal del procesador 80386, que proporciona funciones mejoradas de administración y protección de la memoria. El direccionamiento de memoria en modo protegido implica dos capas de mecanismos:mecanismo de segmentaciónyMecanismo de paginación。
2.1 Mecanismo de segmentación
En modo protegido, el procesador 80386 utiliza un selector de segmento y un descriptor de segmento para administrar segmentos. Los descriptores de segmento se almacenan en la tabla de descriptores globales (GDT) o en la tabla de descriptores locales (LDT).
-
selector de segmento: 16 bits, incluidos tres campos:
- índice: 13 bits, especifica la posición del descriptor de segmento en GDT o LDT.
- TI (Indicador de tabla): 1 bit, que indica si se utiliza GDT (0) o LDT (1).
- RPL (Nivel de privilegio solicitado): 2 bits, especificando el nivel de privilegio solicitado.
-
descriptor de segmento: 8 bytes, incluidos los siguientes campos:
- Dirección base: 32 bits, dirección inicial del segmento.
- Límite de segmento (Límite): 20 bits, tamaño de segmento.
- Derechos de acceso y propiedades.: 12 bits, que describe el tipo de segmento, nivel de privilegio, etc.
El cálculo de la dirección lineal bajo el mecanismo de segmentación es el siguiente:
线性地址 = 段基址 + 偏移地址
2.2 Mecanismo de paginación
El mecanismo de paginación es otro método de administración de memoria proporcionado por el procesador 80386 en modo protegido. Realiza la virtualización y protección de la memoria convirtiendo direcciones lineales en direcciones físicas. El mecanismo de paginación implica directorios de páginas, tablas de páginas y marcos de páginas.
- directorio de páginas: Contiene entradas de directorio de páginas (PDE), cada PDE apunta a una tabla de páginas.
- tabla de páginas: Contiene entradas de la tabla de páginas (PTE), cada PTE apunta a un marco de página.
- marco de página: El bloque de memoria física real, normalmente 4 KB.
La traducción de direcciones del mecanismo de paginación es la siguiente:
- Las direcciones lineales se dividen en tres partes: directorio, tabla y desplazamiento dentro de la página.
- La sección del directorio indexa el directorio de la página para encontrar el PDE correspondiente.
- La sección de tabla indexa la tabla de páginas para encontrar el PTE correspondiente.
- El desplazamiento dentro de la página se agrega a la dirección base del marco de la página para obtener la dirección física.
物理地址 = 页帧基址 + 页内偏移
Diagrama esquemático del mecanismo de paginación:
+----------------+----------------+----------------+
| 页目录(10位) | 页表(10位) | 页内偏移(12位)|
+----------------+----------------+----------------+
3. Unidad de administración de memoria (MMU) 80386
La MMU (Unidad de gestión de memoria) de 80386 es responsable de la segmentación y traducción de direcciones de paginación e implementa la protección de la memoria.
-
registro CR0: Registro de control para habilitar/deshabilitar el modo protegido y paginación.
- Bit PE (habilitación de protección): Habilita el modo protegido.
- Bit PG (habilitación de paginación): Habilite la paginación.
-
registro CR3: La dirección base del directorio de la página de almacenamiento.
-
registro CR2: Almacena la dirección lineal del último fallo de página.
4. Mecanismo de protección
En modo protegido, el procesador 80386 proporciona una variedad de mecanismos de protección para garantizar la seguridad de la memoria y el sistema:
- Niveles de privilegio : Del 0 al 3, hay cuatro niveles en total, siendo el nivel 0 el más alto. Controlar el acceso al código y a los datos.
- protección de segmento: Implemente la verificación de límites del segmento y el control de acceso a través de los campos de atributos en el descriptor del segmento.
- protección de página: A través del campo de atributos en el PTE se realiza el control de permisos de lectura, escritura y ejecución de la página.
2.3 Disposición de la memoria de Windows
1. Memoria virtual
El sistema operativo Windows utiliza administración de memoria virtual, que combina memoria física (RAM) y archivos de memoria virtual (archivos de páginas) en el disco duro para proporcionar un espacio de direcciones virtuales independiente para cada proceso. Cada proceso suele tener 4 GB de espacio de direcciones virtuales (sistemas de 32 bits), de los cuales 2 GB se utilizan en programas en modo usuario y 2 GB en modo kernel. Los sistemas de 64 bits tienen un espacio de direcciones virtuales mayor.
2. Diseño del espacio de direcciones virtuales
El espacio de direcciones virtuales se divide en regiones en modo usuario y en modo kernel:
espacio de direcciones en modo usuario
- 0x00000000 - 0x7FFFFFFF: Espacio de direcciones en modo de usuario, para uso de aplicaciones.
- Montón: Área de asignación de memoria dinámica, la aplicación asigna y libera memoria en tiempo de ejecución.
- Pila: Cada hilo tiene su propia pila para llamadas a funciones y variables locales.
- Memoria compartida: Segmentos de datos compartidos entre diferentes procesos.
espacio de direcciones en modo kernel
- 0x80000000 - 0xFFFFFFFF: Espacio de direcciones en modo kernel, utilizado por el kernel y los controladores del sistema operativo.
- Código y datos del kernel: El código y los datos globales del kernel del sistema operativo.
- caché del sistema: Se utiliza para el almacenamiento en caché del sistema de archivos para mejorar el rendimiento del acceso a archivos.
- controlador de dispositivo: Código y datos del conductor.
3. Paginación de memoria
Windows utiliza un mecanismo de paginación para administrar la memoria y convertir direcciones virtuales en direcciones físicas. La unidad básica de paginación es una página, normalmente de 4 KB.
Estructura de la tabla de páginas
- Directorio de páginas: Contiene la entrada del directorio de páginas (PDE), que apunta a la tabla de páginas.
- Tabla de páginas: Contiene entradas de la tabla de páginas (PTE) que apuntan a páginas de memoria física reales.
4. Unidad de gestión de memoria (MMU)
La unidad de administración de memoria (MMU) del procesador es responsable de convertir direcciones virtuales en direcciones físicas, realizar el reemplazo de páginas y proteger la memoria. El sistema operativo Windows implementa las siguientes funciones a través de la MMU:
- traducción de direcciones: asigna direcciones virtuales a direcciones físicas.
- protección de memoria: Controlar los permisos de acceso a la página (lectura, escritura, ejecución).
- Reemplazo de página: intercambie las páginas que utiliza con poca frecuencia al archivo de páginas del disco duro para liberar memoria física.
5. Protección de la memoria
El sistema operativo Windows protege la memoria mediante los siguientes mecanismos:
- Nivel de privilegio: Asegúrese de que los programas en modo usuario no puedan acceder directamente a la memoria en modo kernel.
- Permisos de página: Controla el tipo de acceso (lectura, escritura, ejecución) de cada página.
- Control de acceso: El kernel del sistema operativo establece permisos de acceso para evitar el acceso no autorizado a la memoria.
6. Asignación de memoria
Windows utiliza varias estrategias y estructuras de datos para la asignación de memoria:
- asignador de paginación: gestiona la asignación de paginación y la liberación de memoria virtual.
- administrador de montón: Proporciona asignación y desasignación de memoria eficiente para aplicaciones.
- asignador de memoria del kernel: gestiona la memoria en modo kernel, incluido el asignador de grupos y el grupo no paginado.
7. API de gestión de memoria
Windows proporciona un conjunto de API de administración de memoria para que las utilicen las aplicaciones y el sistema:
- Asignación virtual/Liberación virtual: Asigna y libera memoria virtual.
- Asignación de montón/Liberación de montón: Asigna y libera memoria en el montón.
- GlobalAlloc/GlobalFree: Asigna y libera bloques de memoria global.
- Asignación local/Liberación local: Asigna y libera bloques de memoria local.
8. Archivo de página
Windows utiliza el archivo de página (Pagefile.sys) como parte de la memoria virtual. Cuando la memoria física es insuficiente, las páginas utilizadas con poca frecuencia se intercambian en el archivo de página. La ubicación y el tamaño del archivo de página son configurables por el usuario.
3. Protección de privilegios de Windows
3.1 80386 interrupciones y excepciones
1. Clasificación de interrupciones y excepciones
Las interrupciones y excepciones se pueden dividir en las siguientes categorías:
- Interrupciones de hardware: Enviado por dispositivos externos, como teclado, mouse, disco duro, etc.
- Interrupciones de software: Pasado por software
INT
El comando se activa. - Excepciones: Activado por errores o condiciones especiales detectadas por el procesador, como errores de división por cero, fallas de página, etc.
2. Tabla de vectores de interrupción (IVT)
El procesador 80386 utiliza una tabla de vectores de interrupciones para gestionar interrupciones y excepciones. El IVT es una tabla de 256 entradas, cada una de las cuales ocupa 4 bytes, y almacena la dirección de un controlador de interrupción o excepción. La dirección base del IVT se almacena en el IDTR (Registro de tabla de descriptores de interrupción).
3. Tabla de descriptores de interrupción (IDT)
En modo protegido, el procesador 80386 utiliza una tabla de descriptores de interrupciones (IDT) para almacenar controladores de interrupciones y excepciones. IDT contiene descriptores de puerta de interrupción, puerta de trampa y puerta de tarea; cada descriptor ocupa 8 bytes.
- Puerta de interrupción: Se utiliza para interrupciones de hardware y software, borrando automáticamente IF (indicador de interrupción).
- Puerta trampa: Se utiliza para el manejo de excepciones, IF no se borra.
- Puerta de tareas: Se utiliza para cambiar de tarea.
La dirección base y los límites del IDT se almacenan en IDTR.
4. Interrumpir el flujo de procesamiento
Cuando ocurre una interrupción o excepción, el procesador 80386 realiza los siguientes pasos:
- guardar contexto: Guarde el CS (registro de segmento de código) actual, el EIP (registro de puntero de instrucción) y el EFLAGS (registro de banderas) actuales en la pila.
- Encuentra IDT: Encuentre el descriptor correspondiente del IDT según el número de interrupción o excepción.
- comprobar permisos: Verifique el nivel de privilegio actual (CPL) y el nivel de privilegio objetivo (DPL) para garantizar la conversión de permisos legales.
- saltar al controlador: Cargue nuevos CS y EIP, salte al controlador de interrupciones o excepciones.
- Manejar interrupciones o excepciones: Ejecutar código de controlador.
- restaurar contexto:aprobar
IRET
La instrucción restaura CS, EIP y EFLAGS y regresa al estado anterior a que ocurriera la interrupción o excepción.
5. Tipo de excepción
El procesador 80386 admite múltiples excepciones, cada excepción tiene diferentes códigos de error y métodos de manejo:
- Fallos: Una excepción recuperable. Cuando el controlador regrese, se volverá a ejecutar la instrucción que causó la excepción.
- Trampas: Una excepción utilizada para depurar o rastrear. Cuando el controlador regresa después de que ocurre la excepción, la siguiente instrucción continúa ejecutándose.
- Aborta: Error grave, normalmente irrecuperable.
Las excepciones comunes incluyen:
- Error de división: Aumenta cuando el divisor es cero.
- Un solo paso: Se utiliza para depurar, se genera al ejecutar un solo paso.
- Punto de interrupción: Se genera al depurar puntos de interrupción.
- Desbordamiento:usar
INTO
Se genera cuando la instrucción detecta un desbordamiento. - Rango LÍMITE excedido: Se genera cuando el acceso a la matriz se sale de los límites.
- Código de operación no válido: Generado al ejecutar una instrucción ilegal.
- Dispositivo no disponible: Se genera cuando el coprocesador no está disponible.
- Doble culpa: Se vuelve a producir una excepción al manejar una excepción.
- Desbordamiento del segmento del coprocesador: Generado por operaciones del coprocesador.
- TSS no válido: Se genera cuando el segmento de estado de la tarea es ilegal.
- Segmento no presente: Se genera cuando se accede a un segmento no existente.
- Fallo de pila: Aparece cuando se produce un error de operación de la pila.
- Error de protección general: Se activa cuando se violan las reglas de protección.
- Error de página: Aparece cuando la operación de búsqueda es anormal.
6. Manejadores de interrupciones y excepciones
Los manejadores de interrupciones y excepciones son rutinas especiales que se utilizan para manejar interrupciones o excepciones específicas. Por lo general, los proporciona el sistema operativo y son responsables de restaurar el estado del sistema, registrar información de errores, realizar las operaciones de recuperación necesarias o interrumpir la respuesta.
7. Prioridad de interrupción y enmascaramiento.
El procesador 80386 admite mecanismos de enmascaramiento y prioridad de interrupciones, y gestiona la prioridad y el enmascaramiento de interrupciones de hardware a través del PIC (Controlador de interrupciones programable). Las interrupciones de alto nivel pueden interrumpir el procesamiento de interrupciones de bajo nivel para garantizar una respuesta oportuna a eventos críticos.
3.2 Mecanismo de protección de 80386
1. Protección de segmentación
El procesador 80386 utiliza un mecanismo de segmentación para administrar la memoria. Cada segmento tiene un descriptor que contiene la dirección base, los límites y los derechos de acceso del segmento. La protección de segmentación garantiza que los procesos solo puedan acceder a áreas de memoria para las que están autorizados.
descriptor de segmento
Los descriptores de segmento se almacenan en la tabla de descriptores globales (GDT) y en la tabla de descriptores locales (LDT). Cada descriptor contiene la siguiente información:
- Dirección base: La dirección inicial del segmento.
- Límite: El tamaño del segmento, que indica la dirección final del segmento.
- Tipo (Type) y nivel de privilegio (DPL): El tipo de segmento (segmento de código, segmento de datos, segmento de sistema) y derechos de acceso.
- Bit de presencia de segmento (P): si el segmento está en la memoria.
Implementación de protección de segmentación.
Al acceder a la memoria, el procesador busca el descriptor de segmento basándose en el selector de segmento y realiza las siguientes comprobaciones:
- Comprobación de límites y dirección base: Asegúrese de que la dirección de acceso esté dentro del rango del segmento.
- verificación de permiso: Asegúrese de que los derechos de acceso coincidan con el tipo y nivel de privilegio en el descriptor.
2. Protección de paginación
El mecanismo de paginación refina aún más la gestión de la memoria, ya que cada página tiene sus propios derechos de acceso. El mecanismo de protección de paginación se implementa a través de directorios de páginas y tablas de páginas.
Directorios de páginas y tablas de páginas.
- Directorio de páginas: Contiene la entrada del directorio de páginas (PDE), que apunta a la tabla de páginas.
- Tabla de páginas: Contiene entradas de la tabla de páginas (PTE) que apuntan a páginas de memoria física reales.
Cada entrada de la tabla de páginas contiene la siguiente información:
- Dirección base de la página: La dirección inicial de la página de memoria física.
- Bit de presencia (P): si la página está en la memoria.
- Bit de lectura/escritura (R/W): si se puede escribir en la página.
- Bit de usuario/superusuario (U/S): Permisos de acceso a la página.
Implementación de protección de paginación.
Al acceder a la memoria, el procesador realiza las siguientes comprobaciones:
- Comprobación de existencia de página: Compruebe si la página está en la memoria; de lo contrario, provocará un error de página (fallo de página).
- cheque de lectura/escritura: Compruebe si se puede escribir en la página. Si intenta escribir en una página que no se puede escribir, se activará un fallo de protección.
- Comprobación de usuario/superusuario: Verifique los permisos de acceso para asegurarse de que el código en modo usuario no pueda acceder a las páginas en modo kernel.
3. Nivel de privilegio
El procesador 80386 admite 4 niveles de privilegio (Privilege Levels), del 0 al 3. Cuanto menor sea el nivel, mayor será el privilegio.
- Nivel de privilegio 0 (Anillo 0): El nivel de privilegio más alto, generalmente utilizado en el kernel del sistema operativo.
- Nivel de privilegio 1 (Anillo 1)yNivel de privilegio 2 (Anillo 2): Nivel de privilegio intermedio, rara vez utilizado.
- Nivel de privilegio 3 (Anillo 3): el nivel de privilegio más bajo, normalmente utilizado por aplicaciones en modo de usuario.
Implementación de niveles de privilegios.
Los niveles de privilegios se implementan a través de los siguientes mecanismos:
- Nivel de privilegio de segmento de código (CPL): El nivel de privilegio del código que se está ejecutando actualmente.
- Nivel de privilegio del segmento de datos (DPL): El nivel de privilegio del segmento de datos, que determina qué CPL pueden acceder al segmento.
- Solicitar nivel de privilegio (RPL): El nivel de privilegio del selector de segmento, que indica el permiso de acceso solicitado.
Al realizar una operación de acceso, el procesador verifica CPL, DPL y RPL para garantizar el cumplimiento de las reglas de nivel de privilegios. Si no coincide se desencadena un Fallo de Protección General.
4. Descriptores de puerta y segmento del sistema
El procesador 80386 admite descriptores de puerta y segmento del sistema para conmutación de tareas y manejo de interrupciones.
segmento del sistema
- Segmento de estado de tarea (TSS): Contiene información contextual de la tarea y se utiliza para cambiar de tarea.
- Tabla de descriptores locales (LDT): Contiene descriptores de segmentos específicos de tareas.
descriptor de puerta
- Puerta de interrupción: Se utiliza para el procesamiento de interrupciones y salta al controlador de interrupciones.
- Puerta trampa: Se utiliza para el manejo de excepciones y no enmascara las interrupciones.
- Puerta de tareas: Se utiliza para cambiar de tarea, cambiar de tarea a través de TSS.
5. Cambio de tareas
El procesador 80386 admite la conmutación de tareas de hardware, que se implementa a través del segmento de estado de tareas (TSS). El cambio de tareas puede desencadenarse mediante interrupciones, excepciones o puertas de tareas.
Segmento de estado de tarea (TSS)
El TSS contiene el estado del registro de la tarea, los registros de segmento, el puntero de la pila y los enlaces de la tarea. Al cambiar de tarea, el procesador guarda el estado de la tarea actual en el TSS y carga el estado de la nueva tarea.
Proceso de cambio de tareas
- Guardar el estado actual de la tarea: Guarde los registros y registros de segmento de la tarea actual en TSS.
- Cargar nuevo estado de tarea: Carga registros y registros de segmentos del TSS de la nueva tarea.
- Actualizar registro de tareas (TR): Apunta al TSS de la nueva tarea.
6. Manejo de interrupciones y excepciones
El manejo de interrupciones y excepciones son partes importantes del mecanismo de protección del procesador 80386. Las interrupciones y excepciones se gestionan a través de la tabla de descriptores de interrupciones (IDT) y se realizan comprobaciones de permisos y cambios de contexto durante el procesamiento.
Procedimientos de manejo de interrupciones y excepciones.
- guardar contexto: Guarde el CS, EIP y EFLAGS actuales en la pila.
- Encuentra IDT: Busque el descriptor correspondiente de IDT según el número de interrupción o excepción.
- verificación de permiso: Verifique CPL y DPL para garantizar la conversión de permisos legales.
- saltar al controlador: Cargue nuevos CS y EIP y ejecute el controlador.
- restaurar contexto:aprobar
IRET
Restaure CS, EIP y EFLAGS y regrese al estado anterior a la interrupción o excepción.
3.3 Mecanismo de protección de Windows
1. Modo usuario y modo kernel
El sistema operativo Windows divide el modo de ejecución del procesador en modo usuario (Modo Usuario) y modo kernel (Modo Kernel):
- modo de usuario: ejecuta una aplicación con acceso restringido y sin acceso directo al hardware o a las estructuras de datos del kernel.
- modo kernel: Ejecuta componentes centrales del sistema operativo y controladores de dispositivos con acceso completo y puede ejecutar instrucciones privilegiadas.
Cambiar entre el modo de usuario y el modo kernel
El cambio entre el modo de usuario y el modo kernel generalmente se implementa mediante llamadas al sistema. La aplicación solicita servicios del kernel llamando a la API del sistema y el sistema operativo cambia la solicitud al modo kernel para su procesamiento.
2. Protección de la memoria
Memoria virtual
Windows utiliza un mecanismo de memoria virtual para proporcionar a cada proceso un espacio de direcciones independiente. Este mecanismo evita que los procesos accedan directamente a la memoria de los demás, mejorando así la seguridad y estabilidad del sistema.
- tabla de páginas: Cada proceso tiene una tabla de páginas independiente que asigna direcciones virtuales a direcciones físicas.
- intercambio de paginas: Cuando la memoria física es baja, el sistema operativo intercambia las páginas que se utilizan con poca frecuencia al archivo de página en el disco duro.
segmento de memoria
Windows utiliza segmentos de memoria para dividir diferentes tipos de datos y códigos, y cada segmento tiene diferentes derechos de acceso y mecanismos de protección. Por ejemplo, el segmento de código es de solo lectura, mientras que el segmento de datos es de lectura y escritura.
3. control de acceso
El sistema operativo Windows utiliza la Lista de control de acceso (ACL) para administrar los derechos de acceso de los usuarios y procesos a los recursos.
Identificador de seguridad (SID)
Cada usuario, grupo y computadora tiene un identificador de seguridad único (SID) que los identifica.
Lista de control de acceso (ACL)
Cada objeto (como un archivo, directorio, clave de registro, etc.) tiene una lista de control de acceso, que contiene un conjunto de elementos de control de acceso (ACE) que definen los derechos de acceso de diferentes usuarios y grupos al objeto.
4. Gestión de privilegios
Windows controla qué procesos y usuarios pueden hacer a través de la administración de privilegios. Ciertos privilegios solo se otorgan a grupos de usuarios específicos (como administradores), como instalar controladores, acceder a registros del sistema, etc.
estrategia de seguridad
Windows proporciona una serie de políticas de seguridad que pueden configurar el control de cuentas de usuario (UAC), políticas de contraseñas, políticas de auditoría, etc. para mejorar la seguridad del sistema.
5. Manejo de interrupciones y excepciones
Los sistemas operativos Windows utilizan mecanismos de manejo de interrupciones y excepciones para administrar las interrupciones de hardware, las interrupciones de software y las excepciones del procesador.
Manejo de interrupciones
El controlador de interrupciones (Rutina de servicio de interrupción, ISR) es responsable de manejar las interrupciones de hardware y garantizar que los dispositivos externos puedan responder a tiempo.
Manejo de excepciones
Los controladores de excepciones manejan excepciones del procesador, como errores de división por cero, fallas de página, etc., para garantizar que el sistema pueda tomar las medidas de recuperación adecuadas cuando ocurren excepciones.
6. Multitarea
Windows permite que se ejecuten múltiples procesos y subprocesos al mismo tiempo a través del mecanismo multitarea. El sistema operativo utiliza un programador para gestionar la ejecución de procesos y subprocesos y garantizar que los recursos del sistema se asignen de manera justa.
Programación de hilos
Windows utiliza un algoritmo de programación de prioridades para asignar intervalos de tiempo de CPU según la prioridad y el estado del subproceso (como listo, en espera, en ejecución, etc.).
aislamiento de procesos
Cada proceso tiene un espacio de direcciones virtuales y recursos independientes, lo que evita que un proceso afecte el funcionamiento de otro proceso y mejora la estabilidad del sistema.
7. Funciones de seguridad
Windows proporciona una serie de funciones de seguridad, como Prevención de ejecución de datos (DEP), Aleatorización del diseño del espacio de direcciones (ASLR), etc., para mejorar las capacidades de protección del sistema.
Prevención de ejecución de datos (DEP)
DEP evita la ejecución de código en el segmento de datos al marcar ciertas áreas de memoria como no ejecutables mediante una combinación de hardware y software.
Aleatorización del diseño del espacio de direcciones (ASLR)
ASLR aleatoriza el espacio de direcciones de memoria de un proceso, lo que dificulta que los atacantes aprovechen las vulnerabilidades.