PM複習 頁式儲存

2021-05-25 20:01:08 字數 3369 閱讀 7921

書上說得很明白,無需贅言。

簡單的一一對應的對映的**如下:

code:

%include "pm.inc"

org 0100h       

jmp label_begin       

[section .gdt]       

label_desc_dummy:       

descriptor  0,0,0     

label_desc_code32:    

descriptor  0,code32_len - 1,da_c + da_32     

label_desc_code16:   

descriptor  0,code16_len - 1,da_c   

label_desc_video:       

descriptor  0b8000h,0ffffh,da_drw   

label_desc_normal:   

descriptor  0,0ffffh,da_drw   

label_desc_dir_base:   

descriptor  200000h,4095,da_drw   

label_desc_tbl_base:   

descriptor  201000h,1023,da_drw + da_limit4k   

gdt_len equ $ - label_desc_dummy       

gdt_ptr:       

dw  gdt_len - 1       

dd  0       

selector_code32 equ label_desc_code32 - label_desc_dummy       

selector_code16 equ label_desc_code16 - label_desc_dummy   

selector_video  equ label_desc_video - label_desc_dummy       

selector_normal equ label_desc_normal - label_desc_dummy   

selector_dir_base   equ label_desc_dir_base - label_desc_dummy   

selector_tbl_base   equ label_desc_tbl_base - label_desc_dummy   

[section .s16]       

[bits 16]       

label_begin:       

mov ax,cs       

mov ds,ax       

mov es,ax       

mov   [label_go_back_to_real + 3],ax   

fill_descriptor   label_desc_code32,label_code32   

fill_descriptor   label_desc_code16,label_begin   

xor eax,eax       

mov ax,ds       

shl eax,4       

add eax,label_desc_dummy       

mov dword [gdt_ptr + 2],eax       

lgdt    [gdt_ptr]       

cli       

in  al,92h       

or  al,00000010b       

out 92h,al       

mov eax,cr0       

or  al,1       

mov cr0,eax       

jmp selector_code32:0       

_label_prepare_go_back_to_real:   

label_prepare_go_back_to_real equ   _label_prepare_go_back_to_real - $$   

mov ax,selector_normal   

mov ds,ax   

mov es,ax   

mov gs,ax   

mov fs,ax   

mov eax,cr0   

and al,11111110b   

mov cr0,eax   

label_go_back_to_real:   

jmp 0:label_already_real   

label_already_real:   

in  al,92h   

and al,11111101b   

out 92h,al   

sti   

mov ax,4c00h   

int 21h   

code16_len  equ $ -$$   

[section .s32]       

[bits 32]       

label_code32:       

mov ax,selector_dir_base   

mov es,ax   

xor edi,edi   

cld    

mov ecx,1024   

mov eax,201000h + 7h   

.1:   

stosd   

add eax,4096   

loop .1     

mov ax,selector_tbl_base   

mov es,ax   

xor edi,edi   

mov ecx,1024 * 1024   

mov eax,7h   

.2:   

stosd   

add eax,4096   

loop .2   

mov eax,200000h   

mov cr3,eax   

mov eax,cr0   

or  eax,80000000h   

mov cr0,eax   

mov ax,selector_video       

mov gs,ax       

mov ah,0ch       

mov al,'x'

mov [gs:80 * 10],ax       

jmp   selector_code16:label_prepare_go_back_to_real    

code32_len  equ $ - $$  

結果如下:

頁式儲存管理

作業系統原理 頁式儲存管理 記憶體分割槽儲存管理的乙個特點是連續性,每個程式都分有一片連續的記憶體區域。這種連續性導致碎片問題,包括 固定分割槽中的內碎片和可變分割槽中的外碎片。為了解決這些問題,人們又提出了 頁式儲存管理方案 它的基本出發點 是打破儲存分配的連續性,使乙個程式的邏輯位址空間可以分布...

頁式儲存管理

基本原理 1 等分記憶體 頁式儲存管理將記憶體空間劃分成等長的若干區域,每個區域的大小一般取2的整數冪,稱為乙個物理頁面有時稱為塊。記憶體的所有物理頁面從0開始編號,稱作物理頁號。2 邏輯位址 系統將程式的邏輯空間按照同樣大小也劃分成若干頁面,稱為邏輯頁面也稱為頁。程式的各個邏輯頁面從0開始依次編號...

段頁式儲存管理

段頁式儲存管理技術的基本思想 段頁式儲存管理技術試圖結合分段儲存管理在邏輯上的優點以及分頁儲存管理在物理上的優點,它是採用分段方法來分配和管理使用者的作業位址空間,採用分頁的方法來分配和管理主存 的儲存空間。即把作業分段,段內再分成也,主存分配以頁為單位。在段頁式儲存管理系統中,作業的位址空間被劃分...