资源简介
linux 0.12 的源代码,配合赵炯的书看
代码片段和文件信息
/*
* 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;})
int 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) {
brelse(bh);
return 0;
}
bh->b_dirt=0;
bh->b_uptodate=0;
if (bh->b_count)
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);
printk(“free_block: bit already cleared\n“);
}
sb->s_zmap[block/8192]->b_dirt = 1;
return 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 free inode 0 or nonexistant inode“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7574 1992-01-14 23:45 linux-0.12\linux-0.12\boot\bootsect.S
文件 5938 1992-01-11 12:50 linux-0.12\linux-0.12\boot\head.s
文件 12144 1992-01-12 02:10 linux-0.12\linux-0.12\boot\setup.S
文件 4007 1992-01-12 03:57 linux-0.12\linux-0.12\fs\bitmap.c
文件 1763 1991-12-10 05:11 linux-0.12\linux-0.12\fs\block_dev.c
文件 9072 1991-12-07 04:21 linux-0.12\linux-0.12\fs\buffer.c
文件 2103 1991-11-19 17:10 linux-0.12\linux-0.12\fs\char_dev.c
文件 9908 1992-01-14 07:36 linux-0.12\linux-0.12\fs\exec.c
文件 1455 1991-10-02 22:16 linux-0.12\linux-0.12\fs\fcntl.c
文件 1852 1991-12-02 03:02 linux-0.12\linux-0.12\fs\file_dev.c
文件 122 1991-10-02 22:16 linux-0.12\linux-0.12\fs\file_table.c
文件 7166 1992-01-11 06:27 linux-0.12\linux-0.12\fs\inode.c
文件 1136 1991-12-21 09:58 linux-0.12\linux-0.12\fs\ioctl.c
文件 7176 1992-01-13 03:49 linux-0.12\linux-0.12\fs\Makefile.c
文件 18958 1992-01-12 12:09 linux-0.12\linux-0.12\fs\namei.c
文件 4862 1992-01-09 04:01 linux-0.12\linux-0.12\fs\open.c
文件 2834 1992-01-11 06:18 linux-0.12\linux-0.12\fs\pipe.c
文件 2802 1991-11-25 23:47 linux-0.12\linux-0.12\fs\read_write.c
文件 6381 1992-01-14 06:25 linux-0.12\linux-0.12\fs\select.c
文件 1875 1992-01-12 04:39 linux-0.12\linux-0.12\fs\stat.c
文件 5603 1991-12-10 05:11 linux-0.12\linux-0.12\fs\super.c
文件 1692 1992-01-12 03:47 linux-0.12\linux-0.12\fs\truncate.c
文件 6047 1991-09-17 23:10 linux-0.12\linux-0.12\include\a.out.h
文件 477 1991-08-07 18:17 linux-0.12\linux-0.12\include\asm\io.h
文件 507 1991-06-16 04:54 linux-0.12\linux-0.12\include\asm\memory.h
文件 1366 1991-11-26 02:48 linux-0.12\linux-0.12\include\asm\segment.h
文件 1707 1992-01-13 21:02 linux-0.12\linux-0.12\include\asm\system.h
文件 321 1991-09-17 23:12 linux-0.12\linux-0.12\include\const.h
文件 1049 1991-11-08 01:30 linux-0.12\linux-0.12\include\ctype.h
文件 1364 1992-01-04 02:52 linux-0.12\linux-0.12\include\errno.h
............此处省略117个文件信息
- 上一篇:router_eSIM_v11
- 下一篇:自定义的TabCtrl控件实现
相关资源
- linux简易shell C实现
- linux实验报告及心得体会
- 基于GTK的Linux环境下的简易任务管理器
- linux扫雷游戏代码
- CAN Linux驱动代码
- Linux系统教材
- intel 82579LM 网卡驱动Linux系统版 v1.9.
- SA1110处理器掌上电脑液晶显示器设计
- 基于Linux的串口服务器设计
- Windows下访问LINUX的利器-SSH
- Linux操作系统课件PPT
- 《操作系统原理及应用Linux》PPT
- Linux版的telnet安装包telnet、telnet-serv
- 快速掌握LINUX 学习笔记
- 基于Linux、QT的视频监控系统的设计与
- Linux Vim操作手册
- 剖析Linux系统下基于NUMA构建的服务
- linux SPI设备注册和驱动小结
- 周立功PCI CAN卡LINUX驱动ubuntu16.04内核
- WINDOWS内核安全编程 寒江独钓 光盘源
- 寒江独钓-Windows内核安全编程(完整版
- 实现Windows与Linux两系统间自由切换
- 在双引导Linux系统上实现OS自动切换
- 如何删除Linux系统后找回Windows的启动
- Linux命令详解,循序渐进Linux
- Linux系统文件命令精通指南(下)
- Linux系统命令及Shell脚本实践指南
- RK3308 LINUX开发者指南(1).pdf
- S3C4510 开发板中uCLinux系统开发
- ARM7内核的中断屏蔽方法
评论
共有 条评论