版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Kernel, Lib,0.12 內(nèi)核有如下幾下目錄:Boot, Fs,In elude ,Mm, I nit,Tools,最外層有一個總的 MakeFile.各目錄文件分布情況如下:Boot: bootsect.S setup.S head.s 其中后綴.S 大寫表明:as 使用GNUC編譯 器的預(yù)處理功能引導(dǎo)啟動程序bootsect.S將setup.S代碼和system模塊加載到內(nèi)存中,并且 分別把自己和setup.S代碼移動到物理內(nèi)存 0x90000和0x90200處,就把執(zhí)行權(quán)交 給了 setup程序。其中system模塊的首部包含head.s代碼。Setup程序的主要作用是利用ROM
2、 BIOS的中斷程序獲取機(jī)器的一些基本參數(shù),并保存在0x90000幵始的內(nèi)存塊中,供后面程序使用。同時把 system模塊往下移 動到物理地址0x00000幵始處,這樣,system中的head.s代碼就處在0x00000幵 始處了。然后加載描述符表基地址到描述符表寄存器中,為進(jìn)行32位保護(hù)模式下的運行作好準(zhǔn)備。接下來對中斷控制硬件進(jìn)行重新設(shè)置,最后通過設(shè)置機(jī)器控制寄 存器CR0并跳轉(zhuǎn)到 system模塊的head.s代碼幵始處,使CPU進(jìn)入32位保護(hù)模式下運行。Head.s代碼主要作用是初步初始化中斷描述符表中的2 5 6項門描述符,檢查A2 0地址線是否已經(jīng)打幵,測試系統(tǒng)是否含有數(shù)學(xué)協(xié)處理
3、器。然后初始化內(nèi)存頁目錄表,為內(nèi)存的分頁管理作好準(zhǔn)備工作。最后跳轉(zhuǎn)到system模塊中的初始化程序init/main.c 中繼續(xù)執(zhí)行。In it:mai n.cMain.c利用setup.s取得的系統(tǒng)參數(shù)設(shè)置系統(tǒng)的根文件設(shè)備號以及一些內(nèi)存 全局變量。然后內(nèi)核進(jìn)行硬件的初始化工作。包括陷阱門,塊設(shè)備,字符設(shè)備,tty,包括人工設(shè)置第一個任務(wù)taskO.然后設(shè)置中斷允許標(biāo)志幵中斷,main切換到任務(wù)0中 運行。Tools:build.cBuild.c生成內(nèi)核磁盤映像文件,單獨編繹成可執(zhí)行文件,在lin ux/目錄下的M akefile 文件中被調(diào)用運行,用于將所有內(nèi)核編譯代碼鏈接和合并成一個可運行
4、 內(nèi)核映像文件Image.Mm:Swap.c Page.s Memory.c Makefilepage.s包含頁異常的中斷處理過程(int 14),主要實現(xiàn)了對缺頁和頁寫保護(hù)的 處理。Memory.c是內(nèi)存頁面管理的核心文件,用于內(nèi)存的初始化操作,頁目錄和頁表的管理和內(nèi)核其他部分對內(nèi)存申請的處理過程。Swap.c是內(nèi)存頁面交換管理文件,其中主要包括映射位圖管理函數(shù)和交換設(shè)備訪 問函數(shù)。Lib:write.cwait.c stri ng.csetsid.cope n.c malloc.c_exit.cexecve.cerrno.c dup.c ctype.c close.c_exit.c:程序調(diào)
5、用內(nèi)核的系統(tǒng)調(diào)用函數(shù)。_asm(i nt0x80:a(NR_exit),b(exit_code);Close.c:疋義了文件關(guān)閉函數(shù)。_syscall1(i nt,close,i nt ,fd)Ctype.c:為ctype.h提供輔助數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù),用于對字符進(jìn)行類型判斷Dup.c:復(fù)制文件描述符函數(shù)。_syscall1(int,dup,int ,fd)Errn o.c: 僅定義了一個出錯號變量errno.Execve.c: 運行執(zhí)行程序的系統(tǒng)調(diào)用函數(shù)。_syscall3(i nt,execve,co nst char*,file,char *,argv,char*, envp)Malloc.c
6、:內(nèi)存分配函數(shù)。Open.c:Open系統(tǒng)調(diào)用可將一個文件名轉(zhuǎn)換成一個文件描述符。Setsid.c:setsid()系統(tǒng)調(diào)用函數(shù)。_syscallO(pid_t,setsid)Str in g.c:所有字符串操作函數(shù)存在于str in g.h中。Wait.c:包含函數(shù)waitpid() 和wait().wait()系統(tǒng)調(diào)用直接調(diào)用 waitpid() 函數(shù)。Write.c:write()函數(shù)向文件描述符指定的文件寫入count字節(jié)的數(shù)據(jù)到緩沖區(qū)buf 中。_syscall3(i nt,write,i nt ,fd,c onst char*,buf,off_t,co unt)FS:Tr un c
7、ate.c bitmap.c ino de.c super.c buffer.c pipe.c stat.c ope n.c n amei.c ioctl.c file_table.c file_dev.cfen tl.cexec.c block_dev.cchar_dev.c read_write.c select.c其中file_table.c是空的。高速緩沖區(qū):Buffer.c :內(nèi)核實現(xiàn)高速緩沖區(qū)的程序是buffer.c 。文件系統(tǒng)中其他程序通過指定需要訪問的設(shè)備號和數(shù)據(jù)邏輯塊號來調(diào)用它的塊讀寫函數(shù)。這些接口函數(shù)有:塊讀取函數(shù)bread(),塊提前預(yù)讀函數(shù) breada()和頁塊讀取函
8、數(shù) bread_page().文件系統(tǒng)底層函數(shù):Bitmap.c程序包含對i節(jié)點位圖和邏輯塊節(jié)點位圖進(jìn)行釋放和占用處理函數(shù)。操作i節(jié)點位圖的函數(shù)是freenode()和new_inode(),操作邏輯塊位圖的函數(shù)是free_block()和 new_block().Truncate.c程序包括對數(shù)據(jù)文件長度截斷為0的函數(shù)truncate().它將i節(jié)點指定的設(shè)備上文件長度截為0.并釋放文件數(shù)據(jù)占用的設(shè)備邏輯塊。Inode.c程序包括分配i節(jié)點函數(shù)iget()和放回對內(nèi)存i節(jié)點存取函數(shù)iput()以及 根據(jù)i節(jié)點信息取文件數(shù)據(jù)塊在設(shè)備上對應(yīng)的邏輯塊號函數(shù)bmap();Namei.c程序主要包括函
9、數(shù) namei().使用iget(),iput(),bmap()將給定的文件路徑名映射到其i節(jié)點。Super.c 程序?qū)iT用于處理文件系統(tǒng)超級塊,包括函數(shù) get_super(),put_super(),free_super().還包括幾個文件系統(tǒng)加載、卸載處理函數(shù)和系統(tǒng)調(diào)用。文件中數(shù)據(jù)的訪問操作:文件數(shù)據(jù)的訪問操作涉及block_dev.c ,file_dev.c,char_dev.c,pipe.c和read_write.c.前面4個文件可以認(rèn)為是塊設(shè)備,字符設(shè)備,管道設(shè)備和普通文件與文件讀寫系統(tǒng)調(diào)用的接口程序,它們共同實現(xiàn)了read_write.c 中的read()和write()系統(tǒng)調(diào)用
10、。通過對被操作文件屬性的判斷,這兩個系統(tǒng)調(diào)用會分別調(diào)用這 些文件中的相關(guān)處理函數(shù)進(jìn)行操作。Block_dev.c 中的函數(shù)block_read() block_write()是用于讀寫塊設(shè)備特殊文件中的數(shù)據(jù)。所使用的參數(shù)指定了要訪問的設(shè)備號,讀寫的起始位置和長度。File_dev.c 中file_read(),file_write()通過指定文件對應(yīng)的i節(jié)點和文件結(jié)構(gòu),可以知道文件所在的設(shè)備號和文件當(dāng)前讀寫指針。Pipe.c實現(xiàn)管道讀寫函數(shù)read_pipe() write_pipe().另外還實現(xiàn)了創(chuàng)建無名管道的系統(tǒng)調(diào)用pipe().Char_dev.c:系統(tǒng)調(diào)用 read() ,write
11、() 通過調(diào)用 rw_char()實現(xiàn)Read_write.c:實現(xiàn)了系統(tǒng)調(diào)用 read(),write(),lseek().文件和目錄管理系統(tǒng)調(diào)用:Open.c實現(xiàn)與文件操作相關(guān)系統(tǒng)調(diào)用。 主要有文件的創(chuàng)建,打幵和關(guān)閉。文件宿主 和屬性的修改,文件訪問權(quán)限的修改,文件操作時間的修改和系統(tǒng)文件系統(tǒng)root的變動等。Exec.c實現(xiàn)對二進(jìn)制可執(zhí)行文件和shell腳本文件的加載與執(zhí)行。主要函數(shù)do_execve()是系統(tǒng)中斷調(diào)用(int0x80)功能號_NR_execve()調(diào)用的C處理函數(shù),也是exec()函數(shù)簇的主要實現(xiàn)函數(shù)。Fentl.c實現(xiàn)文件控制系統(tǒng)調(diào)用fentl()和兩個文件句柄復(fù)制系
12、統(tǒng)調(diào)用dup()和dup2().dup2()指定了新句柄的數(shù)值,dup()返回當(dāng)前值最小的未用句柄。loctl.c文件實現(xiàn)了輸入輸出控制系統(tǒng)調(diào)用ioctl().主要調(diào)用tty_ioctl() 函數(shù)對終端IO進(jìn)行控制。Stat.c實現(xiàn)取文件狀態(tài)信息系統(tǒng)調(diào)用stat()和fstat().stat()利用文件名取信息fstat()利用文件句柄取信息。(文件句柄即文件描述符)其他:select.c 實現(xiàn)select系統(tǒng)調(diào)用。Kern el:Blk_drv Chr_drv Math Asm.s exit.c fork.c mktime.c pani c.c pri ntk.csched.c sig na
13、l.c sys.c sys_call.s traps.c vspri ntf.c其中 Blk_drv 子目錄: blk.h floppy.c hd.c ramdisk.c ll_rw_blk.cChr_drv 子目錄: console.c keybord.s pty.c rs_io.c serial.c tty_io.ctty_ioctl.cMath 子目錄:add.c compare.c convert.c div.c ea.c error.c get_put.c mul.c math_emulate.c中斷處理程序:包括 asm.s和traps.c文件Asm.s用于實現(xiàn)大部分硬件異常所引起
14、的中斷的匯編語言處理過程。系統(tǒng)調(diào)用處理相關(guān)程序:sys_call.s fork.c sig nal.c sys.c exit.cSys_call.s 主要實現(xiàn)系統(tǒng)調(diào)用中斷in t0x80的入口處理過程以及信號檢測處理,同時給出了 sys_execve(),sys_fork()這兩個系統(tǒng)調(diào)用的底層接口,還給出了協(xié)處理器出錯,設(shè)備不存在,時鐘中斷,硬盤中斷,軟盤中斷的中斷處理程序。Sig nal.c涉及內(nèi)核中信號處理函數(shù)。包括設(shè)置和獲取信號阻塞碼,信號處理系統(tǒng)調(diào) 用,可靠信號處理系統(tǒng)調(diào)用等。Exit.c描述進(jìn)程終止和退出的有關(guān)事宜。主要包括進(jìn)程釋放,會話終止和程序退出 以及殺死進(jìn)程,終止進(jìn)程,掛起
15、進(jìn)程等系統(tǒng)調(diào)用函數(shù)。還包括進(jìn)程信號發(fā)送函數(shù) send_sig()和通知父進(jìn)程子進(jìn)程中止的函數(shù)tell_father()Fork.c:該程序是sys_fork()系統(tǒng)調(diào)用的輔助處理函數(shù)集, 給出了 sys_fork()中使 用的 find_empty_process ()和 copy_process () 函數(shù)。還包括內(nèi)存區(qū)域驗證verify_area() 和內(nèi)存分配 copy_mem()函數(shù)。Sys.c:包含很多系統(tǒng)調(diào)用功能實現(xiàn)函數(shù)。其他通用類程序:schedule.c mktime.c pani c.c prin tk.c vspri ntf.cSchedule.c 包含內(nèi)核調(diào)用最頻繁的sc
16、hedule(),sleep_on(),wakeup()函數(shù),是內(nèi)核的核心調(diào)度程序,用于對進(jìn)程的執(zhí)行進(jìn)行切換或改變進(jìn)程執(zhí)行狀態(tài)。另外還包括 有關(guān)系統(tǒng)時鐘中斷和軟盤驅(qū)動器定時的函數(shù)。Mktime.c:包含內(nèi)核使用的時間函數(shù)mktime(),僅在init/main.c中使用一次Pani c.c:pa ni c()函數(shù)用于在內(nèi)核運行出現(xiàn)錯誤時顯示出錯信息并停機(jī)。Printk.c以及vsprintf.c是內(nèi)核顯示信息的支持程序,實現(xiàn)了內(nèi)核專用顯示函數(shù)prin tf()和字符串格式化輸出函數(shù) vspri ntf().塊設(shè)備驅(qū)動程序:blk.h:定義請求等待隊列中項的數(shù)據(jù)結(jié)構(gòu)request,用宏語句定義了
17、電梯搜索算法。Hd.c:提供對硬盤的讀寫驅(qū)動和初始化處理。包含以下函數(shù):1,初始化硬盤和設(shè)置硬盤所用數(shù)據(jù)結(jié)構(gòu)的sys_setup(),hd_i ni t()2, 向硬盤控制器發(fā)送命令:hd_out()3, 處理硬盤當(dāng)前請求項 do_hd_request()4. 硬盤中斷處理過程中調(diào)用的C函數(shù)readntr(),writentr(),bad_rw_intr(),recal_i ntr().5. 硬盤控制器操作輔助函數(shù) controler_ready(),driive_busy(),win_result(),hd_out(), reset_c on troler()等。Ll_rw_blk.c:執(zhí)行
18、低層塊設(shè)備讀寫操作,是塊設(shè)備與系統(tǒng)其他部分的接口程序,其他程序通過調(diào)用ll_rw_block()來讀寫塊設(shè)備中的數(shù)據(jù)。該函數(shù)的主要功能是創(chuàng)建塊設(shè)備讀寫請求項,并插入到指定塊設(shè)備請求隊列中。實際的讀寫操作則是由設(shè)備的請求項處理函數(shù)request_fn() 完成。硬盤 do_hd_request(), 軟盤 do_fd_request() 虛擬盤 do_rd_request()Ramdiskcrdnit()在init/main.c調(diào)用,用于確定虛擬盤在內(nèi)存中的位置和大小。Do_rd_request()是虛擬盤設(shè)備的請求項操作函數(shù)。Rd_load()是虛擬盤根文件 加載函數(shù)。Floppy.c:軟盤驅(qū)
19、動程序,do_fd_request()函數(shù)字符設(shè)備驅(qū)動程序:包括控制終端設(shè)備和串行終端設(shè)備。控制臺驅(qū)動程序:Keybord.s:鍵盤中斷處理程序。Console.c:實現(xiàn)終端屏幕寫函數(shù)con_write()以及進(jìn)行終端屏幕顯示的控制操作。 串行線路驅(qū)動程序:Serial.c:實現(xiàn)系統(tǒng)串行端口初始化。 Rsn it()中設(shè)置默認(rèn)串行通信參數(shù), 設(shè)置串 行端口的中斷向量。Rw_write()把串行終端設(shè)備寫緩沖隊列中的字符通過串行線路 發(fā)送給遠(yuǎn)端的終端設(shè)備。Rs_io.s:串行通信中斷處理過程, 對終端的讀寫緩沖隊列進(jìn)行操作。 把從串行線路 接收到的字符存入串行終端讀緩沖隊列read_q中,或把寫
20、緩沖隊列 write_q中需要發(fā)送出去的字符通過串行線路發(fā)送給串行終端設(shè)備。終端驅(qū)動程序與上層接口部分:tty_io.c:含有終端讀寫函數(shù)tty_read(),tty_write(),讀操作的行規(guī)則函數(shù)copy_to_cooked().Tty_ioctl.c:實現(xiàn)函數(shù)tty_ioctl.c可修改指定終端termios結(jié)構(gòu)中的設(shè)置標(biāo)志等信息。數(shù)學(xué)協(xié)處理器:Math_emulate.c:設(shè)備不存在異常處理函數(shù)程序接口math_emulate(),浮點指令仿真處理主函數(shù)do_emu(),別外函數(shù)為仿真運算輔助類函數(shù)。Error.c:用于處理協(xié)處理器發(fā)出的出錯信號,執(zhí)行math_error()函數(shù)。E
21、a.c:用于在仿真浮點指令時計算其中操作數(shù)使用到的有效地址。Convert.c:包含80387仿真操作過程中的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)。Add.c:處理仿真過程中的加法運算。Compare.c:用于在仿真過程中比較累加器中兩個臨時數(shù)的大小。Get_put.c:處理所有對用戶內(nèi)存的訪問,取得和存入指令,實數(shù)值,BCD數(shù)值等。Mul.c:仿真80387的乘法運算。Div.c:仿真80387協(xié)處理器的除法運算。In clude:Asm Linux Sys a.out.h con st.h ctype.h errno.h fen tl.h sig nal.h stdarg.h stddef.h stri ng
22、.hTermios.h time.h un istd.h utime.hASM子 目錄:io.h memory.h segme nt.h system.hLinux 子目錄: config.h fdreg.h fs.h hdreg.h head.h kernel.h math_emu.h mm.h sched.h sys.h tty.hSys 子目錄: param.h resource.h stat.h time.h times.h types.h utsname.hwait.hA.out.h:文件用于定義被加載的可執(zhí)行文件的結(jié)構(gòu),主要用于加載程序fs/exec.c中。Const.h :定義了
23、 I節(jié)點中文件屬性和類型i_mode字段所用到的一些標(biāo)志位常量符號。Ctype.h:關(guān)于字符測試和處理的頭文件,定義了一些字符類型判斷和處理的宏。Errno.h:定義出錯號的常量符號Fen tl.h:文件控制選項頭文件,定義文件控制函數(shù)fen tl()和文件創(chuàng)建和打幵函數(shù)中乃至的一些選項。Sign al.h:定義內(nèi)核中使用的所有信號的名稱和基本操作函數(shù)。Sig nal()sig nacti on()Stdarg.h:標(biāo)準(zhǔn)參數(shù)頭文件,它以宏的形式定義變量參數(shù)列表。主要說明了一個類 型 va_list 和三個宏 va_start,va_arg,va_end ,用于 vsprintf,vprintf
24、,vfprintf 函數(shù)。Stddef.h主要用于存放一些標(biāo)準(zhǔn)定義。Stri ng.h:文件以內(nèi)嵌函數(shù)的形式定義了所有字符串操作函數(shù),使用了匯編程序。Termios.h:終端接口定義,含有termios結(jié)構(gòu)和通用終端端口設(shè)置函數(shù)原型Time.h:涉及處理時間和日期的函數(shù)Uni std.h:標(biāo)準(zhǔn)符號常數(shù)和類型頭文件,該文件中定義了很多各種各樣的常數(shù)和類型,以及一些函數(shù)聲明。如果程序中定義了符號_LIBRARY_則還包括內(nèi)核系統(tǒng)調(diào)用 號和內(nèi)嵌匯編_syscallO() 等。Utime.h:該文件定義了文件訪問和修改時間的結(jié)構(gòu) utimebuf以及utime()函數(shù)原 型。ASM子 目錄:io.h memory.h segme nt.h system.hIo.h:定義了對硬件端口訪問的嵌入式匯編函數(shù):outb(),inb(),outb_p(),inb_p()Memory.h:含有內(nèi)存復(fù)制嵌入式匯編宏memcpy(),與string.h中memcpy()相同。Segment.h:定義了訪問段寄存器或與段寄存器有關(guān)的內(nèi)存操作函數(shù)。System.h:定義了設(shè)置和修改描述符/中斷門等的嵌入式匯編宏。Linux 子目錄: config.h fdreg.h fs.h hdreg.h head.h kernel.h math_emu.h mm.h sched.h sys.h
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海高考語文三年模擬真題(21-23年)知識點匯編-寫作
- 2024版房屋裝潢設(shè)計協(xié)議
- 保密協(xié)議書案例
- 保險賠款轉(zhuǎn)讓協(xié)議法律效力分析
- 屋面翻新合同參考
- 2024年食品企業(yè)員工保密協(xié)議
- 商場專柜權(quán)益轉(zhuǎn)讓協(xié)議樣本
- 房屋轉(zhuǎn)租合同樣本簡單版
- 農(nóng)民集體土地搬遷補(bǔ)償協(xié)議范本
- 起始人協(xié)議書(企業(yè)轉(zhuǎn)型)專業(yè)版
- 人教版小學(xué)1-6年級日積月累(全)
- (高清正版)JJG 342-2014 凝膠色譜儀
- 大型連鎖超市商品分類明細(xì)表
- 新生兒聽力篩查PPT幻燈片課件
- 公對公欠款協(xié)議書范文
- 網(wǎng)吧公司章程范本
- 對甲苯磺酸檢測標(biāo)準(zhǔn)2
- PVC熱穩(wěn)定劑常見測試方法解析
- DB63∕T 1996-2021 自然保護(hù)地 特許經(jīng)營
- 《熱愛生命》汪國真_教案
- Module 4 外研版英語九(上)模塊主題寫作詳解與訓(xùn)練
評論
0/150
提交評論