• 大小: 491KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2022-06-14
  • 语言: 其他
  • 标签: linux  0.12  chinese  

资源简介

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个文件信息

评论

共有 条评论