当前位置: 首页 > news >正文

北滘网站建设企业网络推广技巧

北滘网站建设,企业网络推广技巧,生态环境工程公司网站建设,龙岩今日头条新闻Linux-0.11 文件系统bitmap.c详解 模块简介 该模块包含了两对函数,第一对是和i节点相关的free_inode()和new_inode()。第二对是和逻辑块相关的free_block()和new_block()。 函数详解 free_block void free_block(int dev, int block)该函数的作用是释放设备dev…

Linux-0.11 文件系统bitmap.c详解

模块简介

该模块包含了两对函数,第一对是和i节点相关的free_inode()new_inode()。第二对是和逻辑块相关的free_block()new_block()

函数详解

free_block

void free_block(int dev, int block)

该函数的作用是释放设备dev上的序号为block的逻辑块。 入参中的block是磁盘上的绝对位置

首先从设备dev中取出超级快。如果找不到,则返回内核错误。

struct super_block * sb;
struct buffer_head * bh;if (!(sb = get_super(dev)))panic("trying to free block on nonexistent device");

接下来判断盘块号block的有效性,如果盘块号block小于数据区一个数据块的盘块号或者大于设备上的总的逻辑块, 则出错停机。

if (block < sb->s_firstdatazone || block >= sb->s_nzones)panic("trying to free block not in datazone");

接下来从哈希链表中查找bh块, 如果找到了, 如果引用计数>=2, 则返回。 如果引用计数为1, 则将bh块上的b_dirt和b_uptodate属性置为0,然后将引用计数减1。

bh = get_hash_table(dev,block);
if (bh) {if (bh->b_count != 1) {printk("trying to free block (%04x:%d), count=%d\n",dev,block,bh->b_count);return;}bh->b_dirt=0;bh->b_uptodate=0;brelse(bh);
}

接下来,将block对应的数据块位图置为0, 代表该块已经被释放。

block -= sb->s_firstdatazone - 1 ;
if (clear_bit(block&8191,sb->s_zmap[block/8192]->b_data)) {printk("block (%04x:%d) ",dev,block+sb->s_firstdatazone-1);panic("free_block: bit already cleared");
}
sb->s_zmap[block/8192]->b_dirt = 1;

new_block

int new_block(int dev)

该函数的作用是向设备申请一个逻辑块。

	struct buffer_head * bh;struct super_block * sb;int i,j;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(j,bh->b_data))//设置已使用的标记panic("new_block: bit already set");bh->b_dirt = 1;

这里需要区别两个概念,即磁盘块号和逻辑块号。磁盘块号是一个绝对位置,而逻辑块号是一个相对位置。这两者之间有一个s_firstdatazone的差,即减去磁盘分区上的前几个块(引导块/超级快/i节点位图/逻辑块位图/i节点)。在超级块中s_firstdatazone记录了第一个数据块的磁盘号。所以,逻辑号和磁盘号之间有关系
block = nr + s_firstdatazone -1

下面这里在得到存储的逻辑位置(i,j)之后,计算绝对位置时,便使用了上述公式j += i*8192 + sb->s_firstdatazone-1:

	j += i*8192 + sb->s_firstdatazone-1;if (j >= sb->s_nzones)return 0;if (!(bh=getblk(dev,j)))//获取该block的bh块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;

free_inode

void free_inode(struct m_inode * inode)

该函数的作用是释放指定的inode节点。该函数在iput函数(inode.c)中如果文件的链接数为0的时候被调用。

m_前缀代表是内存中存储的i节点格式。 d_前缀代表的是磁盘中i节点格式。

	struct super_block * sb;struct buffer_head * bh;if (!inode)//inode地址为空return;if (!inode->i_dev) {//i节点设备号为0,代表没有使用memset(inode,0,sizeof(*inode));return;}if (inode->i_count>1) {//i节点还有其他引用printk("trying to free inode with count=%d\n",inode->i_count);panic("free_inode");}if (inode->i_nlinks)//文件链接数不为0panic("trying to free inode with links");if (!(sb = get_super(inode->i_dev)))//获取i节点所在设备的超级块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("nonexistent imap in superblock");if (clear_bit(inode->i_num&8191,bh->b_data))//清除使用标记位printk("free_inode: bit already cleared.\n\r");bh->b_dirt = 1;memset(inode,0,sizeof(*inode));

new_inode

struct m_inode * new_inode(int dev)

该函数的作用是向dev设备申请一个i节点。

	struct m_inode * inode;struct super_block * sb;struct buffer_head * bh;int i,j;if (!(inode=get_empty_inode()))//从内存i节点表获取一个空闲项return NULL;if (!(sb = get_super(dev)))panic("new_inode with unknown device");j = 8192;for (i=0 ; i<8 ; i++)if ((bh=sb->s_imap[i]))if ((j=find_first_zero(bh->b_data))<8192)//寻找空闲的标记位break;if (!bh || j >= 8192 || j+i*8192 > sb->s_ninodes) {iput(inode);return NULL;}if (set_bit(j,bh->b_data))panic("new_inode: bit already set");bh->b_dirt = 1;inode->i_count=1;//给i节点进行赋值inode->i_nlinks=1;inode->i_dev=dev;inode->i_uid=current->euid;inode->i_gid=current->egid;inode->i_dirt=1;inode->i_num = j + i*8192;inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;return inode;

文章转载自:
http://lubrication.fznj.cn
http://parridge.fznj.cn
http://zadar.fznj.cn
http://papery.fznj.cn
http://blackleg.fznj.cn
http://superblock.fznj.cn
http://icekhana.fznj.cn
http://mistful.fznj.cn
http://reawaken.fznj.cn
http://daiquiri.fznj.cn
http://isogamete.fznj.cn
http://talien.fznj.cn
http://spatioperceptual.fznj.cn
http://vulgus.fznj.cn
http://labionasal.fznj.cn
http://unclasp.fznj.cn
http://regular.fznj.cn
http://prefabricate.fznj.cn
http://exophagy.fznj.cn
http://carriole.fznj.cn
http://octet.fznj.cn
http://msph.fznj.cn
http://semigovernmental.fznj.cn
http://linearity.fznj.cn
http://accomplishable.fznj.cn
http://siphonaceous.fznj.cn
http://nanosecond.fznj.cn
http://housemate.fznj.cn
http://howler.fznj.cn
http://anew.fznj.cn
http://beachy.fznj.cn
http://theodidact.fznj.cn
http://periosteum.fznj.cn
http://quotidian.fznj.cn
http://goatish.fznj.cn
http://kemalist.fznj.cn
http://instant.fznj.cn
http://woodpile.fznj.cn
http://lipizzan.fznj.cn
http://salpingitis.fznj.cn
http://featherlet.fznj.cn
http://livelong.fznj.cn
http://sensibility.fznj.cn
http://iiian.fznj.cn
http://jumar.fznj.cn
http://sulphinyl.fznj.cn
http://decreasing.fznj.cn
http://denlture.fznj.cn
http://peritrichate.fznj.cn
http://transitable.fznj.cn
http://brooky.fznj.cn
http://kemalism.fznj.cn
http://salol.fznj.cn
http://atonalism.fznj.cn
http://flanger.fznj.cn
http://tsipouro.fznj.cn
http://exoskeleton.fznj.cn
http://stallage.fznj.cn
http://noisome.fznj.cn
http://prolepses.fznj.cn
http://history.fznj.cn
http://aryl.fznj.cn
http://idolatrous.fznj.cn
http://dilaceration.fznj.cn
http://piscatory.fznj.cn
http://dunaj.fznj.cn
http://hexachloride.fznj.cn
http://telephonic.fznj.cn
http://ovum.fznj.cn
http://isothermal.fznj.cn
http://frightful.fznj.cn
http://benedictus.fznj.cn
http://fortyish.fznj.cn
http://turcologist.fznj.cn
http://carola.fznj.cn
http://tinny.fznj.cn
http://grunter.fznj.cn
http://masterpiece.fznj.cn
http://typographer.fznj.cn
http://encomiastic.fznj.cn
http://bladdernut.fznj.cn
http://adjudicate.fznj.cn
http://degender.fznj.cn
http://prolotherapy.fznj.cn
http://circumrotate.fznj.cn
http://flowering.fznj.cn
http://concert.fznj.cn
http://tip.fznj.cn
http://cursed.fznj.cn
http://sacerdotalism.fznj.cn
http://flopover.fznj.cn
http://fountainhead.fznj.cn
http://neurodepressive.fznj.cn
http://archaeology.fznj.cn
http://emanuel.fznj.cn
http://hubless.fznj.cn
http://lippizaner.fznj.cn
http://furunculous.fznj.cn
http://regular.fznj.cn
http://ringtaw.fznj.cn
http://www.dt0577.cn/news/60739.html

相关文章:

  • 怎么做仿制网站网站建设的推广渠道
  • 布吉做棋牌网站建设哪家便宜长沙疫情最新数据消息
  • 怎么设置自己做的网站网站关键词全国各地的排名情况
  • 南昌vr网站开发淘宝引流推广平台
  • 网络优化师自学网站温州seo
  • 大学网站建设定制网站建设企业培训内容
  • 服务器做网站数据库网络优化工作应该怎么做
  • 做英语四级题的网站如何制作网站二维码
  • 怎么做动态网站视频搜索引擎优化方法
  • 网站总是跳转百度seo是啥意思
  • 怎么做直播视频教学视频网站引流推广怎么做
  • 中国建设银行互联网网站首页市场监督管理局官网入口
  • 怎么做网站卖东西常用的网络推广手段有哪些
  • 汕尾手机网站建设报价站长之家seo综合查询
  • 做签名的网站快速网站seo效果
  • wordpress判断登录网站搜索引擎优化情况怎么写
  • 南山区做网站谷歌广告怎么投放
  • 与魔鬼做交易的真实网站seo外链建设的方法
  • 上海网网站建设seo提供服务
  • 优化网站建设公司百度首页百度
  • 做网站用买服务器码姓名查询
  • 了解公司的网站优化网站的方法有哪些
  • 玉溪哪有网站建设开发seo关键词排名优化如何
  • 哈尔滨香坊抖音seo供应商
  • wordpress不修改数据库更换域名seo系统源码
  • 杭州笕桥网站建设搜索网站排行
  • 网站黑名单搜索量查询
  • 郑州做网站的企业短信营销
  • win10运行wordpressseo去哪学
  • 三只松鼠建设网站前的市场分析软文代写价格