fifo页置换linux程序,操作系统原理提纲

以下是我阅读Abraham Silbershatz《Oprating system concepts》(第七版)时做的提纲。目前仅包括前十三章。标注(略)的部分是暂时跳过的。

第一章 导论

1.1 操作系统做什么(略)

1.2 计算机系统组织

1.2.1 计算机系统操作

现代通用计算机系统由一个或多个CPU和若干设备通过共同的总线相连而成,该总线提供了对共享内存的访问。

事件的发生通常通过硬件或软件中断来表示。系统调用也能触发中断。

1.2.2 存储结构

内存通常是用DRAM实现的。

存储设备层次:寄存器、高速缓存、主存、电子磁盘、磁盘

1.2.3 I/O结构(略)

1.3 计算机系统体系结构

1.3.1 单处理器系统

1.3.2 多处理器系统

1.3.3 集群系统

1.4 操作系统结构(略)

1.5 操作系统操作

1.5.1 双重模式操作

内核模式和用户模式系统开始引导时,硬件处于内核模式。接下来装入操作系统开始在用户模式下执行用户进程。一旦出现陷阱或中断,硬件会从用户模式切换到内核模式。如果试图在用户模式下执行特权指令,那么硬件并不执行该指令,而是认为该指令非法,并将其以陷阱的形式通知操作系统。

特权指令:I/O控制、定时器管理和中断管理。

1.5.2 定时器

防止程序进入死循环,或者不将控制权返回给操作系统

1.6 进程管理

创建和删除用户进程和系统进程

挂起和重启进程

提供进程同步机制

提供进程通信机制

提供死锁处理机制

1.7 内存管理

记录内存的哪部分正在被使用以及被谁使用

当有内存空间时,决定哪些进程可以装入内存

根据需要分配和释放内存空间

1.8 存储管理

1.8.1 文件系统管理

创建和删除文件

创建和删除目录

提供操作文件和目录的原语

1.8.2 大容量存储器管理

空闲空间管理

存储空间分配

硬盘调度

1.8.3 高速缓存(略)

1.8.4 I/O系统

通用设备驱动器接口

硬件设备驱动程序

第二章 操作系统结构

2.1 操作系统服务

用户界面、程序执行、I/O操作、文件系统操作、通信、错误检测、资源分配、统计、保护和安全

2.2 操作系统的用户界面

2.2.1 命令解释程序

2.2.2 图形用户界面

2.3 系统调用

系统调用提供了操作系统提供的有效服务界面

2.4 系统调用类型

进程控制、文件管理、设备管理、信息维护和通信

2.5 系统程序

包括但不限于系统调用的简单接口

文件管理、状态信息、文件修改、程序语言支持、程序装入与执行、通信

2.6 操作系统设计与实现(略)

2.7 操作系统结构

简单结构(MS-DOS)、分层、微内核、模块(Linux、 Mac OS X)

2.8 虚拟机

把单个计算机的硬件抽象为几个不同的执行部件,使得每个独立的执行环境似乎都在自己的计算机上运行

2.9 系统生成(略)

2.10 系统启动

CPU启动后,具有预先定义内存位置的指令寄存器被重新装载,并在此开始执行。该位置就是初始引导程序的所在。初始引导程序装入一个较复杂的引导程序,而后再装入内核。

手机在ROM中保存完整的操作系统

第三章 进程

3.1 进程概念

3.1.1 进程

进程包括程序代码、程序计数器的值、寄存器的内容、进程堆栈段、数据段。

3.1.2 进程状态

创建、运行、等待、就绪、终止

3.1.3 进程控制块

进程状态、程序计数器、寄存器、CPU调度信息、内存管理信息、I/O信息

3.1.4 线程(略)

3.2 进程调度

3.2.1 调度队列

分为作业队列和就绪队列

3.2.2 调度程序

长期调度程序:从缓冲池中选择进程,并装入内存。

中期调度程序:将进程从内存中移出和重新放入。

短期调度程序:决定谁能获得CPU。

3.2.3 上下文切换

保存当前进程的状态并恢复另一个进程的状态

进程上下文用进程的PCB表示

3.3 进程操作

3.3.1 进程创建

3.3.2 进程终止

3.4 进程间通信

3.4.1 共享内存系统

生产者和消费者问题

3.4.2 消息传递系统(略)

3.5 IPC系统实例(略)

3.6 客户机服务器通信

3.6.1 Socket

3.6.2 远程过程调用

RPC(Remote Procedure Call ProtocoL) 远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

3.6.3 远程方法调用

RMI, Remote method invocation是一个类似于RPC的Java特性。RMI允许线程调用远程对象的方法。如果对象位于不同的JVM上,就认为它是远程的。

在RPC中,远程过程的参数是普通数据结构,而RMI可以将对象作为参数传递给远程方法。

第4章 线程

4.1 概述

线程是CPU使用的基本单元,它由线程ID、程序计数器、寄存器集合和栈组成

4.2 多线程模型

4.2.1 多对一模型

将许多用户级线程映射到一个内核级线程。如果一个线程执行了阻塞系统调用,那么整个进程会阻塞。

4.2.2 一对一模型

将每个用户线程映射到一个内核线程

4.2.3 多对多模型

多路复用了许多用户线程到同样数量或更小数量的内核线程上

4.3 线程库

为程序员提供创建和管理线程的API

4.4 多线程问题

4.4.1 系统调用fork()和exec()

UNIX有两种形式的fork(),一种复制所有线程,另一种只复制调用了系统调用fork()的线程。

4.4.2 取消线程

异步取消和延迟取消

4.4.3 信号处理

4.4.4 线程池

在进程开始时创建一定数量的进程,并放入池中以等待工作。 当服务器收到请求时唤醒池中的一个线程。 如果池中没有可用的线程,那么服务器会一直等待直到有空线程为止。

4.4.5 线程特定数据

4.5 操作系统实例

4.5.1 Windows XP线程

4.5.2 Linux线程

Linux并不区分进程和线程,通常统称为任务。

第五章 CPU调度

5.1 基本概念

5.1.1 CPU-I/O区间周期

进程执行从CPU区间开始,之后是I/O区间,如此循环往复。

5.1.2 CPU调度程序

5.1.3 抢占调度和非抢占调度

5.1.4 分派程序

用来将CPU交给短期调度程序选择的进程

5.2 调度准则

CPU使用率、吞吐量、周转时间、等待时间、响应时间

5.3 调度算法

先到先服务

最短作业优先

优先级调度

轮转法调度

多级队列调度:分成多个独立队列,每个有自己的调度算法

多级队列反馈调度:根据CPU使用时间,允许进程在不同队列之间移动

5.4 多处理器调度(略)

5.5 线程调度(原书缺页)

5.6 操作系统实例

5.6.1 Solaris

5.6.2 Windows XP

5.6.3 Linux

Linux调度程序是抢占的、基于优先级的算法、Linux给较高优先级的任务较长的时间片。

每个运行队列包括两个优先级队列:活动的和到期的。当所有任务都耗尽其时间片时, 两个优先级队列相互交换。

5.7 算法评估(略)

第六章 进程同步

6.1 背景

多个进程并发访问和操作同一数据且执行结果和访问发生的特定顺序有关,称为竞争条件。

6.2 临界区问题

6.3 Peterson算法

int turn

boolean flag[2]

turn表示哪个进程可以进入临界区,flag表示哪个进程想要进入临界区

6.4 硬件同步

TestAndSet指令:在进入临界区之前,首先用TS指令测试s,如果没有进程在临界区内,则可以进入,否则必须循环测试直到TS(s)为true

swap指令:交换两个字的内容,为每个临界区设置一个布尔锁变量,当其值为false时表示无进程在临界区

6.5 信号量

6.5.1 用法

计数信号量的值域不受限制,而二进制信号量的值只能为0或者1。

有的系统把二进制信号量称为互斥锁

6.5.2 实现

忙等待:这种类型的信号量也被称为自旋锁,因为在等待时锁还在运行

为了克服忙等待,可以修改信号量操作wait()和signal()的定义。当一个进程执行wait()操作时,发现信号量不为正,则它必须等待。然而,该进程不是忙等而是阻塞自己。

阻塞操作将一个进程放入到与信号量相关的等待队列中,并将其状态切换为等待。

6.5.3 死锁与饥饿

6.6 经典同步问题

6.6.1 有限缓冲问题:若缓冲为空,则消费者必须等待;若缓冲为满,则生产者必须等待

6.6.2 读者和写者问题

进程共享以下数据结构:

semaphore mutex, wrt;

int readcount;

写者进程结构:

do{

wait(wrt);

...

//writing is performed

...

signal(wrt);

}while(true);

读者进程结构:

do{

wait(mutex);

readcount++;

if(readcount == 1)

wait(wrt);

signal(mutex);

...

//reading is performed

...

wait(mutex);

readcount--;

if(readcount == 0)

signal(wrt);

signal(mutex);

}while(TRUE);

6.6.3 哲学家吃通心粉问题

6.7 管程

6.7.1 使用

管程类型提供了一组由程序员定义的、在管程内互斥的操作。

管程类型的表示包括一组变量的声明和对这些变量操作的子程序和函数的实现。

管程结构确保一次只有一个进程能在管程内活动。

6.7.2 哲学家吃通心粉问题的管程解决方案

6.7.3 基于信号量的管程实现

对每个管程,都有一个信号量mutex。进程在进入管程之前必须执行wait(mutex), 在离开管程之后必须执行signal(mutex)。

6.8 同步实例

6.8.1 Solaris同步

6.8.2 Windows XP同步

6.8.3 Linux同步

Linux内核提供自旋锁和信号量,以进行内核加锁。Linux通过两个简单的系统调用preempt_disable()与preempt_enable(),用于禁止与允许内核抢占。如果内核模式的任务占有锁,那么内核不能被抢占。

自旋锁、内核抢占只有在短期占有锁时,才可用于内核。

6.9 原子事务

第七章 死锁

7.1 系统模型

7.2 死锁特征

7.2.1 必要条件

互斥、占有并等待、非抢占、循环等待

7.2.2 资源分配图

7.3 死锁处理方法

避免死锁、检测并修复死锁、忽视死锁问题

7.4 死锁预防

只要确保四个条件至少有一个不成立,就能避免死锁的发生

7.4.1 互斥:例如只读文件,不需要互斥

7.4.2 占有并等待:当一个进程申请一个资源时,它不能占有其他资源

7.4.3 非抢占:如果一个进程占有资源并申请另一个不能立即释放的资源,那么其现已分配的资源都可被抢占

7.4.4 循环等待:要求每个进程按递增顺序申请资源

7.5 死锁避免

7.5.1 安全状态:如果系统能按某个顺序为每个进程分配资源并能避免死锁,那么系统状态就是安全的。

7.5.2 资源分配图算法

除了申请边和分配边外,引入一新类型的边,称为需求边。 只有在将申请边变成分配边而不会导致资源分配图形成环时,才允许申请。

7.5.3 银行家算法

银行家算法数据结构

1)可利用资源向量Available

是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。

2)最大需求矩阵Max

这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。

3)分配矩阵Allocation

这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K。

4)需求矩阵Need。

这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。

Need[i,j]=Max[i,j]-Allocation[i,j]

算法 的实现

一、初始化

由用户输入数据,分别对可利用资源向量矩阵AVAILABLE 、 最大需求矩阵MAX 、分配矩阵ALLOCATION、 需求矩阵NEED 赋值。

二、银行家算法

在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。

银行家算法的基本思想是分配资源之前, 判断系统是否是安全的; 若是, 才分配。它是最具有 代表性的避免死锁的算法。

设进程cusneed 提出请求REQUEST [i] ,则银行家算法按如下规则进行判断。

(1) 如果REQUEST [cusneed] [i]<= NEED[cusneed][i] ,则转(2) ;否则,出错。

(2) 如果REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i] ,则转(3) ;否则,出错。

(3) 系统试探分配资源,修改相关数据:

AVAILABLE[i]-=REQUEST[cusneed][i];

ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];

NEED[cusneed][i]-=REQUEST[cusneed][i];

(4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复 原状, 进程等待。

三、安全性检查算法

(1) 设置两个工作向量Work=AVAILABLE;FINISH

(2) 从进程集合中找到一个满足下述条件的进 程,

FINISH==false;

NEED<=Work;

如找到,执行(3) ; 否则,执行(4)

(3) 设进程获得资源,可顺利执行,直至完 成,从而释放资源。

Work+=ALLOCATION;

Finish=true;

GOTO 2

(4) 如所有的进程Finish= true ,则表 示安全;否则系统不安全。

操作系统安全状态和不安全状态:

安全序列是指一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源

量之和。

如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。

不存在一个安全序列。不安全状态不一定导致死锁。

7.6 死锁检测

7.6.1 每种资源类型只有单个实例

当且仅当资源分配图中有一个环时,系统中存在死锁

7.6.2 每种资源类型可有多个实例(略)

7.6.3 应用检测算法

何时调用检测算法?取决于两个因素:

死锁发生的可能频率是多少?

当死锁发生时,有多少进程会受影响?

7.7 死锁恢复

7.7.1 进程终止

终止所有死锁进程

一次取消一个进程直至死锁消失为止

7.7.2 资源抢占

如何选择牺牲品?如何回滚?如何确保不会发生饥饿?

第八章 内存管理

8.1 背景

8.1.1 基本硬件

寄存器(基地址寄存器、界限地址寄存器)、高速缓存、内存

8.1.2 地址绑定

源程序中的地址通常是用符号表示的。编译器通常将这些符号是指绑定在可重定位的地址。 连接程序或加载程序再将这些可重定位的地址绑定成绝对地址。

可分为编译时、加载时、执行时

8.1.3 逻辑地址空间和物理地址空间

8.1.4 动态加载

一个子程序只有在被调用时才会被加载

8.1.5 动态连接和共享库

动态链接:把链接延迟到执行时

8.2 交换

进程可以暂时从内存中交换到备份存储上,当需要再次执行时再调回到内存中。

8.3 连续内存分配

8.3.1 内存映射与保护(?)

8.3.2 内存分配

固定分区、可变分区

首次适应、最佳适应、最差适应

8.3.3 碎片

外部碎片:进程之间的小片段

内部碎片:块内部的小片段

紧缩

8.4 分页

8.4.1 基本方法

将物理内存分为固定大小的块,称为帧;将逻辑内存也分为同样大小的块,称为页。

CPU生成的每个地址分为两个部分:页号和页偏移。

每个进程可能有半页的内部碎片,因此构造小一些的页较好

页表中的每一项也有一定的开销,因此构造大一些的页较好

8.4.2 硬件支持

最简单的方法:使用专用寄存器

页表较大时:使用页表基寄存器

延迟过长的标准解决方案:使用专用的硬件缓冲(转换表缓冲区,TLB)

8.4.3 保护

只读、读写、只执行

有效-无效位

8.4.4 共享页

用于共享公共代码的页,代码在执行期间不会改变

8.5 页表结构

8.5.1 层次页表

将页表再分页,将页号分为页码和页偏移

也可使用多级分页方案

8.5.2 哈希页表

用链表处理碰撞

8.5.3 反向页表

对于每个真正的页或帧才有一个条目, 每个条目包含保存在真正内存位置的页的虚拟地址以及拥有该页的进程的信息

8.6 分段

8.6.1 基本方法

一个C编译器可能会创建如下段: 代码、全局变量、堆、每个线程采用的栈、标准的C库函数

8.6.2 硬件

段表

8.7 实例

第九章 虚拟内存

9.1 背景

虚拟内存将用户逻辑内存和物理内存分开。 这在现有物理内存有限的情况下,为程序员提供了巨大的虚拟内存。

虚拟内存也允许文件和内存通过共享页而为两个或多个进程所共享。

9.2 按需调页

只有在程序需要时才载入页

9.3 写时复制

允许父进程和子进程开始时共享同一页面。 如果任何一个进程需要对页进行写操作,那么就创建一个共享页的副本。

很多操作系统为此类请求提供了空闲缓冲池。

9.4 页面置换

9.4.1 基本页置换

如果有空闲帧,则选用空闲帧。否则用置换算法选择一个牺牲帧

修改位:指示是否已修改。如已修改,则重新写回到硬盘上

9.4.2 FIFO页置换

Belady异常:对有的页置换算法,页错误率可能随着所分配的帧数的增加而增加

9.4.3 最优置换

9.4.4 LRU页置换

9.4.5 近似LRU页置换

页表内每一项都关联着一个引用位,每当引用一个页时,相应页表的引用位就被硬件置位。

9.4.6 基于计数的页置换

最不经常使用页置换算法

最常使用页置换算法

9.4.7 页缓冲算法

保留一个空闲帧缓冲池。在牺牲帧写出之前,所需要的页就从缓冲池中读到空闲内存。

维护一个已修改页的列表。每当调页设备空闲时,就选择一个修改页并写到磁盘上。

保留一个空闲帧池,该帧被重用之前如果需要使用原来页,就直接从空闲帧池中取出来使用。

9.5 帧分配

9.5.1 帧的最少数量(略)

9.5.2 分配算法

平均分配、按比例分配(根据进程大小而非优先级)

9.5.3 全局分配和局部分配

全局分配允许进程从另一个进程中拿到帧,而局部置换不允许

9.6 系统颠簸

9.6.1 原因

在页面置换时所有页都在使用,而导致反复换页

9.6.2 工作集合模型

检查最近delta个页的引用,将这些页的集合称为工作集合

9.6.3 页错误频率

如果页错误率太低,从进程中移走帧,否则为进程分配更多的帧

9.7 内存映射文件

9.7.1 基本机制

使用虚拟内存技术将文件I/O作为普通内存访问

9.7.2 Win32 API中的共享内存(略)

9.7.3 内存映射I/O

一组内存地址专门映射到设备寄存器,对这些内存地址读写就如同对设备寄存器的读写

9.8 内核内存的分配(略)

9.9 其他考虑

9.9.1 预调页

同时将工作集合中的所有页一起调入到内存中,以避免大量的页错误

9.9.2 页大小(略)

9.9.3 TLB范围

TLB范围指通过TLB可访问的内存量,等于TLB条数与页大小之积

理想状况下,一个进程所有的工作集合应当位于TLB中

增加TLB范围可以增加条数,增加页的大小或提供多种页大小

现代趋势是软件来管理TLB和操作系统提供对多种页大小的支持

9.9.4 反向页表

9.9.5 程序结构(略)

9.9.6 I/O互锁

在使用请求页面调度时,有时需要允许有些页在内存中被锁住。

这种情况之一是需要对用户的内存进行I/O。

一种解决方法是只对系统内存和I/O设备进行I/O,不对用户内存进行。

另一种方法是增加一个锁住位。

9.10 操作系统实例

9.10.1 Windows XP

9.10.2 Solaris

第十章 文件系统接口

10.1 文件概念

10.1.1 文件属性

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

10.1.2 文件操作

创建、读、写、删除、截短

每个打开文件有如下相关信息:

文件指针、文件打开计数器、文件磁盘位置、访问权限、共享锁、专用锁

10.1.3 文件类型

10.1.4 文件结构(略)

10.2 访问方法

10.2.1 顺序访问

10.2.2 直接访问

10.2.3 其他访问方式

可建立在直接访问方式之上

创建文件索引、对文件索引再创建索引

10.3 目录结构

10.3.1 存储结构

存储文件系统的一大块空间称为卷,卷可以存放多个操作系统,使系统运行多个操作系统

系统上文件的信息保存在设备目录或卷表中

10.3.2 目录概述

10.3.3单层结构目录

所有文件包含在同一目录中

10.3.4 双层结构目录

为每个用户创建独立目录

10.3.5 树状结构目录

10.3.6 无环图目录

同一文件或子目录可出现在两个不同目录中

10.3.7 通用图目录

允许目录中有环存在

10.4 文件系统安装(略)

10.5 文件共享

10.5.1 多用户

10.5.2 远程文件系统

远程文件共享方式:在机器间人工传输文件、使用分布式文件系统、使用互联网传输

10.5.3 一致性语义

一致性语义是多用户同时访问共享文件时的语义,规定了一个用户所修改的数据何时对另一用户可见。

10.6 保护

使信息不受物理损坏和非法访问。

10.6.1 访问类型

读、写、添加、删除、执行、列表清单

10.6.2 访问控制

实现基于身份访问的最为普通的方法是为每个文件和目录增加一个访问控制列表, 给定每个用户名及其所允许的访问类型。

现在最为常用的方法是将访问控制列表与更为常见的用户、组和其他成员访问控制方案一起组合使用

10.6.3 其他保护方式

为每个文件加上密码

第十一章 文件系统实现

11.1 文件系统结构

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

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

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

逻辑文件系统管理元数据。

以上设计中的每层利用较低层的功能创建新的功能来为更高层服务。

11.2 文件系统实现

11.2.1 概述

每个卷的引导控制块包括系统从该卷引导操作系统所需要的信息。

卷控制块包括卷的详细信息,如分区的块数、块的大小、空闲块的数量和指针、空闲FCB的数量和指针等。

每个文件的FCB包括很多该文件的详细信息,如文件权限、拥有者、大小和数据块的位置。

11.2.2 分区与安装

分区可以是“生的”,即没有文件系统,或者“熟的”即含有文件系统。

根分区包括操作系统内核或其他系统文件,在引导时装入内存。

11.2.3 虚拟文件系统

11.3 目录实现

11.3.1 线性列表

11.3.2 哈希表

根据文件名得到一个值,并返回一个指向线性列表中元素的指针

11.4 分配方法

为文件分配空间的方法

11.4.1 连续分配

11.4.2 链接分配

11.4.3 索引分配

11.4.4 性能

11.5 空闲空间管理

11.5.1 位向量

每块用一位表示。如果一块为空闲,那么其位为1;如果一块已分配,那么其位为0。

11.5.2 链表

11.5.3 组

将前n个空闲块的地址存在第一个空闲块中,而最后一块包含另外n个空闲块的地址。

11.5.4 计数

记录第一块的地址和紧跟第一块的连续空闲块的数量n。

11.6 效率与性能(略)

11.7 恢复

确保系统失败不会引起数据丢失和数据的不一致

11.7.1 一致性检查

将目录结构数据与磁盘数据块相比较,试图纠正所发现的不一致。

11.7.2 备份与恢复

11.8 基于日志结构的文件系统

11.9 NFS

NFS是用于通过局域网访问远程文件的软件系统实现和规范。

第十二章 大容量存储器的结构

12.1 大容量存储器结构简介

12.1.1 磁盘

磁头与磁臂相连,磁臂能将所有磁头作为一个整体一起移动。

磁盘片的表面被划分成圆形磁道,磁道再进一步划分为扇区。

位于同一磁臂位置的磁道集合形成了柱面。

磁头飞行于极薄的空气层上,所以磁头有与磁盘表面接触的危险。这种现象称为磁头碰撞。

12.1.2 磁带

12.2 磁盘结构

12.3 磁盘附属

12.3.1 主机附属存储

12.3.2 网络附属存储

12.3.3 存储区域网络

12.4 磁盘调度

12.4.1 FCFS

12.4.2 SSTF

12.4.3 SCAN

12.4.4 C-SCAN

12.4.5 LOOK

SCAN的实际实现:只移动到一个方向上最远的请求为止

12.4.6 磁盘调度算法的选择

12.5 磁盘管理

12.5.1 磁盘格式化

12.5.2 引导块

在计算机开始运行时,它需要运行一个初始化程序。 该初始化自举程序初始化系统的各个方面,接着启动操作系统。 自举程序应找到磁盘上的操作系统内核,装入内存,并转到起始地址,开始操作系统的执行。

12.5.3 坏块

对于简单磁盘,可以手工处理坏块。

对于复杂的磁盘,控制器可以用备用块来逻辑地替代坏块。

12.6 交换空间管理

当物理内存的数量达到临界低点,进程从内存移到交换空间以释放内存空间。

12.6.1 交换空间的使用

12.6.2 交换空间位置

交换空间可有两个位置:交换空间在普通文件系统上加以创建,或者是在一个独立的磁盘分区上进行。

12.7 RAID空间结构

12.7.1 通过冗余改善可靠性

12.7.2 通过并行处理改善性能

12.7.3 RAID级别

RAID 0: 按块分散的磁盘阵列,但没有冗余

RAID 1: 磁盘镜像

RAID 2: 每个字节都有一个相关奇偶位用于错误检测

差错纠正方案:存储两个或多个额外位,可以纠错

RAID 3: 如果一个扇区损坏,通过计算其他磁盘扇区相应位的奇偶值可得出损坏位究竟是1还是0

与RAID 2相比,RAID 3政治需要一个额外磁盘

RAID 4:采用与RAID 0一样的块级分散,另外在一独立磁盘上保存其他N个磁盘相应块的奇偶块

RAID 5、RAID 6(略)

12.8 稳定存储实现

需要在多个具有独立出错模式的设备上复制所需信息

12.9 三级存储结构

12.9.1 三级存储设备

三级存储是用可移动介质制造的,主要特征是低价格

包括CD、DVD、磁带等

12.9.2 操作系统支持(略)

12.9.3 性能

速度、可靠性和价格

第十三章 I/O系统

13.1 概述

13.2 I/O硬件

13.2.1 轮询

用于协调控制器和主机之间的生产者和消费者的关系

13.2.2 中断

CPU硬件有一条中断请求线(IRL)。CPU每执行完一条指令后,都将检测IRL。

如检测到中断信号,则跳转到内存固定位置的中断处理程序。

中断机制接受一个地址,对绝大多数体系结构,这个地址是一个称为中断向量的表中偏移量。

13.2.3 直接内存访问

使用专用的处理器完成内存访问

13.3 I/O应用接口

从详细而不同的I/O设备中抽象出一些通用类型。

13.3.1 块与字符设备

13.3.2 网络设备

13.3.3 时钟与定时器

13.3.4 阻塞与非阻塞I/O

13.4 I/O内核子系统

13.4.1 I/O调度(略)

13.4.2 缓冲

13.4.3 高速缓存

13.4.4 假脱机(spooling)与设备预留

简单来说就是在内存中形成缓冲区,在高级设备形成输出井和输入井, 传递的时候,从低速设备传入缓冲区,再传到高速设备的输入井, 再从高速设备的输出井,传到缓冲区,再传到低速设备。

13.4.5 I/O处理

13.4.6 I/O保护

定义所有I/O指令为特权指令,用户无法直接发出I/O指令,必须通过操作系统进行。

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

13.6 流

13.7 性能

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值