操作系统的相关基础


操作系统基础

操作系统的概念: 管理硬件、提供用户交互的软件系统

OS统一管理系统资源(处理器资源、IO设备资源、存储器资源、文件资源),实现了对系统资源的抽象
系统资源
OS的基本功能
并发性、共享性、虚拟性、异步性

  • 并行🆚并发:并行是同一时刻、并发是同一时间间隔
  • 共享:OS资源供多个并发的程序使用,分为互斥共享同时访问形式
  • 虚拟性:一个物理实体➡️多个逻辑实体,分为时分复用技术空分复用技术
  • 异步性:多道程序下,允许多进程并发

异步性

五大功能:进程管理、存储管理、作业管理、文件管理、设备管理

进程管理

进程实体、五状态模型、进程同步、Linux进程管理

进程实体

进程——资源分配和调度的基本单位
线程——操作系统进行运行调度的最小单位

进程控制块(PCB)

进程 🆚 线程

五状态模型

创建状态:创建进程时拥有PCB,但是其他资源尚未就绪的状态
终止状态:进程结束由系统清理或者归还PCB的状态 (PCB归还)
五状态转化

操作系统提供fork函数接口创建进程

进程同步

  • 生产者——消费者问题

Key:

  • 对竞争资源在多进程间进行使用次序的协调
  • 使得并发执行的多个进程之间可以有效使用资源和相互合作

临界资源
原则: 空闲让进、忙则等待、有限等待、让权等待
方法:消息队列、共享存储、信号量

Linux进程管理

前台进程、后台进程、守护进程

后台进程: &符号结束
守护进程:进程名字以“d”结尾的一般都是守护进程

进程🆔

  • 操作系统提供fork函数接口创建进程
  • 父子进程关系可以通过pstree命令查看

操作Linux进程的相关命令

  • ps命令:常用于显示当前进程的状态,常配合aux参数或ef参数和grep命令检索特定进程
  • top命令
  • kill命令:发送指定信号给进程,kill –l 可以查看操作系统支持的信号
  • jobs命令:查看当前有多少在后台运行的命令
  • nohup命令: 不挂断地运行命令

◆ fg命令将一个后台命令调换至前台终端继续执行
◆ bg命令将一个后台暂停的命令变成继续执行
◆ ctrl+z将前台工作暂停

存储管理

内存分配与回收、段页式存储管理、虚拟内存、Linux存储管理

内存分配与回收

◆ 确保计算机有足够的内存处理数据
◆ 确保程序可以从可用内存中获取一部分内存使用
◆ 确保程序可以归还使用后的内存以供其他程序使用

内存分配过程:

  • 单一连续分配(只能在单用户、单进程的操作系统中使用)
  • 固定分区分配(支持多道程序,每个分区只提供给一个程序使用,互不干扰)
  • 动态分区分配(根据进程实际需要,动态分配内存空间,FF、BF、QF)

内存回收过程:
◆ 不需要新建空闲链表节点
◆ 只需要把空闲区1的容量增大为空闲区即可
◆ 将回收区与空闲区合并
◆ 新的空闲区使用回收区的地址

段页式存储管理

◆ 字块是相对物理设备的定义 ◆ 页面则是相对逻辑空间的定义

◆ 分页可以有效提高内存利用率(虽然说存在页内碎片)
◆ 分段可以更好满足用户需求
◆ 两者结合,形成段页式存储管理

◆ 先将逻辑空间按段式管理分成若干段
◆ 再把段内空间按页式管理等分成若干页

页式存储管理

◆ 将进程逻辑空间等分成若干大小的页面
◆ 相应的把物理内存空间分成与页面大小的物理块
◆ 以页面为单位把进程空间装进物理内存中分散的物理块
◆ 页表记录进程逻辑空间与物理空间的映射

现代计算机系统中,可以支持非常大的逻辑 地址空间(232~264),这样,页表就 变得非常大,要占用非常大的内存空间,如, 具有32位逻辑地址空间的分页系统,规定页 面大小为4KB,则在每个进程页表中的页表 项可达1M(2^20)个,如果每个页表项占用 1Byte,故每个进程仅仅页表就要占用1MB 的内存空间。

◆ 有一段连续的逻辑分布在多个页面中,将大大降低执行效率

段式存储管理

◆ 将进程逻辑空间划分成若干段(非等分)
◆ 段的长度由连续逻辑的长度决定
◆ 主函数MAIN、子程序段X、子函数Y等

段式存储和页式存储都离散地管理了进程的逻辑空间

◆ 页是物理单位,段是逻辑单位
◆ 分页是为了合理利用空间,分段是满足用户要求 ◆ 页大小由硬件固定,段长度可动态变化
◆ 页表信息是一维的,段表信息是二维的

虚拟内存

◆ 虚拟内存概述
◆ 程序的局部性原理
◆ 虚拟内存的置换算法

◆ 有些进程实际需要的内存很大,超过物理内存的容量
◆ 多道程序设计,使得每个进程可用物理内存更加稀缺
◆ 不可能无限增加物理内存,物理内存总有不够的时候

局部性原理
局部性原理是指CPU访问存储器时,无论是存取指令 还是存取数据,所访问的存储单元都趋于聚集在一个 较小的连续区域中

虚拟内存实际是对物理内存的补充,速度接近于内存,成本接近于辅存

虚拟内存的置换算法
◆ 先进先出算法(FIFO)
◆ 最不经常使用算法(LFU)
◆ 最近最少使用算法(LRU)

高速缓存的替换时机
高速缓存
虚拟内存的置换页面
◆ 替换策略发生在Cache-主存层次、主存-辅存层次
◆ Cache-主存层次的替换策略主要是为了解决速度问题
◆ 主存-辅存层次主要是为了解决容量问题

Linux的存储管理
◆ Buddy内存管理算法 ◆ Linux交换空间

Buddy内存管理策略
◆ Buddy算法是经典的内存管理算法
◆ 算法基于计算机处理二进制的优势具有极高的效率
◆ 算法主要是为了解决内存外碎片的问题

页内碎片: 内部碎片是已经被分配出去(能明确 指出属于哪个进程)的内存空间大于 请求所需的内存空间,不能被利用的 内存空间就是内部碎片
页外碎片:外部碎片是指还没有分配出去(不属 于任何进程),但是由于大小而无法 分配给申请内存空间的新进程的内存 空闲块

努力让内存分配与相邻内存合并能快速进行

Linux交换碎片

◆ 交换空间(Swap)是磁盘的一个分区
◆ Linux物理内存满时,会把一些内存交换至Swap空间
◆ Swap空间是初始化系统时配置的

Linux交换空间
◆ 冷启动内存依赖 ◆ 系统睡眠依赖 ◆ 大进程空间依赖swap空间🆚虚拟内存

作业管理

进程调度、死锁

进程调度

进程调度是指计算机通过决策决定哪个就绪进程可以获得CPU使用权

  • 将就绪进程按照一定的方式排成队列,以便调度程序可以最快找到就绪进程
  • 调度程序以一定的策略选择就绪进程,将CPU资源分配给它
  • 保存当前进程的上下文信息,装入被委派执行进程的运行上下文
  • 分类: 非抢占式的进程调度和抢占式的进程调度抢占式🆚非抢占式的进程调度
    进程调度的算法

◆ 先来先服务调度算法
◆ 短进程优先调度算法 (短进程优先调度算法不利于长作业进程的执行)
◆ 高优先权优先调度算法 (进程附带优先权,调度程序优先选择权重高的进程)
◆ 时间片轮转调度算法(是相对公平的调度算法,但不能保证及时响应用户)

死锁

死锁是指两个或两个以上的进程在执行过程 中,由于竞争资源或者由于彼此通信而造成 的一种阻塞的现象,若无外力作用,它们都 将无法推进下去。此时称系统处于死锁状态 或系统产生了死锁,这些永远在互相等待的 进程称为死锁进程。

  1. 死锁的产生
    ◆ 竞争资源(共享资源数量不满足各个进程需求;各个进程之间发生资源进程导致死锁)
    ◆ 进程调度顺序不当

  2. 死锁的四个必要条件
    ◆ 互斥条件
    进程对资源的使用是排他性的使用;某资源只能由一个进程使用,其他进程需要使用只能等待
    ◆ 请求保持条件
    进程至少保持一个资源,又提出新的资源请求;新资源被占用,请求被阻塞;被阻塞的进程不释放自己保持的资源
    ◆ 不可剥夺条件
    进程获得的资源在未完成使用前不能被剥夺;获得的资源只能由进程自身释放
    ◆ 环路等待条件
    发生死锁时,必然存在进程-资源环形链

  3. 预防死锁的方法
    预防死锁

  4. 银行家算法
    ◆ 客户申请的贷款是有限的,每次申请需声明最大资金量
    ◆ 银行家在能够满足贷款时,都应该给用户贷款
    ◆ 客户在使用贷款后,能够及时归还贷款

文件管理

操作系统的文件管理、Linux的文件系统、Linux文件的基本操作

文件的逻辑结构

◆ 逻辑结构的文件类型
◆ 顺序文件
◆ 索引文件

◆ 文件内容由定长记录和可变长记录组成
◆ 定长记录存储文件格式、文件描述等结构化数据项 ◆ 可变长记录存储文件具体内容文件逻辑结构
无结构文件:

◆ 也称为流式文件
◆ 文件内容长度以字节为单位

顺序文件

◆ 顺序文件是指按顺序存放在存储介质中的文件
◆ 磁带的存储特性使得磁带文件只能存储顺序文件
◆ 顺序文件是所有逻辑文件当中存储效率最高的

索引文件

◆ 可变长文件不适合使用顺序文件格式存储
◆ 索引文件是为了解决可变长文件存储而发明的一种文件格式
◆ 索引文件需要配合索引表完成存储的操作

辅存的分配方式
连续分配

◆ 顺序读取文件内容非常容易,速度很快
◆ 对存储要求高,要求满足容量的连续存储空间

链接分配

◆ 链接分配可以将文件存储在离散的盘块中
◆ 需要额外的存储空间存储文件的盘块链接顺序

索引分配
存储空间管理

◆ 把文件的所有盘块集中存储(索引)
◆ 读取某个文件时,将文件索引读取进内存即可

空闲链表

◆ 空闲链表法把所有空闲盘区组成一个空闲链表
◆ 每个链表节点存储空闲盘块和空闲的数目

位示图

◆ 位示图维护成本很低
◆ 位示图可以非常容易找到空闲盘块
◆ 位示图使用0/1比特位,占用空间很小

任何文件或目录都只有唯一路径

文件描述信息
文件描述信息
常见的文件内容存放
Linux文件类型
Linux文件类型

文件类型

文件系统

◆ FAT(File Allocation Table)
◆ FAT16、FAT32等,微软Dos/Windows使用的文件系统 ◆ 使用一张表保存盘块的信息

◆ NTFS (New Technology File System)
◆ WindowsNT环境的文件系统
◆ NTFS对FAT进行了改进,取代了旧的文件系统

◆ EXT(Extended file system):扩展文件系统
ext文件系统
◆ Boot Sector:启动扇区,安装开机管理程序 ◆ Block Group:块组,存储数据的实际位置

◆ Linux的文件系统
◆ EXT2/3/4 数字表示第几代

设备管理

操作系统的设备管理
设备的分类

IO设备的缓冲区

◆ 减少CPU处理IO请求的频率
◆ 提高CPU与IO设备之间的并行性

CPU与IO设备的速率不匹配

◆ 专用缓冲区只适用于特定的IO进程
◆ 当这样的IO进程比较多时,对内存的消耗也很大
◆ 操作系统划出可供多个进程使用的公共缓冲区,称之为缓冲池

spooling技术

◆ 是关于慢速字符设备如何与计算机主机交换信息的一种技术 ◆ 利用高速共享设备将低速的独享设备模拟为高速的共享设备 ◆ 逻辑上,系统为每一个用户都分配了一台独立的高速独享设备

SPOOLing技术把同步调用低速设备改为异步调用
◆ 在输入、输出之间增加了排队转储环节(输入井、输出井) ◆ SPOOLing负责输入(出)井与低速设备之间的调度
◆ 逻辑上,进程直接与高速设备交互,减少了进程的等待时间


Author: Casey Lu
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Casey Lu !
评论
 Previous
浅谈HTTP相关原理 浅谈HTTP相关原理
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。 一、HTTP的缓存机制 强缓存和协商缓存 控制强制
2020-09-19
Next 
小程序原理及RN与Flutter的对比 小程序原理及RN与Flutter的对比
小程序 小程序的底层原理 小程序的呈现模式是 WebView + 原生组件,Hybrid 方式 双线程模式是小程序的最大特点 小程序的渲染层和逻辑层分别由 2 个线程管理:渲染层的界面使用了 WebView 进行渲染,逻辑层采用 JsCo
2020-08-27
  TOC