首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > Linux > UNIX设备管理分析
【标  题】:UNIX设备管理分析
【关键字】:UNIX
【来  源】:BLOG.CSDN.NET

UNIX设备管理分析

UNIX设备管理分析

      ——块设备管理之getblk( )

作者:张金良  周中新  刘浩   (南京审计学院计算机系02291班)   

 指导教师:江效尧

 

[摘要]  UNIX系统的缓冲区管理是块设备管理的第二层,包括申请、释放、摘链、查链、清0、写回和初启,通过getblk()函数实现申请一块指定设备、块号的缓冲。

 

[ summary]  UNIX system buffer area the management is an equipments second floor that manage, include the application, release, take off the chain, check the chain , pure zero, write back with the early start , and pass the getblk() function to realize the application a cake of to specify the equipments, piece the number's buffer.

 

[关键字] Unix操作系统、块设备、缓冲区

 

[key word]  Unix operate system, piece equipments, buffer area

 

一、       概述

      设备分为面向块的设备和面向字符的设备,块的如磁盘、磁带等字符的如纸带输入/穿孔输出机、打印机等。块设备通过一层缓冲软件管理,字符设备通过字符缓冲实现。

      块设备中存储的信息从硬件组织上是有结构的,由若干固定大小的块所组成,信息的存取通常是以块为单位的,从块设备的用户方面看,有三种用法:(1)程序对换系统使用,它有自己的数据结构和管理程序。(2)文件系统使用,为了有效支持文件系统,利用了多重缓冲技术。(3)将磁盘当作字符设备来使用,从块设备管理系统的实现方式和程序组成看,可分为三个层次:最低层为设备驱动程序,它的主要数据结构是磁盘的各种控制寄存器和设备表;第二层是缓冲区的管理,包括申请、释放、摘链、查链、清零、写回和初启,主要数据结构是15个缓冲首部和一个作为链头的缓冲首部,主要有文件系统使用。最上层是与使用方式有关的程序,相当于块设备与外部的接口。

二、 功能分析

块设备除了用作程序对换空间之外,主要用于文件系统。为了克服慢速外部设备和快速处理机加工速度之间的不匹配问题。Unix采用了多重缓冲技术,以便给文件系统以有效的服务,为此系统维持了一个缓冲池,内含15个缓冲,这些缓冲起着虚拟存储器的作用,而getblk函数正是为了申请一块指定设备,块号的缓冲,其主要应用于:

1系统调用exec())执行一个文件,为将要执行的文件申请新的缓冲。

2进程的自我终止exit()),getblk为将要终止的进程查找相应的缓冲。

3读一块到缓冲(bread()),为其申请一块缓冲。

4读当前块到缓冲,再预读一块(breada()),为将要读的块申请缓冲。

5从空闲盘区链中获得一空闲盘块(alloc()),函数根据分配到的盘块号申请一缓冲区。

6将释放的盘块号记入专用的空闲块栈中(free()),申请一缓冲区,将空闲块栈中的信息复制到该缓冲区中。

7文件系统初启(iinit()),申请一块不与任何设备有联系的内存专用区,存放专用块。

8完成转储任务(update())为superblock复制回文件卷而申请缓冲区。

9系统文件卷的安装(smount()),为存储文件卷的superblock申请缓冲区。

10把文件复制到I/O缓冲区然后再记到外存(writei()),为I/O设备申请缓冲区。

三、数据结构分析

1缓冲部首:系统为每个缓冲提供了一个缓冲控制块,称缓冲部首。其中保留对应缓冲的地址,对应的设备名,使用情况等定义为char  buffers[NBUF][514];(NBF=15)

缓冲部首说明如下:

struct  buf

{  int   b_flags  ;           //标志字位串

   struct  buf*b_forw;        //设备(b)链向前指针

   struct  buf*b_back;        //设备(b)链向后指针

struct  buf*av_forw;       //空闲(av)链向前指针

struct  buf*av_back;       //空闲(av)链向后指针

int     b_dev;             //设备名

int     b-wcount;          //传送字数(二进制补码)

char  * b_addr;            //内存地址低16

char  * b_xmem;            //内存地址高16

char  * b_blkno;           //设备上的物理块号

char  * b_error;           //返回I/0出错信息

char  * b_resid;           //因出错而未传送的剩余字数

}  buf[NBUF];

为了有效地管理这些缓冲,对应的缓冲部首连人到两个双向链中,一个是设备链,或简称b,它把一类设备所用的所有缓冲连接起来。另一个是空闲链,或简称av,它把系统中所有未用的缓冲连接起来,包括已属于某设备的b链中的缓冲。

2设备名:

struct{ char  d_minor (次设备号)

        char  d_major (主设备号)

       };

设备名的高字节存设备类型号d_major,也叫设备号,表示某一类设备,同类设备使用相同的驱动程序,低字节存设备号d_minor,也叫次设备号,表示某类设备的第几台设备。

3块设备表:

含有该类设备的状态信息、IO队列头尾指针和上面提到的该类设备的b链头尾指针。

设备表说明如下:

struct  devtab

{ char  d_active;               //忙闲标志

char  d_errent;               //出错重试次数

struct *buf b_forw;           //b链链头指针向前指针

struct *buf b_back;           //b链链头指针向后指针

 

struct *buf d_actf;           //IO队列头指针

struct *buf d_act1;           //IO队列尾指针

};

4块设备开关:每类设备自己的管理程序

struct  bdevsw

{ int (*d_open) ( );            //打开子程序入口地址

int (*d_close) ( );           //关闭子程序入口地址

int (*d_strategy) ( );        //启动子程序入口地址

int *d_tab                    //对应设备表地址(devtab)

} bdevsw;

5bfreelist:av链的链头,用了buf中的四个指针。但b_forwb_back指向的b链不与任何设备相连系。

swbuf:专门用于程序对换。

rrkbuf:专门用于原始磁盘操作。

 

如图所示(下页):(缓冲区本身略去)

图示

dev=0 Busy=0

swbuf

dev=-1 Busy=0

 

 

 

 

 

dev=-1 Busy=1

 

 

 

 

 

 

 

 

 

d_close

d_strategy

d_tab

r ktab

linux相关的资源[不断更新]:【上一篇】
Java Mail API:【下一篇】
【相关文章】
  • 《模拟UNIX文件系统的设计及实现》
  • 在UNIX上安装MySQL
  • 利用Oracle数据库存储和分析Unix操作系统的性能
  • UNIX oracle 10g能用utl_file包读取文件数据吗
  • Unix常用手工入侵检测方法与命令
  • Unix平台上服务器端软件主站点一览表
  • AIX操作系统使用心得-中国UNIX用户协会推荐
  • FreeBSD连载(63):集成Unix和Windows的方式
  • FreeBSD handbook中文版 3 Unix 基础
  • 送给FreeBSD和UNIX的初学者
  • 【随机文章】
  • 用FW制作仿真软盘效果
  • 系统超级用户口令的恢复
  • 我的处女Python作: 下载英文字体
  • 如何为普通用户分配特权
  • 软件集锦
  • 给自定义Control加上SnapLine(VS2005新特性)
  • 网页播放技术的基本原理
  • 簡單的讀寫文件的速度——讀創建臨時文件速度
  • 全国计算机等级考试二级Java考试大纲
  • 时间和性能
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.