资源简介
Linux 0.11内核完全解析(含源码),非常好的一本书,不断的研究,才能不断的进步。
代码片段和文件信息
/*
* linux/fs/bitmap.c
*
* (C) 1991 Linus Torvalds
*/
/* bitmap.c contains the code that handles the inode and block bitmaps */
#include
#include
#include
#define clear_block(addr) \
__asm__(“cld\n\t“ \
“rep\n\t“ \
“stosl“ \
::“a“ (0)“c“ (BLOCK_SIZE/4)“D“ ((long) (addr)):“cx““di“)
#define set_bit(nraddr) ({\
register int res __asm__(“ax“); \
__asm__ __volatile__(“btsl %2%3\n\tsetb %%al“: \
“=a“ (res):“0“ (0)“r“ (nr)“m“ (*(addr))); \
res;})
#define clear_bit(nraddr) ({\
register int res __asm__(“ax“); \
__asm__ __volatile__(“btrl %2%3\n\tsetnb %%al“: \
“=a“ (res):“0“ (0)“r“ (nr)“m“ (*(addr))); \
res;})
#define find_first_zero(addr) ({ \
int __res; \
__asm__(“cld\n“ \
“1:\tlodsl\n\t“ \
“notl %%eax\n\t“ \
“bsfl %%eax%%edx\n\t“ \
“je 2f\n\t“ \
“addl %%edx%%ecx\n\t“ \
“jmp 3f\n“ \
“2:\taddl $32%%ecx\n\t“ \
“cmpl $8192%%ecx\n\t“ \
“jl 1b\n“ \
“3:“ \
:“=c“ (__res):“c“ (0)“S“ (addr):“ax““dx““si“); \
__res;})
void free_block(int dev int block)
{
struct super_block * sb;
struct buffer_head * bh;
if (!(sb = get_super(dev)))
panic(“trying to free block on nonexistent device“);
if (block < sb->s_firstdatazone || block >= sb->s_nzones)
panic(“trying to free block not in datazone“);
bh = get_hash_table(devblock);
if (bh) {
if (bh->b_count != 1) {
printk(“trying to free block (%04x:%d) count=%d\n“
devblockbh->b_count);
return;
}
bh->b_dirt=0;
bh->b_uptodate=0;
brelse(bh);
}
block -= sb->s_firstdatazone - 1 ;
if (clear_bit(block&8191sb->s_zmap[block/8192]->b_data)) {
printk(“block (%04x:%d) “devblock+sb->s_firstdatazone-1);
panic(“free_block: bit already cleared“);
}
sb->s_zmap[block/8192]->b_dirt = 1;
}
int new_block(int dev)
{
struct buffer_head * bh;
struct super_block * sb;
int ij;
if (!(sb = get_super(dev)))
panic(“trying to get new block from nonexistant device“);
j = 8192;
for (i=0 ; i<8 ; i++)
if (bh=sb->s_zmap[i])
if ((j=find_first_zero(bh->b_data))<8192)
break;
if (i>=8 || !bh || j>=8192)
return 0;
if (set_bit(jbh->b_data))
panic(“new_block: bit already set“);
bh->b_dirt = 1;
j += i*8192 + sb->s_firstdatazone-1;
if (j >= sb->s_nzones)
return 0;
if (!(bh=getblk(devj)))
panic(“new_block: cannot get block“);
if (bh->b_count != 1)
panic(“new block: count is != 1“);
clear_block(bh->b_data);
bh->b_uptodate = 1;
bh->b_dirt = 1;
brelse(bh);
return j;
}
void free_inode(struct m_inode * inode)
{
struct super_block * sb;
struct buffer_head * bh;
if (!inode)
return;
if (!inode->i_dev) {
memset(inode0sizeof(*inode));
return;
}
if (inode->i_count>1) {
printk(“trying to free inode with count=%d\n“inode->i_count);
panic(“free_inode“);
}
if (inode->i_nlinks)
panic(“trying to free inode with links“);
if (!(sb = get_super(inode->i_dev)))
panic(“trying to free inode on nonexistent device“);
if (inode->i_num < 1 || inode->i_num > sb->s_ninodes)
panic(“trying to fr
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 1991-12-08 21:38 linux-0.11\
目录 0 1991-12-04 13:11 linux-0.11\tools\
目录 0 1991-12-08 14:08 linux-0.11\mm\
目录 0 1991-12-08 14:10 linux-0.11\lib\
目录 0 1991-12-08 14:08 linux-0.11\kernel\
目录 0 1991-12-05 19:59 linux-0.11\init\
目录 0 1991-09-22 19:58 linux-0.11\include\
目录 0 1991-12-08 14:08 linux-0.11\fs\
目录 0 1991-12-05 22:48 linux-0.11\boot\
目录 0 1991-12-08 14:09 linux-0.11\kernel\blk_drv\
目录 0 1991-12-08 14:09 linux-0.11\kernel\math\
目录 0 1991-12-08 18:36 linux-0.11\kernel\chr_drv\
目录 0 1991-09-17 13:08 linux-0.11\include\asm\
目录 0 1991-11-02 13:35 linux-0.11\include\linux\
目录 0 1991-09-17 15:06 linux-0.11\include\sys\
目录 0 2010-05-26 05:12 linux中文注释\
目录 0 2007-03-16 03:39 linux中文注释\tools\
目录 0 2007-03-16 03:39 linux中文注释\mm\
目录 0 2007-03-16 03:39 linux中文注释\lib\
目录 0 2007-03-16 03:39 linux中文注释\kernel\
目录 0 2007-03-16 03:39 linux中文注释\init\
目录 0 2007-03-16 03:39 linux中文注释\include\
目录 0 2007-03-16 03:39 linux中文注释\fs\
目录 0 2007-03-16 03:39 linux中文注释\boot\
目录 0 2007-03-16 03:39 linux中文注释\kernel\math\
目录 0 2007-03-16 03:39 linux中文注释\kernel\chr_drv\
目录 0 2007-03-16 03:39 linux中文注释\kernel\blk_drv\
目录 0 2007-03-16 03:39 linux中文注释\include\sys\
目录 0 2007-03-16 03:39 linux中文注释\include\linux\
目录 0 2007-03-16 03:39 linux中文注释\include\asm\
文件 2887 1991-12-06 03:12 linux-0.11\Makefile
............此处省略197个文件信息
相关资源
- Linux教程第四版孟庆昌牛欣源
- Linux 环境下,利用 Socket 通信实现网络
- 飞思卡尔 明远智睿 I.MX6核心板 I.MX6开
- UNIX-Linux系统管理技术手册(第四版)
- see mips run(英文版本)
- SELinux详解中文版
- 国嵌嵌入式linux培训全套实验代码
- SSH The Secure Shell 2nd Edition
- u-boot2017.01启动过程分析.pdf
- linux下关于Qt界面的摄像头v4l2操作源码
- Linux性能和调优指南
- sx1301全频道源码及配置文件
- 使用Altera的FPGA内核建立PCI/PXI接口
- Linux版本的aapt和apktool工具包
- Linux餐厅点菜系统
- Linux内核设计与实现(原书第3版) 清
- 基于Linux、QT的视频监控系统的设计与
- 文泉驿中英文字体库支持qt4和qt5
- Linux进程线程编程
- rtai+linux实时系统
- qt-recordDesktop
- openssl-1.0.0o.tar.gz
- linux下系统调用编程
- linux版本tomcat8.5
- Linux Kernel Development第三版
- Linux Device Driver 中文版第三版 pdf
- Windows内核安全与驱动开发(随书光盘
- linux-selinux功能及源码分析
- VS-附录1监控工程师常用Linux命令集.
- linux 驱动程序开发冯国进代码
评论
共有 条评论