前言:本文适合用于基础了解和背诵,尽可能采用流畅且简短的语言回答操作系统相关问题并且辅以图片帮助记忆,不适合用作详细了解与深入学习 。
总述
操作系统部分主要分为以下几个重点 —— 操作系统基础 、 进程和线程、操作系统的内存管理、虚拟内存
一、操作系统基础篇
- 什么是操作系统
操作系统本质上是一个运行在计算机上的软件程序,用于管理软件和硬件资源,其存在屏蔽了硬件层的复杂性。
- 什么是操作系统的内核
操作系统的核心部分是操作系统的内核(Kernel),其负责系统的内存管理、硬件设备的管理、文件系统的管理以及应用程序的管理。内核是连接软硬件的桥梁,决定了系统的性能和稳定性。
- 什么是操作系统用户态和系统态
根据访问资源的特点,进程在操作系统上运行的两个级别分别为用户态和系统态。其中我们运行的程序基本上都是运行在用户态,用户态运行的进程只可以读取用户程序的数据,而系统态运行的进程几乎可以访问计算机的任何资源。
- 什么是系统调用
运行在用户态的进程,需要调用操作系统提供的系统态级别的子功能时,就需要系统调用。系统调用大致可分为设备管理、文件管理、进程控制、进程通信、内存管理等。
二、进程和线程篇
- 进程和线程间的区别和联系是什么
线程是进程划分的更小运行单元,一个进程可以有多个线程,多个线程共享进程的堆和方法区(元空间)资源,每个线程有自己的程序计数器、虚拟机栈和本地方法栈。各个进程之间是独立的,而各个线程间可能会相互影响。线程执行开销小,但是不利于资源的管理保护,而进程则相反。
- 进程有几种状态,并且状态如何转化
进程具有 5 种状态, 分别是 a. 创建状态 —— 表示进程正在被创建、b. 就绪状态 —— 此时进程获得了除了处理器外的一切资源,一旦获得得处理器资源(即时间片)就可以运行、c. 运行状态 —— 这时进程正在处理器上运行 、d. 阻塞状态 —— 表示进程正在等待某事件而暂停运行 、结束状态 —— e. 表示进程正在从系统中消失,可能是正常结束或者其他原因中断退出。
- 进程间的通信方式有那些
进程间有 7 中常见的通讯方式,分别是 a. 管道 —— 其常用于具有亲缘关系的进程间 、b. 有名管道 —— 有名管道以磁盘文件的方式存在,严格遵守先进先出的原则,可以实现本机任意两个进程间的通信、 c. 信号 —— 信号用于通知和接收进程某个事件的发生、d. 消息队列 —— 消息队列是消息的列表,其存放在内核中,可以实现消息的随机查询 、 e. 共享内存 —— 通过多个进程可访问同一块内存的方式实现进程间的通信 、 f. 套接字 —— 套接字主要用于客户端与服务器间的网络通信、 g. 信号量 —— 其是一个计数器,意图在于进程间同步
- 线程间的同步方式有那些
当具有共享关键资源的线程并发执行时需要进行同步操作,从而避免关键资源使用冲突。操作系统具有三种线程同步方式,分别是 : a. 互斥量 —— 其规定拥有互斥对象的线程才具有访问共享资源的权限,如 Java 中的 synchronized 关键字和各种锁机制。 b. 信号量 —— 其允许在一定规定量的并发线程数量下,多个线程并发访问同一资源。 c. 事件 —— 事件通过通知的方式保证多线程同步
- 进程调度算法有那些
主要的进程调度算法有: a. 先到先服务调度算法 —— 先到先服务是指从就绪队列中选取最先进入队列的进程先分配资源使其执行 b. 短作业优先调度算法 —— 短作业优先调度算法是指从就绪队列中选取估计运行时间最短的进程优先分配资源使其执行 c. 时间片轮转调度算法 —— 时间片轮转调度算法是是最古老、最公平、使用最广的算法,每个进程被分配一个允许运行时间(即时间片),按照时间片轮转运行 d. 多级反馈队列调度算法 —— 既能使得优先级高的作业得到响应又能使得短作业迅速完成 e. 优先级调度算法 —— 高优先级进程先运行,相同优先级进程按照先到先服务运行
- 死锁是什么
死锁描述的是一种多个进程被无限期阻塞,它们中的一个或者多个都在等待某一资源被释放,导致程序不能正常终止的情况。
例子: 银行汇款, A 汇款给 B 的同时 B 汇款给 A ,就会出现如下的死锁情况 ——
- 死锁是怎么产生的
死锁的产生具有四个必要条件,它们分别是:a. 互斥 —— 即资源处于非共享模式,每次只有一个进程或者线程可以使用 b. 占有并等待 —— 指一个进程必须占用一个资源,同时等待另一个资源,而这个资源被其他线程占有 c. 非抢占 —— 指的是只能等待持有该资源的线程完成任务后才能释放该资源 d. 循环等待 —— 指的是在一组进程 {P0,P1, P2, P3,…} 中,P1 等待的资源被 P0 占有,P2 等待的资源被 P1 占用,依次类推。循环等待其实就是我们绘制出图,图中出现环。
- 如何解决死锁问题
从多个角度分析,解决死锁问题的方法有 a. 预防 、避免、检测 和 解除 四种。
a. 预防 :
预防指的是破坏死锁产生的四个必要条件,使得死锁产生的必要条件不可能成立,从而预防死锁的发生 。
1. 破坏互斥条件 —— 使得资源可以同时访问(磁盘管理),但是一般来说,资源往往是不能同时访问的
2. 破坏非抢占条件 —— 可以采用剥夺式调度算法(如主存资源,处理器资源),使得资源可以抢占,但是这种算法并不适用于所有资源,也会降低资源利用率。
因此,我们一般都是破坏 占用并等待 和 循环等待 这两个条件。
3. 破坏占有并等待 —— 使用静态分配策略,即一个进程必须在执行前就申请到它需要的全部资源(这种策略严重降低了资源利用率)
4. 破坏循环等待 —— 使用层次分配策略,即将资源分成多个层次,按照这种策略,不可能出现循环等待链
b. 避免
死锁的避免是指允许死锁产生的四个必要条件的存在,但是通过掌握并发进程中每个进程的资源动态申请情况,做出明智且合理的选择,从而避免死锁 。
具体方法为 —— 将系统状态分为安全状态 和 不安全状态, 在为申请者分配资源时先测试系统状态 (银行家算法)
c. 检测
死锁的检测是指系统定时允许一个“死锁检测” 程序,检测是否出现了死锁。具体的方法有 ——
进程 - 资源分配图 : 通过判断图中是否有环路,判断是否出现了死锁。
d. 解除
死锁检测出存在死锁的发生时,进行死锁解除,解除方法有 : a. 结束所有进程,重启操作系统 b. 撤销涉及死锁的所有进程,解除死锁后继续运行 c. 逐个撤销涉及死锁的进程,回收资源直至死锁解除 d. 抢占资源,抢占涉及死锁进程中的资源,资源再分配直至死锁解除