文章目录
操作系统(Operating System,OS)
一.认识操作系统
1.1_1:操作系统的概念,功能和目标
- 概念:控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
- 补充:进程
(processing):一个程序的执行过程。执行前需要将该程序放到内存中,才能被cpu处理。
1.1_2:操作系统的特征
- 四个特征:并发,共享,虚拟,异步;其中并发,共享是最基本的特征,二者互为存在条件
- 并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的。
注意:并行:指两个或多个事件在同一时刻同时发生
- 操作系统的并发性:计算机系统中同时存在多个运行着的程序。
一个单核处理器(cpu)同一时刻只能执行一个程序,因此操作系统会负责协调多个程序交替执行(这些程序微观上是交替执行的,但宏观上看起来就像在同时执行)
- 共享:即资源共享,指系统中的资源可供内存中多个并发执行的程序共同使用。
- 两种资源共享的方式:互斥共享方式和同时共享方式
(1):互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源
例如:视频聊天,qq和微信。
(2):同时共享方式:系统中的某些资源,允许一个时间段内由多个进程**“同时”**对它们进行访问
例如:同时给qq和微信发文件注意:“同时”:往往是宏观的,微观上,这些进程可能是交替对该资源进行访问(即分时共享)
- 虚拟:指把一个物理上的实体变为若干的逻辑上的对应物。物理实体是实际存在的,而逻辑上对应物是用户感受到的。
- 两种虚拟技术:空分复用技术(虚拟存储器技术)和时分复用技术(虚拟处理器)
- 异步:在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的。而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
- 小结:
1.1_3 操作系统的分类与发展
- 手工操作阶段
- 批处理阶段:单道批处理,多道批处理(系统资源并行利用)。
- 分时操作系统:计算机以时间片为单位轮流为各个用户/作业服务,各个用户可以通过终端与计算机进行交互。优点:用户请求可以被即时响应,解决人机交互问题。
- 实时操作系统:能优先响应一些紧急任务。分为硬实时系统和软实时系统。
- 其他操作系统。
- 小结:
1.1_4 操作系统的运行机制体系结构与
- 指令:处理器cpu能识别,执行的最基本的命令。如加法指令。
两种指令:特权指令;非特权指令
- 两种处理器状态 :(用程序状态字寄存器(PSW)中都某标志为来标识当前处理器状态)
用户态(目态):此时cpu只能执行非特权指令
核心态(管态):特权指令,非特权指令都可以执行
- 两种程序:
内核程序:操作系统的内核程序是系统的管理者,既可以执行特权指令也可以执行非特权指令,运行在核心态。
应用程序:为保证系统能安全运行,普通应用程序只能执行非特权指令,运行在用户态
- 操作系统的内核:是计算机上配置的底层软件,是操作系统最基本,最核心的部分。实现操作系统内核功能的那些程序就是内核程序。
操作系统内核图:
- 计算机系统的层次结构:
- 操作系统层次结构:
时钟管理:实现计时功能;
原语:一种特殊的程序。最接近硬件的部分,这种程序的运行具有原子性。

—
- 操作系统的体系结构:
大内核与微内核的区别:
注意:变态(cpu状态的转换)的过程是有成本的,要消耗不少时间,频繁地变态会降低系统性能
- 小结:
1.1_5: 中断和异常
-
中断机制的诞生:为解决串行程序执行的问题,引入中断机制,实现了多道程序并发执行。
-
本质:发生中断就意味着需要操作系统介入,开展管理工作 。由于操作系统的管理工作(比如进程切换、分配I/O设备等)需要特权指令,因此cpu要从用户态转为核心态。中断可以使cpu从用户态切换为核心态,使操作系统获得计算机等控制权。有了中断,才能实现多道程序并发执行。
注意:
用户态到核心态的切换是通过中断实现的,且中断是唯一的途径
核心态到用户态到切换是通过执行一个特权指令,将PSW到标识设置为用户态。 -
中断的概念和作用
- 当中断发生时cpu会立即进入核心态
- 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
- 对于不同的中断信号,会进行不同的处理
-
中断的分类:内中断和外中断(本质区别:信号源)
内中断:也称异常、例外、陷入;信号来源于cpu内部,与当前执行的指令有关。
陷阱、陷入(trap):有意而为之的异常,如系统调用
故障(fault):由于错误条件引起的,可能被故障处理程序修复,如缺页
终止(abort):不可恢复的致命错误造成的结果,终止处理程序不再将控制返回给引发终止的应用程序,如除以0.
外中断:中断;信号来源于cpu外部,与当前执行的指令无关。
I/O中断请求:
人工干预:外中断的处理过程:
Step1:执行完每个指令之后,cpu都要检查当前是否有外部中断信号
Step2:如果检测到外部中断信号,则需要保护被中断进程的cpu环境(如程序状态字PSW、程序计数器PC、各种通用寄存器)
Step3: 根据中断信号类型转入相应的中断处理程序
Step4:恢复原进程的cpu环境并退出中断,返回原进程继续往下执行
小结:
1.1_6:系统调用
- 系统调用:操作系统给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获取操作系统内核的服务。
- 应用程序通过系统调用请求操作系统的服务。而系统中的共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
- 系统调用的过程:传递系统调用参数->执行陷入指令(用户态)->执行相应内请求程序处理系统调用(核心态)->返回应用程序。
- 注意:
- 陷入指令(trap指令)是在用户态执行对,执行陷入指令之后立即引发一个内中断,使cpu进入核心态。
- 发出系统调用请求是在用户态,而对系统调用对相应处理在核心态下进行*。
- 小结: 
第二章:进程管理
2.1:进程的概念、组成、特征
- 程序:是静态的,就是个存放在磁盘里的可执行文件,就是一系列的指令集合。
2.1.1:进程的概念
- 进程(Process)的概念:是动态的,是程序的一次执行过程。同一程序多次执行会对应多个进程。
- 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
- 进程是动态的,进程实体是静态的;进程实体反应了进程某一时刻的状态就像视频中的一帧。
- 进程,’‘用进程实体(进程映像)更准确’‘:由PCB,程序段(代码:指令序列),数据段(运行过程中产生当各种数据)。其中PCB是给操作系统用的,程序段和数据段是给进程自己用的。
- 操作系统对进程进行管理工作所需的信息都存在PCB中。
- PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB。
- 进程控制块(PCB):包括进程描述信息(PID,UID),进程控制和管理信息(CPU、磁盘、网络流量;进程当前状态:就绪态阻塞态/运行态),资源分配清单(正在使用哪些文件,I/O,内存),处理机相关信息(PSW各种寄存器用于实现进程切换)
- PID:当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号”。
- ID(UID):基本的进程描述信息,可以让操作系统区分各个进程。
程序的运行

2.1.2:进程的组成
2.1.3:进程的特征
2.2:进程的状态、进程的组织
2.2.1:进程的状态
- 创建态和就绪态
- 运行态
- 阻塞态
- 终止态
2.2.2:进程状态的转换
2.2.3:进程的组织*
- 链接方式
- 索引方式
2.2小结:
2.3:进程控制
- 进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。就是实现进程状态转换
- 用原语实现进程控制
- 原语:是一种特殊的程序,它的执行具有原子性。也就是说,这段程序的运行必须一气呵成,不可中断
- 原语原子性的实现
- 利用关中断和开中断
- 进程控制相关的原语
- 创建原语
- 终止原语
- 阻塞和唤醒原语
-切换原语
2.3:小结:
2.4:进程通信
- 进程通信:进程之间的信息交换
2.4.1:共享存储
- 两个进程对于共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具来实现,操作系统只负责提供共享空间和同步互斥工具(如P,V操作))
- 基于数据结构的共享:比如共享空间中只能放一个长度为10的数组,这种共享方式速度慢、限制多,是一种低级通信方式
- 基于存储区的共享:在内存中画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信方式
2.4.2:消息传递
2.4.3:管道通信
- 管道:指用于连续写进程的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区
- 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
- 各进程要互斥地访问管道
- 数据以字符流的形式写入管道,当管道写满时,写进程write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。
- 如果没有写满,就不允许读。如果没读空就不允许写。
- 数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况
小结:
2.5:线程的概念
- 同一个进程分为了多个线程。
- 线程是一个基本的cpu执行单元,也就是程序执行流的最小单位。
- 引入线程后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务。
- 引入线程后,进程只作为除cpu之外的系统资源的分配单元。
- 引入线程后,的变化
- 线程的属性
2.6:多线程模型
2.6.1:线程的实现方式
- 用户级线程
- 线程切换是由应用程序软件控制的,即在用户态就可以完成线程切换,并不需要操作系统干涉。
- 用户级线程的优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。
- 用户级线程的缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行。
- 内核级线程
2.6.2:多线程
- 一对一
- 多对一
- 多对多
小结:
2.7:处理机调度概念、层次
2.7.1:调度的基本概念
2.7.2:调度的三层次
- 作业:一个具体的任务
- 用户向系统提交一个作业相当于用户让那个操作系统启动一个程序(来处理一个具体的任务)
- 高级调度(作业调度)
- 低级调度(进程调度/处理机调度)
- 低级调度:按照某种策略中就绪队列中选取一个进程,将处理机分配给它
- 进程调度是操作系统中最基本的一种调度,在一般的操作系统中必须配置进程调度
- 进程调度频率很高,一般几十毫秒一次
- 中级调度(内存调度)
- 中级调度:按照某种策略决定将哪个处于挂起状态的进程重新调入内存
- 频率比高级调度高
补充:进程的挂起态与七状态模型
2.7.3:三层调度的联系与对比
小结
2.8:进程调度的时机、切换与过程、进程调度方式
2.8.1:进程调度的时机
2.8.2:切换与过程
2.8.3:方式:抢占与非抢占
小结
2.9:调度算法的评价指标
- CPU利用率
- 系统吞吐量
- 周转时间
- 等待时间
- 响应时间
小结
2.10:调度算法
2.10.1:先来先服务 (FCFS)
2.10.2:最短作业优先(SJF)
-
非抢占的短作业优先:SPF
-
抢占的短作业优先:SRTN:最短剩余时间优先
- 注意
2.10.3:最高响应比优先(HRRN)
小结
2.11:调度算法
2.11.1:时间片轮转RR
- 时间片为2
- 时间片大小为5
- 所以时间片如果太大,则该算法会退化为FCFS
- 时间片如果太小,会导致进程切换过于频繁,导致实际用于进程执行时间比例减少
2.11.2:优先级调度(抢占和非抢占)
-
非抢占
-
抢占
-
补充
-
小结
2.11.3:多级反馈队列:抢占
小结:
2.12: 进程同步、互斥
2.12.1:进程同步
2.12.2:进程互斥
小结
2.13: 进程互斥的实现方法
2.13.1:单标志法
- 只能轮流访问,如果一方一直不访问临界区,那么虽然此时临界区空闲,但并不允许另一方访问;违背“空闲让进”原则
2.13.2:双标志先检查
- 如果按照并发运行1526的顺序,不太行。
2.13.3:双标志后检查
- 并发也有问题
2.13.4:Peterson算法
小结
2.14:进程互斥的硬件实现方法
2.14.1:中断屏蔽法
2.14.2:TestAndSet(TS/TSL)
2.14.3:Swap(XCHG)
小结
2.15:信号量机制
2.15.3:整型信号量
2.15.2:记录型信号量
小结
2.16:用信号量机制实现进程互斥、同步、前驱关系
2.16.1:实现进程互斥
2.16.2:实现进程同步
2.16.3:实现进程的前驱关系
小结
2.17:生产者消费者问题
- 小结
2.18:多生产者-多消费者
2.19:吸烟者问题
2.20:读者-写者问题
2.21:哲学家进餐问题
- 或者仅当一个哲学家左右两支筷子都可用时才允许他抓起筷子;可行
2.22:管程
2.22.1:管程的定义和基本特征
2.22.2: 管程解决生产者消费者问题
2.23:死锁的基本
2.23.1:什么是死锁
- 死锁:各进程竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象。发生死锁后,都将无法向前推进。
- 饥饿:由于长期得不到想要的资源,某进程无法向前推进的想象。
- 死循环:某种进程执行过程中一直跳不出某个循环的现象。
2.23.2:死锁产生的必要条件
2.23.3:什么时候发生死锁
2.23.4:死锁的处理策略
小结
2.24:预防死锁
1.
- 小结
2.25:避免死锁
- 银行家算法
-
发生死锁的例子
-
-
实现
-
小结:
2.26:死锁的检测和解除
2.26.1:检测