资源简介
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个文件信息
相关资源
- 360签名工具支持Linux&MAC下批量签名
- Linux典藏大系文字版全部集合打包
- ubuntu14.04 QQ
- Linux驱动学习总结
- 跟老男孩学Linux运维:Shell编程实战
- Linux程序设计(第4版)
- A311D_Datasheet_04_Wesion.pdf
- jdk-6u45-linux-i586-rpm.bin
- 奔跑吧 Linux内核:基于Linux 4.x内核源
- 基于Petalinux下Zynq的AMP详细开发流程说
- 嵌入式Linux应用开发完全手册 带书签
- linux-3.0.1.tar.gz
- elasticsearch-6.4.0.tar.gz
- mips-sde-elf-i686-pc-linux-gnu.tar.bz2
- tor-browser-linux64-7.0.1_en-US.tar.xz
- OMNET++5.4.1(Part1) for Linux
- Erlang21.2安装包 Linux版
- ibm版jdk1.8 for linux x64
- Apache_OpenOffice_4.1.6_Linux_x86-64_install-r
- gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-
- Linux程序设计 第4版 完整版带书签目录
- NVIDIA-Linux-x86_64-410.66.run
- 嵌入式Linux应用开发完全手册(韦东山
- Linux shell脚本编程入门
- linux+qt+v4l2 摄像头视频捕捉--源代码
- jdk-8u211-linux-arm32-vfp-hflt.tar.gz 架构aa
- gurobi81_linux64.tar.gz
- 树莓派100个精彩案例
- Toad for db2 6.1.0.125 带key 免激活版 亲测
- Ubuntu.Linux从入门到精通
评论
共有 条评论