操作系统学习

定义

Operating system,即OS,是配置在计算机硬件上的第一层软件,也就是说,操作系统是计算机硬件的第一次扩充

目的

管理硬件,提高利用率和系统吞吐量,具体实现了以下四个方面

名称内容
方便性没有操作系统的话用户只能用机器语言操作了
有效性合理组织计算机工作流程,提高效率
可扩充性方便地增加新的功能和模块
开放性很好地应用于网络环境

功能

不同的场合下身份不同,一共可以充当三个角色

1.资源的管理者,管理 处理机、 存储器、 文件、 设备
2.用户的服务者,向用户提供接口
3.硬件的扩充者,扩充机器

接口

这里指的是用户和计算机硬件之间的接口,即用户操控计算机硬件资源的途径
以下是三种主要的接口

类型 内容
命令接口 允许用户直接使用
程序接口 允许用户通过程序间接使用
GUI 现代操作中最流行的图形用户接口(比如windows,这里我们不讨论GUI)
其中,命令接口又可以分为:

类型 内容
联机命令接口 用户说一句,系统做一句
脱机命令接口 用户说一堆,系统做一堆
然后,程序接口具体是:

由一组系统调用组成(系统调用 就是 程序接口,有的地方也叫广义指令)

操作系统基本特征

一共有四个特征:并发 共享 虚拟 异步
其中 并发 和 共享 是最基本的特征, 二者互为存在条件

并发

并发是两个或多个事件在同一时间间隔内发生
这些事件在宏观上是同时发生,但是微观上是交替发生的
并发是一个时间段里面多个事件先后发生

共享

共享指的是资源共享,是指系统中的资源可供内存中多个并发执行的进程使用

资源共享的方式

方式 内容
互斥共享 一个时间段内只能给一个进程访问
同时共享 一个时间段内由多个进程轮流访问
同时共享 和 并发 类似,也只是宏观上的同时,微观上是几个程序轮流占用

虚拟

把一个物理上的实体变为若干个逻辑上的对应物;实体是实际存在的,对应物是用户感受到的

举例1:空间的虚拟
一个程序需要放入内存并且给它分配cpu才能执行
那么比如运行一个游戏要10G内存,但是我们的电脑只有4G的内存,但是我们就是可以让它运行,好像我们电脑的内存不止10G的样子

这个例子中,4G内存就是实体,10G是用户感受到的,也就是逻辑上的对应物体
这里涉及到的技术叫做 空分复用术

举例2:时间的虚拟
单核CPU的计算机 看上去 似乎可以“同时”执行多个程序(体现为 并发),
这里涉及到的技术叫做时分复用术
(这里也看出,如果没有并发,就不需要(时间上的)虚拟;如果没有虚拟,就难以并发)

异步

在多道程序环境下,允许多个程序并发执行,但是资源有限,每个进程的执行不是一贯到底(进程是并发的),而是走走停停(轮流使用一段时间资源),以不可预知的速度向前推进

操作系统的发展与分类

在这里插入图片描述

运行机制

两种指令

特权指令:如内存清零指令,不允许用户程序使用。

非特权指令:如普通的运算指令。

两种处理器状态

核心态(管态):特权指令,非特权指令都能执行。

用户态(目态):只能执行非特权指令。

两种程序

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

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

操作系统的内核

内核是计算机上配置的底层软件,是操作系统最基本、最核心的部分。

实现操作系统内核功能的那些程序就是内核程序。
在这里插入图片描述

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

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

中断和异常

在这里插入图片描述

系统调用

操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。
在这里插入图片描述

进程的定义、组成、组织方式

思维导图
进程的定义

进程就是一个程序地执行过程
当一个程序被放到内存中,才能够被CPU处理,才能执行
进程(进程实体)由程序段、数据段、PCB三部分组成。
进程的组织

链接方式
拥有执行指针,指向当前处于运行态(执行态)的进程的控制器PCB;
拥有就绪队列指针,指向当前处于就绪态的进程;
拥有阻塞队列指针,指向当前处于阻塞太的进程,很多操作系统会因为阻塞原因不同而划分多个阻塞队列;

索引方式
和链接方式类似,拥有执行指针和阻塞队列指针
并且拥有就绪表指针,指向一张就绪索引表的地址

进程的特征

五大特征

动态性(最基本特征):进程是程序的一次执行过程,是动态地产生、变化和消亡地。
并发性:内存中有多个进程实体,各进程可并发执行。
独立性:进程是能独立运行、独立获得资源、独立接受调度地基本单位
异步性:各进程按各自独立的、不可预知地速度向前推进,操作系统要提供“进程同步机制”来解决异步问题,可能导致运行结果地不确定性。
结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成。

三种基本状态

运行态:占有CPU,并在CPU上运行
就绪态:已经具备运行条件,但由于没有空闲CPU,而暂时不能运行。
阻塞态:因等待某一事件而暂时不能运行。
注意单核处理机环境下,每一时刻最多只有一个进程处于运行态。双核环境下可以同时有两个进程处于运行态。

另外两种状态

创建态:进程正在被创建,操作系统为进程分配资源、初始化PCB。

终止态:进程正在从系统中撤销,操作系统回收进程拥有的资源、撤销PCB。

三态4转换
在这里插入图片描述
五态六转换
在这里插入图片描述

原语

原语的实现
具有原子性的操作,不允许中断
原语是通过关中断指令和开中断指令实现的:

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

进程通信

在这里插入图片描述

线程概念和多线程模型

在这里插入图片描述

处理机调度的概念、层次

在这里插入图片描述

进程调度的时机、切换与过程

在这里插入图片描述

调度算法的评价指标

在这里插入图片描述

调度算法

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

进程同步、进程互斥

在这里插入图片描述

进程互斥的软件实现方法

在这里插入图片描述
单标志法
两个进程在访问完临界区之后,把临界区的权限交给另一个进程。也就是每个进程进入临界区的权限只能被另一个进程授予
违背了空闲让进原则
在这里插入图片描述
双标志先检查法
设置一个布尔型数组(习惯性叫flag),数组中每个元素用来标记进程想进入临界区的意愿。比如flag[0] = true表示0号元素想要进入,每个进程进入临界区之前都要检查当前有没有别的进程想要进入临界区。
如果没有,那么就把自身对应的表示设为true
在这里插入图片描述
双标志后检查法
双标志先检查法的改版。前一个算法(先检查)的问题是,先“检查”后“上锁”,但是这两个操作无法一气呵成,因此导致了两个进程同时进入临界区。
所以机智的人类就提出了先上锁后检查的操作
在这里插入图片描述
Peterson算法
在双标志检查法的基础上,如果出现了几个进程争着进入临界区的情况,那么让进程变得“谦让”
方法是,依旧设置一个flag数组表示自身的意愿,但是额外地增加一个turn值表示愿意谦让哪个进程(比如turn=1,就是在发生冲突时,愿意把机会让给1号进程)
在这里插入图片描述

进程互斥的硬件实现方法

1.中断屏蔽法

利用 开/关中断指令 实现(和原语一样,在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个进程同时访问临界区的情况)

优点:简单高效
缺点:不适用于多处理机;只适用于操作系统内核进程,不适用于用户进程(因为开/关中断指令,只能运行在内核态,这组指令如果能让用户随意使用会很危险)

2.TestAndSet指令

简称TS指令,也有叫做TestAndSetLock指令的,简称TSL指令
他们是通过硬件控制做到的,暂不细究

优点:实现简单;适用于多处理机环境;
缺点:不满足“让权等待”

3.Swap指令

也叫Exchange简称XCHG指令,同上,暂不细究

优点:实现简单;适用于多处理机环境;
缺点:不满足“让权等待”

信号量机制

思维导图

整型信号量
在这里插入图片描述
优点:检查和上锁一气呵成,避免了并发异步导致的问题
缺点:不满足让权等待原则,会发生忙等
记录型信号量
在这里插入图片描述

用信号量实现进程互斥、同步、前驱关系

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

生产者-消费者问题

在这里插入图片描述
在这里插入图片描述
实现互斥的P操作一定要在实现同步的P操作之后。

多生产者-多消费者

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

吸烟者问题

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

读者-写者问题

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

哲学家进餐问题

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

管程

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

死锁的概念

在这里插入图片描述

死锁的处理策略-预防死锁

在这里插入图片描述

死锁的处理策略-避免死锁

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

死锁的处理策略-检测和解除

在这里插入图片描述

内存地基础知识

在这里插入图片描述

内存管理的概念

在这里插入图片描述

覆盖与交换

在这里插入图片描述

连续分配管理方式

在这里插入图片描述

动态分区分配算法

在这里插入图片描述
1.首次适应算法

每次从低地址开始查找,找到第一个满足的空闲分区
查找方式是通过空闲分区链或者空闲分区表来查找的(其实就是空闲的内存的首地址和大小等信息会以顺序或者链式存储,可以据此遍历)

2.最佳适应算法

和首次适应算法类似,不过存储空闲分区地址的数据结构将以递增的形式存储,所以空间越大的分区排在越后面

这样一来每次都能找到大小最接近的,使得内存利用率很高
可是问题也很明显,每次使用,都可能会留下非常小的空间(比如10mb的程序占用了11mb内存,空闲的1mb难以利用),这种空间叫做内部碎片
内部碎片多了之后,利用率又下来了

3.最坏适应算法

和最佳适应算法相反,最坏适应算法存储是递减的

主要是想着防止小碎片产生,那我就每次用最大的空间不就好了?(10mb程序占用100mb内存,还有90mb这不是很容易用出去吗)

但是问题是,可能导致后面来的大进程没有空间
4.邻近适应算法

递增存储并且是环形结构,每次查找从上一次查找结束的位置开始继续查找

基本分页存储管理的基本概念

在这里插入图片描述

基本地址变换机构

在这里插入图片描述

具有快表的地址变换机构

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

两级页表

在这里插入图片描述

基本分段存储管理方式

在这里插入图片描述

段页式管理方式

在这里插入图片描述

虚拟内存的基本概念

在这里插入图片描述

请求分页管理方式

在这里插入图片描述

页面置换算法

在这里插入图片描述
OPT最佳置换算法

每次选择淘汰不再使用 或 以后最长时间不使用的页面

这是最优的算法,但是无法实现,因为无法预知未来

FIFO先进先出置换算法

淘汰最先到达的页面

LRU最近最久未使用置换算法

利用访问字段记录上次自上次使用后经历的时间,据此淘汰目前最长时间未使用的页面。需要硬件支持才能实现。
该算法是最性能最接近OPT的

CLOCK时钟置换算法

也叫NRU最近未使用算法,或者第二次机会算法
页面访问字段为1表示最近访问过,0反之;
循环扫描当前几个页面,修改访问字段,如果是1就改为0,如果是0那就淘汰当前页面,循环结束,也就是最多循环两次,这个算法性能是很好的,虽然次于OPT和LRU,但是实现难度相对小,均衡。

改进的CLOCK时钟置换算法

简单的CLOCK时钟置换只考虑页面最近是否被访问,但是没考虑最近是否被修改(因为只有被修改过的页面才有必要调出内存、写回外存)
改进就是,其他条件相同的时候,优先淘汰没有被修改的页面(利用修改位判断是否被修改过)

这个至多访问四轮:

第一轮是找最近没使用的、且 没有 修改过的,这一轮不会修改访问位,如果没找到:
第二轮就查找最近没使用的、且修改过的,这一轮要是再失败,就把所有扫描到的访问位置为0——表示没使用过
第三轮就重复第一轮的过程,如果还失败,(就再来一轮) 第四轮就重复第二轮的过程,由于第二轮的修改,那这次一定会找到

页面分配策略

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值