資源簡介
linux_0.12全篇中文注釋

代碼片段和文件信息
?/*
??*??linux/fs/bitmap.c
??*
??*??(C)?1991??Linus?Torvalds
??*/
?
?/*?bitmap.c?contains?the?code?that?handles?the?inode?and?block?bitmaps?*/
?/*?bitmap.c程序含有處理i節點和磁盤塊位圖的代碼?*/
?#include????????//?字符串頭文件。主要定義了一些有關字符串操作的嵌入函數。
???????????????????????????//?這里使用了其中的memset()函數。
?#include???//?調度程序頭文件,定義任務結構task_struct、任務0數據。
?#include??//?內核頭文件。含有一些內核常用函數的原形定義。
?
?////?將指定地址(addr)處的一塊1024字節內存清零。
?//?輸入:eax?=?0;ecx?=?以長字為單位的數據塊長度(BLOCK_SIZE/4);edi?=?指定起始地
?//?址addr。
?#define?clear_block(addr)?\
?__asm__(“cld\n\t“?\????????????????//?清方向位。
?????????“rep\n\t“?\????????????????//?重復執行存儲數據(0)。
?????????“stosl“?\
?????????::“a“?(0)“c“?(BLOCK_SIZE/4)“D“?((long)?(addr)):“cx““di“)
?
?////?把指定地址開始的第nr個位偏移處的比特位置位(nr可大于32!)。返回原比特位值。
?//?輸入:%0?-eax(返回值);%1?-eax(0);%2?-nr,位偏移值;%3?-(addr),addr的內容。
?//?第20行定義了一個局部寄存器變量res。該變量將被保存在指定的eax寄存器中,以便于
?//?高效訪問和操作。這種定義變量的方法主要用于內嵌匯編程序中。詳細說明參見gcc手冊
?//?“在指定寄存器中的變量”。整個宏定義是一個語句表達式,該表達式值是最后res的值。
?//?第21行上的btsl指令用于測試并設置比特位(Bit?Test?and?Set)。把基地址(%3)和
?//?比特位偏移值(%2)所指定的比特位值先保存到進位標志CF中,然后設置該比特位為1。
?//?指令setb用于根據進位標志CF設置操作數(%al)。如果CF=1則%al?=1,否則%al?=0。
?#define?set_bit(nraddr)?({\
?register?int?res?__asm__(“ax“);?\
?__asm__?__volatile__(“btsl?%2%3\n\tsetb?%%al“:?\
?“=a“?(res):““?(0)“r“?(nr)“m“?(*(addr)));?\
?res;})
?
?////?復位指定地址開始的第nr位偏移處的比特位。返回原比特位值的反碼。
?//?輸入:%0?-eax(返回值);%1?-eax(0);%2?-nr,位偏移值;%3?-(addr),addr的內容。
?//?第27行上的btrl指令用于測試并復位比特位(Bit?Test?and?Reset)。其作用與上面的
?//?btsl類似,但是復位指定比特位。指令setnb用于根據進位標志CF設置操作數(%al)。
?//?如果CF?=?1則%al?=?0,否則%al?=?1。
?#define?clear_bit(nraddr)?({\
?register?int?res?__asm__(“ax“);?\
?__asm__?__volatile__(“btrl?%2%3\n\tsetnb?%%al“:?\
?“=a“?(res):““?(0)“r“?(nr)“m“?(*(addr)));?\
?res;})
?
?////?從addr開始尋找第1個0值比特位。
?//?輸入:%0?-?ecx(返回值);%1?-?ecx(0);%2?-?esi(addr)。
?//?在addr指定地址開始的位圖中尋找第1個是0的比特位,并將其距離addr的比特位偏移
?//?值返回。addr是緩沖塊數據區的地址,掃描尋找的范圍是1024字節(8192比特位)。
?#define?find_first_zero(addr)?({?\
?int?__res;?\
?__asm__(“cld\n“?\???????????????????//?清方向位。
?????????“1:\tlodsl\n\t“?\???????????//?取[esi]èeax。
?????????“notl?%%eax\n\t“?\??????????//?eax中每位取反。
?????????“bsfl?%%eax%%edx\n\t“?\????//?從位0掃描eax中是1的第1個位,其偏移值èedx。
?????????“je?2f\n\t“?\???????????????//?如果eax中全是0,則向前跳轉到標號2處(40行)。
?????????“addl?%%edx%%ecx\n\t“?\????//?偏移值加入ecx(ecx是位圖首個0值位的偏移值)。
?????????“jmp?3f\n“?\????????????????//?向前跳轉到標號3處(結束)。
?????????“2:\taddl?$32%%ecx\n\t“?\??//?未找到0值位,則將ecx加1個長字的位偏移量32。
?????????“cmpl?$8192%%ecx\n\t“?\????//?已經掃描了8192比特位(1024字節)了嗎?
?????????“jl?1b\n“?\?????????????????//?若還沒有掃描完1塊數據,則向前跳轉到標號1處。
?????????“3:“?\??????????????????????//?結束。此時ecx中是位偏移量。
?????????:“=c“?(__res):“c“?(0)“S“?(addr):“ax““dx““si“);?\
?__res;})
?
?////?釋放設備dev上數據區中的邏輯塊block。
?//?復位指定邏輯塊block對應的邏輯塊位圖比特位。成功則返回1,否則返回0。
?//?參數:dev是設備號,block是邏輯塊號(盤塊號)。
?int?free_block(int?dev?int?block)
?{
?????????struct?super_block?*?sb;
?????????struct?buffer_head?*?bh;
?
?//?首先取設備dev上文件系統的超級塊信息,根據其中數據區開始邏輯塊號和文件系統中邏輯
?//?塊總數信息判斷參數block的有效性。如果指定設備超級塊不存在,則出錯停機。若邏輯塊
?//?號小于盤上數據區第1個邏輯塊的塊號或者大于設備上總邏輯塊數,也
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????34666??2018-06-29?15:56??linux-chinese-0.12\boot\bootsect.S
?????文件??????25729??2018-06-29?15:57??linux-chinese-0.12\boot\head.s
?????文件??????54528??2018-06-29?15:58??linux-chinese-0.12\boot\setup.S
?????文件??????15301??2018-07-02?10:45??linux-chinese-0.12\fs\bitmap.c
?????文件???????8946??2018-07-02?10:53??linux-chinese-0.12\fs\block_dev.c
?????文件??????33370??2018-07-02?10:44??linux-chinese-0.12\fs\buffer.c
?????文件???????5767??2018-07-02?10:55??linux-chinese-0.12\fs\char_dev.c
?????文件??????41527??2018-07-02?10:58??linux-chinese-0.12\fs\exec.c
?????文件???????5731??2018-07-02?10:59??linux-chinese-0.12\fs\fcntl.c
?????文件???????7978??2018-07-02?10:53??linux-chinese-0.12\fs\file_dev.c
?????文件????????256??2018-07-02?10:52??linux-chinese-0.12\fs\file_table.c
?????文件??????29943??2018-07-02?10:50??linux-chinese-0.12\fs\inode.c
?????文件???????3287??2018-07-02?11:00??linux-chinese-0.12\fs\ioctl.c
?????文件???????7176??1992-01-13?03:49??linux-chinese-0.12\fs\Makefile
?????文件??????75646??2018-07-02?10:51??linux-chinese-0.12\fs\namei.c
?????文件??????21502??2018-07-02?10:56??linux-chinese-0.12\fs\open.c
?????文件??????10254??2018-07-02?10:54??linux-chinese-0.12\fs\pipe.c
?????文件???????8710??2018-07-02?10:55??linux-chinese-0.12\fs\read_write.c
?????文件??????23424??2018-07-02?11:01??linux-chinese-0.12\fs\select.c
?????文件???????6133??2018-07-02?10:58??linux-chinese-0.12\fs\stat.c
?????文件??????25074??2018-07-02?10:50??linux-chinese-0.12\fs\super.c
?????文件???????6334??2018-07-02?10:45??linux-chinese-0.12\fs\truncate.c
?????文件??????13130??2018-07-02?11:04??linux-chinese-0.12\include\a.out.h
?????文件???????1308??2018-07-02?11:11??linux-chinese-0.12\include\asm\io.h
?????文件???????1346??2018-07-02?11:11??linux-chinese-0.12\include\asm\memory.h
?????文件???????3233??2018-07-02?11:12??linux-chinese-0.12\include\asm\segment.h
?????文件???????6578??2018-07-02?11:12??linux-chinese-0.12\include\asm\system.h
?????文件????????838??2018-07-02?11:04??linux-chinese-0.12\include\const.h
?????文件???????2943??2018-07-02?11:05??linux-chinese-0.12\include\ctype.h
?????文件???????4690??2018-07-02?11:05??linux-chinese-0.12\include\errno.h
............此處省略117個文件信息
評論
共有 條評論