资源简介
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个文件信息
相关资源
- uboot到linux logo显示不间断 补丁
- UNIX/LINUX编程实践教程的源码
- Linux任务管理器
- linux应用层的华容道游戏源代码
- ubuntu9.10 可加载内核模块和字符设备驱
- MP3文件ID3v2ID3v2APEv2标签读取
- 操作系统实验——虚存管理实验
- linux下的发包工具sendip
- 尚观培训linux许巍关于c 的笔记和讲义
- 尚观培训linux董亮老师关于数据结构的
- linux 线程池源码 c 版
- linux C 电梯程序练习
- linux下用多进程同步方法解决生产者
- Linux 操作系统实验(全)
- Linux From Scratch 中文手册
- linux 网络实验 ftp程序
- Linux命令大全离线版&在线版
- 操作系统共享内存实验
- dos 下运行Linux 命令--gnu_utils
- linux 0.12内核源代码
- linux简易shell C实现
- linux实验报告及心得体会
- 基于GTK的Linux环境下的简易任务管理器
- linux扫雷游戏代码
- CAN Linux驱动代码
- Linux系统教材
- intel 82579LM 网卡驱动Linux系统版 v1.9.
- SA1110处理器掌上电脑液晶显示器设计
- 基于Linux的串口服务器设计
- Windows下访问LINUX的利器-SSH
评论
共有 条评论