操作系统学习(按照日期)

2024.5.12

操作系统的概念

  1. 是系统最基本最核心的软件 属于系统软件
  2. 控制和管理整个计算机的硬件软件资源 PID
  3. 合理的组织和调度计算机的工作和资源分配
  4. 为用户和其他软件提供方便的接口和环境

作为计算机系统的管理者:

  • CPU管理
  • 存储器管理
  • 文件管理
  • 设备管理

作为用户与计算机硬件系统之间的接口:

命令接口 直接使用

联机命令接口 脱机命令接口(批处理接口)

程序接口 间接使用 由一组系统调用组成

作为扩充机器(虚拟机)

裸机 虚拟机

操作系统的特征

  • ① 并发 同一时间间隔发生 但不是同时发生 宏观上是同时的 微观上是交替发生的 并行:同一时刻发生
  • ② 共享 资源共享 系统中的资源可以供内存中多个并发执行的进程使用(互斥共享 同时共享)①②互为存在条件
  • ③ 虚拟 把一个物理上的实体变为若干逻辑上的对应物 时分复用技术 空分复用技术
  • ④ 异步 躲到程序环境允许多个程序并发执行 但资源有限 进程的执行并不是一贯到底的而是走走停停的 以不可预知的速度向前推进

操作系统的运行机制和体系结构

运行机制

两种命令 特权指令 非特权指令(允许用户直接使用的命令)

两种处理器状态 用户态(只能执行非特权指令) 核心态 用户态->核心态 中断实现 核心态->用户态 执行一个特权指令 将PSW标志位设置为用户态

两种程序 内核程序(系统管理者) 用户程序

操作系统内核

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

  • 时钟管理 计时 通过时钟中断管理 可以实现进程的切换

  • 中断机制

  • 原语 具有原子性

对资源进行管理的功能 进程管理 存储器管理 设备管理

操作系统的体系结构

  • 大内核 将内核的主要功能模块作为一个紧密联系的整体运行在核心态

  • 微内核 将内核中最基本的功能保留在内核

2024.5.13

中断和异常

中断 为了实现多道程序并发执行,能够提高资源利用率

发生中断 操作系统接入开展管理工作 CPU会从用户态变为核心态

中断分类

  • 内中断(异常 例外 陷入)自愿中断(trap) 强迫终端(硬件软件故障 缺页 整数除0)陷入trap(系统调用) 故障fault(错误条件引起的)终止(abort)不可恢复的致命错误造成的

  • 外中断(中断) 外设要求 人工干预

中断处理过程

  • 关中断
  • 保存断点
  • 中断服务程序寻址
  • 保存现场和屏蔽字
  • 开中断
  • 执行中断服务程序
  • 关中断
  • 恢复现场和屏蔽字
  • 开中断->中断返回

2024.5.15

1.3.3 系统调用

概念:操作系统提供给应用程序的接口 应用程序可以通过系统调用请求获取操作系统的服务 需要操作系统的内核程序负责完成 要运行到核心态

会使处理器从用户态切换到核心态

分类:设备管理(完成设备的请求、释放等功能) 文件管理(完成文件的读写创建删除等功能) 进程控制(完成进程的创建撤销等功能) 进程通信(完成进程之间的消息传递 信号传递等功能) 内存管理(完成内存的分配 回收)

2.1.1 进程

程序:就是一个指令序列

进程实体 PCB(找到个程序的存放位置) 程序段 数据段

PCB 进程控制块 为每个运行的程序配置一个数据结构 用来描述进程的各种信息

进程:是进程实体的运行过程 是系统进程资源分配和调度的一个单位

一般认为进程实体就是进程 但其实进程实体是静态的 进程是动态的

进程的特征 动态性 并发性 独立性 异步性 结构性(每个进程会配置一个PCB)

PCB:进程描述信息UID PID 进程控制和管理信息 资源分配清单(程序段指针 数据段指针 键盘 鼠标) 处理机相关信息(各种寄存器值)

进程的组织方式 链接方式 索引方式

2.1.2 进程的状态(5状态)

  • 运行状态
  • 就绪状态
  • 阻塞状态
  • 创建状态
  • 终止状态

就绪->运行 运行->就绪 运行->阻塞(是进程自身做出的主动行为) 阻塞->就绪

2.1.3 原语实现对进程的控制

进程控制:实现进程之间的状态转换 用原语来实现

只能一气呵成完成 具有原子性

开关中断指令的权限很大 只能在核心态上执行

创建原语 申请空白PCB 为新进程分配所需资源 初始化PCB 将PCB插入就绪队列

终止原语 找到终止进程的PCB 若进程还在运行,立即剥夺CPU 终止所有子进程 将该进程所拥有的资源还给父进程或操作系统 删除PCB 就绪/阻塞/运行->终止->无

唤醒和阻塞原语 必须成对出现

阻塞原语 找到阻塞的进程对应的PCB 保护进程运行现场,将PCB状态设置为阻塞态,暂时阻止进程运行 将PCB插入相应事件的等待序列 运行态->阻塞态

切换原语 将环境信息存入PCB PCB移入相应队列 选择另一个进程执行,并更新PCB 根据PCB恢复新进程所需要的运行环境

2.1.4 进程之间的通信

进程通信 进程之间的信息交换

进程之间的内存地址空间相互独立

共享存储 基于数据结构的共享 基于存储区的共享 共享一块大家都可以访问的空间 但是一次只能有一个进程读写操作

管道通信 在内存区开辟一个大小固定的缓冲区 是半双工通信某一时间只能实现单向的传输

消息传递 发送消息的进程将消息头写好 直接通信和间接通信方式 数据交换以格式化消息为单位

2.1.5 线程

为了增加并发度

成为了程序执行流的最小单位

进程是资源分配的基本单位 线城市调度的基本单位

分类 用户级线程 内核级线程

用户级线程 由应用程序通过线程库实现 所有的线程管理工作都由应用程序负责 对操作系统透明但是用户不透明 在用户态完成

内核级线程 由操作系统内核完成 核心态 从操作系统内核视角看能看到的线程

三种模型 多对一模型:并发度不高 一对一模型:一个用户进程占用太多的内核级线程 多对多模型:结合了这两种模型的有点 是最好的

2024.5.16

2.2.1 处理机调度的概念及层次

调度:资源有限的时候,用某种规则来决定处理任务的顺序

处理机调度:从就绪队列中按照一定的算法选择一个进程并将处理机分配给该进程运行,以实现并发

层次:

  • 高级调度(作业调度):从后备队列中挑选一个或多个作业 给他们分配内存等资源,并建立相应的进程,即PCB。每个作业只被调入一次和调出一次。调入是建立相应PCB 调出时撤销相应PCB

  • 中级调度(内存调度):决定将哪个挂起状态的进程重新调入内存。可以提高内存利用率和系统吞吐量。什么时挂起状态:暂时调到外存等待的进程状态为挂起状态,又被分为就绪挂起和阻塞挂起。使原本的无状态模型进化为七状态模型。

  • 低级调度(进程调度):从就绪队列中选取一个进程,将处理机分配给他。

挂起:将进程映像调到外存去了。 阻塞:进程映像还在内存中。

2.2.2 进程调度时机

什么时候进程调度:

  • 主动放弃 正常终止 发生异常 主动阻塞

  • 被动放弃 ①时间片用完 ②有更紧急的事情 中断 ③有优先级更高的进程进入

什么时候不能:

  • 处理中断过程中

  • 操作系统内核程序临界区

  • 原子操作过程中

进程调度方式:有更重要或紧迫的进程需要处理 如何分配处理机

  • 非剥夺调度方式:非抢占方式,只允许进程主动放弃

  • 剥夺调度方式:立即停止正在执行的进程 将处理机分配给最重要的进程

进程的切换和过程:

进程切换:一个进程让出处理机,由另一个进程占用处理机的过程

  • 对原来进程各种数据的保存

  • 对新的进程各种数据的恢复

2.2.3 调度算法的评价指标

  • CPU利用率 忙碌事件/总时间

  • 系统吞吐量 总共完成作业数/总事件

  • 周转时间 作业完成时间-作业提交时间 带权周转时间:作业周转时间/作业实际运行时间

  • 等待事件 进程/作业处于等待处理机状态时间之和

  • 响应时间 用户提交请求到首次产生相应所用的时间

2.2.4 作业/进程调度算法

例题:会计算周转时间、带权周转时间、等待时间

周转时间 = 完成时间-到达时间

带权周转时间 = 周转时间/运行时间

等待时间 = 周转时间 - 运行时间

  • 先来先服务(FCFS)

根据先后顺序执行,非抢占式算法,对长作业有利但是对短作业不利 不会导致饥饿

饥饿:某个作业或进程长期得不到服务

  • 短作业优先

服务时间最短的先开始,非抢占式算法,对短作业有利但是对长作业不利,会导致饥饿现象

也有抢占式的:每次都要看谁到达了,还剩下多少时间,以此类推

  • 高相应比优先:综合了作业进程等待时间和要求服务时间

在每次调度式要先计算相应比

相应比 = 等待时间+要求服务时间/要求服务时间 是非抢占式算法,不会导致饥饿

等待时间 = 完成时间-到达时间-运行时间

2.2.5 调度算法

  • 时间片轮转调度算法

按照各进程到达就绪队列的顺序,轮流让各进程执行一个时间片

是一种抢占式算法,不会有饥饿现象,只用于进程调度

时间片太大就变成先进先出算法了,时间片太小会导致进程之间切换频繁,代价高

  • 优先级调度算法

优先选择优先级更高的进程或作业

有抢占式 非抢占式的,会导致饥饿现象的发生

  • 多级反馈队列调度方法

上面两种方法的折中算法

用于进程调度,抢占式 有可能会导致饥饿

2024.5.17

进程的同步与互斥

进程同步:直接制约关系

为了解决进程异步问题 异步性:各并发执行的进程以各自独立的、不可预知的速度向前推进

进程互斥:间接制约关系

当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。

临界资源:某一个时间段只允许一个进程使用的资源

进入区-临界区-退出区-剩余区

为了禁止两个进程同时进入临界区:

  • 1.空闲让进
  • 2.忙则等待
  • 3.有限等待
  • 4.让权等待

2.3.2 实现临界区进程互斥的软件实现方法

  • 单标志法

两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。

违背了“空闲让进”原则

  • 双标志先检查法

用一个布尔型数组,数组中各个元素用来标记各进程想进入临界区的一员。

违背了“忙则等待”原则 进入区的检查和上锁两个处理不是一气呵成的

  • 双标记后检查法

先上锁后检查

违背了空闲让进和有限等待原则 会产生饥饿现象

  • Peterson算法

孔融让梨 主动让对方先使用临界区

但是有让权等待的原则

2.3.3 实现临界区进程互斥的硬件实现方法

  • 中断屏蔽方法

使用开关中断指令实现 简单高效 但只适用于单处理机 只适用于操作系统内核进程

  • Test and set指令

用硬件实现的 不能被中断 只能一气呵成

不满足让权等待原则

  • Swap指令

都要先记录下此时临界区是否已经被上锁,再将上锁标记lock设置为true 最后检查old 如果old为false则说明之前没有别的进程对临界区上锁 则可以跳出循环进入临界区

不满足让权等待原则

2.3.4 信号量机制

为什么引入:

更好的解决进程互斥和同步的问题

所有的解决方法都无法实现 让权等待 进入区的检查 上锁操作无法一气呵成

PV操作

信号量其实就是一个变量,用一个信号量来表示系统中某种资源的数量

2.3.7 管程

一种高级同步机制

构成:

  • 局限于管程的共享数据结构说明

  • 对该数据结构进行操作的一组过程 过程就是指的函数

  • 对局限于管程的共享数据设置初始值的语句

  • 管程有一个名字

管程的基本特征

  • 局限于管程的数据只能被局限于管程的过程所访问

  • 一个进程只有允许通过调用管程内的过程才能进入管程

  • 每次仅运训一个进程在管程内执行某个内部过程

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值