作業系統真相還原第五章 獲取記憶體大小引數

2021-09-29 16:48:09 字數 2709 閱讀 6816

教材裡採用了三種方式獲取記憶體的引數,這裡我只用了一種方法,那就是int 0x15中斷的0xe820方式。

記憶體讀取程式:

xor ebx,ebx

mov edx,0x534d4150

mov di,ards_buf ;ards_buf 返回結構的儲存位址

e820_mem_get_loop:

mov eax,0x0000e820 ;因為每次返回值會覆蓋eax,所以需要重新賦值

mov ecx,20

int 0x15

add di,cx ;記憶體增加,為下一次儲存留出空間,防止覆蓋上一次的儲存值

inc word [ards_nr] ;讀取的次數,儲存在ards_nr位址處

cmp ebx,0 ;如果ebx為0,說明讀取完畢

jnz e820_mem_get_loop

;load.s程式原始碼

%include 「boot.inc」

section loader vstart=loader_base_addr

loader_stack_top equ loader_base_addr

jmp start

gdt_start: dd 0x00000000

dd 0x00000000

code_desc: dd 0x0000ffff

dd code_high4

stack_data_desc: dd 0x0000ffff

dd data_high4

vidio_desc: dd 0x80000007

dd vidio_high4

gdt_size equ $-gdt_start

gdt_limit equ gdt_size-1

times 60 dq 0

;段選擇子建立

select_code equ (0x0001<<3)+ti_gdt+rpl0

select_data equ (0x0002<<3)+ti_gdt+rpl0

select_vidio equ (0x0003<<3)+ti_gdt+rpl0

;total_mem_bytes 用於儲存記憶體容量,以位元組為單位,此位置比較好記

total_mem_bytes dd 0

ards_buf times 241 db 0

ards_nr dw 0

gdt_ptr dw gdt_limit

dd gdt_start

start:

xor ebx,ebx

mov edx,0x534d4150

mov di,ards_buf

e820_mem_get_loop:

mov eax,0x0000e820

mov ecx,20

int 0x15

add di,cx

inc word [ards_nr]

cmp ebx,0

jnz e820_mem_get_loop

mov cx,[ards_nr]

mov ebx,ards_buf

xor edx,edx

find_max_mem_loop:

mov eax,[ebx]

add eax,[ebx+8]

add ebx,20

cmp edx,eax

jge next

mov edx,eax

next:

loop find_max_mem_loop

mov [total_mem_bytes],edx

in al,0x92

or al,0000_0010b

out 0x92,al

lgdt [gdt_ptr]

mov eax,cr0

or eax,0x00000001

mov cr0,eax

jmp dword select_code:mode_start

[bits 32]

mode_start:

mov ax,select_data

mov ds,ax

mov es,ax

mov ss,ax

mov esp,loader_stack_top

mov ax,select_vidio

mov gs,ax

mov byte [gs:160],『p』

jmp $

在原書中,採用的是將total_mem_bytes位址湊成0xb00,start位址為相對於本檔案起始偏移為0x300,但是我沒有省去jmp start ,所以將使用ards_buf times 241 db 0 保證了 start位址為相對於本檔案起始偏移為0x300,但此時total_mem_bytes位址為0xb003.

作業系統第五章

虛擬儲存器的基本概念 引入 實現 特徵 請求分頁儲存管理方式 硬體支援 位址變換 分配演算法 頁面置換演算法 效能分析 請求分段儲存管理方式 主要相同點是都要在記憶體與外存之間交換資訊 主要區別在於交換技術換出換進一般是整個程序 proc結構和共享正文段除外 因此乙個程序的大小受物理儲存器的限制 而...

作業系統 第五章 死鎖(一)

死鎖 deadlock 定義 在多道程式中,由於多個併發程序共享系統的資源,如果使用不當可能會造成一種僵局,即當某個程序提出資源的使用請求後,使得系統中一些程序處於無休止的阻塞狀態,在無外力的作用下,這些程序將無法繼續進行下去,這就是死鎖。產生死鎖的環境 1 多道程式設計技術 2 多個併發程序 3 ...

作業系統概念 第五章 CPU排程

排程準則 排程演算法 演算法評估 待補完 對於單處理器系統,cpu只能執行乙個程序,其他程序必須等待,直到cpu空閒為止。多道程式的目標是為了使任何時候都有程序在執行,使cpu的利用率最大化。cpu排程使程序在等待時 通常是等待某些io請求完成 從該程序拿走cpu的使用權交給另乙個程序,如此迴圈往復...