程序在執行之前tss.esp0指向了當前程序表的
regs
末尾執行中斷之前,cpu已經把esp指向程序表的regs末尾,並且儲存了ss,esp,cs ,ip ,if暫存器
,自動操作的
麼?沒看到人工**
align 16
hwint00: ; interrupt routine for irq 0 (the clock).
sub esp, 4
pushad ; ┓
push ds ; ┃
push es ; ┣ 儲存原暫存器值
push fs ; ┃
push gs ; ┛
mov dx, ss
mov ds, dx
mov es, dx
mov esp, stacktop ; 切到核心棧
inc byte [gs:0] ; 改變螢幕第 0 行, 第 0 列的字元
mov al, eoi ; ┓reenable master 8259
out int_m_ctl, al ; ┛
push clock_int_msg
call disp_str
add esp, 4
mov esp, [p_proc_ready] ; 離開核心棧;
lea eax, [esp + p_stacktop]
mov dword [tss + tss3_s_sp0], eax
;程序在執行之前 tss.esp0指向了當前程序表的
regs
末尾pop gs ; ┓
pop fs ; ┃
pop es ; ┣ 恢復原暫存器值
pop ds ; ┃
popad ; ┛
add esp, 4
iretd
完成程序切換:
align 16
hwint00: ; interrupt routine for irq 0 (the clock).
sub esp, 4
pushad ; ┓
push ds ; ┃
push es ; ┣ 儲存原暫存器值
push fs ; ┃
push gs ; ┛
mov dx, ss
mov ds, dx
mov es, dx
;inc byte [gs:0] ; 改變螢幕第 0 行, 第 0 列的字元
mov al, eoi ; ┓reenable master 8259
out int_m_ctl, al ; ┛
inc dword [k_reenter]
cmp dword [k_reenter], 0
jne .re_enter
mov esp, stacktop ; 切到核心棧
stipush 0
call clock_handler
;中斷裡面修改p_proc_ready,會導致tss裡面的esp值改變,
; 中斷返回時,根據tss裡面的esp值恢復暫存器的值,就會導 致 進 程切換
add esp, 4
climov esp, [p_proc_ready] ; 離開核心棧;
lldt [esp + p_ldt_sel]
lea eax, [esp + p_stacktop]
mov dword [tss + tss3_s_sp0], eax
.re_enter: ; 如果(k_reenter != 0),會跳轉到這裡
dec dword [k_reenter] ; k_reenter--;
pop gs ; ┓
pop fs ; ┃
pop es ; ┣ 恢復原暫存器值
pop ds ; ┃
popad ; ┛
add esp, 4
iretd
儲存 暫存器和記憶體
計算機儲存塔狀結構,暫存器最快,記憶體其次,最慢的是硬碟 同樣是電晶體儲存裝置,為什麼暫存器比記憶體快?一 距離不同 距離不是主要因素,但是最好理解,記憶體離cpu比較遠,所以要耗費更長時間讀取。以3ghz的cpu為例,電流每秒鐘 可以振盪30億次,每次耗時大約為0.33納秒。光在1納秒的時間內,可...
暫存器和儲存器的區別
如果僅是討論cpu的範疇暫存器在cpu的內部,容量小,速度快。儲存器一般都在cpu外部,容量大,速度慢。從根本上講,暫存器與ram的物理結構不一樣。一般暫存器是指由基本的rs觸發器結構衍生出來的d觸發,就是一些與非門構成的結構,這個在數電裡面大家都看過 而ram則有自己的工藝,一般1bit由六mos...
暫存器和儲存器的區別?
儲存器在cpu外,一般指硬碟,u盤等可以在切斷電源後儲存資料的裝置,容量一般比較大,缺點是讀寫速度都很慢,普通的機械硬碟讀寫速度一般是50mb s左右。記憶體和暫存器就是為了解決儲存器讀寫速度慢而產生的多級儲存機制,從20世紀50年代開始,磁芯儲存器曾一度成為主存的主要儲存介質,但從20世紀70年代...