系统相关
首页 > 系统相关> > 操作系统 chapter01 概念、进程、调度算法

操作系统 chapter01 概念、进程、调度算法

作者:互联网

1. 操作系统的定义

1.负责管理协调硬件、软件等计算机资源的工作
2.为上层的应用程序、用户提供简单易用的服务
3.操作系统是系统软件,而不是硬件
 

课本定义:

操作系统(Operating SystemOS) 是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
 

作为系统资源的管理者

提供功能:

1.处理机管理

2.存储器管理

3.文件管理

4.设备管理

目标: 安全、高效

作为用户和计算机硬件间的接口

提供功能

1.命令接口 :允许用户直接使用

        1.联机命令接口 : 用户说一句做一句

        2.脱机命令接口:用户说一堆做一堆(如:批处理 .bat文件)

2.程序接口: 允许用户通过程序间接使用,由一组系统调用组成

                (程序接口= 系统调用 = 广义指令)

3.GUI:图形界面

目标:方便用户使用

作为最接近硬件的层次

提供功能与目标:实现对硬件机器的扩展

2. 操作系统的特征

并发和共享的操作系统的基本特征,没有并发和共享就没有虚拟和异步

2.1 并发

注意并发与并行的区别:

并发:宏观上同时发生,微观上交替发生。

并行:同一时刻干两件事

操作系统的并发性:同时运行着多个程序

多核处理器:指的是可以有多个程序并行运行

2.2 共享

资源共享:多个并发运行的程序共同使用资源

1.互斥共享:一个时间段只允许一个程序访问(如:视频聊天需要的摄像头)

2.同时共享:允许一个时间段多个程序访问(如:我既可以在QQ发送文件,也可以同时在微信发送文件)

2.3 虚拟

物理上的实体对应到 虚拟上的对应

如: 一个程序需要4GB的运行内存。我的电脑只有4GB,但我却可以运行他和其他一堆的程序。

这就用到了虚拟存储技术

虚拟技术

1.空分复用技术

2.时分复用技术

2.4 异步

因为多个程序并发,且资源有限,导致某个程序并不是能够一贯执行到底。可能会遇到阻塞。

这就是异步性

2.5 总结

只有程序有了并发性后,才会有的异步性

3. 操作系统的发展与分类

3.1 手工操作阶段

纸带打点,输入计算机中运算,输出纸带

主要缺点: 用户独占全机、人机速度矛盾导致计算机资源利用率低

3.2 单道批处理系统

引入脱机输入/输出系统(磁带),并引入监督程序(操作系统的雏形)负责控制作业的输入输出。


主要优点: 缓解了一定程度的人机速度矛盾,资源利用率有所提升。
主要缺点: 内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待I/0完成。资源利用率依然很低。
 

3.3 多道批处理系统

过程:每次往内存中输入多道程序

这个阶段: 操作系统正式诞生,并引入了中断技术,由操作系统负责管理这些程序的运行。各个程序并发执行


主要优点: 多道程序并发执行,共享计算机资源。资源利用率大幅提升,CPU和其他资源保持“忙碌”状态,系统吞吐量增大。
主要缺点: 用户响应时间长,没有人机交互功能(用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行)
 

为何多道批处理系统的系统资源利用率高?

 

3.4 分时操作系统

分时操作系统:计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。


主要优点:用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。
主要缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。
 

3.5 实时操作系统


主要优点:能够优先响应一些紧急任务,某些紧急任务不需时间片排队。在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。实时操作系统的主要特点是及时性可靠性
 

硬实时操作系统:必须在绝对严格的规定时间内完成处理 (导弹控制系统)

软实时操作系统:能接受偶尔违反时间规定 (订票系统)

3.6 知识点回顾

4. OS的运行机制和体系结构

4.1 指令

简单来说,“ 指令”就是处理器(CPU) 能识别、执行的最基本命令
比如:加法指令就是让CPU进行加法运算
 

指令的两种类型

1. 特权指令

2. 非特权指令

两种处理器状态

1.用户态(目态)

2. 核心态 (管态)

4.2 两种程序

1.内核程序: 操作系统的内核程序是系统的管理者,既可以执行特权指令,也可以执行非特权指令,运行在核心态

2.应用程序: 为了保证系统能安全运行,普通应用程序只能执行非特权指令,运行在用户态

4.3 操作系统的内核

内核是计算机上配置的底层软件,是操作系统最基本、最核心的部分。
实现操作系统内核功能的那些程序就是内核程序
 

4.3.1 大内核

将操作系统的主要功能模块都作为系统内核,运行在核心态
优点:高性能
缺点:内核代码庞大,结构混乱,难以维护
 

4.3.2 微内核

只把最基本的功能保留在内核
优点:内核功能少,结构清晰,方便维护
缺点:需要频繁地在核心态和用户态之间切换,性能低

4.3.3 类比企业

操作系统的体系结构问题与企业的管理问题很相似。
内核就是企业的管理层,负责一些重要的工作。只有管理层才能执行特权指令,普通员工只能执行非特权指令。用户态、核心态之间的切换相当于普通员工和管理层之间的工作交接

大内核:企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高;缺点是组织
结构混乱,难以维护。

微内核:随着企业体量越来越大,管理层只负责最核心的一-些工作。优点是组织结构清晰,方
便维护;缺点是效率低。
 

4.4 常考

最常考知识点:
1.特权指令只能在核心态下执行
2.内核程序只能在核心态下执行
3.核心态、用户态之,间的切换(后续讲解内容)
 

5. 中断和异常

5.1 概况

5.2 中断机制的诞生

早期计算机: 各程序只能串行执行,系统资源利用率低
 

 为了解决上述问题,人们发明了操作系统(作为计算机的管理者),引入中断机制,实现了多道程序并发执行
本质:发生中断就意味着需要操作系统介入,开展管理工作

CPU收到计时部件发出的中断信号,切换为核心态对中断进行处理

进程2发出系统调用(内中断信号),请求输出。CPU切换为核心态,对中断进行处理
喂~打印机开始工作吧,进程2暂停运行等待I/O完成,换进程3运行
 

5.3 中断的概念和作用

1.当中断发生时,CPU立即进入核心态
2.当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
3. 对于不同的中断信号,会进行不同的处理


发生了中断,就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(比如进程切换、分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行。
 

5.4 中断的分类

 内中断:信号的来源: CPU内部,与当前执行的指令有关

                如:系统调用时使用的访管指令(又叫陷入指令、trap指令)
                如:缺页
                如:整数除0 

 外中断:信号的来源: CPU外部,与当前执行的指令无关

                如: /0操作完成发出的中断信号
                如:用户强行终止一个进程

5.4.1 另一种分类方式

 5.5 外中断的处理过程

Step 1:执行完每个指令之后,CPU都要检查当前是否有外部中断信号
Step 2:如果检测到外部中断信号,则需要保护被中断进程的CPU环境( 如程序状态字PSW、程序计数器PC、各种通用寄存器)
Step 3:根据中断信号类型转入相应的中断处理程序
Step 4:恢复原进程的CPU环境并退出中断,返回原进程继续往下执行

6. 系统调用

6.1 什么是系统调用,有何作用?

操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接
口和程序接口。其中,程序接口由一组系统调用组成。
 

“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用
程序调用的特殊函数
,应用程序可以发出系统调用请求来获得操作系统的服务。
 

应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性安全性,防止用户进行非法操作。
 

6.2 系统调用与库函数的区别

 6.3 系统调用背后的过程

 int x

int是interrupt 中断的意思 ,x 是 系统调用号(比如用0,1,2,3 代表不同的调用【exit,begin......】)

调用过程

1.传递系统调用参数
2.执行陷入指令
3.执行系统调用相应服务程序
4.返回用户程序

7. 进程

7.1 进程的定义

程序:就是一个指令序列,早期的计算机(只支持单道程序)
 

 程序段在高地址部分,数据段存在低地址部分

程序的代码放在程序段内,程序运行过程处理的数据放在数据段内(如变量)
 

引入多道程序技术之后:
为了方便操作系统管理,完成各程序并发执行,引入了进程、进程实体的概念
系统为每个运行的程序配置一个数据结构,称为进程控制块(PCB) ,用来描述进程的各种信息(如程序代码存放位置)

程序段、数据段、PCB三部分组成了进程实体(进程映像)。一般情况下, 我们把进程实体就简称为进程,例如,所谓创建进程,实质上是创建进程实体中的PCB;而撤销进程,实质上是撤销进程实体中的PCB。

注意: PCB 是进程存在的唯一标志!
从不同的角度,进程可以有不同的定义,比较传统典型的定义有: 
1.进程是程序的一.次执行过程。
2.进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
3.进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的一一个独立单位

强调“动态性”
 

 7.2 进程的组成

PID : 当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的ID,用于区分不同的进程(类似于身份证号)

各种寄存器值:当进程切换时需要把进程当前的运行情况记录下来保存在PCB中,如程序计数器的值表示了当前程序执行到哪一句
 

7.3 进程的组织

7.3.1 链接方式

 7.3.2 索引方式

7.3.3 总结

7.4 进程的特征

7.5 进程的状态与转换

7.5.1 进程的三种状态

 注意:单核处理机环境下,每时刻最多只有一个进程处于运行态。(双核环境下可以同时有两个进程处于运行态)

就绪态:进程已经拥有了除处理机之外所有需要的资源,一且获得处理机,即可立即进入运行态开始运行。即:万事俱备,只欠CPU
 

阻塞态:如:等待操作系统分配打印机、等待读磁盘操作的结果。CPU是计算机中最昂贵的部件,为了提高CPU的利用率,需要先将其他进程需要的资源分配到位,才能得到CPU的服务
 

7.5.2 另外两种状态

 

7.5.3 进程状态总结

7.6 进程控制

进程控制就是各种进程状态之间的转换

7.6.1 如何进行进程控制

 

 

 

 

7.7 进程通信

什么是进程通信?

7.7.1 共享存储

7.7.2 消息传递

7.7.3 管道通信

8. 线程

8.1 什么是线程?为什么要引入线程?

进程是程序的一次执行。但这些功能显然不可能是由一个程序顺序处理就能实现的

 传统的进程是程序执行流的最小单位

 有的进程可能需要“同时”做很多事,而传统的进程只能串行地执行一系列程序。为此,引入了“线程”,来增加并发度

 可以把线程理解为“轻量级进程”。

线程是一个基本的CPU执行单元,也是程序执行流的最小单位。

引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)

引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)

 

 8.2 引入线程后,有什么变化?

类比:去图书馆看书。

切换进程运行环境:有一个不认识的人要用桌子,你需要你的书收走,他把自己的书放到桌上
向一进程内的线程切换=你的舍友要用这张书桌,可以不把桌子上的书收走

8.3 线程的属性

8.4 线程的实现方式

用户级线程由应用程序通过线程库实现。
所有的线程管理工作都由应用程序负责(包括线程切换)
用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。(用户级线程对用户不透明,对操作系统透明)
可以这样理解,“ 用户级线程”就是“从用户视角看能看到的线程
 

 内核级线程的管理工作由操作系统内核完成。
线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
可以这样理解,“内核级线程” 就是“从操作系统内核视角看能看到的线程

 

 在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式:将n个用户级线程映射到m个内核级线程上( n>= m)

重点重点重点:
操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。
例如:左边这个模型中,该进程由两个内核级线程,三个用户级线程,在用户看来,这个进程中有三个线程。但即使该进程在一个4核处理机的计算机上运行,也最多只能被分配到两个核,最多只能有两个用户线程并行执行
 

 

 8.5 多线程模型

多对一模型:多个用户及线程映射到一个内核级线程。每个用户进程只对应一个内核级
线程。

优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统
开销小,效率高

缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机.上并行运行
 

 

一对一模型:一个用户及线程映射到一个内核级线程。每个用户进程有与用户级线程同
数量的内核级线程。

优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核.处理机上并行执行。

缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

 

多对多模型:n用户及线程映射到m个内核级线程(n>=m),每个用户进程对应m个
内核级线程。

克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

集二者之大成

 

 8.6 小节总结

9. 处理机调度

9.1 调度基本概念

 从就绪队列安装一定算法选择一个进程,将处理机分配给它

9.2 作业调度

高级调度(作业调度) :外存于内存之间的调度

9.3 内存调度

中级调度(内存调度):决定将哪个处于挂起状态的进程调入内存

 进程七状态模型:引入挂起态

9.4 进程调度

低级调度(进程调度):从就绪队列选个进程,分配处理机

9.5 三个调度的联系与对比

高级调度:创建完PCB,放入就绪队列

中级调度:让挂起-> 阻塞

低级调度:就绪-> 运行态

9.6 调度总结

中级调度:引入了挂起态

9.7 进程调度的时机

需要进程调度与切换:

        1. 进程主动放弃

        2. 进程被动放弃

不能进程调度与切换:

        1.中断

        2.临界区

        3.原子操作

注意区分 普通临界区操作系统内核程序临界区

 

9.8 进程调度的方式

非抢占式

抢占式

9.9 进程的切换与过程

狭义的进程调度

广义的进程调度

进程切换代价 

总结 

9.10 调度算法的性能指标

9.10.1 CPU利用率

 CPU利用率 = \frac{busyTime}{totalTime}

 9.10.2 系统吞吐量

系统吞吐量 = 总共完成作业数 / 总共花费时间

9.10.3 周转时间

周转时间 = 作业完成时间 - 作业提交时间

平均周转时间 = 各作业周转时间之和 / 作业数

9.10.4 等待时间

处于等待处理机状态时间之和

9.10.5 响应时间

提交请求到首次产生响应

9.11 FCFS、SJF、HRRN 调度算法

9.11.1 FCFS

非抢占式算法

按先后顺序,等待时间越久越优先得到服务,

对长作业有利,对短作业不利。(排队买奶茶)

例子:

 发现P3的带权周转时间非常大,P3用户体验非常糟糕

FCFS总结:

9.11.2 SJF

最短的作业/进程优先得到服务

SJF 非抢占式

追求最少的平均等待时间、周转时间、平均带权周转时间

默认短作业是非抢占式的

在所有

例子:

发现SJF的算法是优于FCFS的

SRTN:抢占式的短作业优先算法,最短剩余时间优先算法 

选择当前完成作业剩余时间最短的进程

采用抢占式后,三个指标更小了,又一次优化

严谨性问题:

很多书上都会说“SJF调度算法的平均等待时间、平均周转时间最少”
1. 严格来说,这个表述是错误的,不严谨的。之前的例子表明,最短剩余时间优先算法得到的平均等待时间、平均周转时间还要更少
2. 应该加上一个条件“在所有进程同时可运行时,采用SJF调度算法的平均等待时间、平均周转时间最少”;
3. 或者说“在所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最少”;

虽然严格来说,SJF的平均等待时间、平均周转时间并不一定最少,但相比于其他算法(如FCFS) ,SJF依然可以获得较少的平均等待时间、平均周转时间

如果选择题中遇到“SJF算法的平均等待时间、平均周转时间最少”的选项,那最好判断其他选项是不是有很明显的错误,如果没有更合适的选项,那也应该选择该选项
 

 总结

 回顾

FCFS算法是在每次调度的时候选择一个等待时间最长的作业(进程)为其服务。但是没有考虑到作业的运行时间,因此导致了对短作业不友好的问题。

SJF算法是选择- - 个执行时间最短的作业为其服务。但是又完全不考虑各个作业的等待时间,因此导致了对长作业不友好的问题,甚至还会造成饥饿问题
 

能不能设计一个算法,即考虑到各个作业的等待时间,也能兼顾运行时间呢?

 

9.11.3 高响应比优先 HRRN

综合考虑作业的等待时间和要求服务的时间

响应比 = (等待时间 + 要求服务时间) / 要求服务时间

综合考虑了等待时间和运行时间(要求服务时间)
等待时间相同时,要求服务时间短的优先(SJF 的优点)

9.11.4 对比

这三种算法一般使用在早期,无交互性

9.12 其他调度算法

9.12.1 时间片轮转调度算法(RR)Round-Robin

诞生于分时操作系统

公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应(时间片)

抢占式

例子:

 

 

时间片大小为5的情况:

 如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法退化先来先服务调度算法,并且会增大进程响应时间。因此时间片不能太大。

如何理解会增大进程响应时间?

 另一方面,进程调度、切换是有时间代价的( 保存、恢复运行环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。可见时间片也不能太小

一般来说, 设计时间片时要让切换进程的开销占比不超过1%

总结

9.12.2 优先级调度算法

随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的紧急程度来决定处理顺序

每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程。

有:

1.抢占式

2.非抢占式

例子:

补充:

就绪队列未必只有一一个,可以按照不同优先级来组织。另外,也可以把优先级高的进程排在更靠近队头的位置

根据优先级是否可以动态改变,可将优先级分为静态优先级和动态优先级两种。
静态优先级:创建进程时确定,之后- -直不变。
动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级。
 

如何合理地设置各类进程的优先级?

通常:
系统进程优先级高于用户进程
前台进程优先级高于后台进程
操作系统更偏好I/O型进程(或称I/0繁忙型进程)
注:与I/0型进 程相对的是计算型进程(或称CPU繁忙型进程)
 

如果采用的是动态优先级,什么时候应该调整?

可以从追求公平、提升资源利用率等角度考虑
如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级
如果某进程占用处理机运行了很长时间,则可适当降低其优先级
如果发现一个进程频繁地进行I/O操作,则可适当提升其优先级
 

总结

9.12.3 多级反馈队列调度算法

对其他调度算法的折中权衡
优点多

抢占式

动态过程:规则较为复杂

 总结

9.12.4 三种算法对比

 注:比起早期的批处理操作系统来说,由于计算机造价大幅降低,因此之后出现的交互式操作系统(包括分时操作系统、实时操作系统等)更注重系统的响应时间、公平性、平衡性等指标。而这几种算法恰好也能较好地满足交互式系统的需求。因此这三种算法适合用于交互式系统。( 比如UNIX使用的就是多级反馈队列调度算法)

标签:操作系统,用户,调度,算法,线程,内核,chapter01,进程
来源: https://blog.csdn.net/weixin_45817392/article/details/120194598