首先让大家了解下Unix操作系统中设备的知识,然后全面介绍Unix操作系统中设备功能分析,希望对大家对Unix操作系统的学习有所帮助。
设备分为面向块的设备和面向字符的设备,块的如磁盘、磁带等字符的如纸带输入/穿孔输出机、打印机等。块设备通过一层缓冲软件管理,字符设备通过字符缓冲实现。
块设备中存储的信息从Unix操作系统硬件组织上是有结构的,由若干固定大小的块所组成,信息的存取通常是以块为单位的,从块设备的用户方面看。
有三种用法:
(1)程序对换系统使用,它有自己的数据结构和管理程序。
(2)文件系统使用,为了有效支持文件系统,利用了多重缓冲技术。
(3)将磁盘当作字符设备来使用,从块设备管理系统的实现方式和程序组成看,可分为三个层次:***层为设备驱动程序,它的主要数据结构是磁盘的各种控制寄存器和设备表;第二层是缓冲区的管理,包括申请、释放、摘链、查链、清零、写回和初启,主要数据结构是15个缓冲首部和一个作为链头的缓冲首部,主要有文件系统使用。最上层是与使用方式有关的程序,相当于块设备与外部的接口。
Unix操作系统设备功能分析
块设备除了用作程序对换空间之外,主要用于Unix操作系统文件系统。为了克服慢速外部设备和快速处理机加工速度之间的不匹配问题。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设备申请缓冲区。
这样,我们对Unix操作系统的设备以及其功能分析就到这里了。谢谢大家的阅读。
【编辑推荐】