教材裡採用了三種方式獲取記憶體的引數,這裡我只用了一種方法,那就是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的使用權交給另乙個程序,如此迴圈往復...