操作系统基础知识总结(一)

以下为一些常见的操作系统基础知识整理总结:

进程与线程的区别

进程

进程,即正在运行的程序,程序从硬盘载入到内存就变成进程。进程是资源的拥有者,每个进程都拥有着自己的内存空间与多个线程。

线程

线程是指令的执行者,是计算机执行指令的基本单元,一个进程可以拥有多个线程。线程的引入主要有如下原因:

  1. 响应:与进程相比,创建线程不涉及或较少涉及资源分配,因此速度较快
  2. 资源共享:线程间可以共享资源,同一个进程内两个线程通信快
  3. 经济:创建线程不涉及或较少涉及资源分配
  4. 适合计算机的多处理器架构

线程既有共享的资源,也有自己私有的资源,JVM中线程持有的资源一般如下:

  • PC(程序计数器):线程私有
  • 栈:线程私有
  • 堆:线程共享
  • 方法区:线程共享

在操作系统中,线程还会细分为用户空间的用户级线程与内核空间的内核级线程,两种线程之间还有多种关系模型,在此不再赘述。

死锁的必要条件以及处理死锁方法

死锁有四大必要条件,缺一不可:

  • 互斥:至少有一个资源同时只能被一个进程所拥有的
  • 占有且等待:一个进程必须持有至少一个资源去等待其他的资源
  • 非抢占时:资源不能被抢占,一个资源只有当进程执行完毕才会被释放
  • 循环等待:多个进程循环等待其他进程释放资源

对付死锁我们大致可以从三个方面入手:

  1. 死锁预防与避免:不允许程序死锁
  2. 死锁检测与恢复:允许程序死锁,死锁后进行恢复工作
  3. 忽略死锁:出现死锁直接不管(大多数操作系统的做法)

内存管理方式

内存管理方式分为:段存储,页存储,段页存储

段存储示意图如下:
段存储示意图

用户程序通过逻辑内存的段号查找段表,获取段的物理内存初始地址与长度,然后操作系统即可在物理内存上读取相应的数据。
使用段存储会出现外部碎片。

页存储示意图如下:
页存储示意图

操作系统先把内存空间切分成大小相等的块,用户程序根据自身的大小占用一定的帧。
用户程序通过逻辑内存的页号去页表查找对应的物理内存的块号(帧号),然后操作系统在物理内存上读取相应的数据。
使用页存储会出现内部碎片。
有些操作系统还会有TLB(页表缓存),把一些常用的页面放在TLB中方便快速查询,要是TLB中查询失败再去页表查询。

段页存储即先分段再分页的内存管理办法,其示意图如下:
段页存储示意图

进程的几种状态

进程有以下几种状态:

  • New(创建状态):表示进程正在被创建
  • Running(运行状态):表示进程正在执行
  • Waiting(等待状态):表示进程正在等待事件的发生
  • Ready(就绪状态):表示进程已经准备好,等待分配CPU处理器
  • Terminated(终止状态);表示进程已经执行完毕,被终止