Linux编程成组链接法实现,计算机操作系统第5.6章

第五章 设备管理

1.I/O系统

1.1、I/O设备

1.1.1 I/O设备的类型

f78799316410

1.1.2 设备与控制器之间的接口

设备并不直接与CPU通信,而是与设备控制器通信。

f78799316410

1.2、设备控制器

1.2.1 设备控制器的基本功能

①接收和识别命令:控制寄存器、命令译码器

②数据交换:CPU---(数据总线)---设备控制器(数据寄存器)------I/O设备

③标识和报告设备的状态:状态寄存器

④地址识别:地址译码器

⑤数据缓冲

⑥差错控制

1.2.2 设备控制器的组成

①设备控制器与处理机的接口:该接口用于实现CPU 与设备控制器之间的通信。共有三类信号线: 数据线、地址线和控制线。数据线通常与两类寄存器相连接,第一类是数据寄存器(在控制器中可以有一个或多个数据寄存器,用于存放从设备送来的数据(输入)或从CPU 送来的数据(输出));第二类是控制/状态寄存器(在控制器中可以有一个或多个这类寄存器,用于存放从CPU 送来的控制信息或设备的状态信息)。

②设备控制器与设备的接口:在一个设备控制器上,可以连接一个或多个设备。相应地,在控制器中便有一个或多个设备接口,一个接口连接一台设备。在每个接口中都存在数据、控制和状态三种类型的信号。控制器中的I/O 逻辑根据处理机发来的地址信号去选择一个设备接口。

③I/O 逻辑:在设备控制器中的I/O 逻辑用于实现对设备的控制。它通过一组控制线与处理机交互,处理机利用该逻辑向控制器发送I/O 命令;I/O 逻辑对收到的命令进行译码。每当CPU要启动一个设备时,一方面将启动命令发送给控制器;另一方面又同时通过地址线把地址发送给控制器,由控制器的I/O 逻辑对收到的地址进行译码,再根据所译出的命令对所选设备进行控制。

f78799316410

1.3、I/O通道

I/O 通道是一种特殊的处理机,它具有执行I/O 指令的能力,并通过执行通道(I/O)程序来控制I/O 操作。但I/O 通道又与一般的处理机不同,主要表现在以下两个方面: 一是其指令类型单一,这是由于通道硬件比较简单,其所能执行的命令主要局限于与I/O 操作有关的指令;二是通道没有自己的内存,通道所执行的通道程序是放在主机的内存中的,换言之,是通道与CPU共享内存。

f78799316410

1.4、总线系统

f78799316410

2 I/O控制方式

程序I/O方式(轮询)

中断I/O控制方式

直接存储器访问(DMA)I/O控制方式

I/O通道控制方式

f78799316410

3.缓冲管理

3.1、目的

为了缓和CPU与I/O 设备速度不匹配的矛盾,减少对CPU的中断频率,提高CPU和I/O 设备的并行性,在现代操作系统中,几乎所有的I/O 设备在与处理机交换数据时都用了缓冲区(内存中)。缓冲管理的主要职责是组织好这些缓冲区,并提供获得和释放缓冲区的手段。

3.2、实现方式

1)单缓冲   2)双缓冲

f78799316410

f78799316410

f78799316410

4.I/O软件

4.1、分层

f78799316410

4.2、中断处理程序

处理步骤:

1.唤醒被阻塞的驱动(程序)进程

当中断处理程序开始执行时,首先去唤醒处于阻塞状态的驱动(程序)进程。

2.保护被中断进程的CPU 环境

通常由硬件自动将处理机状态字PSW 和程序计数器(PC)中的内容,保存在中断保留区(栈)中,然后把被中断进程的CPU现场信息(即包括所有的CPU寄存器,如通用寄存器、段寄存器等内容)都压入中断栈中,因为在中断处理时可能会用到这些寄存器。

3.转入相应的设备处理程序

由处理机对各个中断源进行测试,以确定引起本次中断的I/O 设备,并发送一应答信号给发出中断请求的进程,使之消除该中断请求信号,然后将相应的设备中断处理程序的入

口地址装入到程序计数器中,使处理机转向中断处理程序。

4.中断处理

5.恢复被中断进程的现场

当中断处理完成以后,便可将保存在中断栈中的被中断进程的现场信息取出,并装入到相应的寄存器中,其中包括该程序下一次要执行的指令的地址N+1、处理机状态字PSW,以及各通用寄存器和段寄存器的内容。这样,当处理机再执行本程序时,便从N+1处开始,最终返回到被中断的程序。

f78799316410

4.3、设备驱动程序

1. 设备驱动程序的特点

(1) 驱动程序主要是指在请求I/O 的进程与设备控制器之间的一个通信和转换程序。

(2) 驱动程序与设备控制器和I/O 设备的硬件特性紧密相关,因而对不同类型的设备应配置不同的驱动程序。

(3) 驱动程序与I/O 设备所采用的I/O 控制方式紧密相关。常用的I/O 控制方式是中断驱动和DMA方式,这两种方式的驱动程序明显不同,因为后者应按数组方式启动设备及进行中断处理。

(4) 由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言书写。目前有很多驱动程序的基本部分,已经固化在ROM中。

(5) 驱动程序应允许可重入。。一个正在运行的驱动程序常会在一次调用完成前被再次调用。例如,网络驱动程序正在处理一个到来的数据包时,另一个数据包可能到达。

(6) 驱动程序不允许系统调用。但是为了满足其与内核其它部分的交互,可以允许对某些内核过程的调用,如通过调用内核过程来分配和释放内存页面作为缓冲区,以及调用其它过程来管理MMU定时器、DMA控制器、中断控制器等。

2. 设备驱动程序的处理过程

不同类型的设备应有不同的设备驱动程序,但大体上它们都可以分成两部分,其中,除了要有能够驱动I/O 设备工作的驱动程序外,还需要有设备中断处理程序,以处理I/O 完成后的工作。

1) 将抽象要求转换为具体要求

2) 检查I/O 请求的合法性

3) 读出和检查设备的状态

4) 传送必要的参数

5) 工作方式的设置

6) 启动I/O 设备

4.4、设备独立性软件

单用户系统中的LUT:由于系统中所有进程的设备分配情况都记录在同一张LUT中,因而不允许在LUT中具有相同的逻辑设备名,这就要求所有用户都不使用相同的逻辑设备名。

f78799316410

多用户系统中的LUT:为每个用户设置一张LUT。每当用户登录时,便为该用户建立一个进程,同时也为之建立一张LUT,并将该表放入进程的PCB 中。

f78799316410

4.5、用户层的I/O软件

5.设备分配

涉及的数据结构

f78799316410

设备控制表

f78799316410

f78799316410

f78799316410

设备分配

1. 根据逻辑设备名查找SDT,找出该设备的DCT,分配设备

2. 根据DCT找出COCT,分配设备控制器

3. 根据COCT找出CHCT,分配通道

SPOOLing技术

组成:

(1) 输入井和输出井。这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/O 设备输入的数据;输出井是模拟脱机输出时的磁盘,用于暂存用

户程序的输出数据。

(2) 输入缓冲区和输出缓冲区。为了缓和CPU 和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区:输入缓冲区和输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。

(3) 输入进程SPi和输出进程SPo。这里利用两个进程来模拟脱机I/O 时的外围控制机。其中,进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区

再送到输入井,当CPU 需要输入数据时,直接从输入井读入内存;进程SPo模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上。

f78799316410

6 磁盘存储器的管理

f78799316410

磁盘的格式化

为了在磁盘上存储数据,必须先将磁盘低级格式化。每个扇区容量为 600 个字节,其中512 个字节存放数据,其余的用于存放控制信息。磁盘格式化完成后,一般要对磁盘分区。在逻辑上,每个分区就是一个独立的逻辑磁盘。每个分区的起始扇区和大小都记录在磁盘0 扇区的主引导记录分区表所包含的分区表中。在这个分区表中必须有一个分区被标记成活动的,以保证能够从硬盘引导系统。但是,在真正可以使用磁盘前,还需要对磁盘进行一次高级格式化,即设置一个引导块、空闲存储管理、根目录和一个空文件系统,同时在分区表中标记该分区所使用的文件系统。

磁盘访问时间

1)寻道时间:这是指把磁臂(磁头)移动到指定磁道上所经历的时间。

2)旋转延迟时间:这是指定扇区移动到磁头下面所经历的时间。

3)传输时间:这是指把数据从磁盘读出或向磁盘写入数据所经历的时间。

在访问时间中,寻道时间和旋转延迟时间基本上都与所读/写数据的多少无关,而且它通常占据了访问时间中的大头。

磁盘调度

目标:当有多个进程都要求访问磁盘时,应采用一种最佳调度算法,以使各进程对磁盘的平均访问时间最小。磁盘调度的目标是使磁盘的平均寻道时间最少。

算法:

1. 先来先服务(FCFS)

2. 最短寻道时间优先

3. 扫描算法

4. 循环扫描算法

磁盘高速缓存(Cached)

概念:利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。是一组在逻辑上属于磁盘,而物理上是驻留在内存中的盘块。

高速缓存在内存中分为两种形式:

1. 在内存中开辟一个单独的存储空间来作为磁盘高速缓存,其大小是固定的,不会受应用程序多少的影响;

2. 把所有未利用的内存空间变为一个缓冲池,供请求分页系统和磁盘I/O 时(作为磁盘高速缓存)共享。此时,高速缓存的大小显然不再是固定的。当磁盘I/O 的频繁程度较高时,该缓冲池可能包含更多的内存空间;而在应用程序运行得较多时,该缓冲池可能只剩下较少的内存空间。

高速缓存的数据交付方式:数据交付(Data Delivery)是指将磁盘高速缓存中的数据传送给请求者进程。当有一进程请求访问某个盘块中的数据时,由核心先去查看磁盘高速缓冲器,看其中是否存在进程所需访问的盘块数据的拷贝。若有其拷贝,便直接从高速缓存中提取数据交付给请求者进程,否则,应先从磁盘中将所要访问的数据读入并交付给请求者进程,同时也将数据送高速缓存。

1. 数据交付

2. 指针交付

置换算法:

如同请求调页(段)一样,在将磁盘中的盘块数据读入高速缓存时,同样会出现因高速缓存中已装满盘块数据而需要将该数据先换出的问题。

周期性的写回磁盘:

在UNIX 系统中专门增设了一个修改(update)程序,使之在后台运行,该程序周期性地调用一个系统调用SYNC。该调用的主要功能是强制性地将所有在高速缓存中已修改的盘块数据写回磁盘。一般是把两次调用SYNC的时间间隔定为30 s。这样,因系统故障所造成的工作损失不会超过30 s的劳动量。

提高磁盘I/O速度的其他方法

1. 提前读

用户(进程)对文件进行访问时,经常采用顺序访问方式,即顺序地访问文件各盘块的数据。在这种情况下,在读当前块时可以预知下一次要读的盘块。因此,可以采取预先读方式,即在读当前块的同时,还要求将下一个盘块(提前读的块)中的数据也读入缓冲区。这样,当下一次要读该盘块中的数据时,由于该数据已被提前读入缓冲区,因而此时便可直接从缓冲区中取得下一盘块的数据,而不需再去启动磁盘I/O,从而大大减少了读数据的时间。这也就等效于提高了磁盘I/O 的速度。

2. 延迟写

延迟写是指在缓冲区A中的数据,本应立即写回磁盘,但考虑到该缓冲区中的数据在不久之后可能还会再被本进程或其它进程访问(共享资源),因而并不立即将该缓冲区A 中的数据写入磁盘,而是将它挂在空闲缓冲区队列的末尾。随着空闲缓冲区的使用,缓冲区也缓缓往前移动,直至移到空闲缓冲队列之首。当再有进程申请到该缓冲区时,才将该缓冲区中的数据写入磁盘,而把该缓冲区作为空闲缓冲区分配出去。当该缓冲区A仍在队列中时,任何访问该数据的进程,都可直接读出其中的数据而不必去访问磁盘。这样,又可进一步减小等效的磁盘I/O时间。

3. 优化物理块的分布

另一种提高磁盘I/O 速度的重要措施是优化文件物理块的分布,使磁头的移动距离最小。

4. 虚拟盘

所谓虚拟盘,是指利用内存空间去仿真磁盘,又称为RAM 盘。该盘的设备驱动程序也可以接受所有标准的磁盘操作,但这些操作的执行,不是在磁盘上而是在内存中。

虚拟盘与磁盘高速缓存的主要区别在于: 虚拟盘中的内容完全由用户控制,而高速磁盘缓存中的内容则是由OS 控制的。例如,RAM 盘在开始时是空的,仅当用户(程序)在RAM 盘中创建了文件后,RAM 盘中才有内容。

廉价冗余磁盘阵列(RAID)

概念:利用一台磁盘阵列控制器,来统一管理和控制一组(几台到几十台)磁盘驱动器,组成一个高度可靠的、快速的大容量磁盘系统。

并行交叉存储

在该系统中,有多台磁盘驱动器,系统将每一盘块中的数据分为若干个子盘块数据,再把每一个子盘块的数据分别存储到各个不同磁盘中的相同位置上。在以后,当要将一个盘块的数据传送到内存时,采取并行传输方式,将各个盘块中的子盘块数据同时向内存中传输,从而使传输时间大大减少。例如,在存放一个文件时,可将该文件中的第一个数据子块放在第一个磁盘驱动器上;将文件的第二个数据子块放在第二个磁盘上;……;将第N 个数据子块,放在第N个驱动器上。以后在读取数据时,采取并行读取方式,即同时从第1~N个数据子块读出数据,这样便把磁盘I/O 的速度提高了N-1 倍。

f78799316410

RAID的分级

(1) RAID 0级。本级仅提供了并行交叉存取。它虽能有效地提高磁盘I/O 速度,但并无冗余校验功能,致使磁盘系统的可靠性不好。只要阵列中有一个磁盘损坏,便会造成不弥补的数据丢失,故较少使用。

(2) RAID 1级。它具有磁盘镜像功能,例如,当磁盘阵列中具有8 个盘时,可利用其中4 个作为数据盘,另外4 个作为镜像盘,在每次访问磁盘时,可利用并行读、写特性,将数据分块同时写入主盘和镜像盘。故其比传统的镜像盘速度快,但其磁盘容量的利用率只有50%,它是以牺牲磁盘容量为代价的。

(3) RAID 3级。这是具有并行传输功能的磁盘阵列。它利用一台奇偶校验盘来完成数据的校验功能,比起磁盘镜像,它减少了所需要的冗余磁盘数。例如,当阵列中只有7 个盘时,可利用6 个盘作数据盘,一个盘作校验盘。磁盘的利用率为6/7。RAID 3级经常用于科学计算和图像处理。

(4) RAID 5级。这是一种具有独立传送功能的磁盘阵列。每个驱动器都各有自己独立的数据通路,独立地进行读/写,且无专门的校验盘。用来进行纠错的校验信息,是以螺旋(Spiral)方式散布在所有数据盘上。RAID 5级常用于I/O 较频繁的事务处理中。

第六章 文件管理

1.文件和文件系统

文件系统的结构,是由文件管理部分和操作系统I/O部分组成的。

文件管理部分:操作系统内存中的文件对象,并按文件的逻辑格式将对文件对象的操作转化成对文件块的操作。

操作系统I/O部分:负责内存中的物理块与物理磁盘中的数据交换。

文件分类

通常,文件是由一系列的记录组成的。文件系统设计的关键要素,是指将这些记录构成一个文件的方法,以及将一个文件存储到外存上的方法。

文件的逻辑结构

这是从用户观点出发所观察到的文件组织形式,是用户可以直接处理的数据及其结构,它独立于文件的物理特性,又称为文件组织(FileOrganization)。

例如,用户创建的txt、cpp、word、excel、ppt等,都属于文件的逻辑结构。

①无结构文件:字符流,又称流式文件。--源程序、可执行文件、库函数等

②有结构文件:由若干个相关记录组成,又称记录型文件,如下图。--数据结构、数据库等

f78799316410

文件的物理结构

又称文件的存储结构,指文件在外存上的存储组织形式。这不仅与存储介质的存储性能有关,而且与所采用的外存分配方式有关。

例如,采用FAT32、NTFS、EXT3、EXT4、Linux swap等,都属于文件的物理结构。

文件系统模型

文件系统管理的对象有:①文件;②目录;③磁盘空间;

模型层次图:

f78799316410

文件的逻辑结构

分类

1. 记录型文件,按记录的组织方式可分为:

①顺序文件

顺序文件中记录的排序方式:

1)串结构,各记录之间的顺序与关键字无关,通常由时间决定。----每次检索必须从头开始。

2)顺序结构,所有记录按关键字排序。----采用折半查找、插值查找、跳步查找等来提高检索效率。

f78799316410

②索引文件

定长记录文件----顺序存取方便、直接存取方便

变长记录文件----顺序存取方便、直接存取困难

为变长记录文件建立一张索引表,对主文件中的每个记录,在索引表中设有一个相应的表项,用于记录该记录的长度L及指向该记录的指针(指向该记录在逻辑地址空间的首址)。由于索引表是按记录键排序的,因此,索引表本身是一个定长记录的顺序文件,从而也就可以方便地实现直接存取。

f78799316410

③索引顺序文件

索引顺序文件(Index Sequential File)可能是最常见的一种逻辑文件形式。它有效地克服了变长记录文件不便于直接存取的缺点,而且所付出的代价也不算太大。它将顺序文件中的所有记录分为若干个组(例如,50 个记录为一个组);为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有该记录的键值和指向该记录的指针。

f78799316410

④直接文件

根据给定的记录键值,直接获得指定记录的物理地址。换言之,记录键值本身就决定了记录的物理地址。这种由记录键值到记录物理地址的转换被称为键值转换(Key to addresstransformation)。

⑤哈希文件

目前应用最广的一种直接文件。它利用Hash 函数(或称散列函数),可将记录键值转换为相应记录的地址。但为了能实现文件存储空间的动态分配,通常由Hash函数所求得的并非是相应记录的地址,而是指向一目录表相应表目的指针,该表目的内容指向相应记录所在的物理块,如下图所示。例如,若令K为记录键值,用A作为通过Hash函数H 的转换所形成的该记录在目录表中对应表目的位置,则有关系A=H(K)。通常,把Hash函数作为标准函数存于系统中,供存取文件时调用。

f78799316410

2. 流式文件

其长度以字节为单位。对流式文件的访问,则是采用读/写指针来指出下一个要访问的字符。可以把流式文件看做是记录式文件的一个特例。在UNIX 系统中,所有的文件都被看做是流式文件,即使是有结构文件,也被视为流式文件,系统不对文件进行格式处理。

文件的外存分配方式

对换空间的管理:具有对换功能的OS中,将外存分为文件区(用于存放文件)和对换区(用于存放从内存中换出的进程)。由于通常的文件都是较长久的驻留在外存上,故对文件区管理的主要目标,是提高文件存储空间的利用率。为此,对文件区采取离散分配方式。然而,进程在对换区中驻留的时间是短暂的,对换操作又较频繁,故对对换空间(swap分区)管理的主要目标,是提高进程换入和换出的速度。为此,采取的是连续分配方式,较少考虑外存中的碎片问题。

连续分配

1、连续分配(Continuous Allocation)要求为每一个文件分配一组相邻接的盘块。一组盘块的地址定义了磁盘上的一段线性地址。

2、物理结构:顺序式。

3、如同内存的动态分区分配一样,随着文件建立时空间的分配和文件删除时空间的回收,将使磁盘空间被分割成许多小块,这些较小的连续区已难于用来存储文件,此即外存的碎片。同样,我们也可以利用紧凑的方法,将盘上所有的文件紧靠在一起,把所有的碎片拼接成一大片连续的存储空间。

f78799316410

链接分配

1、分类:

①隐式链接

在采用隐式链接分配方式时,在文件目录的每个目录项中,都须含有指向链接文件第一个盘块和最后一个盘块的指针。

隐式链接分配方式的主要问题在于:它只适合于顺序访问,它对随机访问是极其低效的。

②显式链接----FAT/NTFS

把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。该表在整个磁盘仅设置一张。表的序号是物理盘块号,从0 开始,直至N-1;N为盘块总数。在每个表项中存放链接指针,即下一个盘块号。在该表中,凡是属于某一文件的第一个盘块号,或者说是每一条链的链首指针所对应的盘块号,均作为文件地址被填入相应文件的FCB 的“物理地址”字段中。由于查找记录的过程是在内存中进行的,因而不仅显著地提高了检索速度,而且大大减少了访问磁盘的次数。由于分配给文件的所有盘块号都放在该表中,故把该表称为文件分配表FAT(File Allocation Table)。

2、物理结构:链接式。

扇区(盘块):512B

簇:2n个连续的扇区

索引分配

为每个文件分配一个索引块(表),再把分配给该文件的所有盘块号都记录在该索引块中,因而该索引块就是一个含有许多盘块号的数组。在建立一个文件时,只需在为之建立的目录项中填上指向该索引块的指针。

1、分类:

①单级索引分配;②多级索引分配;③混合索引分配;

f78799316410

2.目录管理

文件控制块和索引结点

为了能对一个文件进行正确的存取,必须为文件设置用于描述和控制文件的数据结构,称之为“文件控制块(FCB)”。文件管理程序可借助于文件控制块中的信息,对文件施以各种操作。文件与文件控制块一一对应,而人们把文件控制块的有序集合称为文件目录,即一个文件控制块就是一个文件目录项。通常,一个文件目录也被看做是一个文件,称为目录文件。

文件控制块

为了能对系统中的大量文件施以有效的管理,在文件控制块中,通常应含有三类信息,即基本信息、存取控制信息及使用信息。

1) 基本信息类

基本信息类包括: ① 文件名,指用于标识一个文件的符号名。在每个系统中,每一个文件都必须有惟一的名字,用户利用该名字进行存取。② 文件物理位置,指文件在外存上的存储位置,它包括存放文件的设备名、文件在外存上的起始盘块号、指示文件所占用的盘块数或字节数的文件长度。③ 文件逻辑结构,指示文件是流式文件还是记录式文件、记录数;文件是定长记录还是变长记录等。④ 文件的物理结构,指示文件是顺序文件,还是链接式文件或索引文件。

2) 存取控制信息类

存取控制信息类包括:文件主的存取权限、核准用户的存取权限以及一般用户的存取权限。

3) 使用信息类

使用信息类包括: 文件的建立日期和时间、文件上一次修改的日期和时间及当前使用信息(这项信息包括当前已打开该文件的进程数、是否被其它进程锁住、文件在内存中是否已被修改但尚未拷贝到盘上)。应该说明,对于不同OS 的文件系统,由于功能不同,可能只含有上述信息中的某些部分。

索引结点

1) 索引结点的引入

文件目录通常是存放在磁盘上的,当文件很多时,文件目录可能要占用大量的盘块。在查找目录的过程中,先将存放目录文件的第一个盘块中的目录调入内存,然后把用户所给定的文件名与目录项中的文件名逐一比较。若未找到指定文件,便再将下一个盘块中的目录项调入内存。稍加分析可以发现,在检索目录文件的过程中,只用到了文件名,仅当找到一个目录项(即其中的文件名与指定要查找的文件名相匹配)时,才需从该目录项中读出该文件的物理地址。而其它一些对该文件进行描述的信息,在检索目录时一概不用。显然,这些信息在检索目录时不需调入内存。为此,在有的系统中,如UNIX 系统,便采用了把文件名与文件描述信息分开的办法,亦即,使文件描述信息单独形成一个称为索引结点的数据结构,简称为i结点。在文件目录中的每个目录项仅由文件名和指向该文件所对应的i 结点的指针所构成。

f78799316410

2) 磁盘索引结点

这是存放在磁盘上的索引结点。每个文件有惟一的一个磁盘索引结点,它主要包括以下内容:

(1) 文件主标识符,即拥有该文件的个人或小组的标识符。

(2) 文件类型,包括正规文件、目录文件或特别文件。

(3) 文件存取权限,指各类用户对该文件的存取权限。

(4) 文件物理地址,每一个索引结点中含有13 个地址项,即iaddr(0)~iaddr(12),它们以直接或间接方式给出数据文件所在盘块的编号。

(5) 文件长度,指以字节为单位的文件长度。

(6) 文件连接计数,表明在本文件系统中所有指向该(文件的)文件名的指针计数。

(7) 文件存取时间,指本文件最近被进程存取的时间、最近被修改的时间及索引结点最近被修改的时间。

3) 内存索引结点

这是存放在内存中的索引结点。当文件被打开时,要将磁盘索引结点拷贝到内存的索引结点中,便于以后使用。在内存索引结点中又增加了以下内容:

(1) 索引结点编号,用于标识内存索引结点。

(2) 状态,指示i结点是否上锁或被修改。

(3) 访问计数,每当有一进程要访问此i结点时,将该访问计数加1,访问完再减1。

(4) 文件所属文件系统的逻辑设备号。

(5) 链接指针。设置有分别指向空闲链表和散列队列的指针。

目录结构

f78799316410

f78799316410

f78799316410

目录查询技术

线性检索法

Hash方法

如果我们建立了一张Hash索引文件目录,便可利用Hash 方法进行查询,即系统利用用户提供的文件名并将它变换为文件目录的索引值,再利用该索引值到目录中去查找,这将显著地提高检索速度。顺便指出,在现代操作系统中,通常都提供了模式匹配功能,即在文件名中使用了通配符“*”、“?”等。对于使用了通配符的文件名,系统此时便无法利用Hash 方法检索目录,因此,这时系统还是需要利用线性查找法查找目录。

文件存储空间的管理

①首先,系统必须能记住存储空间的使用情况。为此,系统应为分配存储空间而设置相应的数据结构。

②其次,系统应提供对存储空间进行分配和回收的手段。(存储空间分配的基本单位都是盘块而非字节)

空闲表法

空闲表法属于连续分配方式,它与内存的动态分配方式雷同,它为每个文件分配一块连续的存储空间,即系统也为外存上的所有空闲区建立一张空闲表,每个空闲区对应于一个空闲表项,其中包括表项序号、该空闲区的第一个盘块号、该区的空闲盘块数等信息。再将所有空闲区按其起始盘块号递增的次序排列。

f78799316410

在内存分配上,虽然很少采用连续分配方式,然而在外存的管理中,由于这种分配方式具有较高的分配速度,可减少访问磁盘的I/O 频率,故它在诸多分配方式中仍占有一席之地。例如,在前面所介绍的对换方式中,对对换空间一般都采用连续分配方式。对于文件系统,当文件较小(1~4个盘块)时,仍采用连续分配方式,为文件分配相邻接的几个盘块;当文件较大时,便采用离散分配方式。

空闲链表法

①空闲盘块链。这是将磁盘上的所有空闲空间,以盘块为单位拉成一条链。

②空闲盘区链。这是将磁盘上的所有空闲盘区(每个盘区可包含若干个盘块)拉成一条链。

位示图法

位示图是利用二进制的一位来表示磁盘中一个盘块的使用情况。当其值为“0”时,表示对应的盘块空闲;为“1”时,表示已分配。有的系统把“0”作为盘块已分配的标志,把“1”作为空闲标志。磁盘上的所有盘块都有一个二进制位与之对应,这样,由所有盘块所对应的位构成一个集合,称为位示图。通常可用m × n 个位数来构成位示图,并使m × n等于磁盘的总块数,如图6-22 所示。

f78799316410

成组链接法

空闲表法和空闲链表法都不适用于大型文件系统,因为这会使空闲表或空闲链表太长。在UNIX 系统中采用的是成组链接法。

空闲盘块的组织

①空闲盘块号栈(只有一个,每一组的第一个盘块的S.free、S.free(0)~S.free(99)记录了下一组的盘块总数N和下一组所有的盘块号)用来存放当前可用的一组空闲盘块的盘块号(最多含100 个号),以及栈中尚有的空闲盘块号数N。顺便指出,N 还兼作栈顶指针用。例如,当N=100 时,它指向S.free(99)。由于栈是临界资源,每次只允许一个进程去访问,故系统为栈设置了一把锁。图6-23 左部示出了空闲盘块号栈的结构。其中,S.free(0)是栈底,栈满时的栈顶为S.free(99)。

②文件区中的所有空闲盘块被分成若干个组,比如,将每100 个盘块作为一组。假定盘上共有10 000 个盘块,每块大小为1 KB,其中第201~7999 号盘块用于存放文件,即作

为文件区,这样,该区的最末一组盘块号应为7901~7999;次末组为7801~7900……;第二组的盘块号为301~400;第一组为201~300,如图6-23右部所示。

③将每一组含有的盘块总数N 和该组所有的盘块号记入其前一组的第一个盘块的S.free(0)~S.free(99)中。这样,由各组的第一个盘块可链成一条链。

④将第一组的盘块总数和所有的盘块号记入空闲盘块号栈中,作为当前可供分配的空闲盘块号。

⑤最末一组只有99 个盘块,其盘块号分别记入其前一组的S.free(1) ~S.free(99)中,而在S.free(0)中则存放“0”,作为空闲盘块链的结束标志。(注:最后一组的盘块数应为99,

不应是100,因为这是指可供使用的空闲盘块,其编号应为(1~99),0号中放空闲盘块链的结尾标志。)

f78799316410

空闲盘块的分配与回收

当系统要为用户分配文件所需的盘块时,须调用盘块分配过程来完成。该过程首先检查空闲盘块号栈是否上锁,如未上锁,便从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格。若该盘块号已是栈底,即S.free(0),这是当前栈中最后一个可分配的盘块号。由于在该盘块号所对应的盘块中记有下一组可用的盘块号,因此,须调用磁盘读过程,将栈底盘块号所对应盘块的内容读入栈中,作为新的盘块号栈的内容,并把原栈底对应的盘块分配出去(其中的有用数据已读入栈中)。然后,再分配一相应的缓冲区(作为该盘块的缓冲区)。最后,把栈中的空闲盘块数减1 并返回。

在系统回收空闲盘块时,须调用盘块回收过程进行回收。它是将回收盘块的盘块号记入空闲盘块号栈的顶部,并执行空闲盘块数加1 操作。当栈中空闲盘块号数目已达100 时,表示栈已满,便将现有栈中的100个盘块号记入新回收的盘块中,再将其盘块号作为新栈底。

3.文件共享与文件保护

文件共享

f78799316410

f78799316410

利用符号链实现文件共享

为使B能共享C的一个文件F,可以由系统创建一个LINK 类型的新文件,也取名为F,并将F写入B的目录中,以实现B的目录与文件F的链接。在新文件中只包含被链接文件F的路径名。这样的链接方法被称为符号链接(Symbolic Linking)。新文件中的路径名则只被看作是符号链(Symbolic Link),当B要访问被链接的文件F且正要读LINK 类新文件时,此要求将被OS 截获,OS 根据新文件中的路径名去读该文件,于是就实现了用户B 对文件F的共享。

在利用符号链方式实现文件共享时,只是文件主才拥有指向其索引结点的指针;而共享该文件的其他用户则只有该文件的路径名,并不拥有指向其索引结点的指针。这样,也

就不会发生在文件主删除一共享文件后留下一悬空指针的情况。当文件的拥有者把一个共享文件删除后,其他用户试图通过符号链去访问一个已被删除的共享文件时,会因系统找不到该文件而使访问失败,于是再将符号链删除,此时不会产生任何影响。

文件保护

本小节主要讨论磁盘容错技术,而存取控制机制将在系统安全性一章中介绍。容错技术是通过在系统中设置冗余部件的办法,来提高系统可靠性的一种技术。磁盘容错技术则是通过增加冗余的磁盘驱动器、磁盘控制器等方法,来提高磁盘系统可靠性的一种技术。

第一级容错技术SFT-Ⅰ

第一级容错技术(SFT-Ⅰ)是最基本的一种磁盘容错技术,主要用于防止因磁盘表面缺陷所造成的数据丢失。它包含双份目录、双份文件分配表及写后读校验等措施。

1) 双份目录和双份文件分配表

2) 热修复重定向和写后读校验

①热修复重定向:系统将磁盘容量的一部分(例如2%~3%)作为热修复重定向区,用于存放当发现磁盘有缺陷时的待写数据,并对写入该区的所有数据进行登记,以便于以后对数据进行访问。

②写后读校验方式。为了保证所有写入磁盘的数据都能写入到完好的盘块中,应该在每次从内存缓冲区向磁盘中写入一个数据块后,又立即从磁盘上读出该数据块,并送至另一缓冲区中,再将该缓冲区内容与内存缓冲区中在写后仍保留的数据进行比较。若两者一致,便认为此次写入成功,可继续写下一个盘块;否则,再重写。若重写后两者仍不一致,则认为该盘块有缺陷,此时,便将应写入该盘块的数据,写入到热修复重定向区中。

第二级容错技术SFT-Ⅱ

第二级容错技术主要用于防止由磁盘驱动器和磁盘控制器故障所导致的系统不能正常工作,它具体又可分为磁盘镜像和磁盘双工。

①磁盘镜像(Disk Mirroring)

f78799316410

磁盘镜像虽然实现了容错功能,但未能使服务器的磁盘I/O 速度得到提高,却使磁盘的利用率降至仅为50%。

②磁盘双工(Disk Duplexing)

f78799316410

基于集群技术的容错功能

所谓集群,是指由一组互连的自主计算机组成统一的计算机系统,给人们的感觉是,它们是一台机器。利用集群系统不仅可提高系统的并行处理能力,还可用于提高系统的可用性,它们是当前使用最广泛的一类具有容错功能的集群系统。其主要工作模式有三种:① 热备份模式(DRBD);② 互为备份模式;③ 公用磁盘模式(DRBD)。

①双机热备份模式

在这种模式的系统中,备有两台服务器,两者的处理能力通常是完全相同的,一台作为主服务器,另一台作为备份服务器。平时主服务器运行,备份服务器则时刻监视着主服务器的运行,一旦主服务器出现故障,备份服务器便立即接替主服务器的工作而成为系统中的主服务器,修复后的服务器再作为备份服务器。为使在这两台服务器间能保持镜像关系,应在这两台服务器上各装入一块网卡,并通过一条镜像服务器链路MSL(Mirrored Server Link)将两台服务器连接起来。。此外,还必须在系统中设置某种机制,来检测主服务器中数据的改变。一旦该机制检测到主服务器中有数据变化,便立即通过通信系统将修改后的数据传送到备份服务器的相应数据文件中。

f78799316410

f78799316410

③公用磁盘模式

为了减少信息复制的开销,可以将多台计算机连接到一台公共的磁盘系统上去。该公共磁盘被划分为若干个卷。每台计算机使用一个卷。如果某台计算机发生故障,此时系统将重新进行配置,根据某种调度策略来选择另一台替代机器,后者对发生故障的机器的卷拥有所有权,从而来接替故障计算机所承担的任务。这种模式的优点是:消除了信息的复制时间,因而减少了网络和服务器的开销。

数据一致性控制

软件

硬件:采用冗余技术,将一份信息同时存放在多个独立的、非易失性存储器上(如磁盘双工方式)。

事务

事务是用于访问和修改各种数据项的一个程序单位。事务也可以被看做是一系列相关读和写操作。事务具有原子性。

事务记录

数据结构被放在稳定存储器中,用来记录在事务运行时数据项修改的全部信息,故又称为运行记录(Log)。该记录中包括有下列字段:

· 事务名:用于标识该事务的惟一名字;

· 数据项名:指被修改数据项的惟一名字;

· 旧值:修改前数据项的值;

· 新值:修改后数据项将具有的值。

在事务记录表中的每一记录,描述了在事务运行中的重要事务操作,如修改操作、开始事务、托付事务或夭折事务等。

恢复算法

(1) undo〈Ti〉。该过程把所有被事务Ti修改过的数据恢复为修改前的值。

(2) redo〈Ti〉。该过程把所有被事务Ti修改过的数据设置为新值。

检查点

引入检查点的主要目的,是使对事务记录表中事务记录的清理工作经常化,即每隔一定时间便做一次下述工作:首先是将驻留在易失性存储器(内存)中的当前事务记录表中的所

有记录输出到稳定存储器中;其次是将驻留在易失性存储器中的所有已修改数据输出到稳定存储器中;然后是将事务记录表中的〈检查点〉记录输出到稳定存储器中;最后是每当出现一个〈检查点〉记录时,系统便执行上小节所介绍的恢复操作,利用redo和undo过程实现恢复功能。

引入检查点后,可以大大减少恢复处理的开销。因为在发生故障后,并不需要对事务记录表中的所有事务记录进行处理,而只需对最后一个检查点之后的事务记录进行处理。

并发控制

①利用互斥锁实现顺序性

②利用互斥锁和共享锁实现顺序性

重复数据的数据一致性问题

①重复文件的一致性

②盘块号的一致性

③链接数的一致性

新增一张计数器表,遍历目录后将文件的引用计数放入该计数器表中,并与该文件的索引节点的count比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值