fork.c
fork.c 是建立程序的功能實現,其核心函式式copy_process,被系統函式sys_fork(定義在system_call.s中)呼叫。因此原始碼學習從sys_fork開始,**如下:
sys_fork:call
find_empty_process //是否還能夠建立程序,0.11預設最大程序數為64
testl %eax,%eax
js1f
push
%gs pushl %esi
pushl %edi
pushl %ebp
pushl %eax
call
copy_process //呼叫copy_process
addl $
20,%esp //考慮入參在堆疊的長度
1: ret
copy_process函式原型:
int copy_process(int nr,long ebp,long edi,long esi,long gs,longnone,
long ebx,long ecx,long
edx,
long fs,long es,long
ds,
long eip,long cs,long eflags,long esp,long ss)
主要工作如下:
遺留問題:類似copy_process這樣的系統呼叫,引數是怎麼傳的??
linux 0 11 原始碼學習(六)
main.c main函式其實是核心的初始化,如果把核心功能比作業務軟體的話,就相當於是業務的初始化,從該檔案的資料夾歸屬 init資料夾 也可以看出這一點。main主函式很短,從 中可以基本看出整個核心的功能模組,如下 void main void for pause 注 在linux中fork乙...
linux 0 11 原始碼學習(五)
head.s head.s 是系統模組的入口,其編譯器已經是gnu彙編,但從功能上將仍然屬於核心啟動階段,主要的功能是對386 cpu的初始化,如使用者堆疊 idt gdt和頁表。因此從資料夾的歸屬看,它仍然放在boot資料夾中,與bootsect和setup一塊。head.s的核心功能 簡單的暫存...
linux 0 11 原始碼學習(十三)
字元裝置驅動 在linux 0.11版本中,字元裝置驅動原始碼分為三塊 向上暴露的字元裝置驅動介面tty io.c與tty ioctl.c,與塊裝置驅動一樣,在字元驅動檔案 read write.c 操作中被呼叫 實現串列埠的驅動rs io.s和serial.c 實現鍵盤驅動的keyboard.s以...