Note di assemblaggio di Windows 32 (1): conoscenze di base
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. Modalità di lavoro del processore 80x86
1.1 Modalità reale
Panoramica della modalità reale
La modalità reale è la prima modalità di lavoro supportata dal processore 80x86 ed è anche la modalità di lavoro più elementare. La modalità reale viene utilizzata principalmente nei primi sistemi operativi MS-DOS e in altri ambienti operativi semplici. In modalità reale, il processore ha accesso diretto a 1 MB di spazio di memoria fisica. Questa modalità è pienamente compatibile con il modo in cui funziona il processore 8086, da qui il nome "modalità reale".
Funzionalità della modalità reale
-
Risolvere le limitazioni di spazio
- In modalità reale, il processore può accedere solo a 1 MB di spazio di memoria (da 0x00000 a 0xFFFFF).
- Lo spazio di memoria è limitato dal bus indirizzi a 20 bit.
-
Indirizzo del segmento e indirizzo offset
- La modalità reale utilizza il metodo segmento:offset (segmento) per l'indirizzamento della memoria.
- L'indirizzo del segmento viene moltiplicato per 16 (ovvero spostato a sinistra di 4 bit) e aggiunto all'indirizzo di offset per formare un indirizzo fisico a 20 bit.
- Ad esempio, se l'indirizzo del segmento è 0x1234 e l'indirizzo offset è 0x5678, l'indirizzo fisico è: Indirizzo fisico = (0x1234×16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8testo{indirizzo fisico} = (0x1234 volte 16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8 indirizzo fisico=(0x1234×16)+0x5678=0x12340+0x5678=0x179B8
-
Nessuna protezione della memoria
- La modalità reale non ha alcun meccanismo di protezione della memoria e il programma può accedere arbitrariamente all'intero spazio di memoria da 1 MB, inclusa l'area del sistema operativo e le aree di altri programmi.
- Ciò rende possibile che i programmi interferiscano tra loro e provochino facilmente arresti anomali del sistema.
-
accesso hardware diretto
- La modalità reale consente l'accesso diretto ai dispositivi hardware e alle porte I/O.
- In modalità reale, i programmi possono interagire con i dispositivi hardware direttamente utilizzando istruzioni I/O come IN e OUT.
-
Interrupt e inizializzazione del processore
- La modalità reale supporta gli interrupt hardware e software, che vengono gestiti utilizzando la Interrupt Vector Table (IVT).
- La tabella dei vettori di interruzione viene archiviata nell'area di memoria più bassa da 1 KB (da 0x00000 a 0x003FF).
- Dopo l'accensione o il ripristino, il processore entrerà automaticamente in modalità reale e inizierà a eseguire il codice dall'indirizzo 0xFFFF0.
-
Limitazioni sul codice eseguibile
- La dimensione del segmento di codice eseguibile in modalità reale è limitata, in genere un segmento di codice arriva fino a 64 KB (da 0x0000 a 0xFFFF).
Layout della memoria in modalità reale
In modalità reale, il layout della memoria solitamente include le seguenti parti:
-
area del BIOS
- La memoria di fascia alta (da 0xF0000 a 0xFFFFF) viene solitamente utilizzata per archiviare codice e dati BIOS.
- All'accensione o al ripristino, il processore inizia a eseguire il codice BIOS su 0xFFFF0.
-
Tabella dei vettori di interruzione
- L'area di memoria più bassa da 1 KB (da 0x00000 a 0x003FF) memorizza la tabella dei vettori di interruzione.
- Ciascun vettore di interruzione occupa 4 byte (indirizzo di segmento a 2 byte e indirizzo di offset a 2 byte).
-
Sistemi operativi e applicazioni
- L'area di memoria rimanente viene utilizzata per il codice del sistema operativo, il codice dell'applicazione e i dati.
1.2 Modalità di protezione
Panoramica
La modalità protetta è una modalità di lavoro avanzata introdotta dal processore 80x86. Rispetto alla modalità reale, fornisce funzioni di gestione e protezione della memoria più potenti. La modalità protetta è stata introdotta per la prima volta sul processore 80286 ed è stata ulteriormente estesa e migliorata sui processori 80386 e successivi.
Funzionalità della modalità protetta
-
Spazio di indirizzi di memoria esteso
- La modalità protetta supporta bus di indirizzi a 24 o 32 bit e può accedere a 4 GB di spazio di memoria fisica (su 80386 e versioni successive).
- I selettori e i descrittori di segmento vengono utilizzati per la gestione della memoria, consentendo un layout e una gestione della memoria più complessi.
-
protezione della memoria
- Attraverso descrittori di segmenti e tabelle di pagine, la modalità protetta può implementare la protezione della memoria per impedire ai programmi di accedere illegalmente alla memoria di altri programmi o sistemi operativi.
- Supporta segmenti di codice e dati con diversi livelli di privilegio (dal livello 0 al livello 3) per ottenere l'isolamento tra la modalità utente e la modalità kernel.
-
Meccanismo di cercapersone
- Supporta il meccanismo di paginazione e associa gli indirizzi virtuali agli indirizzi fisici tramite tabelle di pagina per migliorare ulteriormente le capacità di gestione della memoria.
- La dimensione della pagina è solitamente di 4 KB, ma sono supportate anche pagine di grandi dimensioni (come 4 MB).
-
Multitasking supportato dall'hardware
- Fornisce la commutazione multi-task supportata dall'hardware, inclusi Task State Segment (TSS) e Task Register (Task Register).
- Supporta il task gate per il passaggio e la protezione tra le attività.
-
Gestione migliorata delle interruzioni e delle eccezioni
- In modalità protetta, la tabella descrittore degli interrupt (IDT) viene utilizzata per gestire gli interrupt e la gestione delle eccezioni.
- IDT supporta i descrittori di gate (Gate Descriptor), inclusi gate di interruzione, gate di trappola e gate di attività.
-
Memoria virtuale
- Supporta la memoria virtuale e implementa lo spazio degli indirizzi virtuali attraverso il meccanismo di paging, consentendo al programma di utilizzare uno spazio degli indirizzi più ampio rispetto alla memoria fisica effettiva.
Gestione della memoria in modalità protetta
-
Selettori di segmento e descrittori di segmento
- Ogni selettore di segmento punta a un descrittore di segmento, che contiene l'indirizzo di base del segmento, il limite del segmento e gli attributi del segmento (come autorizzazioni e tipo).
- I selettori e i descrittori di segmento sono gestiti dalla Global Descriptor Table (GDT) e dalla Local Descriptor Table (LDT).
-
Meccanismo di cercapersone
- Il meccanismo di paginazione divide l'indirizzo virtuale in directory di pagine (Page Directory), tabella di pagine (Page Table) e frame di pagina (Page Frame).
- Attraverso la directory delle pagine e la tabella delle pagine, gli indirizzi virtuali vengono mappati su indirizzi fisici per ottenere la protezione e la gestione della memoria.
Applicazione in modalità protetta
La modalità protetta è ampiamente utilizzata nei moderni sistemi operativi, come Windows, Linux, Unix, ecc. Utilizzano le caratteristiche della modalità protetta per implementare funzioni avanzate come multitasking, multiutente e protezione della memoria. Attraverso la modalità protetta, il sistema operativo può gestire efficacemente le risorse hardware e fornire un ambiente operativo stabile e sicuro.
La modalità protetta è la base dei sistemi operativi e delle applicazioni moderni e sfrutta appieno le funzionalità avanzate del processore 80x86 per migliorare la stabilità e la sicurezza del sistema.
1.3 Modalità virtuale 8086
Panoramica della modalità Virtual 8086
La modalità Virtual 8086 (modalità Virtual 8086) è una modalità speciale fornita dal processore 80x86 in modalità protetta, che consente al processore di eseguire programmi 8086 come se fossero eseguiti in modalità reale. Questa modalità viene utilizzata principalmente per la compatibilità con le versioni precedenti, consentendo l'esecuzione di versioni precedenti di programmi DOS su sistemi operativi moderni come Windows e Linux senza uscire dalla modalità protetta.
Caratteristiche della modalità virtuale 8086
-
Compatibilità in modalità reale
- La modalità virtuale 8086 consente al processore di simulare l'ambiente operativo in modalità reale e supporta il set di istruzioni 8086 e lo spazio degli indirizzi.
- Il processore può eseguire 8086 programmi in modalità protetta pur mantenendo le funzionalità e i vantaggi della modalità protetta.
-
Meccanismi di paginazione e protezione
- Nella modalità 8086 virtuale, il processore può comunque utilizzare il meccanismo di paging in modalità protetta per implementare la memoria virtuale e la protezione della memoria.
- Attraverso la tabella delle pagine, lo spazio degli indirizzi in modalità 8086 virtuale può essere mappato sulla memoria fisica, fornendo isolamento e protezione della memoria.
-
Gestione delle interruzioni e delle eccezioni
- La modalità Virtual 8086 supporta la gestione degli interrupt e delle eccezioni, che può essere gestita tramite la tabella descrittore di interrupt (IDT) in modalità protetta.
- Gli interrupt e le eccezioni possono essere gestiti dal monitor virtuale 8086 (solitamente il kernel del sistema operativo), garantendo stabilità e sicurezza del sistema.
-
Supporto per la virtualizzazione dell'hardware
- Alcuni processori moderni forniscono una tecnologia di virtualizzazione supportata dall'hardware in grado di implementare la modalità virtuale 8086 in modo più efficiente.
- Ad esempio, la tecnologia VT-x di Intel e AMD-V di AMD possono fornire supporto per la virtualizzazione con accelerazione hardware e migliorare le prestazioni.
Gestione della memoria in modalità virtuale 8086
-
Segmento: indirizzamento offset
- Nella modalità virtuale 8086, il metodo di indirizzamento della memoria è lo stesso della modalità reale, utilizzando la modalità segmento: offset (segmento).
- L'indirizzo del segmento e l'indirizzo offset insieme formano un indirizzo fisico a 20 bit, che può accedere fino a 1 MB di spazio di memoria.
-
Meccanismo di cercapersone
- La modalità 8086 virtuale supporta il meccanismo di paging, che può mappare l'indirizzo in modalità reale a 20 bit allo spazio degli indirizzi virtuali in modalità protetta.
- Attraverso le tabelle delle pagine, è possibile ottenere la protezione e l'isolamento della memoria per impedire ai programmi in modalità 8086 virtuale di accedere illegalmente ad altre aree di memoria.
Applicazione della modalità virtuale 8086
-
Esegui i vecchi programmi DOS
- La modalità Virtual 8086 viene utilizzata principalmente per eseguire versioni precedenti di programmi e applicazioni DOS, fornendo compatibilità con le versioni precedenti.
- Nei moderni sistemi operativi, la modalità virtuale 8086 consente di eseguire alcuni vecchi programmi che devono essere eseguiti in modalità reale.
-
Macchine virtuali ed emulatori
- Alcune macchine virtuali ed emulatori utilizzano la modalità virtuale 8086 per supportare sistemi operativi e software meno recenti.
- Ad esempio, emulatori come DOSBox simulano l'ambiente DOS attraverso la modalità virtuale 8086, consentendo agli utenti di eseguire giochi e applicazioni DOS classici.
Limitazioni della modalità 8086 virtuale
-
spazio degli indirizzi di memoria
- Nella modalità virtuale 8086, il programma può accedere solo a 1 MB di spazio di indirizzi della memoria, che è limitato dalla modalità reale.
-
Sovraccarico delle prestazioni
- L'implementazione della modalità 8086 virtuale richiede il supporto della modalità protetta, che potrebbe causare un certo sovraccarico delle prestazioni.
- La gestione degli interrupt e delle eccezioni richiede l'intervento del monitor virtuale 8086 (kernel del sistema operativo), che aumenta la complessità dell'elaborazione.
-
Limitazioni hardware
- Non tutto l'hardware supporta completamente la modalità 8086 virtuale e alcune funzionalità hardware potrebbero non essere disponibili in modalità 8086 virtuale.
Riassumere
La modalità Virtual 8086 è una modalità speciale fornita dal processore 80x86 in modalità protetta, principalmente per la compatibilità con le versioni precedenti dei programmi DOS. La modalità Virtual 8086 consente al processore di simulare un ambiente operativo in modalità reale in modalità protetta mantenendo le caratteristiche e i vantaggi della modalità protetta. Questa modalità è ampiamente utilizzata per l'esecuzione di software legacy, macchine virtuali ed emulatori.
2. Gestione della memoria di Windows
2.1 Disposizione della memoria del sistema operativo DOS
La gestione della memoria del sistema operativo DOS (Disk Operating System) si basa principalmente sul modello di memoria in modalità reale del processore 8086/8088. Lo spazio degli indirizzi di memoria in modalità reale è 1 MB, da 0x00000 a 0xFFFFF. Questo spazio di indirizzi da 1 MB è suddiviso in diverse aree principali, ciascuna con uno scopo specifico. Quella che segue è un'introduzione dettagliata alla disposizione della memoria del sistema operativo DOS.
modello di memoria in modalità reale
In modalità reale, si accede all'indirizzo di memoria combinando l'indirizzo del segmento e l'indirizzo di offset in un indirizzo fisico a 20 bit. L'indirizzo del segmento viene spostato a sinistra di 4 bit e l'indirizzo offset viene aggiunto per formare l'indirizzo fisico effettivo.
disposizione della memoria
La disposizione dello spazio di memoria da 1 MB in modalità reale è più o meno la seguente:
-
Tabella vettoriale degli interrupt (IVT): 0x00000 - 0x003FF
- Occupa 1KB (256 vettori, 4 byte ciascuno).
- Memorizzare l'indirizzo di ingresso e le informazioni correlate della routine di servizio di interruzione.
-
Area dati BIOS (BDA): 0x00400 - 0x004FF
- Circa 256 byte.
- Memorizza i parametri del sistema e del dispositivo hardware, come informazioni su disco rigido, porta seriale, porta parallela, ecc.
-
Memoria legacy (memoria convenzionale): 0x00500 - 0x9FFFF
- 640KB, utilizzato principalmente per sistemi operativi DOS, applicazioni DOS e programmi di memoria residente (TSR).
- Può essere utilizzato come codice di programma, dati, stack, ecc.
-
Buffer di visualizzazione: 0xA0000 - 0xBFFFF
- L'area di memoria utilizzata dalla scheda video.
- 0xA0000 - 0xAFFFF: 64KB, solitamente utilizzato nella modalità grafica delle schede grafiche EGA/VGA.
- 0xB0000 - 0xB7FFF: 32KB, solitamente utilizzato per adattatori display monocromatici (MDA).
- 0xB8000 - 0xBFFFF: 32KB, solitamente utilizzato per la visualizzazione di testo a colori (modalità testo CGA, EGA, VGA).
-
Area dati BIOS estesa (EBDA): 0xC0000 - 0xC7FFF
- Circa 32 KB, che memorizza alcuni dati BIOS estesi e codice BIOS dell'adattatore.
-
Area di estensione del BIOS: 0xC8000 - 0xEFFFF
- Utilizzato principalmente per BIOS e driver di schede di espansione (come adattatori di rete, controller SCSI, ecc.).
-
BIOS di sistema: 0xF0000 - 0xFFFFF
- 64KB, memorizza il codice BIOS del sistema.
- Fornisce l'inizializzazione di base del sistema, la routine di servizio di interruzione, il controllo hardware e altre funzioni.
2.2 Meccanismo di indirizzamento della memoria 80386
Il processore Intel 80386 ha introdotto un meccanismo di indirizzamento della memoria più avanzato, fornendo funzionalità di gestione e protezione della memoria più potenti rispetto ai suoi predecessori. L'80386 supporta due modalità di indirizzamento della memoria principale:modalità realeEmodalità protetta . Nella modalità protetta viene introdotto anche un meccanismo di paginazione per migliorare ulteriormente le capacità di gestione della memoria. Quella che segue è un'introduzione dettagliata:
1. Modalità reale
In modalità reale, il processore 80386 ha lo stesso metodo di indirizzamento della memoria dell'8086/8088. Utilizza un bus di indirizzi a 20 bit e può accedere a 1 MB di spazio di memoria. L'indirizzo viene calcolato dall'indirizzo del segmento e dall'indirizzo offset:
- indirizzo del segmento: Sposta a sinistra di 4 bit.
- indirizzo di compensazione: Sommato al risultato dello spostamento a sinistra dell'indirizzo del segmento, si ottiene l'indirizzo fisico a 20 bit.
物理地址 = (段地址 << 4) + 偏移地址
2. Modalità protetta
La modalità protetta è la modalità operativa principale del processore 80386, che fornisce funzioni avanzate di protezione e gestione della memoria. L'indirizzamento della memoria in modalità protetta prevede due livelli di meccanismi:meccanismo di segmentazioneEMeccanismo di cercapersone。
2.1 Meccanismo di segmentazione
In modalità protetta, il processore 80386 utilizza il selettore e il descrittore di segmento per gestire i segmenti. I descrittori di segmento sono memorizzati nella tabella descrittore globale (GDT) o nella tabella descrittore locale (LDT).
-
selettore di segmento: 16 bit, inclusi tre campi:
- indice: 13 bit, specifica la posizione del descrittore di segmento in GDT o LDT.
- TI (indicatore di tabella): 1 bit, che indica se utilizzare GDT (0) o LDT (1).
- RPL (Livello di privilegio richiesto): 2 bit, specificando il livello di privilegio richiesto.
-
descrittore del segmento: 8 byte, inclusi i seguenti campi:
- Indirizzo di base: 32 bit, indirizzo iniziale del segmento.
- Limite del segmento (Limite): 20 bit, dimensione del segmento.
- Diritti di accesso e proprietà: 12 bit, che descrivono il tipo di segmento, il livello di privilegio, ecc.
Il calcolo dell'indirizzo lineare nell'ambito del meccanismo di segmentazione è il seguente:
线性地址 = 段基址 + 偏移地址
2.2 Meccanismo di cercapersone
Il meccanismo di paginazione è un altro metodo di gestione della memoria fornito dal processore 80386 in modalità protetta. Realizza la virtualizzazione e la protezione della memoria convertendo gli indirizzi lineari in indirizzi fisici. Il meccanismo di paginazione coinvolge directory di pagine, tabelle di pagine e frame di pagina.
- directory della pagina: contiene voci della directory delle pagine (PDE), ciascuna PDE punta a una tabella delle pagine.
- tabella delle pagine: contiene voci della tabella delle pagine (PTE), ogni PTE punta a un frame di pagina.
- cornice della pagina: il blocco di memoria fisica effettivo, solitamente 4KB.
La traduzione dell'indirizzo del meccanismo di paging è la seguente:
- Gli indirizzi lineari sono divisi in tre parti: directory, tabella e offset intra-pagina.
- La sezione directory indicizza la directory della pagina per trovare la PDE corrispondente.
- La sezione tabella indicizza la tabella delle pagine per trovare il PTE corrispondente.
- L'offset intra-pagina viene aggiunto all'indirizzo di base del frame di pagina per ottenere l'indirizzo fisico.
物理地址 = 页帧基址 + 页内偏移
Diagramma schematico del meccanismo di cercapersone:
+----------------+----------------+----------------+
| 页目录(10位) | 页表(10位) | 页内偏移(12位)|
+----------------+----------------+----------------+
3. 80386 Unità di gestione della memoria (MMU)
La MMU (Memory Management Unit) di 80386 è responsabile della segmentazione e della traduzione degli indirizzi di paging e implementa la protezione della memoria.
-
Registro CR0: Registro di controllo per abilitare/disabilitare la modalità protetta e il paging.
- Bit PE (Abilitazione protezione): attiva la modalità protetta.
- Bit PG (Abilita cercapersone): Abilita il cercapersone.
-
Registro CR3: l'indirizzo di base della directory della pagina di archiviazione.
-
Registro CR2: Memorizza l'indirizzo lineare dell'ultimo errore di pagina.
4. Meccanismo di protezione
In modalità protetta, il processore 80386 fornisce una varietà di meccanismi di protezione per garantire la sicurezza della memoria e del sistema:
- Livelli di privilegio : Da 0 a 3, ci sono quattro livelli in totale, dove il livello 0 è il più alto. Controllare l'accesso al codice e ai dati.
- protezione del segmento: implementa il controllo dei limiti del segmento e il controllo dell'accesso tramite i campi degli attributi nel descrittore del segmento.
- protezione della pagina: Attraverso il campo attributo nel PTE, viene realizzato il controllo dei permessi di lettura, scrittura ed esecuzione della pagina.
2.3 Disposizione della memoria di Windows
1. Memoria virtuale
Il sistema operativo Windows utilizza la gestione della memoria virtuale, che combina la memoria fisica (RAM) e i file di memoria virtuale (file di paging) sul disco rigido per fornire uno spazio di indirizzi virtuali indipendente per ciascun processo. Ogni processo ha solitamente 4 GB di spazio di indirizzi virtuali (sistemi a 32 bit), di cui 2 GB vengono utilizzati dai programmi in modalità utente e 2 GB vengono utilizzati dalla modalità kernel. I sistemi a 64 bit hanno uno spazio di indirizzi virtuali più ampio.
2. Layout dello spazio degli indirizzi virtuali
Lo spazio degli indirizzi virtuali è diviso in regioni in modalità utente e modalità kernel:
spazio degli indirizzi in modalità utente
- 0x00000000 - 0x7FFFFFFF: spazio degli indirizzi in modalità utente, utilizzato dalle applicazioni.
- Mucchio: area di allocazione dinamica della memoria, l'applicazione alloca e rilascia memoria in fase di esecuzione.
- Pila: Ogni thread ha il proprio stack per le chiamate di funzione e le variabili locali.
- Memoria condivisa: segmenti di dati condivisi tra diversi processi.
spazio degli indirizzi in modalità kernel
- 0x80000000 - 0xFFFFFFFF: spazio degli indirizzi in modalità kernel, utilizzato dal kernel e dai driver del sistema operativo.
- Codice e dati del kernel: il codice e i dati globali del kernel del sistema operativo.
- Cache di sistema: utilizzato per la memorizzazione nella cache del file system per migliorare le prestazioni di accesso ai file.
- driver del dispositivo: Codice e dati del conducente.
3. Impaginazione della memoria
Windows utilizza un meccanismo di paging per gestire la memoria e convertire gli indirizzi virtuali in indirizzi fisici. L'unità di base dell'impaginazione è una pagina, solitamente 4KB.
Struttura della tabella delle pagine
- Directory della pagina: contiene la voce della directory delle pagine (PDE), che punta alla tabella delle pagine.
- Tabella delle pagine: contiene le voci della tabella delle pagine (PTE) che puntano alle pagine della memoria fisica effettiva.
4. Unità di gestione della memoria (MMU)
L'unità di gestione della memoria (MMU) del processore è responsabile della conversione degli indirizzi virtuali in indirizzi fisici, dell'esecuzione della sostituzione della pagina e della protezione della memoria. Il sistema operativo Windows implementa le seguenti funzioni attraverso la MMU:
- traduzione dell'indirizzo: associa gli indirizzi virtuali agli indirizzi fisici.
- protezione della memoria: controlla i permessi di accesso alla pagina (lettura, scrittura, esecuzione).
- Sostituzione della pagina: consente di scambiare le pagine utilizzate di rado nel file di paging del disco rigido per liberare memoria fisica.
5. Protezione della memoria
Il sistema operativo Windows protegge la memoria attraverso i seguenti meccanismi:
- Livello di privilegio: assicurarsi che i programmi in modalità utente non possano accedere direttamente alla memoria in modalità kernel.
- Autorizzazioni della pagina: controlla il tipo di accesso (lettura, scrittura, esecuzione) di ciascuna pagina.
- Controllo di accesso: Il kernel del sistema operativo imposta le autorizzazioni di accesso per impedire l'accesso non autorizzato alla memoria.
6. Allocazione della memoria
Windows utilizza diverse strategie e strutture dati per l'allocazione della memoria:
- allocatore di cercapersone: gestisce l'allocazione della paginazione e il rilascio della memoria virtuale.
- Gestore dell'heap: Fornisce un'efficiente allocazione e deallocazione della memoria per le applicazioni.
- allocatore di memoria del kernel: Gestisce la memoria in modalità kernel, incluso l'allocatore del pool e il pool non paginato.
7. API di gestione della memoria
Windows fornisce una serie di API di gestione della memoria utilizzabili dalle applicazioni e dal sistema:
- VirtualAlloc/VirtualFree: alloca e rilascia memoria virtuale.
- HeapAlloc/HeapFree: alloca e libera memoria nell'heap.
- GlobalAlloc/GlobalFree: Assegna e libera blocchi di memoria globale.
- LocalAlloc/LocalFree: Alloca e libera blocchi di memoria locale.
8. File di paging
Windows utilizza il file di paging (Pagefile.sys) come parte della memoria virtuale. Quando la memoria fisica è insufficiente, le pagine utilizzate di rado vengono scambiate nel file di paging. La posizione e la dimensione del file di paging sono configurabili dall'utente.
3. Protezione dei privilegi di Windows
3.1 80386 interruzioni ed eccezioni
1. Classificazione delle interruzioni ed eccezioni
Gli interrupt e le eccezioni possono essere suddivisi nelle seguenti categorie:
- Interruzioni hardware: inviato da dispositivi esterni, come tastiera, mouse, disco rigido, ecc.
- Interruzioni software: Passato dal software
INT
Il comando si attiva. - Eccezioni: attivato da errori o condizioni speciali rilevati dal processore, come errori di divisione per zero, errori di pagina, ecc.
2. Tabella dei vettori di interruzione (IVT)
Il processore 80386 utilizza una tabella vettoriale di interruzione per gestire interruzioni ed eccezioni. L'IVT è una tabella di 256 voci, ciascuna occupante 4 byte, che memorizza l'indirizzo di un gestore di interruzioni o eccezioni. L'indirizzo base dell'IVT è memorizzato nell'IDTR (Interrupt Descriptor Table Register).
3. Tabella descrittore degli interrupt (IDT)
In modalità protetta, il processore 80386 utilizza una tabella descrittore di interruzione (IDT) per archiviare gestori di interruzioni ed eccezioni. IDT contiene i descrittori di interrupt gate, trap gate e task gate, ciascun descrittore occupa 8 byte.
- Cancello di interruzione: Utilizzato per gli interrupt hardware e software, cancellando automaticamente IF (flag di interruzione).
- Porta Trappola: Utilizzato per la gestione delle eccezioni, IF non è cancellato.
- Porta delle attività: Utilizzato per cambiare attività.
L'indirizzo di base e i limiti dell'IDT sono memorizzati in IDTR.
4. Interrompere il flusso di elaborazione
Quando si verifica un'interruzione o un'eccezione, il processore 80386 esegue i seguenti passaggi:
- salva il contesto: Salva il CS (Code Segment Register), l'EIP (Instruction Pointer Register) e l'EFLAGS (Flags Register) correnti nello stack.
- Trova IDT: Trova il descrittore corrispondente dall'IDT in base al numero di interruzione o eccezione.
- Controlla i permessi: controlla il livello di privilegio corrente (CPL) e il livello di privilegio target (DPL) per garantire la conversione delle autorizzazioni legali.
- vai al gestore: carica nuovi CS ed EIP, passa al gestore delle interruzioni o delle eccezioni.
- Gestire interruzioni o eccezioni:Esegue il codice del gestore.
- ripristinare il contesto:passaggio
IRET
L'istruzione ripristina CS, EIP ed EFLAGS e ritorna allo stato prima che si verificasse l'interruzione o l'eccezione.
5. Tipo di eccezione
Il processore 80386 supporta più eccezioni, ciascuna eccezione ha codici di errore e metodi di gestione diversi:
- Difetti: un'eccezione recuperabile. Quando il gestore ritorna, l'istruzione che ha causato l'eccezione verrà eseguita nuovamente.
- Trappole: un'eccezione utilizzata per il debug o la traccia. Quando il gestore ritorna dopo che si è verificata l'eccezione, l'istruzione successiva continua a essere eseguita.
- Interrompe: Errore grave, solitamente irreversibile.
Le eccezioni comuni includono:
- Errore di divisione: sollevata quando il divisore è zero.
- Singolo passo: utilizzato per il debug, generato durante l'esecuzione di un singolo passaggio.
- Punto di rottura: sollevato durante il debug dei punti di interruzione.
- Traboccamento:utilizzo
INTO
Sollevato quando l'istruzione rileva un overflow. - BOUND Intervallo superato: sollevato quando l'accesso all'array supera i limiti.
- Codice operativo non valido: Sollevato durante l'esecuzione di un'istruzione illegale.
- Dispositivo non disponibile: sollevato quando il coprocessore non è disponibile.
- Doppio fallo: si verifica nuovamente un'eccezione durante la gestione di un'eccezione.
- Sovraccarico del segmento del coprocessore: generato dalle operazioni del coprocessore.
- TSS non valido: generato quando il segmento dello stato dell'attività è illegale.
- Segmento non presente: sollevato quando si accede a un segmento inesistente.
- Errore di pila: sollevata quando si verifica un errore di operazione dello stack.
- Guasto di protezione generale: attivato quando vengono violate le regole di protezione.
- Errore di pagina: sollevato quando il funzionamento del cercapersone è anomalo.
6. Gestori di interruzioni ed eccezioni
I gestori di interruzioni ed eccezioni sono routine speciali utilizzate per gestire interruzioni o eccezioni specifiche. Solitamente vengono forniti dal sistema operativo e sono responsabili del ripristino dello stato del sistema, della registrazione delle informazioni sugli errori, dell'esecuzione delle operazioni di ripristino necessarie o della risposta all'interruzione.
7. Priorità di interruzione e mascheramento
Il processore 80386 supporta la priorità degli interrupt e i meccanismi di mascheramento e gestisce la priorità e il mascheramento degli interrupt hardware tramite il PIC (Programmable Interrupt Controller). Gli interrupt di alto livello possono interrompere l'elaborazione degli interrupt di basso livello per garantire una risposta tempestiva agli eventi critici.
3.2 Meccanismo di protezione di 80386
1. Protezione dalla segmentazione
Il processore 80386 utilizza un meccanismo di segmentazione per gestire la memoria. Ogni segmento ha un descrittore che contiene l'indirizzo di base, i limiti e i diritti di accesso del segmento. La protezione della segmentazione garantisce che i processi possano accedere solo alle aree di memoria a cui sono autorizzati.
descrittore del segmento
I descrittori di segmento sono memorizzati nella tabella descrittore globale (GDT) e nella tabella descrittore locale (LDT). Ciascun descrittore contiene le seguenti informazioni:
- Indirizzo di base: L'indirizzo iniziale del segmento.
- Limite: la dimensione del segmento, che indica l'indirizzo finale del segmento.
- Tipo (Tipo) e livello di privilegio (DPL): Il tipo di segmento (segmento codice, segmento dati, segmento sistema) e diritti di accesso.
- Bit presenza segmento (P): indica se il segmento è in memoria.
Implementazione della protezione dalla segmentazione
Quando accede alla memoria, il processore cerca il descrittore di segmento in base al selettore di segmento ed esegue i seguenti controlli:
- Controllo dell'indirizzo di base e dei limiti: assicurarsi che l'indirizzo di accesso rientri nell'intervallo del segmento.
- Controllo dei permessi: assicurarsi che i diritti di accesso corrispondano al tipo e al livello di privilegio nel descrittore.
2. Protezione del cercapersone
Il meccanismo di paginazione perfeziona ulteriormente la gestione della memoria, poiché ogni pagina ha i propri diritti di accesso. Il meccanismo di protezione della paginazione è implementato tramite directory di pagina e tabelle di pagina.
Directory di pagine e tabelle di pagine
- Directory della pagina: contiene la voce della directory delle pagine (PDE), che punta alla tabella delle pagine.
- Tabella delle pagine: contiene le voci della tabella delle pagine (PTE) che puntano alle pagine della memoria fisica effettiva.
Ciascuna voce della tabella delle pagine contiene le seguenti informazioni:
- Indirizzo di base della pagina: L'indirizzo iniziale della pagina di memoria fisica.
- Bit di presenza (P): se la pagina è in memoria.
- Bit di lettura/scrittura (R/W): se la pagina è scrivibile.
- Bit utente/superutente (U/S): autorizzazioni di accesso per la pagina.
Implementazione della protezione del cercapersone
Quando accede alla memoria, il processore esegue i seguenti controlli:
- Controllo dell'esistenza della pagina: Controlla se la pagina è in memoria, altrimenti attiva un errore di pagina (Page Fault).
- controllo di lettura/scrittura: controlla se la pagina è scrivibile. Se provi a scrivere su una pagina non scrivibile, verrà attivato un errore di protezione.
- Controllo utente/superutente: controlla le autorizzazioni di accesso per garantire che il codice in modalità utente non possa accedere alle pagine in modalità kernel.
3. Livello di privilegio
Il processore 80386 supporta 4 livelli di privilegio (livelli di privilegio), da 0 a 3. Più basso è il livello, maggiore è il privilegio.
- Livello di privilegio 0 (Squillo 0): il livello di privilegio più alto, solitamente utilizzato nel kernel del sistema operativo.
- Livello di privilegio 1 (Anello 1)ELivello di privilegio 2 (Anello 2): Livello di privilegio intermedio, utilizzato raramente.
- Livello di privilegio 3 (Anello 3): il livello di privilegio più basso, generalmente utilizzato dalle applicazioni in modalità utente.
Implementazione dei livelli di privilegio
I livelli di privilegio sono implementati attraverso i seguenti meccanismi:
- Livello di privilegio del segmento di codice (CPL): il livello di privilegio del codice attualmente in esecuzione.
- Livello di privilegio del segmento dati (DPL): il livello di privilegio del segmento dati, che determina quali CPL possono accedere al segmento.
- Richiedi livello di privilegio (RPL): il livello di privilegio del selettore di segmento, che indica il permesso di accesso richiesto.
Quando esegue un'operazione di accesso, il processore controlla CPL, DPL e RPL per garantire la conformità alle regole del livello di privilegio. Se non corrisponde, viene attivato un guasto di protezione generale.
4. Segmento di sistema e descrittori di porte
Il processore 80386 supporta segmenti di sistema e descrittori di gate per il cambio di attività e la gestione degli interrupt.
segmento del sistema
- Segmento stato attività (TSS): contiene informazioni contestuali sull'attività e viene utilizzato per cambiare attività.
- Tabella dei descrittori locali (LDT): contiene descrittori di segmenti specifici dell'attività.
descrittore del cancello
- Cancello di interruzione: Utilizzato per l'elaborazione degli interrupt, passando al gestore degli interrupt.
- Porta Trappola: utilizzato per la gestione delle eccezioni e non maschera gli interrupt.
- Porta delle attività: Utilizzato per il cambio di attività, il cambio di attività tramite TSS.
5. Cambio di compito
Il processore 80386 supporta la commutazione delle attività hardware, che viene implementata tramite il segmento di stato delle attività (TSS). Il cambio di attività può essere attivato da interruzioni, eccezioni o task gate.
Segmento stato attività (TSS)
Il TSS contiene lo stato del registro dell'attività, i registri dei segmenti, il puntatore dello stack e i collegamenti delle attività. Quando si cambia attività, il processore salva lo stato dell'attività corrente nel TSS e carica lo stato della nuova attività.
Processo di cambio di attività
- Salva lo stato dell'attività corrente: salva i registri e i registri dei segmenti dell'attività corrente in TSS.
- Carica il nuovo stato dell'attività: carica i registri e i registri dei segmenti dal TSS della nuova attività.
- Aggiorna registro attività (TR): punta al TSS della nuova attività.
6. Gestione delle interruzioni e delle eccezioni
La gestione degli interrupt e delle eccezioni sono parti importanti del meccanismo di protezione del processore 80386. Gli interrupt e le eccezioni vengono gestiti tramite la tabella dei descrittori di interruzione (IDT) e i controlli delle autorizzazioni e i cambi di contesto vengono eseguiti durante l'elaborazione.
Procedure di gestione delle interruzioni e delle eccezioni
- salva il contesto: salva nello stack i CS, gli EIP e gli EFLAGS correnti.
- Trova IDT: Trova il descrittore corrispondente da IDT in base al numero di interruzione o eccezione.
- Controllo dei permessi: controlla CPL e DPL per garantire la conversione delle autorizzazioni legali.
- vai al gestore: Carica nuovi CS ed EIP ed esegue il gestore.
- ripristinare il contesto:passaggio
IRET
Ripristina CS, EIP ed EFLAGS e ritorna allo stato prima che si verificasse l'interruzione o l'eccezione.
3.3 Meccanismo di protezione di Windows
1. Modalità utente e modalità kernel
Il sistema operativo Windows divide la modalità di esecuzione del processore in modalità utente (User Mode) e modalità kernel (Kernel Mode):
- modalità utente: esegue un'applicazione con accesso limitato e senza accesso diretto all'hardware o alle strutture dati del kernel.
- modalità kernel: esegue i componenti principali del sistema operativo e i driver di dispositivo con accesso completo e può eseguire istruzioni privilegiate.
Passaggio dalla modalità utente alla modalità kernel
Il passaggio dalla modalità utente alla modalità kernel viene solitamente implementato tramite chiamate di sistema. L'applicazione richiede i servizi kernel chiamando l'API di sistema e il sistema operativo passa la richiesta alla modalità kernel per l'elaborazione.
2. Protezione della memoria
Memoria virtuale
Windows utilizza un meccanismo di memoria virtuale per fornire a ciascun processo uno spazio di indirizzi indipendente. Questo meccanismo impedisce ai processi di accedere direttamente alla memoria degli altri, migliorando così la sicurezza e la stabilità del sistema.
- tabella delle pagine: Ogni processo ha una tabella di pagine indipendente che associa gli indirizzi virtuali agli indirizzi fisici.
- scambio di pagine: quando la memoria fisica è insufficiente, il sistema operativo scambia le pagine utilizzate di rado nel file di paging sul disco rigido.
segmento di memoria
Windows utilizza segmenti di memoria per dividere diversi tipi di dati e codice e ogni segmento ha diritti di accesso e meccanismi di protezione diversi. Ad esempio, il segmento di codice è di sola lettura, mentre il segmento di dati è di lettura-scrittura.
3. Controllo degli accessi
Il sistema operativo Windows utilizza l'ACL (Access Control List) per gestire i diritti di accesso degli utenti e dei processi alle risorse.
Identificatore di sicurezza (SID)
Ogni utente, gruppo e computer dispone di un identificatore di sicurezza (SID) univoco che li identifica.
Elenco di controllo degli accessi (ACL)
Ogni oggetto (come un file, una directory, una chiave di registro, ecc.) dispone di un elenco di controllo di accesso, che contiene una serie di elementi di controllo di accesso (ACE) che definiscono i diritti di accesso di diversi utenti e gruppi all'oggetto.
4. Gestione dei privilegi
Windows controlla cosa possono fare i processi e gli utenti attraverso la gestione dei privilegi. Alcuni privilegi sono concessi solo a gruppi di utenti specifici (come gli amministratori), come l'installazione di driver, l'accesso ai registri di sistema, ecc.
strategia di sicurezza
Windows fornisce una serie di criteri di sicurezza che possono configurare il controllo dell'account utente (UAC), criteri di password, criteri di controllo, ecc. per migliorare la sicurezza del sistema.
5. Gestione delle interruzioni e delle eccezioni
I sistemi operativi Windows utilizzano meccanismi di gestione delle interruzioni e delle eccezioni per gestire le interruzioni hardware, le interruzioni software e le eccezioni del processore.
Gestione delle interruzioni
Il gestore degli interrupt (Interrupt Service Routine, ISR) è responsabile della gestione degli interrupt hardware e della garanzia che i dispositivi esterni possano rispondere in tempo.
La gestione delle eccezioni
I gestori di eccezioni gestiscono le eccezioni del processore, come errori di divisione per zero, errori di pagina, ecc., per garantire che il sistema possa adottare misure di ripristino appropriate quando si verificano eccezioni.
6. Multitasking
Windows consente l'esecuzione simultanea di più processi e thread tramite il meccanismo multitasking. Il sistema operativo utilizza uno scheduler per gestire l'esecuzione di processi e thread e garantire che le risorse di sistema siano allocate equamente.
Pianificazione dei thread
Windows utilizza un algoritmo di pianificazione della priorità per allocare intervalli di tempo della CPU in base alla priorità e allo stato del thread (ad esempio pronto, in attesa, in esecuzione e così via).
isolamento del processo
Ogni processo ha uno spazio di indirizzi virtuali e risorse indipendenti, impedendo a un processo di influenzare il funzionamento di un altro processo e migliorando la stabilità del sistema.
7. Funzionalità di sicurezza
Windows fornisce una serie di funzionalità di sicurezza, come Data Execution Prevention (DEP), Address Space Layout Randomization (ASLR), ecc., per migliorare le capacità di protezione del sistema.
Prevenzione esecuzione dati (DEP)
DEP impedisce l'esecuzione del codice nel segmento dati contrassegnando determinate aree di memoria come non eseguibili attraverso una combinazione di hardware e software.
Randomizzazione del layout dello spazio degli indirizzi (ASLR)
ASLR randomizza lo spazio degli indirizzi di memoria di un processo, rendendo più difficile per gli aggressori sfruttare le vulnerabilità.