第四部分:存储管理

时间:2022-01-24 08:59:01

第四部分:存储管理

第10章 文件系统接口

文件系统:提供了在线存储和访问计算机操作系统和所有用户的程序与数据机制。文件系统由:文件和目录结构组成。

10.1 文件概念

文件:操作系统提供的信息存储的统一接口。操作系统对存储设备的各种属性加以抽象,从而定义了逻辑单元(文件),再将文件映射到物理设备上。

文件是记录在外存上的相关信息的具有名称的集合。从用户角度而言,文件是逻辑外存的最小份分配单元。

10.1.1 文件属性

文件属性

  • 名称
  • 标识符
  • 类型
  • 位置
  • 大小
  • 保护
  • 时间、日期和用户标识

10.1.2 文件操作

文件属于抽象数据类型,相关文件操作:

  • 创建文件
  • 写文件
  • 读文件
  • 在文件内重定位
  • 删除文件
  • 截短文件

文件打开信息:

  • 文件指针
  • 文件打开计数器
  • 文件磁盘位置
  • 访问权限

文件锁:允许一个进程锁住文件,以防止其他进程访问它。

共享锁(shared lock):类似读者锁,可供多个进程并发获取;

专用锁(exclusive lock):类似于写者锁,只有一个进程可获取此锁。

操作系统可提供强制(mandatory)建议(advisory)文件加锁机制。

10.2 文件访问方法

  1. 顺序访问
  2. 直接访问(相对访问):文件由固定长度的逻辑记录组成,以允许程序按任意顺序进行快速度和写。直接访问方式是基于文件的磁盘模型,其允许对任意文件块进行随机读和写。 直接访问文件可立即范文大量信息。
    3.其他访问:创建文件索引(包括各块指针),首先搜索索引,再根据指针直接访问文件,以查找所需要的记录。

10.3 目录结构

目录概述:目录可看做符号表,它能将文件名称转换成目录条目。

定义目录逻辑结构的常用方案:

  1. 单层结构目录
  2. 双层目录结构:为每个用户创建独立目录,即每个用户都有自己的用户文件目录(user file directory,UFD)。其解决了名称冲突的问题,但其仍有缺点:该结构能有效的对用户加以隔离。这种隔离在用户需要完全独立时是优点,但是在用户需要在某个任务上进行合作和访问其他文件时确实个缺点。
  3. 树状目录结构:树是最常用的目录结构。树有根目录,系统内的每一个问价都有唯一路径名。(绝对路径名,相对路径名)
  4. 无环图目录:允许目录含有共享子目录和文件。实现共享文件的方法:(1) UNIX:创建一个称为链接的新目录条目,即是另一个文件或目录的指针。其次,共享文件的另一方法为:共享目录中重复所有共享文件的信息。
  5. 通用图目录:无环图主要优点是可用简单的算法遍历图,并确定是否存在文件引用。有环时,存在自我引用,需要进行垃圾收集。

10.5 文件共享

10.5.1 多用户

为实现共享和保护,大多数系统采用文件(或目录)拥有者(或用户)和 的概念。拥有者是目录最高控制权的用户,可以改变属性和授权访问。属性定义对文件拥有相同权限的用户子集。

10.5.2 远程文件系统

远程文件的共享方式:
1. 用户通过程序(ftp)可实现在机器之间进行文件的人工传输。
2. 分布式文件系统(DFS),远程目录可直接从本机*问。
3. 万维网

ftp可用于匿名访问和验证访问。匿名访问允许用户在没有远程系统账号的情况下传输文件。
1. 客户机-服务器模型
远程文件系统允许一台计算机安装一台或多台远程机器上的一个或多个文件系统。 NFS(网络文件系统)
2. 分布式信息系统

为了便于管理客户机-服务器服务,分布式信息系统也称为分布式命名服务,用来提供用于远程计算所需的信息的统一访问。域名系统(DFS)为整个Internet提供了主机名称到网络地址之间的转换。
3. 故障模式

10.5.3 一致性语义

一致性语义(consistency semantics):是评估文件系统对文件共享支持的一个重要准则

  1. UNIX语义
  2. 回话语义:AFS文件系统
  3. 不可修改共享文件语义

10.6 保护

10.6.1 访问类型

通过访问控制(controlled限制可进行的文件访问类型控制。

10.6.2 访问控制

解决保护问题最为常用的方法是根据用户身份就行控制。实现基于身份访问的最为普通方法是为每个问价和目录增加一个访问控制列表(access-control list,ACL),以给定每个用户名及其所允许的访问控制类型。

第11章 文件系统实现

文件系统提供了在线存储和访问包括数据和程序在内的文件内容的机制。文件系统永久地驻留在外存上,外存可以永久存储大量数据。

11.1 文件系统结构

磁盘提供大量的外存空间来维持文件系统,磁盘的两个特点,使其成为存储多个文件的方便介质:
1. 可以原地重写
2. 可以直接访问磁盘上的任意一块信息。

为了改善I/O效率,内存与磁盘之间的I/O转移是以块为单位的,每块为一个或多个扇区,根据磁盘驱动器的不同,扇区从32~4096B不等,通常为512B.

文件系统由不同的层组成:应用软件->逻辑文件系统->文件组织系统->基本文件系统->I/O控制->设备

I/O控制为最底层,由设备驱动程序和中断处理程序组成,实现内存与磁盘之间的信息传输。

基本文件系统:只需向合适的设备驱动程序发送一般命令就可对磁盘上问了块进行读写。

文件组织模块:知道文件及其逻辑块和物理块。

逻辑文件系统:管理元数据,元数据包括文件系统的所有结构数据,而不包括实际数据(或文件内容)。逻辑文件系统通过文件控制块来维护文件结构。文件控制块(file control block,FCB)包含文件的信息,如拥有者,权限,文件内容的位置。

11.2 文件系统实现

11.2.1 概述

文件系统结构:

  • (每个卷的)引导控制块(boot control block):包括系统从该卷引导操作系统所需要的信息。UFS称之为引导快(boot block),NTFS (New Technology File System),是 WindowsNT 环境的文件系统,其称之为分区引导扇区(partition boot sector)
  • (每个卷的卷控制块(volume control block)包括卷(或分区)的详细信息,如分区的块数,块的大小,空闲块的数量和指针。UFS称之为超级块(super block),而在NTFS中它存储在主控文件表(Master File Table)中。
  • 每个文件系统的目录结构用来组织文件。UFS包含文件名和先关的索引结点(inode)号。NTFS中它存储在主控文件表中。

11.2.2 分区与安装

磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。
磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。

分区可以是“生的”(raw),即没有文件系统,或者“熟的”(cooked)即含有文件系统。“生”磁盘(raw disk)用于没有合适文件系统的地方。

根分区(root partition):把偶偶操作系统内核或其他系统文件,在引导时装入内存。

11.2.3 虚拟文件系统

采用数据结构和子程序,可以分开基本系统调用的功能和实现细节。因此文件系统实现包括三个层次:

第一层:文件系统接口:open(),read(),write()和close()以及文件描述符等待。

第二层:虚拟文件系统(VFS),它有两个目的:

  1. VFS层通过定义一个清晰的VFS接口,以将文件系统的统一操作和具体实现分开。多个VFS接口的实现可以共存在同一台机器上,它允许访问已装在本地的多个文件系统。
  2. VFS提供了在网络上唯一标识一个文件机制。VFS基于称为vnode的文件表示结构

第三层:文件系统类型或远程文件系统协议。

Linux VFS定义的4中主要对象类型是:

  • 索引结点对象(inode object):表示一个单独的文件
  • 文件对象(file object):表示一个打开的文件
  • 超级块对象(superblock object):表示整个文件系统
  • 目录条目对象(dentry object):表示一个单独的目录条目。

11.3 目录实现

目录分配和目录管理算法的选择对文件系统的效率、性能和可靠性有很大的影响。

  1. 线性列表:最为简单的方法,就是使用存储文件名和数据块指针的线性列表。特点:编程简单但运行时较为费时。
  2. 哈希表:哈希表根据文件名得到一个值,并返回一个指针指向线性表中元素的指针。因此,它大大较少目录搜索时间。插入删除较简单,不过需要预备措施来避免冲突(collision)(两个文件名哈希到相同的位置)。缺点:固定的大小和哈希函数对大小的依赖性。

11.4 分配方法

磁盘空间分配方法:

  1. 连续分配(contiguous allocation):要求每个文件在磁盘上占有一组连续的块。连续分配支持顺序访问和直接访问,但存在外部碎片,及无法预估文件分配大小的空间。
  2. 链接分配(linked allocation):解决了连续分配的所有问题。采用连接分配,每个文件是磁盘块的链表。目录包括文件的第一个指针和最后一个指针。每块都有指向下一块的指针。优点:没有外部碎片,无需说明文件大小,无需合并磁盘空间。缺点:只能有效的用于文件的顺序访问,不能有效支持文件的直接访问;其次,指针需要空间。解决办法:将多个块组成簇(cluster),并按簇而不是块来分配,有效改善磁盘访问 时间,但增加了内部碎片;其次,是可靠性问题,指针出错,解决方案:双向链表。

    一个采用链表分配的变种是:文件分配表(FAT)的使用。用于MS-DOS和OS/2操作系统。每个卷的开始部分用于存储该FAT.每块都在该表有一项,该表可以通过块号码来索引。

  3. 索引分配:通过把所有的指针放在一起,解决了直接访问问题。每个文件都有索引块,这是一个磁盘地址的数组。索引分配支持直接访问,且没有外部碎片,但由于要存储每个文件的索引快,所以比较浪费空间。
    如何确认索引块的大小:

    • 链接方案:一个索引块通常为一个磁盘块。因此它本身能直接读写。为了处理大文件,可以将多个索引快链接起来。
    • 多层索引:链接表示的一种变种是用第一层索引块指向一组第二层的索引块,第二层索引块再指向文件块。
    • 组合方案:在UFS中,使用一个方案是将索引块的头15个指针存在文件的inode中。其中头12个指针指向直接块,即他们包括了能存储文件数据的块地址。因此文件不超过12块的小文件不需要其他索引块。其他3个指针指向间接块。第一个个间接块指针为一级间接块地址;紧接着是一个二级间接块指针;最后是三级间接指针

11.5 空闲空间管理

空闲空间表:

  1. 位向量:空闲空间表实现为:位图(bit map)位向量(bit vector)
  2. 链表
  3. 计数

11.9 NFS

NFS是用于通过局域网(或广域网)访问远程文件的软件系统的实现和规范。
NFS设计的目标之一是允许在不同机器、操作系统和网络结构的异构环境中工作。NFS规范与这些无关,因此允许其他实现。RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

NFS规范区分两种服务:
1. 由安装机制所提供服务(安装协议)
2. 远程文件访问协议(NFS协议)

11.9.2 安装协议

安装协议(mount protocol):在客户机和服务器之间建立初始逻辑链接。

第12章 大容量存储器结构

12.1 大容量存储结构简介

12.1.1 磁盘

磁盘(magnetic disk):为现代计算机系统提供了大容量的外存。

磁盘驱动器通过一组称为I/O总线的线与计算机相连。有多种可用总线,包括EIDE(enhanced integrated drive electronics),ATA(advanced technology attachment),串行ATA(serial ATA,SATA),
USB(universial

12.6 交换空间管理

交换空间管理:虚拟内存使用磁盘空间作为内存扩展。交换空间设计和实现的目的主要是为虚拟内存提供最佳吞吐量。

12.6.1 交换空间的使用

  1. 可将交换空间用于保存整个进程映像,包括代码段和数据段;
  2. 换页系统也可能只用交换空间以存储换出内存页。

12.6.2 交换空间位置

交换空间可以有两个位置:
1. 在普通文件系统上加以创建:实现简单,但效率低,遍布目录结构和磁盘分配数据结构需要时间和过多磁盘的访问。
2. 交换空间可以创建在独立的生(raw)磁盘分区上。只需要一个独立的交换存储管理器以分配和释放块。

12.7 RAID结构

磁盘冗余阵列(Redundant Arrays of Independent Disks,RAID):有“独立磁盘构成的具有冗余能力的阵列”之意。磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地)的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。

  1. 通过冗余改善可靠性
  2. 通过并行处理改善性能

12.7.3 RAID级别

镜像提供高可靠性,但昂贵;分散提供了高数据传输率,但并未改善可靠性。

通过磁盘分散和“奇偶”位可以提供多种方案以在地代价环境下提供冗余。

  1. RAID级别0:指按块级别分散的磁盘阵列,但没有冗余。
  2. RAID级别1:磁盘镜像
  3. RAID级别2内存方式的差错纠正代码结构,内存系统一直实现了基于奇偶为的错误检测。
  4. RAID级别3:基于位交织奇偶结构对级别2进行了改进。与内存系统不同,磁盘控制器能检测到一个扇区是否正确读取,这样单个奇偶位就可用于差错检测和差错纠正。
  5. RAID级别4:基于块交织奇偶结构
  6. RAID级别5:基于块交织奇偶结构,但它是将数据和奇偶分布在所有N+1块磁盘上。
  7. RAID级别6p+Q冗余方案,保存了额外冗余信息以防止多个磁盘出错。不是使用奇偶校验,而是使用了差错纠正码如Read-Solomon码,每4个位的数据使用了2个冗余位,其容许两个磁盘出错。
  8. RAID级别0+1:先分散,再镜像;
  9. RAID级别1+0:先镜像,再分散。

第13章 I/O输入系统

计算机有两个主要任务:I/O操作与计算处理。

13.2 I/O硬件

中断(interrupt):基本中断机制工作如下,CPU硬件有一条中断请求线(Interrupter-request line,IRL)。CPU在执行完每条指令后,都将检测IRL。当CPU检测到已经有控制器通过中断请求线发送了信号,CPU将保存当前状态并且跳转到内存固定位置的中断处理程序(interrupt-controller),中断处理程序判断中断原因,进行必要处理,重新恢复状态,最后执行中断返回指令以便使CPU返回中断以前执行状态。

中断机制接受一个地址,用来从一个集合内选择特定的中断处理程序。对对大多数系统结构,这个地址时一个称为中断向量(interrupt vector)的表中偏移量。该向量包含了特殊中断处理程序的内存地址。向量中断机制的目的是用来减少单个中断处理需要,这些中断处理搜索所有可能的中断源以决定哪个中断需要服务。中断链接(interrupt chain),即中断向量内的每个元素都指向中断处理程序列表表头。

中断机制也实现了中断优先级(interrupt priority),该机制能使CPU延迟处理低优先级中断而不屏蔽所有中断,也可以让高优先级中断抢占低优先级中断处理。

直接内存访问(direct-memory access,DMA)控制器:一种专用处理器,对于需要做大量传输的设备,用其来观察状态位并按字节来向控制器寄存器送入数据。在开始DMA传输时,主机向内存中写入DMA命令块。该块包括传输的源地址指针,传输的目的地指针,传输字节数。CPU将该命令块的地址写入到DMA后就继续其他工作。DMA控制器则继续下去直接操作内存总线,无需主CPU帮助,就可以将地址放到总线以开始传输。
隐藏了硬件差异。

13.3 I/O应用接口

设备驱动程序的作用是为内核I/O子系统隐藏设备控制器之间的差异,就如同I/O系统调用通用类型封装了设备行为,为应用程序隐藏了硬件差异。

13.4 I/O内核子系统

内核提供了许多与I/O相关的服务。许多服务如调度,缓冲,高速缓存,假脱机,设备预留及错误处理是由内核I/O子系统提供的,并建立在硬件和设备驱动程序结构之上。I/O子系统还负责保护自己免受错误进程和恶意用户的危害。

  1. I/O调度:操作系统为每个设备维护一个请求队列来实现调度。支持异步I/O的内核同时也要能够跟踪许多I/O请求,操作系统为设备状态表(device status table)配备等待队列。
  2. 缓冲缓冲区是用来保存两个设备之间或在设备和应用程序之间所传输数据的内存区域。采用缓冲有三个理由:(1)处理数据生产者和消费者之间的速度差异;(2)协调传输数据大小不一致的设备;(3)支持应用程序I/O的复制语义。
  3. * 高速缓存(cache)*:是可以保留数据副本的高速存储器。
  4. 假脱机与设备预留:用来保存设备设备输出的缓冲区,解决多路复用多个并发应用I/O请求
  5. 错误处理:I/O 系统调用通常返回一个位来表示调用状态信息,以表示成功或失败。
  6. I/O保护:为了防止用户执行非法I/O,定义所有的I/O指令为特权指令,因此用户不能直接发出I/O指令,它们必须通过操作系统来进行。操作系统在监控模式下,检查请求是否合法。另外,所有的内存映射和I/O端口内存位置都受到内存保护系统的保护,以阻止用户访问。

13.5 把I/O操作转换成硬件操作

现代操作系统通过对请求与物理设备控制器时间的多级查表获取设备控制器的端口地址或内存映射地址。