UNIX的缓冲区的管理机制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图5-10 设备buf队列
(3)空设备队列(NODEV队列)
NODEV队列是一个特殊的设备buf队列。当系统需要缓存,但它不与 特定的设备字符块相关联时,将分配到的缓存控制块buf送入NODEV队 列。其队列控制块也是bfreelist,用的指针是b_forw和b_back。
在UNIX中有两种情况将buf送入NODEV队列。 一种是在进程执行一个目标程序的开始阶段,它用缓存存放传向该目 标程序的参数; 另一种情况是用缓存存放文件系统的资源管理块。在系统初启时,所 有空闲缓冲区的buf既在自由buf队列,又在NODEV的设备buf队列中。
资料:朱晓科 p p t:卢毅 演示:辛一雄
1. Unix系统内核结构简介 2. 多种缓冲区管理队列 3. 字符设备缓冲区管理
4. 块设备缓冲区管理
UNIX系统分成四个层次。其中最低层是
硬件。次低层是OS核心。上面第二层是OS与用 户的接口Shell以及编译程序等。最高层是应 用程序。
在Unix系统中,不论是块设备缓冲区管理,
1.多种缓冲区管理队列
系统设置了多种队列对所有缓冲区进行管理, 因为buf记录了与缓冲区有关的各种管理信息,所 以缓冲区管理队列实际上是缓存控制块buf队列。
图5-9
自由buf 队列
(1)自由buf队列
系统把空闲缓冲区的buf组成空闲buf队列,即自由buf队列。这个队列 是双向链结构,队首块为bfreelist,bfreelist和自由buf通过av_forw和 av_back作为双向指针,见图5-9。
(2)设备缓冲区队列
设备缓冲区队列连接所有各类设备使用过的缓冲区,这也是一个双向队列, buf中的b_forw和b_back分别为该队列的前指针和后指针,头部为hbuf,共64个 队列。如图5-10所示。
一个缓冲区被分配用于读、写某个设备的字符块时,其相应的buf就进入该设 备的设备buf队列,并一直保留在该设备buf队列中,除非被移作它用。
时该队列空、或队列的最后一个缓冲区已满,且空闲字符缓冲区队列也空, 该过程无法将字符放入队列中,则返回“ -1 ”。
getcb过程 该过程用于从指定的设备字符缓冲区队列中,取出第一个缓冲区,并将
该队列的可用字符计数减去第一个缓冲区中的字符数,然后返回指向该缓冲 区的指针bp。若该缓冲区已是该队列中惟一的缓冲区,则置队尾指针为空。
还是字符设备缓冲区管理,都采用多缓冲技 术,其目的有两个:一是尽力提高CPU和I/O 设备的并行工作程度;二是力争提高文件系 统信息读写的速度和效率。Unix的块设备共 设立了15个512字节的缓冲区;字符设备共 设立了100个6字节的缓冲区。每类设备设计 了相应的数据结构以及缓冲区自动管理软件。
Home page
(4)设备I/O请求队列
每个块设备有一个设备I/O请求队列,单向连接,头部为iobuf,b_actf 和b_actl分别指向队首和队尾。
Home page
1、空闲字符缓冲区队列
空闲字符缓冲区队列
2、空闲字符缓冲区的分配与回收
在字符设备进行I/O时,内核可利用getcf过程从 空闲字符缓冲区队列中取得一个空闲缓冲区,若 队列空,表明已无空闲缓冲区可提供,便返回; 否则,从队首取得一个空闲缓冲区,并把指向该 缓冲区的指针bp返回给调用者。由于空闲缓冲区 队列属于临界资源,故还须采取互斥访问措施, 在过程开始处,将处理机的优先级提升为6,在 取得空缓冲区之后,再恢复处理机的优先级。
putcb过程 该过程用于将由bp所指向的缓冲区放入指定的设备字符缓冲区队列的
末尾,然后将该队列的可用字符计数加上bp缓冲区中的字符数后返回。
Home page
1、盘块缓冲区及其首部 2、盘块缓冲池结构
缓冲首部
空闲队列 ( 链 ) 及散列队列 Home page
Home page
来自百度文库
3、设备的字符缓冲区队列
getc过程 该过程用于从一个clist结构的队首指针所指示的字符缓冲队列中,取出
为首的字符, 然后修改该队列的可用字符计数和队首指针。当取完一个 缓冲区中的所有字符时,将释 放该缓冲区。该过程的返回值是取出的字符。
putc过程 该过程用于将一个字符C放入设备的指定字符缓冲区队列的末尾。若此
相关文档
最新文档