系统
操作系统的概念功能与目标
操作系统定义
- 负责协调硬件, 软件等计算机资源的工作
- 为上层应用程序, 用户提供简单易用的服务, 接口与环境
- 是计算机中最接近硬件的软件
操作系统的功能
-
作为系统的管理者应该提供的功能
文件管理(打开文件夹)
内存管理(将数据装入内存)
处理机管理(把什么进程给处理器处理)
设备管理(将设备分配给进程)
-
作为用户与计算机之间的接口应该提供的功能
命令接口(允许用户直接使用, 联机命令接口相当于在线处理数据, 脱机命令接口相当于离线处理数据)
程序接口(用户通过程序间接进行系统调用)
GUI
-
作为最接近硬件的软件应该提供的功能
扩展裸机的功能
操作系统的特征
- 并发
- 多个事件在宏观上同时发生, 在微观上交替发生. 并发并不是并行, 并行是多个事件在同一时刻同时发生
- 共享
- 系统中的资源可以供多个并发的进程共同使用, 有
- 互斥共享: 一个时间段允许一个进程访问资源(麦克风的占用)
- 同时共享: 一个时间段允许多个进程"同时(宏观上)"访问资源(网络的占用)
- 系统中的资源可以供多个并发的进程共同使用, 有
- 虚拟
- 将物理实体转化为虚拟的对应物(例如虚拟内存, 虚拟处理器技术)
- 异步
- 程序并发执行的时候执行不是一贯到底的, 而是走走停停以不可预知的速度推进
OS的发展与分类
-
手动操作阶段
机器用过多时间等待用户输入
单用户在使用时独占全机
-
单道批处理系统
使用脱机输入输出技术,引入监督程序控制作业的输入输出
人讲纸带通过外围机读入磁带, 计算机快速读取磁带内容并输出结果到磁带
缓解了人机速度矛盾,但是内存中仅能有一个程序运行,CPU还是有大量时间在等待IO完成,利用率还是很低
-
多道批处理系统
用户将纸带数据写入磁带,计算机可以同时向内存输入多个磁带程序,操作系统引入了中断技术可以管理程序执行,实现并发执行
缺点是用户只有看到输出才能知道运行的结果,没有人机交互
-
分时操作系统
计算机以时间片轮流为用户服务, 哥哥用户可以通过终端与计算机交互
分时操作系统解决了人机交互问题, 是用户的请求可以即时被相应, 但是操作系统对用户是完全公平的, 无法处理紧急任务
-
实时操作系统
计算机系统接收到外部信号后及时处理, 并要求在严格的时限内处理完事件, 主要特点是及时与可靠
可以优先处理紧急任务
OS的运行机制与体系结构
有的指令对计算机没有损害,有的指令比较危险(例如内存清零)需要具有较高执行权限。将指令分为
- 特权指令:不允许普通的用户程序使用
- 非特权指令:允许普通的用户程序使用
CPU通过PSW的两种状态判断当前是否可以执行特权指令
- 用户态:CPU只能执行非特权指令
- 核心态:CPU可以执行特权指令与非特权指令
计算机系统也将程序分为了
- 内核程序:可以执行特权指令与非特权指令(运行在核心态)
- 非内核程序:只能执行非特权指令(运行在用户态也可以运行在核心态)
内核程序的范围
- 时钟管理:实现计时功能
- 中断处理
- 原语:特殊的程序,实现设备驱动,CPU状态切换,具有原子性(即指令要么执行要么不执行不能中断)
- 对系统资源的管理功能:进程管理,存储器管理,设备管理(有的操作系统不认为这是内核程序)
大内核与微内核
- 大内核:包括了系统资源管理功能的内核(高性能,代码量大,结构混乱,难以维护)
- 微内核:不包括系统资源管理功能的内核(内核功能少,结构清晰,方便维护,但是需要频繁在核心与用户态切换)
中断与异常
早期计算机中各个程序串行执行,这导致系统利用率降低,为了解决这一问题,计算机操作系统引入了中断机制,实现了多道程序并发执行
中断的发生就意味着计算机需要操作系统介入并开展管理工作,一旦中断发生
- CPU立即进入核心态,操作系统获取计算机控制权
- 当前运行程序立刻暂停,由操作系统内核对中断进行处理
- 对于不同中断操作系统处理不同
中断分为
- 内中断:
- 信号由CPU内部产生,与当前执行的指令有关(程序自发进行的中断,要求操作系统处理,例如程序要求从键盘读入数据)
- 可以细分为
- 资源中断(指令中断)
- 强迫中断(有硬件故障与软件中断)
- 外中断:
- 来源于CPU外部的中断与当前执行的指令无关
- 可以细分为
- 外设请求(IO输入结束后发出中断信号通知操作系统)
- 人工干预
中断是用户态切换到核心态的唯一途径(核心态切换到用户态只需要一条设置PSW的特权指令)
外中断的处理过程:
- CPU每执行一条指令后都会检查是否有外中断信号
- 如果检测到了外中断信号则需要保护被中断进程的CPU环境(PSW,PC,通用寄存器…)
- 根据中断的类型转入对应的中断处理环境
- 恢复CPU环境并继续执行进程
系统调用
系统调用是系统提供的可以供应用系统调用的接口,可以理解为供应用程序调用的特殊函数,应用程序通过系统调用获取操作系统的服务
为了防止应用程序抢占系统共享资源,操作系统只允许程序通过系统调用向系统发出占用共享资源的请求,操作系统会对这些请求协调管理
系统调用的分类
- 设备管理
- 文件管理
- 进程控制
- 进程通信
- 内存管理
系统调用的相关处理需要在核心态下进行
应用程序可以通过汇编指令直接进行系统调用,但是高级语言中一般是通过调用封装好的库函数调用系统调用
传递系统调用的参数 -> 执行陷入指令(只能在用户态执行)-> 执行系统调用的相关服务程序(核心态)-> 返回用户程序
进程
进程的组成/定义/组织方式/特征
在单道批处理系统中一个程序可以独占计算机资源,此时内存中保存着这个程序的程序段(存放程序的代码)与数据段(运行过程中处理的数据)
在多道程序系统中,计算机可以同时处理多个程序,内存中也会有多个程序的数据,操作系统需要实现程序的并发执行就必须要找到每个程序对应的程序段,为此操作系统引入了进程与进程实体的概念
操作系统在每个进程运行之前都会为进程创建一个进程控制块(PCB),用来描述进程的各种信息(如存放代码的位置)
进程实体由数据块,程序块,PCB构成
一般来说创建与撤销进程就是创建与销毁一个PCB,PCB是进程的唯一标识
进程有不同的定义
- 进程是程序的一次执行过程
- 进程是一个程序及其数据在处理机上顺序执行所发生的活动
- 进程是具有独立功能的程序在数据集合上运行的过程,是系统进行资源分配与调度的独立单位
- 进程是进程实体的运行过程,是系统进行资源分配与调度的独立单位
PCB的组成
- 进程描述信息:PID与UID
- 进程的控制管理信息:控制状态与优先级
- 资源分配清单:程序段与数据段指针,IO设备
- 处理机相关信息(寄存器的值)
进程的组织
操作系统中有大量PCB,为了对他们有效管理需要将PCB之间组织起来
- 链接方式:OS通过状态建立多个PCB队列,操作系统持有PCB队列的指针
- 执行指针:正在运行的进程 p -> A
- 就绪队列指针:处于就绪态的进程 p -> A -> B -> C
- 阻塞队列指针:当前处于阻塞态的进程 p -> A -> B -> C
- 索引方式:OS通过状态建立多个PCB索引表,操作系统持有索引表的指针
- 执行指针:正在运行的进程 p -> A
- 就绪表指针:指向就绪索引表,表中存放PCB的指针
- 阻塞表指针:指向阻塞索引表,表中存放PCB的指针
进程的特征
- 动态性:进程是一个过程
- 并发性:内存中多个进程实体并发进行
- 独立性:可以独立运行,独立获得资源,独立接受调度的基本单位
- 异步性:各个进程各自独立的,按照不可预知的速度推进,操作系统要使用进程同步机制解决异步问题
- 结构性:由PCB,程序段,数据段组成
进程的状态与转换
操作系统将进程划分为几种状态
-
运行态:正在占有CPU并在CPU上运行(数量等于核心数)
-
就绪态:已经做好运行准备,但是没有空闲CPU,暂时不能运行(拥有除了处理机之外的所有资源)
-
阻塞态:因为等待某一事件而暂时不能运行(等待IO)
-
创建态:进程在被分配资源空间时候的状态
-
终止态:进程正在从OS中撤销,回收进程的资源
就绪态必须先经运行态才能转变到阻塞态
阻塞态必须经过就绪态才能转化到运行态
进程控制
进程控制:实现进程状态之间的转换
为了防止PCB所在的队列与PCB状态不一致,使用原语对进程进行控制,即其在执行过程中不会被中断,通过关中断与开中断指令保证多条原语可以同时执行(关中断后在开中断之前CPU不会处理外部中断信号,开关中断指令是特权指令)
OS中的原语主要有三个功能
-
更新PCB中信息
- 修改PCB状态
- 剥夺进程的CPU使用权,保存PCB环境
- 在进程运行前恢复运行环境
-
将PCB插入合适队列
-
分配回收资源
进程通信
进程是分配资源的基本单位,进程之间的资源相互独立不可相互访问,操作系统应该提供一些方法保证进程之间信息交换的需要
实现方式
-
共享存储
- 操作系统在为两个进程分配资源后再分配一个共享空间,两个进程可以互斥的访问这个共享空间
- 操作系统提供了实现互斥访问的工具
- 共享存储包括基于数据结构的共享(要求共享空间只能存一个固定大小的数据结构)与基于存储区的共享(系统只提供一个存储区,存取数据形式都由进程自行决断)
-
管道通信
-
管道是一个用于连接读写进程的共享文件,内存中的一个固定大小的缓存区(一般与内存页面一样大)
-
管道只能实现半双工通信(同时只能单向传输数据)
-
进程对管道应该是互斥访问
-
流程:进程A向管道写入数据,只有当数据写满的时候
write()被阻塞,进程B才能使用read()从管道中读取数据,只有当全部数据都读取完成read()被阻塞后进程A才能继续向管道中写数据如果管道没有写满就不能读取数据,如果管道没有读空就不能写数据
管道数据一旦读出就会被立刻弹出,故读进程最多一个
-
-
消息传递
- 进程之间以格式化消息的方式交换数据,进程通过OS提供的发送/接受消息两个原语进行数据交换
- 格式化消息包括一个消息头与一个消息体
- 消息头:发送进程ID,接受进程ID,消息类型,消息长度
- 消息体
- 消息传递有直接通信与间接通信
- 直接通信:发送者通过发送原语要求OS将消息直接挂在进程的消息缓冲队列上,接受进程通过接受原语获取消息队列上的消息
- 间接通信:消息要先发送到中间实体信箱
线程
没有引入进程之前系统中的各个程序只能串行执行, 引入进程之后进程之间可以并发执行
但是在同一个进程中我们无法同时做多个事情(边聊天边传输文件),我们需要引入线程机制来解决这个问题
- 引入线程之前进程是CPU服务的基本单位,CPU轮流向不同进程服务
- 引入线程之后CPU的服务单位变成了进程中的线程,若进程希望同时完成多个事务则其可以创建多个线程提高并发度
- 引入线程之后进程只作为系统资源分配的分配单元(打印机,内存的分配都是分配给进程的)
- 同一进程中线程之间的切换不需要切换进程环境,系统开销小,降低了并发所带来的系统开销
线程的属性
- 线程是处理器调度的基本单位
- 在多核CPU中,各个线程可以占用不同的CPU
- 每个线程也有线程的ID,线程的控制块(TCB)
- 线程也有就绪,阻塞,运行三种状态
- 线程几乎不拥有系统资源
- 同一进程的不同线程之间共享进程的资源(IO, 内存等)
- 由于共享内存地址,同一进程中线程的通信无需系统干预
- 同一进程线程切换不会引起进程切换
- 不同进程线程切换会引起进程切换
- 同一进程内的线程切换系统开销很小
- 不同进程内的线程切换系统开销很大
线程的实现方式
-
用户级线程(多对一模型)
用户级线程由应用程序通过线程库实现,线程的管理工作应该由应用程序负责
在用户级线程中,线程的切换可以在用户态完成,无需系统干预
在用户看来进程中存在多个线程,但是操作系统并不会意识到线程的存在,操作系统的调度仍然以线程为基本单位实现
- 优点:线程切换在用户空间完成,开销小,效率高
- 缺点:用户级线程被阻塞后整个进程就会被阻塞,并发度不高,多线程不能在多核上运行
-
内核级线程(一对一模型)
内核级线程的管理由操作系统内核完成,所以必须在核心态下完成
- 优点:单线程阻塞,别的线程还可以继续执行,可以多核心并发执行
- 缺点:一个用户进程会占用多个用户级线程,线程切换由操作系统完成,开销大成本高
最低0.47元/天 解锁文章
3446

被折叠的 条评论
为什么被折叠?



