资源简介
linux的最初版本源码,看看会有收获。
代码片段和文件信息
/* 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__(“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__(“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 free inode 0 or nonexistant inode“);
if (!(bh=sb->s_imap[inode->i_num>>13]))
panic(“nonexiste
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2186 1991-09-17 21:53 060321linuxcode\linuxcode\linux\Makefile
文件 6821 2006-03-19 23:21 060321linuxcode\linuxcode\linux\黑客基地hackba
文件 1710 1991-07-03 01:20 060321linuxcode\linuxcode\linux\tools\build.c
文件 770 1991-09-17 23:15 060321linuxcode\linuxcode\linux\mm\Makefile
文件 7048 1991-09-17 23:07 060321linuxcode\linuxcode\linux\mm\memory.c
文件 448 1991-06-30 02:50 060321linuxcode\linuxcode\linux\mm\page.s
文件 69 1991-09-17 23:24 060321linuxcode\linuxcode\linux\lib\close.c
文件 1140 1991-09-17 23:17 060321linuxcode\linuxcode\linux\lib\ctype.c
文件 67 1991-09-17 23:26 060321linuxcode\linuxcode\linux\lib\dup.c
文件 11 1991-09-17 23:24 060321linuxcode\linuxcode\linux\lib\errno.c
文件 107 1991-09-17 23:26 060321linuxcode\linuxcode\linux\lib\execve.c
文件 992 1991-09-17 23:29 060321linuxcode\linuxcode\linux\lib\Makefile
文件 328 1991-09-17 23:24 060321linuxcode\linuxcode\linux\lib\open.c
文件 65 1991-09-17 23:26 060321linuxcode\linuxcode\linux\lib\setsid.c
文件 114 1991-09-17 23:28 060321linuxcode\linuxcode\linux\lib\string.c
文件 192 1991-09-17 23:26 060321linuxcode\linuxcode\linux\lib\wait.c
文件 98 1991-09-17 23:25 060321linuxcode\linuxcode\linux\lib\write.c
文件 136 1991-09-17 23:23 060321linuxcode\linuxcode\linux\lib\_exit.c
文件 2665 1991-07-09 07:29 060321linuxcode\linuxcode\linux\kernel\asm.s
文件 9524 1991-09-07 23:46 060321linuxcode\linuxcode\linux\kernel\console.c
文件 2915 1991-09-17 23:55 060321linuxcode\linuxcode\linux\kernel\exit.c
文件 3477 1991-09-17 20:30 060321linuxcode\linuxcode\linux\kernel\fork.c
文件 9734 1991-09-17 23:05 060321linuxcode\linuxcode\linux\kernel\hd.c
文件 9497 1991-08-30 05:14 060321linuxcode\linuxcode\linux\kernel\keyboard.s
文件 3843 1991-09-17 23:15 060321linuxcode\linuxcode\linux\kernel\Makefile
文件 1395 1991-08-30 20:09 060321linuxcode\linuxcode\linux\kernel\mktime.c
文件 222 1991-08-19 06:06 060321linuxcode\linuxcode\linux\kernel\panic.c
文件 602 1991-09-17 23:09 060321linuxcode\linuxcode\linux\kernel\printk.c
文件 2653 1991-09-18 00:29 060321linuxcode\linuxcode\linux\kernel\rs_io.s
文件 5155 1991-09-17 21:28 060321linuxcode\linuxcode\linux\kernel\sched.c
............此处省略76个文件信息
相关资源
- Linux Kernel Networking Implementation and The
- Network Connect 7.1(mac,win,linux)
- namp大集合[linux64版和windows64和32版]
- 飞机大战PlaneWar,Linux下gtk开发。
- cmake-3.2.3-Linux-x86_64.tar
- maven私服tar包nexus_linux.zip
- linux 操作系统 GTK /proc文件 系统监视器
- 自己写的linux ls 命令 包括 -l -R -a -U
- 基于LINUX与GPRS网络的无线数据采集与
- Linux高级编程笔试题答案
- git-2.0.0.tar.gz
- 我们的linux上机作业 linux小游戏 炸弹
- linux下基于socket和curses的双人弹球游戏
- linux网络聊天室
- 使用RTMPdump(libRTMP)直播来自v4l2的摄
- Linux+man中文手册
- Linux典藏大系之Linux系统移植第2版
- 嵌入式系统设计与应用 基于ARM Cort
- linux_syscall_support.h_2016/12/20
- Linux中nginx安装相关资源包
- Linux驱动模块单独编译Makefile
- Linux 进程控制与进程互斥附实验报告
- linux下socket can 编程详解
- 嵌入式Linux驱动开发基础总结
- DES 纯c实现(des.c和des.h) 含pkcs1填充
- Linux基础教程.ppt
-
Jli
nk_Linux_V422.zip - Atollic_TrueSTUDIO_for_STM32_v9.0.1_20180420-1
- 安装linux后的mbr修复工具(含64位)
- 动手做一个迷你型Linux操作系统
评论
共有 条评论