操作系统期末复习笔记

1 篇文章 0 订阅

目录

参考资料:课上内容、网络博文、王道考研。

一、引论

主要介绍操作系统的基本概念。

1. 操作系统概念

	是控制和管理计算机的硬件、软件资源,并且给上述应用程序提供公共服务的软件。

① 是一个软件(系统软件,而不是硬件)
② 作用a:管理计算机的硬件、软件资源
③ 作用b:给计算机硬、软件应用程序、用户提供公共服务

2. 操作系统的作用?

①是一个扩展的机器(如硬盘驱动)
②资源管理器:两种方式实现多路复用(时间/空间复用)
③进程管理器
④扩展的服务机器

来自王道考研

3. 操作系统提供的服务?

a.创建程序
b.程序执行
c.访问I/O设备
d.文件控制存取
e.系统访问
f.错误检测和回应
g.系统统计

4. 操作系统的演变?

(1)最大限度利用资源
(2)硬件升级以及新型硬件的出现
(3)新服务
(4)修复
(5)用户体验

5. SPOOLing假脱机技术

(1)外部设备联机并行操作。
(2)假脱机是多道程序设计系统中处理独占 I/O 设备的一种方法。
(3)SPOOLing 系统的三大组成部分:

(磁盘中)输入井和输出井
(内存中)输入缓冲和输出缓冲
 输入进程和输出进程

(4)SPOOLing技术如何使一台打印机虚拟成多台打印机?

答:将一台独享打印机改造为可供多个用户共享的打印机,是应用SPOOLing技术的典型实例。具体做法是:系统对于用户的打印输出,但并不真正把打印机分配给该用户进程,而是先在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。若打印机空闲,输出程序从请求打印队首取表,将要打印的数据从输出井传送到内存缓冲区,再进行打印,直到打印队列为空。

6. 操作系统的基本概念:

(1)进程
进程不只是程序,还需要处理器、内存等。是运行的程序
(2)地址空间
(3)文件

Unix所有程序都抽象成了文件。打印机不可读只可写,键盘是串行文件,鼠标只可读不可写。
(4)I/O
(5)保护机制
(6)命令解释器shell

用户与OS打交道的中介

#cat file1 file2 file3 | sort >/dev/lp &

显示三个文件依次到屏幕上,排序三个文件的内容
cat显示文件
|管道,把上一步结果输入给下一步命令
其中>代表重定向
dev写到另一个文件
/lp打印机
&后台运行

(7)系统调用
用户程序与OS之间的接口
用户只能请求系统调用,请求内核帮你从磁盘中读取一个文件

7. 个体重复系统发育:

操作系统的发展符合达尔文演化理论,一个个体重复着物种的演化过程。

(1)大型内存
(2)保护硬件
(3)硬盘
(4)虚拟内存

8. 系统调用

来自王道考研

9. 操作系统的功能

a.进程管理
b.内存管理
c.设备管理
d.文件系统管理
e.用户界面管理(命令行,GUI,API)
f.作业管理

10. 操作系统的特点?

(1)并发
·同一个时间执行多个任务(并发就是时间管理大师,并行就是分身)
·并行执行(在重叠时间段内,新任务在其他任务结束前开始)
·非顺序执行
·通用处理资源(如中央处理单元CPU,主内存)
(2)共享
(并发和共享互为条件)
(3)虚拟化
(4)异步化执行

11. OS的发展与分类

王道考研

12. 中断、异常和陷入

(1)中断:

是为了设备与CPU之间的通信。

异常:

异常是由当前正在执行的进程产生。

(2)中断的两种方式:外部和陷入
interrupt 即外中断,指来自处理机和内存外部的中断,包括 I/O 设备发出的 I/O中断、外部信号中断、各种定时器引起的时钟中断以及调试程序中设置的断点等引起的调试中断等。
trap 即内中断(异常),主要指在处理机和内存内部产生的中断。它包括程序运算引起的各种错误。软中断是通信进程之间用来模拟硬中断的一种信号通信方式。
(3)中断和陷阱的主要区别:

① 陷阱通常由处理机正在执行的现行指令引起,而中断则是由与现行指令无关的中断源引起的。
② 陷阱处理程序提供的服务为当前进程所用,而中断处理程序提供的服务则不是为了当前进程的。
③ CPU 在执行完一条指令之后,下一条指令开始之前响应中断,而在一条指令执行中也可以响应陷阱。
④ 在有的系统中,陷入处理程序被规定在各自的进程上下文中执行,而中断处理程序则在系统上下文中执行。

(4)用户态、内核态之间的切换是怎么实现的?
答:通过中断实现,并且中断是唯一途径。通过执行一个特权指令,将程序状态字(PSW)的标志位设为“用户态”。
在这里插入图片描述

13. 操作系统的结构

①单体系统

主程序:处理服务过程请求
服务过程:执行系统调用
实用过程:辅助服务过程
在这里插入图片描述

②层次式系统

高层→调用下层
下层不能调用高层
在这里插入图片描述

③微内核

为了实现高可靠性,将操作系统划分成小的、良好定义的模块,只有其中一个模块–微内核–运行在内核态上,其余的模块,由于功能相对弱些,则作为普通用户进程运行。特别地由于把每个设备驱动和文件系统分别作为普通用户,这些模块中的错误虽然会使这些模块崩溃,但是不会使得整系统死机。
在这里插入图片描述

④客户机——服务器

微内核的略微变体

  1. 服务器:每个服务器提供某种服务。
  2. 客户端:使用这些服务。
    通常在系统最底层是微内核,这个模式的本质是存在客户端进程和服务器进程。
    在这里插入图片描述

⑤虚拟化

ⅠVM/370

最初命名为CP/CMS,后来改名为VM/370,它的目的是为了将多道程序和获取更方便的裸机彻底隔离。它的核心称为虚拟机监控程序,它在裸机上运行并且具备了多道程序功能。该系统向上层提供了若干个虚拟机。它不同于其他操作系统:这些虚拟机不是那种具有文件等优良特征的扩展计算机。它们仅仅是裸机硬件的精确复制品,包含了内核态/用户态、I/O功能、中断及其他真是硬件所具备的全部内容。
在这里插入图片描述

Ⅱ 虚拟机的再现

虚拟化的优点:

  1. 一台物理机就可以运行许多虚拟机,每个虚拟机看起来都是一台完全的机器。这样可以节省费用。
  2. 可以同时运行两个或多个操作系统。
    在这里插入图片描述
Ⅲ Java虚拟机

它是一种体系结构。Java编译器为JVM生成代码,这些代码以后可以由一个软件JVM解释器质性。这种处理方式的优点在于,JVM代码可以通过Internet传送到任何有JVM解释器的机器上,并在该机器执行。使用JVM的优点就是如果解释器正确地完成,并不意味着结束,还要对所输入的KVM进行安全性检测,然后在一直保护环境下执行,这样,这些程序就不能偷窃数据或进行其他任何有害的操作。
在这里插入图片描述

6.外核

与虚拟机克隆真实机器不同,另一种策略是对机器进行分区。给每个用户整个资源的一个子集。
在底层中,一种称为外核的程序在内核态中运行。它的任务是为虚拟机分配资源,并检查试图使用这些资源的企图,以确保没有机器会使用他人资源。每个用户层的虚拟机可以运行自己的操作系统,但限制在只能使用已经申请并且获得分配的那部分资源。
外核机制的优点是减少了映像层。在其他的设计中,每个虚拟机都认为它有的磁盘,其盘块号从0到最大编号,这样虚拟机监控程序必须维护一张表格用以重映像磁盘地址,有了外核这个重映像处理就不需要了,外核只需要记录已经分配各个虚拟机的有关资源即可。这个方法还有一个优点,它将多道程序(在外核内)与用户操作系统代码(在用户控件内)加以分离,而且相应负载并不重,这是因为外核所做的一切,只是保持多个虚拟机彼此不发生冲突。

二、进程与线程

程序vs进程 就像 菜谱 vs 美食
进程:资源分配的基本单位
线程:调用的基本单位

(一)进程

1、创建进程的四种主要事件:

1)系统初始化:前台进程 后台进程(守护进程)
2)正在运行的程序执行了创建进程的系统调用
3)用户请求创建新进程
4)批处理作业初始化

2、进程的状态

在这里插入图片描述
在这里插入图片描述
阻塞状态不参与cpu调动

3、进程实现

每个进程在内核中,表现为结构体PCB(结构控制块),该表项包含了进程状态的重要信息,字段分三类:进程管理、存储管理和文件管理。进程的PID代表进程的唯一存在。
进程表:接口控制块组(操作系统维护之)
通过调用小程序scheduler来切换进程
中断进行的程序切换:

1)硬件压入堆栈程序计数器等
2)硬件从中断向量装入新的程序计数器
3)汇编语言过程保存寄存器值
4)汇编语言过程设置新的堆栈
5)C中断服务例程运行(典型的读和缓冲输入)
6)调度(scheduler)程序决定下一个将运行的进程
7)C过程返回至汇编代码
8)汇编语言过程开始运行新的当前进程

4、多道程序设计模型

在这里插入图片描述
CPU 利用率 = 1-p^n
p:一个进程等待 I/O 操作的时间与其停留在内存中时间的比。
n:进程的数目。
e.g. 假设一个内存 8GB 的计算机,操作系统占用 2GB,每个进程占用 2GB,且进程有 80% 的时间用于 I/O 等待,则内存空间中最多允许同时运行 3 个进程,CPU 利用率为 1-0.8^3 ≈ 49%。若增加 8GB 的内存,CPU 利用率可增加到 79%,再增加 8GB 内存可使 CPU 利用率增加到 91%。所以增加一次内存就够了。

5、进程的特征

在这里插入图片描述

(二)线程

1、线程定义:

在一个过程内部,不同片段并发执行
每个线程都有自己的寄存器&栈

2、线程的特点:

1)依附于进程存在
2)资源由进程分配
3)执行:多个系统并发(通过函数调用call)

3、多线程的优点:

(1)响应及时
(2)资源共享
(3)经济实惠
(4)多处理器提高利用率

4、构造服务器的三种方法

模型特性
多进程并行性、阻塞系统调用
单线程进程无并行性、阻塞系统调用
有限状态机并行性、非阻塞系统调用、中断

5、POSIX线程

在这里插入图片描述

6、两类线程的实现

a.用户态(用户空间,不知道线程)

在这里插入图片描述
b.内核态(知道线程)
在这里插入图片描述
c.混合实现
在这里插入图片描述

7、进程和线程的区别

地址空间:线程:共享本进程的地址空间,进程之间:独立的地址空间。

资源拥有:同一进程内的线程——共享本进程的资源如内存、I/O、cpu等,进程之间的资源是独立的。一个进程崩溃后,在保护模式下不会对其他进程产生影响,一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
进程是处理器调度的基本单位,但是线程不是。
两者均可并发执行。
在这里插入图片描述

(三)进程间的通信

1.竞态

Race condition 两个或多个进程同时读、写→共享数据

最后结果依赖于进程运行的精确时序

2.临界区(Critical regions)

临界资源——易产生竞态的资源
临界区——进程访问临界资源(共享内存)的代码

3.其他概念解释

互斥:
以某种手段确保当一个进程在使用一个共享变量或文件时,其他进程不能做同样的操作。
信号量(Semaphore):
使用一个整型变量来累计唤醒次数,取值可以为0或者正值。信号量的操作均作为一个单一的、不可分割的原子操作完成。保证一旦一个信号量操作开始,则在该操作完成或阻塞之前,其他进程均不允许访问该信号量。
原语:
由若干条指令组成的,用于完成一定功能的一个过程。具有不可分割性,即原语的执行必须是连续的,在执行过程中不允许被中断。
忙等待:连续测试一个变量直到某个值出现为止。用于忙等待的锁,称为自旋锁。
互斥量(Mutex):
如果不需要信号量的计数能力,可以使用信号量的一个简化版本。
条件变量:
允许线程由于一些未达到的条件而阻塞。绝大部分情况下与互斥量一起使用。
优先级倒置(priority inversion):
在某一时刻,Low 处于临界区中,此时 High 变到就绪态。现在 High 开始忙等待,但是由于 High 优先级高,所以 Low 不会被调度也就无法离开临界区,所以 High 将永远忙等待下去。

4.4个前提avoid race condition:

1)任何两个进程不能同时处于其临界区
2)不应对CPU的速度和数量做任何假设
3)临界区外运行的进程不得阻塞其他进程(不买票别插队)
4)不得使进程无限期等待进入临界区
在这里插入图片描述
Repeat
entry section //显式声明请求进入
Critical sections; //临界区
exit section //显式离开
Reminder section; //提醒
until false

5.实现互斥的方案

① 屏蔽中断Disabling Interrupts
在单处理器系统中,最简单的方法是使每个进程在刚刚进入临界区后立即屏蔽所有中断,并在就要离开之前再打开所有中断。屏蔽中断后,时钟中断也被屏蔽。而 CPU 只有发生时钟中断或其他中断时才会进行进程切换,这样,在屏蔽中断之后 CPU 将不会被切换到其他进程。于是,一旦某个进程屏蔽中断之后,它就可以检查和修改共享内存,而不必担心其他进程介入。

但是把屏蔽中断的权力交给用户进程是不明智的。但是对内核来说,当它在更新变量或列表的几条指令期间将中断屏蔽是很方便的。所以结论是:屏蔽中断对于操作系统本身而言是一项很有用的技术,但对于用户进程则不是一种合适的通用互斥机制。

② 锁变量lock variables(fake)
设想有一个共享(锁)变量,其初始值为0。当一个进程想进入其临界区时,它首先测试这把锁。如果该锁的值为0,则该进程将其设置为1并进入临界区。若这把锁的值已经为,则该进程将等待直到其值变为0。
但是,这样还是会造成竞争条件。
所有人对其同时读写、产生竞态(读lock和set不是一条指令)
假设有线程A读取并存储锁变量的值时,发现为0,正要设为1时,被另一线程B抢占,也并进去临界区。这时就出现了两个线程同时处于临界区了。
在这里插入图片描述
③ 严格轮换法(Strict Alternation)
在这里插入图片描述
(谁拿到令牌谁喝酒?)
虽然解决了问题,但是仍然有三点弊端:
(1)两个进程速度不匹配(一快一慢)
(2)违反原则三(不买票生排队)
(3)忙等待 busy waiting
连续测试一个变量知道某个值出现为止。用于忙等待的锁,成为自旋锁(spin lock)

④ Peterson解法 (Solved)(笑死了,Peterson荣誉中国国民)
如果双方都争着想进入临界区,那可以让进程尝试“孔融让梨”,主动让对方先使用临界区。
在这里插入图片描述
⑤ TSL指令 硬件
在这里插入图片描述
在这里插入图片描述
【小结】
A.忙等待
B.优先级反转
将优先级低的提到最高,使它获得足够的时间片,迅速执行完任务,为优先级高的腾地方。

6.信号量semaphore(临界资源)

Primitive原语:不可分割、单一的代码段。
Down():对信号量减一(资源申请)==sleep
Up():对信号量增一(资源释放)==wakeup

7.PCP(生产者消费者)有界缓冲区

在这里插入图片描述
产生竞态→信号量解决
mutex互斥量,取值为0或1
在这里插入图片描述
其中,typedef int semaphone是伪代码,信号量是内核态建立和创建使用的,并非int如此简单。
读信号量无意义,只有调用原语有意义。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下是信号量集合的概念:
在这里插入图片描述
现代操作系统两大特点:共享、并发

8.条件变量

互斥量可以允许或阻塞对临界区的访问,而条件变量则允许线程由于一些未达到的条件而阻塞。

条件变量与互斥量经常一起使用。这种模式用于让一个线程锁住一个互斥量,然后当它不能获得它期待的结果时等待一个条件变量。最后另一个线程会向它发信号,使它可以继续执行。wait(condition,mutex) 原子性地调用并解锁它持有的互斥量,所以互斥量也是 wait(condition,mutex) 的参数之一。

但是条件变量不会像信号量那样存在内存中,如果将一个信号传递给一个没有线程在等待的条件变量,那么这个信号就会丢失。所以必须小心使用以防丢失信号。

9.管程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
事件计数器:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一段时间只能有一段进程调用代码再出去,不会出现两个进程同时调用。
在这里插入图片描述
管程是一种高级同步原语。是一个由过程、变量及数据结构等组成的一个集合,它们组成一个特殊的模块或软件包。进程可在任何需要的时候调用管程中的过程,但它们不能再管程之外声明的过程中直接访问管程内的数据结构。

管程有一个很重要的特性,即任一时刻管程中只能有一个活跃进程,这一特性使管程能有效地完成互斥。而进入管程时的互斥由编译器负责,一般的解决方法是引入条件变量,wait 和 signal 操作。

Java 中可以使用 synchronized ,wait 和 notify 来实现管程,没有内嵌的条件变量,而且方法 wait 会被中断,需要显式表示异常处理。

10.三个经典IPC问题(考点读者写者写源码)

(1)哲学家进食

在这里插入图片描述
在这里插入图片描述

(2)读者——写者问题

在这里插入图片描述
读者优先:
在这里插入图片描述
写者优先:
在这里插入图片描述
在这里插入图片描述

(3)睡眠的理发师问题

在这里插入图片描述
在这里插入图片描述

11.进程通信的概念

(1)概念:进程之间的信息交换。
(2)进程的互斥和同步可归结为低级通信
(3)信号量机制作为通讯工具的不足:①效率低:生产者每次只能向缓冲区中投放一个消息 ②通信对用户不透明:程序员必须从低层来实现
(4)进程通信的类型:a共享内存 b消息传递 c管道通信

12.共享内存通信

共享内存:在相互通信的进程之间设有一个公共内存区,一组进程向该公共内存中写,另一组进程从公共内存中读,通过这种方式实现两组进程间的信息交换。

需解决的两个问题:
1怎样提供共享内存
2公共内存中的读写互斥问题

三、死锁

四、内存管理

五、文件系统

六、输入输出

七、虚拟化和云(略)

  • 1
    点赞
  • 0
    评论
  • 9
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值