以下为一些常见的操作系统基础知识整理总结:
进程与线程的区别
进程
进程,即正在运行的程序,程序从硬盘载入到内存就变成进程。进程是资源的拥有者,每个进程都拥有着自己的内存空间与多个线程。
线程
线程是指令的执行者,是计算机执行指令的基本单元,一个进程可以拥有多个线程。线程的引入主要有如下原因:
- 响应:与进程相比,创建线程不涉及或较少涉及资源分配,因此速度较快
- 资源共享:线程间可以共享资源,同一个进程内两个线程通信快
- 经济:创建线程不涉及或较少涉及资源分配
- 适合计算机的多处理器架构
线程既有共享的资源,也有自己私有的资源,JVM中线程持有的资源一般如下:
- PC(程序计数器):线程私有
- 栈:线程私有
- 堆:线程共享
- 方法区:线程共享
在操作系统中,线程还会细分为用户空间的用户级线程与内核空间的内核级线程,两种线程之间还有多种关系模型,在此不再赘述。
死锁的必要条件以及处理死锁方法
死锁有四大必要条件,缺一不可:
- 互斥:至少有一个资源同时只能被一个进程所拥有的
- 占有且等待:一个进程必须持有至少一个资源去等待其他的资源
- 非抢占时:资源不能被抢占,一个资源只有当进程执行完毕才会被释放
- 循环等待:多个进程循环等待其他进程释放资源
对付死锁我们大致可以从三个方面入手:
- 死锁预防与避免:不允许程序死锁
- 死锁检测与恢复:允许程序死锁,死锁后进行恢复工作
- 忽略死锁:出现死锁直接不管(大多数操作系统的做法)
内存管理方式
内存管理方式分为:段存储,页存储,段页存储
段存储示意图如下:
用户程序通过逻辑内存的段号查找段表,获取段的物理内存初始地址与长度,然后操作系统即可在物理内存上读取相应的数据。
使用段存储会出现外部碎片。
页存储示意图如下:
操作系统先把内存空间切分成大小相等的块,用户程序根据自身的大小占用一定的帧。
用户程序通过逻辑内存的页号去页表查找对应的物理内存的块号(帧号),然后操作系统在物理内存上读取相应的数据。
使用页存储会出现内部碎片。
有些操作系统还会有TLB(页表缓存),把一些常用的页面放在TLB中方便快速查询,要是TLB中查询失败再去页表查询。
段页存储即先分段再分页的内存管理办法,其示意图如下:
进程的几种状态
进程有以下几种状态:
- New(创建状态):表示进程正在被创建
- Running(运行状态):表示进程正在执行
- Waiting(等待状态):表示进程正在等待事件的发生
- Ready(就绪状态):表示进程已经准备好,等待分配CPU处理器
- Terminated(终止状态);表示进程已经执行完毕,被终止