一,操作系统概览
-
what & why
操作系统是管理计算机硬件、软件的程序。
方式:管理配置内存、决定资源供需顺序、控制输入输出设备等,并提供操作界面 -
操作系统的基本功能
管理计算机资源
实现了对计算机资源的抽象
提供了对用户的接口(图形,命令,系统调用)
WX20190812-183159@2x.png -
相关概念
捕获.PNG
并发、共享、虚拟、异步
1.并行与并发:
并行:多个事件同一时刻发生
并发:多个事件同一时间间隔发生
二,进程
1.进程:
是系统进行资源分配和调度的基本单位;
进程是程序独立运行的载体;
进程大幅提升系统资源利用率;
2.主存中的进程形态 --->> 进程控制块 PCB
包括:标识符、状态、程序计数器、内存指针、上下文数据、IO状态信息、记账信息、优先级等
一个进程process可以有多个线程thread;
线程是操作系统运行调度的最小单位
捕获.PNG
3.五状态
就绪、阻塞、执行、、创建、终止
-
创建:
动作 >>> 分配PCB,插入就绪队列
状态 >>> 拥有PCB,其他资源未就绪
操作系统提供了fork函数接口创建进程 - 终止:系统清理 >>> 归还PCB
-
就绪:分配到除CPU外所有必要的资源之后
并发的就绪进程,排列成了就绪队列 -
执行状态:获取CPU后正在运行的
单处理器中只有一个是执行的 -
阻塞:因某种原因,放弃CPU后,进入的状态(也存在阻塞队列)
例,执行的时候调用打印机过久,进入阻塞状态,打印机就绪后,又进入就绪状态,分配到CPU后,重新进入执行状态
WX20190813-105330@2x.png
4.进程同步
- 因为处理临界资源,多个异步进程抢夺资源会产生bug,顾需要进程同步,协调多进程的资源使用次序
根源:进程间彼此无通信 - 同步原则
临界资源,是一种共享资源,但同时只能被单一进程使用。其他进程必须依据操作系统的同步机制等待占用进程释放该资源,才可以重新竞争使用该共享资源
WX20190813-113110@2x.png - 线程同步
同理,进程内的多线程也需要同步
方法:互斥量、读写锁、条件变量、自旋锁
5,Linux进程
- Linux进程类型
前台进程:有终端,可以和用户交互(终端里手动运行一些文件)
Ctrl+C停止
后台进程:没有占用终端(优先级稍低于前台进程)(终端里手动运行一些文件、命令,尾部加&,即是后台进程,不占用终端)
Ctrl+C无法停止,使用kill命令
守护进程:一种后台进程,通常以d结尾的进程,随系统启动、关闭而启动关闭,保护如http,ssh等操作 -
父子进程
A调用fork创建进程B,B创建C
pstree命令查看父子关系
WX20190813-120407@2x.png -
状态标记
WX20190813-120519@2x.png - 常用命令
ps:
查看当前进程
ps -aux 打印进程的详细信息
ps -u root 查看指定用户root的进程
ps -aux | grep 'python3' 查看指定程序的进程
ps -ef --forest 查看进程树
排序sort
top:
top 查看系统进程的所有状态
kill:
给操作系统发送信号
kill -l 查看信号列表
kill -9 PID 无条件终止后台进程
6,作业管理
1.进程调度
决策哪个就绪进程获得cpu使用权
- 调度的三个步骤与机制:
就绪队列排列机制、选择运行进程的委派机制、新老进程切换机制 - 根据老进程是否执行完成,分为:非抢占式调度、抢占式调度
- 相关算法
先来先服务、短进程优先、高权优先、时间片轮转调度算法
2.死锁
竞争资源、调度顺序、进程通信等原因造成多进程永久等待状态。
- 必要条件:互斥、请求保持、不可剥夺、环路等待。死锁一定满足这四个条件。
- 死锁处理
预防:破坏必要条件一个或多个
银行家算法:以银行借贷系统分配策略为基础的算法。用到所需资源表、已分配资源表、还需分配表。
三,存储管理
1.内存分配与回收
- 分配过程
固定分区分配(最简单):若干分区,每个分区分配一个程序
动态分区分配(常用):根据进程需要,动态分配空间(涉及数据结构与算法)
相关数据结构:动态分区空闲表(表格),动态分区空闲链(双向链表保存空闲区域)
动态分区分配算法:
①,首次适应算法(FF算法):分配内存是时,从头遍历链表,合适即用,若无则匹配失败。
改进:循环适应算法,每次开始不从头部,而从上一次检索的位置开始。
②,最佳适应算法(BF算法):将链表按照大小排序,遍历链表,选择最合适的
③,快速适应算法(QF算法):多个链表,分表储存一样大小的空闲区 -
回收过程
QQ截图20190817181651.png
2.段页式存储管理
将进程逻辑空间等分为若干大小的页面,相应的物理内存空间分成同页面大小的物理块,然后以页面为单位,把进程空间分散的装进物理内存
-
内存碎片
所以页面的大小一般是512B ~ 8K
微信截图_20190817184100.png -
页表
记录进程逻辑空间与物理空间映射的表
页表的缺点如下,故需要多级页表
微信截图_20190817184513.png - 多级页表
一级页表保存二级页表的地址,按需加载二级页表 - 段式存储管理
当一段逻辑存在于多个页表,执行效率降低,为此引入段式
同页式,段式页式将逻辑空间分段,但是是根据连续逻辑的长度,分为若干不等的片段。
使用段表记录 - 终极方案:段页式存储
先按段式分成若干逻辑段,再按页式将每个段按页的大小分页
3.虚拟内存
- 概念:进程的逻辑空间很大,程序需要使用的内存,存至物理内存,暂时不用的放入磁盘中
- 程序的局部性原理
CPU访问存储器时,无论是存取指令,还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中,(因此才可以实现虚拟内存)
当访问页不在内存时,发出缺页中断,发起页面置换
以上,就实现了程序拥有很大的内存空间,即虚拟内存 - 虚拟内存的置换算法
与高速缓存和主存之间的替换算法一样,是之前学过的FIFO,LFU,LRU
前者解决了速度的问题,后者解决了容量的问题
4.Linux储存管理
- buddy内存管理算法
主要解决内存外碎片问题。将外碎片转换为内碎片。
原则是分配内存向上取整2的幂次方,申请77k,分配128K。
算法:创建一系列空闲块链表,比如每个块大小相同,1K ~ 1M等一系列的链表,分配与回收~~
分配:1M的内存,申请77K,开始只有1M的链表,删除节点,512K链表添加两个节点,判断512K过大,拿出一个512K节点分为两个256K节点。。。最后,拥有一个空的1M链表,拥有一个节点的512K链表,256K链表,128K链表,分配出去一个128K的内存。
回收:归还128K内存,判断buddy节点,有一个空的128K节点,两者结合,128K链表为空,向256K链表添加一个节点,再次判断buddy节点,有buddy节点,继续合并。。。结果,1K ~ 512K链表都为空,1M的链表有一个节点。
页内碎片:已经分配出去的内存空间,大于请求使用的空间,空闲部分是页内碎片(同段页式的内存碎片)
页外碎片:没有分配出去的,但由于太小,无法分给新进程的内存碎片 - Linux交换空间 swap
swap实际是磁盘分区,系统物理内存满的时候,会把一些内存交换至swap,系统初始化的时候配置;
由于实际是磁盘内存,故尽量少用,否则会降低系统速度;
top命令可以查看swap空间;
作用:冷启动的依赖(大型应用启动的时候需要大量内存);系统睡眠依赖(系统睡眠时内存存至swap,下次启动快);大应用依赖;
对比虚拟内存:
捕获.PNG
四,文件管理
1.文件的逻辑结构
- 有结构文件:文本,图片视频,文档等
文件内容由定长记录和可变长记录组成
定长记录储存文件格式,文件描述等结构数据
可变长记录,存储具体内容 - 无结构文件:二进制文件和链接库,exe文件,dll文件,so文件等
内容长度以字节为单位
2.辅存的空间分配
- 辅存的分配方式
连续分配,链接分配(隐式和显式),索引分配 - 存储空间管理
空闲表,空闲链表,位示图 - 目录管理
目录树
3.Linux文件操作
-
Linux目录
微信截图_20190818160419.png
微信截图_20190818160450.png - Linux文件常用操作
相关命令自查 -
Linux文件类型
ls -al 查看文件列表,每个文件信息的第一个字符代表文件类型
微信截图_20190818161137.png
4.Linux文件系统
- Linux文件系统
常见的文件系统:FAT,NTFS,EXT2/3/4
FAT:file allocation table,是微软dos/windows使用的,有FAT16/FAT32,使用一张表保存盘块信息
NTFS:new technology file system Windows系统现在用的,从FAT发展而来
EXT: extend file system Linux,macos使用,window不识别(Linux可使用和识别fat,ntfs) -
ext文件系统
由boot sector和很多block group组成
前者是启动扇区,安装开机管理程序;后者是存储数据的块
block group的组成:
命令:stat + 文件名可以查看文件信息(一个文件有好多block group)
微信截图_20190818170424.png
五,操作系统设备管理
1.IO设备的缓冲区
为减少IO请求频率,提高CPu与IO并行行(类似减少DOM操作)
程序的多次对IO设备的交互,改为程序先写入缓冲区,再统一发送给IO设备,变成一次交互。
某一特定的进程可以拥有专用缓冲区,但是专用过多会占用大量内存,所以也存在公共缓冲区,即缓冲池。
2.spooling技术(同步变异步)(虚拟技术)
(类似于减少DOM操作,也不太一样)
原来三个进程要使用打印机,会排队等待,进程会出现阻塞
spooling单独创建一个控制打印机的进程,三个进程把要打印的内容都写入spooling进程(很快),然后三个进程(认为已经打印完成了)不阻塞继续工作,打印机持续输出。
下一篇,提升部分
提升篇
网友评论