操作系统基础

一、引言

操作系统本身其实是计算机用户与计算机硬件之间运行的一个程序,通常狭义上被称为内核(Kernel)程序,其他程序则为系统程序和应用程序。它的工作内容是资源管理服务:资源包括硬件资源和软件资源,为用户提供服务:交互、提供应用程序的运行环境等。
计算机体系机构图

二、计算机系统

2.1 计算机系统的组织

计算机系统的组织通常为4部分

  • 启动
  • 中断
  • I/O设备
  • 存储设备

启动的用途:
确认每个设备是否工作正常。确认无误后,开启引导程序,引导程序的工作内容包括:

  1. 初始化设备
  2. 把操作系统载入到内存中
  3. 运行第一个进程 init(), 等待事件发生

中断程序:
一个事件的触发是通过硬件或软件中断来实现的,软中断不可以屏蔽,硬中断可以屏蔽,系统一旦发生中断,CPU会运行中断服务程序,系统通过中断向量表(Interrupt Vector Table)来管理中
断请求与中断服务程序之间的对应关系。

I/O设备:
I/O设备与CPU可同时运行,每个设备控制器拥有自己的本地缓冲器(buffer)和寄存器,CPU负责内存与本地缓冲器之间的数据传递,设备控制器负责在其所控制的外部设备与本地缓冲存储之间进行数据传递。
其中有直接访问情况DMA,DMA(Direct Memory Access)直接访问内存是在专门的硬件
控制下,实现高速外部设备与主存储器之间自动成批交换数据,目的就是尽量减少CPU干预的I/O操作方式,以块儿(Block)为单位,负责在设备缓冲器与主存之间的数据传送。

存储结构:
一级存储设备指内存(主存)CPU可以直接随机访问的唯一大容量存储设备,是易失存储设备。
二级存储设备: 一般不易失的存储设备,一般是磁盘类。

2.2 计算机系统的体系结构

计算机系统的体系结构一般分为下述三类:

  • 单处理器系统
  • 多处理器系统
  • 集群系统

单处理器系统

系统中只有一个通用处理器(CPU),用来处理来自用户进程的指令,除了通用处理器,系统一般还包括其他专用处理器,如磁盘控制器、图形控制器等,专用处理器不接受用户的指令,只接受系统的指令。

多处理器系统

系统中有多个处理器,又称为并联系统(parallel systems、tightly-coupled systems),多个处理器共享一个内存CPU之间通过共享内存来进行通讯。
多处理器系统的优点:增加了吞吐量(throughput)方便扩展,增加了可靠性(graceful degradation or fault tolerance)
其中对于处理器的划分又可以划分为:
非对称处理器,又称异构多处理器:处理器在结构上不同,一个处理器负责运行操作系统,其它
处理器运行其他程序,处理器之间有主从关系。
对称处理器,又称同构多处理器:各处理器在结构上完全相同,操作系统可以运行在任何一个
处理器上,处理器之间没有主从关系。

集群系统

集群系统是一种由互相连接的计算机组成的并行分布式系统(Parallel Distributed System),并共享存储,可以作为单独、统一的计算资源来使用。
优点:计算机集群提供了更快的处理速度,更大的存储容量,更好的数据完整性,更高的可靠性和更广泛的可用性资源

三、操作系统

3.1 操作系统结构

操作系统结构一般有:批处理系统,多道程序系统,分时系统,又称多任务系统。

批处理系统

单处理器环境下的工作流程,当CPU发出 I/O请求,设备进行 I/O操作时,CPU就会空闲(idle)。
问题是 I/O 操作相对于 CPU 操作速度很慢,会导致CPU空闲,而CPU是最昂贵的资源。

多道程序系统

当发生 I/O 操作时,由操作员调度另一个程序运行,从而提高CPU的使用率。这里给大家分享一下我大学课件上的问题:
在这里插入图片描述

分时系统

给每个任务赋予一个给定的时间片(time slot,time slice)CPU 在多任务之间相互切换。这里可能会分不清多道程序系统和分时系统的区别。下图给出了解释
在这里插入图片描述

双重模式操作

在操作系统被多个用户、多个程序所共享,多个用户之间、多个程序之间可能相互影响,可能会出现问题,这个时候操作系统需要一个保护机制:双重模式操作
为了确保操作系统的正常运行,必须区分操作系统的代码和用户代码的执行
大部分采用的方法是提供硬件支持的双重模式操作,即用户模式和内核模式
通过模式位(Mode bit)来区分即用户模式和内核模式

3.2 操作系统管理

进程管理

进程是运行中的程序,是系统的运行单元,程序是被动实体(inactive),而进程是活动实体(active)。

内存管理

内存管理的主要目的就是提高内存的使用率,从而有效使用内存,管理内存中的数据的存储指令的运行。

存储管理:文件系统管理

操作系统对存储设备的物理属性进行了抽象的定义,即文件, 它是存储的逻辑单元。其中大容量存储系统(Mass-Storage System) 一般指的二级存储设备,如硬盘。

I/O子系统

I/O子系统的目的是针对用户隐藏具体硬件设备的特性,它包括以下几个部分

  1. 一个包括缓冲(buffer)、高速缓存(cache)和假脱机(spooling)的内存管理部分
  2. 通用设备驱动器接口
  3. 特定硬件设备的驱动程序

其中缓冲,缓存与假脱机都是比较重要的概念
缓冲:为传输数据, 暂时存储数据
缓存:为性能提高, 暂时存储数据
假脱机:是关于低速字符设备与计算机主机交换信息的一种技术,又称外部设备联机并行操作。可以提高I/O速度、设备并没有单独分配给任何一个任务、通过实现虚拟设备可以共享设备。

操作系统结构

内核:接口和驱动程序,硬件之上和系统调用接口下的所有部分,包括文件系统、CPU调度、内存管理和其他操作系统功能。

  • 简单结构
  • 层次结构:操作系统划分为若干层,在低层上构建高层,每层只使用低层次的功能和服务
  • 微内核:从核内移出尽可能多功能到用户空间
  • 模块结构:使用面向对象方法,每个核心部件分开,每个组件在需要时被加载到内核
  • 混合结构:通过采用多种结构获取性能、安全、使用等方面的需求

3.3 系统调用

系统调用实现

每个系统调用都有一个固有番号(System Call Number)
操作系统通过一张系统调用番号表来管理系统调用接口

系统调用参数传递

1、寄存器
2、块(block):参数保存在内存中的一个块中,并把块地址用寄存器传递给系统调用函数
3、栈(stack):以栈的形式保存在内存中,用户程序向栈 push 参数,操作系统从栈中 pop 参数

系统程序

系统程序不属于内核,但属于操作系统的一部分,提供一个方便的环境,以开发程序和执行程序。为用户使用操作系统服务, 如文件管理器: 创建、删除、复制、重命名、打印、转储、列出和操作文件和目录。

虚拟机

通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

四、进程管理

4.1 进程调度

操作系统持有就绪队列和一组设备队列,进程可以在多个调度队列之间移动。
就绪队列:驻留在内存中的就绪并等待运行的进程(如进程创建时,被放到该队列), 即等待分配CPU的进程,一般用链表来实现
设备队列:等待特定I/O设备的进程队列
根据调度程序频率:

  • 长期调度程序:作业调度程序
  • 短期调度程序:CPU调度程序
  • 中期调度程序:分时系统

上下文切换:将CPU切换到另一个进程需要保存当前进程的状态,并恢复另一个进程状态,这一任务称为上下文切换。上下文切换时间是额外的开销,因为上下文切换时系统不能做什么有用的工作。

4.2 进程创建

资源共享选项

资源共享选项
① 父进程和子进程共享所有资源
② 子进程共享父进程的部分资源
③ 父进程和子进程不共享资源

执行选项

执行选项
① 父进程和子进程同时执行
② 父进程等待子进程结束

地址空间选项

地址空间选项
① 子进程完全复制父进程内容
② 子进程覆盖父进程内存空间

进程创建方式

fork() 系统调用创建新的进程
1 复制父进程PCB
2 分配内存空间
调用exec() 系统调用,以便重载运行程序
3 从磁盘载入二进制程序
4 初始化

4.2 进程间通信

系统内并发运行的进程可以是相互独立协作工作
如果一个进程不影响其他进程或不被其他进程所影响,那么该进程是独立的,即进程之间没有共享数据,如果一个进程影响其他进程或被其他进程所影响,那么该进程是协作的,即进程之间有数据共享

进程间通信模型

通信模型:

  • 消息传递:需要内核的干涉,易于实现
  • 共享内存:不需要内核的干涉,比消息传递速度快

为了实现共享内存、便于两个或多个进程可以访问内存,共享区域应取消这个限制
而且,必须保障不能有两个以上的进程同时向共享区域写入数据,即需要一个同步机制
缓冲区为共享内存区域:
1、无限缓冲(unbounded buffer): 对缓冲大小无限制
2、有限缓冲(bounded buffer): 缓冲大小固定

4.3 消息传递方式

  • 直接或间接通信:必须明确地命名通信的接受者和发送者
    在这里插入图片描述

  • 同步或异步通信

  • 自动或显式缓冲

4.4 客户机与服务器系统间通信

套接字由IP地址端口号连接组成
Stubs(存根):远程过程的代理,隐藏了通信发生的细节,每个独立的远程过程都有一个存根。
管道通信:进程之间进行通信的另一种方式,管道通信方式的中间介质是文件,分为匿名管道和命名管道
匿名管道:管道是半双工的,数据只能单向通信;双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)
命名管道:可在同一台计算机的不同进程之间或在跨越一个网络的不同计算机的不同进程之间,支持单向或双向的数据通信

4.5 进程同步

多个进程对共享数据进行操作时可能会出现竞争问题,解决该问题的关键是确保操作共享数据的代码块的执行同步(互斥运行),不能让多个进程同时运行操作共享数据的代码段。

临界区

每个进程拥有操作共享数据的代码段被称为临界区
在这里插入图片描述

信号量

有二进制信号量和计数信号量,二进制信号量适⽤于单资源的共享,计数信号量适用于多资源共享

管程

管程是⼀种⽤于多线程互斥访问共享资源的程序结构,任⼀时刻最多只有⼀个线程执⾏管程代码。
条件变量:当调⽤管程过程的进程⽆法运⾏时,⽤于阻塞进程的⼀种信号量

4.6 死锁

当一组进程中的每个进程都在等待一个事件的发生,而这一事件只能由这一组进程的另一进程引起,那么这组进程就处于死锁状态。
为了了解进程中资源的分配问题,设计出了资源分配图
在这里插入图片描述
如果分配图没有环,就没有死锁.如果分配图有环,就有可能发生死锁。

五、线程

5.1 概述

大部分现代应用软件都是多线程,线程是运行在应用进程里的、比进程更小的运行单位,一个进程可以拥有多个线程,并共享内存空间。每个线程是独立的调度对象。

5.2 多线程模型

用户线程和内核线程

  1. 用户线程
    I. 用户线程受内核的支持
    II. 用户线程是由用户层的线程库来管理,无需内核管理

  2. 内核线程
    I. 内核线程是由内核来管理
    II. 有内核来进行维护和调度

用户线程和内核线程之间必然会存在的一种关系。有一对一、多对一、多对多关系,建立起来的这
种关系我们称为映射。

一对一模型

一个用户线程映射到一个内核线程的模型
优点 :

  1. 可以提供并发功能, 可以在多个处理器上并行执行
  2. 在一个线程执行阻塞系统调用时,可以调度另一个线程继续执行
    缺点:
    一对一模型的唯一的缺点是创建一个用户线程就需要创建一个内核线程,造成内核负担重

多对一模型和多对多模型

多个用户线程映射多个内核线程。
多对一模型的缺点是一个用户线程一但被阻塞,其他用户线程也会阻塞,即针对同一个内核线程服务
的用户线程无法提供并发功能
多对多模型没有以上缺点,当一个线程执行阻塞系统调用时,内核能调度另一个线程的执行,但需要
提供调度机制

5.3 线程库

为程序员提供的、创建和管理线程的 API, 主要有以下两种方法来实现

  1. 非嵌入到内核的方式:是在用户空间中提供一个没有内核支持的库,此库的所有代码和数据结构都存在于用户空间中
  2. 嵌入到内核的方式:是操作系统直接支持的内核库,此时所有代码和数据结构都存在于内核中

复制问题:
在这里插入图片描述
在这里插入图片描述
目标线程:线程完成任务之前终止线程的任务,需要取消的线程一般称为目标线程。
目标线程的取消可能发生“要取消的线程正在更新与其他线程所共享的数据”,为此,提供以下两种
取消方式:
1 异步取消(Asynchronous Cancellation):一个线程立即终止目标线程
2. 延迟取消(Deferred Cancellation):目标线程不断地检查它是否应终止

六、CPU调度

一个进程的执行由CPU执行(CPU区间)和I/O等待(I/O区间)组成.
进程一般由大量的短CPU区间(<8ms)和少量的长CPU区间组成

  1. I/O为主的程序里短CPU区间较多,
  2. CPU为主的程序里长CPU区间较少
    CPU调度分为两类,分别是抢占调度和非抢占调度,两者的区别在于进程在执行过程中,可不可以以被其他进程抢占CPU使用权。

6.1 CPU调度算法

CPU调度算法考虑准则

  • CPU使用率
  • 吞吐量:指的是在一个时间单元内所完成的进程数量
  • 周转时间
  • 等待时间
  • 响应时间

CPU调度算法

这里先需要了解几个概念,分别是周转时间,运行时间以及等待时间
周转时间= 完成时间-到达时间
等待时间= 周转时间-运行时间这里举例说明

  • 1 先到先服务调度:先请求CPU 的进程先分配CPU,非抢占式调度,护航效果,小进程跟在大进程后面。
  • 2 最短作业优先调度:可分为非抢占调度和抢占调度
  • 3 优先级调度:每个进程都有它的优先级,通常用数字来表示进程的优先级,数字值越小它的优先级越高。分为非抢占式优先级调度,抢占式优先级调度
  • 4 轮转法调度:给每个进程分配一个时间片,每个进程只能运行给定的时间片并释放CPU,并被放入到就绪队列
  • 5 多级队列调度
  • 6 多级反馈队列调度

6.2 多处理器调度

多处理器调度可以分为同构处理器和异构处理器。处理器功能结构相同就是同构处理器,不同则为异构处理器。根据行为可以分为对称多处理和非对称多处理。对称多处理又称SMP,每个处理器之间都有自己的调度算法,不允许处理器之间的移动。非对称处理只有一个处理器进行调度任务,允许处理器之间的移动。

七、内存管理

7.1 进程内存

虚拟地址空间文件信息:
在这里插入图片描述
物理地址则是/proc/$pid/pagemap 文件中可以确认允许一个用户的进程查看每个虚拟页映射到的物
理页。

7.2 内存地址编码方法

地址映射与绑定

进程使用内存空间的界定:为确保进程只访问合法地址范围,一个进程使用的内存
地址范围是由一对基地址寄存器(base register)和界限地址寄存器(limit register)。
完成内存空间界定之后,就会出现内存地址的绑定,在这里就根据地址的性质进行了划分:
逻辑地址:也叫相对地址,用户程序在经过编译后形成的目标代码,其余指令中的地址都是相对于 首地址来编址。不能用逻辑地址直接寻址
物理地址:也叫做内存地址或绝对地址,把内存分成很多个大小 相等的存储单元,每个单元给一个编号,这个编号称为物理地址,物理地址可以直接寻址
而地址绑定就是从从逻辑地址物理地址的映射。
地址绑定处理如下图:
在这里插入图片描述
那么地址绑定内存,绑定的就是数据和指令,绑定时根据绑定的时间段可以分为:

  • 编译时:编译时就知道进程将内存中驻留地址
  • 加载时:在编译时并不知道进程驻留内存地址,编译器必须生成可重定位代码(relocatable code)。对于这种情况,最后绑定延迟到加载时才进行
  • 执行时:如果进程在执行时可以从一个内存段移到另一个内存段,那么绑定必须延迟到执行时才进行。

那么在这就需要了解一个设备叫做内存管理单元(MMU)是映射逻辑地址为物理地址的硬件设备

内存与进程

通常情况下进程与内存中的加载关系可以分为:动态加载,动态链接和静态链接
动态加载:直到被调用之前,程序不会被载入到内存,即加载延迟到运行时, 如 exec(“/bin/ls”) 系统调用。优点:
1 内存使用率高:不使用的程序不会载入到内存
2 适合用户用大量代码来操作不常发生事件
3 不需要操作系统的特别支持,由程序员来设计

静态链接:加载程序将库的内容合并到二进制程序镜像中,一直驻留在内存
动态链接,链接延迟到运行时,动态链接通常适用于系统库, 如语言库,由操作系统管理
动态链接和动态加载都是需要时加载到内存。但,
动态链接:程序启动时建立了链接(即只有链接地址),需要时载入内存,由操作系统决定
动态加载:通过程序的方法来控制加载,由程序员决定

除此之外进程可以暂时从内存中交换到备份存储上(通常是快速磁盘),当需要再次执行时再调回到内存,在此基础上就衍生出了交换算法:

  1. 交换算法,如优先级调度算法:低优先级交换出,高优先级交换进; 滚出(roll out), 滚入(roll in),换入换出
  2. 交换时间(转移时间):转移时间与交换内存空间量成正比

把交换出去的进程再交换回来时就需要考虑进程的地址绑定时间段了,是编译时加载时还是运行时
编译时和加载时绑定的进程,必须回到原位,即运行时不可以发生地址变化
执行时绑定的可以移动到不同的地址,即运行时,可以发生地址变化

7.2 内存分配方式

首先讲分配方式之前需要了解两个概念:
:把物理内存划分为固定大小的块儿,称为帧。
:把逻辑内存划分为固定大小的块儿,称为页
内存分配的方式可以分为:

  1. 连续分配:每个进程位于连续的内存区域
    (1)多分区分配:多个固定大小分区
    (2)可变分区分配:整个内存空间是就是一个大孔, 操作系统用表来记录已用和未用内存
    这种分配方式容易产生内存碎片,解决方法为紧缩:移动内存内容,把所有的空闲空间合并成一整块
  2. 分页分配:一个页对应一个帧,当需要分配内存时,以页为单位分配内存。若程序大小为 n 页,则需要有 n 个帧来存放它,而这些帧是不必连续的内存空间
    在这里插入图片描述
    在这里插入图片描述
    页表就是记录帧与页对应关系的表,页表的实现可以用一组专用寄存器来保存,也可以将页表放入到内存中。但是如果使用了页表,那么需要两次访问内存,这会导致数据访问速度慢。解决的办法是硬件缓冲,称为地址转换旁观缓冲。
    在这里插入图片描述
    但其实关于页表的实现方式我们还可以细分为层次结构,哈希结构和反向页表
    到这里基本就是分页分配的实现方式了,那么分页分配的优点在于:
    通过共享页实现代码共享。进程的代码可分为可以共享的代码和不可共享的代码,可共享的代码通过共享页表的方式实现
  3. 分段分配:逻辑地址的定义:【分段号, 偏移】
    需要段表, 段表条目包括段基地址和段界限
    在这里插入图片描述

八、虚拟内存

8.1 虚拟内存背景

虚拟内存是内存管理的一种技术,它允许执行进程时不必完全载入内存,可以部分程序载入到内存。
虚拟内存也允许共享,实现进程之间内存共享
在这里插入图片描述
优点:
I. 逻辑地址空间可大于物理地址空间
II. 可以被多个进程共享地址空间
III. 可以提供更有效的进程创建

8.2 按需调页,页错误,页置换,内存映射

按需调页

执行程序如何从磁盘载入内存(全部、部分),为执行程序需要调入页、但暂时不需要的页不会调入到物理内存。
I. 可以减少 I/O
II. 可以减少内存使用
III. 应答时间快
那么,操作系统需要区分哪些页在物理内存,哪些页在虚拟内存,根据这个问题设计了有效、无效位
有效(v):页在物理内存中,无效(i):页不在物理内存中,即在虚拟内存中

页错误

想要访问的页不在内存空间(无效页),会发生页错误,并陷入操作系统,逻辑处理如下:
在这里插入图片描述
在这里插入图片描述
需要了解的是在创建进程上,虚拟内存也有独特的优势:写时复制(Copy-on-Write), COW 技术允许父进程和子进程共享物理内存中的页,如果任何一个进程需要对页进行写操作,那么就会创建一
个共享页的副本。

页置换

页置换发生在当你创建新进程之后,需要分配新的页,如果此时没有空闲的页,这时候就需要终止进程或者发生页置换,即交换出一个进程。找出一个牺牲的帧,并将其换出; 需要使用的页,将其换入
页面置换的基本操作:
A. 查找所需页在磁盘上的位置
B. 查找一个空闲帧
(1)如果有空闲帧就用
(2)如果没有空闲帧,就通过某种置换算法选择一个“牺牲”帧
C. 将所需要的页读入空闲帧,修改页表和帧表
D. 重启进程
页置换发生两次页传输(换入、换出),导致页处理时间加倍,增加了内存访问时间,对此的处理方法可以从换入和传出入手:
有效方法一(换出):每个页关联一个修改位(modify bit),通过修改位确认关联页是否被修改
– 如被修改过,在换出时必须写入磁盘
– 如没有被修改过,在换出时,不需要写入磁盘,从而避免了写入磁盘操作
有效方法二(换入):页缓冲发生页错误,需要页置换,正常应该是先换出牺牲页后,再换入要执行的页。系统保留一个空闲帧缓冲池,当需要牺牲帧写出虚拟内存时,写出之前,从空闲帧缓冲池中先得到内存(即先分配后换出)
页置换算法的目标是: 最小化页错误的发生。页置换算法含有:

  1. FIFO 算法:替换掉停留时间最长的帧

  2. 最优置换算法:置换将来最长时间不会用的帧

  3. LRU(Least Recently Used)算法:每个页关联该页上次使用的时间,选择最长时间没有使用的帧
    在这里插入图片描述

  4. 近似 LRU 算法:引用位算法,二次机会算法,增强型二次机会算法

  5. 基于计数的算法:保留一个用于记录其引用次数的计数器

页置换可以分为全局置换局部置换两大类
全局置换:从所有帧集中选择一个置换帧分配到的帧数量可能发生变化
局部置换:仅从自己的分配帧中选择一个置换帧分配到的帧数量不会发生变化

内存映射

内存映射出现的情形背景是,当我们需要对磁盘上的文件进行一系列操作,可以采用两种方式:
一种是对磁盘上的文件直接 操作,另一种是利用虚拟内存技术内存映射
在这里插入图片描述

九、文件系统接口

9.1 什么是文件

文件是逻辑外存的最小分配单元,它可以大分为数据程序。文件是操作系统提供信息存储的、统一的逻辑接口。文件根据其类型具有不同的结构(格式)
文件的属性包含:名称,标识符,类型,大小,位置 :设备上文件位置的指针,保护:访问控制信息,时间:日期和用户标识

9.2 文件操作

读取文件一般可以分为系统调用open()方法或者是进程调用,两者打开文件得到的内容有区别
在这里插入图片描述
在共享文件操作下,避不开的就是需要给文件加锁,操作系统可提供共享锁专用锁文件加锁机制,共享锁 :读,专用锁 :写。操作系统可提供强制建议文件加锁机制,强制 :一旦被加锁,其他进程就不能访问。建议 :根据程序员的设计需要确保适当的获取与释放锁。

文件访问

文件的访问方法一般可以分为

  • 顺序访问:文件信息按顺序,一个记录接着一个记录地加以处理
  • 直接访问:文件由固定长度的逻辑记录组成,操作系统所提供的块儿号通常为相对块号,它是相对于文件开始的索引
  • 索引访问:对文件创建索引文件,索引包括各块的指针,为查找文件中的记录,首先搜索索引,再根据指针直接访问文件

目录结构

每个磁盘分区可以创建一个文件系统,存储文件系统的一大块存储空间称为卷,每个卷必须包含其文件系统上文件的信息,这些信息保存在设备目录或卷表中

  • 单层目录结构:所有文件都包含在同一个目录中
  • 双层次目录结构:系统有主文件目录,每个目录是用户文件目录
  • 树状目录结构:目录可以包含文件和子目录,当需要访问文件时,就从搜索当前目录
  • 无环图目录结构:可共享文件和目录,允许目录含有共享子目录和文件
  • 通用图目录结构:允许有环的目录结构,需要避免重复搜索

9.3 文件系统安装和文件共享

操作系统需要知道设备名称文件系统的安装位置

文件共享

多用户系统比单用户系统需要更多的文件和目录属性,即拥有者ID, 组ID
拥有者(owner)是目录最高控制权的用户,可以改变属性和授权访问
组(group)属性定义对文件拥有相同权限的用户子集
通过网络允许系统之间的文件系统之间的相互访问, 实现方法
1.通过 FTP(File Transfer Protocol)
2.通过分布式文件系统
3.通过浏览器(基本上FTP的包装)

9.3 文件系统结构

磁盘的逻辑单元为块儿 (block),内存与磁盘之间的传输是以块儿为单位。文件控制块为FCB,在Linux系统中叫做文件控制表即I-node表
文件系统的层次结构:
在这里插入图片描述

文件系统的实现

在磁盘上,文件系统包括的信息有:
如何启动操作系统、总的块数、空闲块的数目和位置、目录结构,各个具体文件 等

  1. 每个卷的引导控制块
    引导操作系统所需要的信息。UFS称为引导块(boot block),NFS称为分区引导扇区
  2. 每个卷的卷控制块
    卷的详细信息(分区的块数、块的大小、空闲块的数量和指针、空闲FCB 的数量和指针 等)。UFS称为超级块儿(super block),NTFS主控文件表(master boot sector)

虚拟文件系统(VFS)
给不同的文件系统类型提供统一的系统调用接口,提供面向对象技术来实现文件管理。
磁盘空间的分配方法:

  1. 连续分配:文件用文件第一块的磁盘地址和连续块的数量(即长度),但是不利于扩展
    在这里插入图片描述

  2. 链接分配:每个磁盘块都有指向下一个磁盘块
    在这里插入图片描述

  3. 索引分配:文件用索引块来定义,索引块是一个磁盘块地址的数组

磁盘空闲空间管理

磁盘空闲空间管理方式有:

  • 位向量:位向量,每块用一位(bit)表示
  • 链表:所有空闲块有链表链接起来,并且将指向第一个块的指针保存在特殊位置
  • 组:将n个空闲块的地址保存在第一个空闲块中
  • 计数:记录第一块的地址和紧跟第一块的连续的空闲块的数量,空闲空间表的的每个条目包括磁盘数量和数量。

大容量存储器结构

常见的大容量存储结构是磁盘,磁盘的编址方式为柱面,磁道和扇区。逻辑块包含柱面号,磁道号和扇区号。柱面:指的是各磁盘相同位置上磁道的集合。
磁盘根据查询方式的不同也可以分为:

  • 固定头磁盘:在每条磁道上都有一个读写磁头
  • 移动头磁盘:每一个盘面仅配有一个磁头,该磁头能够移动以寻道

磁盘时间=定位时间(寻道时间+旋转延迟时间)+传输时间
寻到时间就是把磁头移动到指定磁道上所经历的时间
旋转延迟时间:指定扇区旋转到磁头下面所耗费的时间
传输时间:从磁盘中读出或写入数据所耗费的时间
在这里插入图片描述
通过I/O总线传输数据可以利用主机控制器(在计算机内部总线末端的控制器)或者磁盘控制器(建立驱动或存储器阵列)
磁盘调度算法有:

  • FCFS算法:先来先服务算法
  • SSTF算法:最短寻道时间优先算法
  • SCAN和C-SCAN算法:
    在这里插入图片描述
    而C-SCAN则是返回时不处理服务
  • LOOK和C-LOOK算法:本质上是SCAN算法的变种,但磁头只会移动到最远的请求
  • N-STEP-SCAN和F-SCAN算法:N-STEP-SCAN算法将请求队列分为若干个子队列,磁盘调度咱找FCFS算法依次处理这些子队列。
    而F-SCAN算法只将磁盘请求队列划分为两个子队列,然后按SCAN算法处理

算法选择上可以参考下图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值