面试:操作系统

CS-Notes操作系统

操作系统的特性

  • 并发:并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令
  • 共享:资源是被进程共享的。分为互斥共享和同时共享,互斥共享的被称为临界资源,需要同步机制来保护,即信号量/管程
  • 虚拟:将物理实体映射成逻辑实体。时分复用:将CPU时间虚拟化时间片,分给进程。空分复用:将物理内存虚拟成逻辑空间,段页式访问物理内存。
  • 异步:进程不是一次性执行完毕,而是断断续续地向前

进程管理

什么是进程?

  • 资源分配的基本单位。例如内存、文件句柄和其他内核资源等都是分配给进程,进程中的线程共享这些资源。
  • 独立运行的基本单位。独立运行是指冯诺伊曼模型中一段程序在一段数据中执行。进程有“数据段”和“程序段”,所以可以独立运行。

进程一般由以下的部分组成:

  1. 进程控制块PCB,是进程存在的唯一标志,包含进程标识符PID,进程当前状态,程序和数据地址,进程优先级、CPU现场保护区(用于进程切换),占有的资源清单等。
  2. 程序段
  3. 数据段

什么是线程?

  • 是CPU调度的基本单位。占用CPU时间的最小单位
  • 共享进程的资源,而不是独占资源。指独占线程自己运行所需的上下文(程序计数器、栈、寄存器)
  • 也称为轻量级进程,因为线程不需要独立申请资源,线程切换的开销也较小,它做的上下文切换也比进程切换简单。因为每个进程都有自己的地址空间,所以进程切换时还要更改虚拟内存映射,而线程的资源是共享的,只需要切换线程的上下文(程序计数器、栈、寄存器)

打比方:

  1. 进程是工厂,线程是工厂里的几条流水线
  2. 线程就像农民对土地,只有使用权,没有所有权

什么是协程?

也称为用户态线程,更轻量的线程。称为用户态线程是因为,其切换不涉及内核态,不涉及上文说的进程切换/线程切换中的上下文切换,不需要变更程序计数器、栈等,他完全由程序员控制。

以下是关于协程的一些关键特性:

  1. 协作式调度:协程的一个关键特性是它们是协作式的,而不是抢占式的。这意味着协程必须显式地将控制权交给其他协程。因此,一个协程在运行时不会被其他协程强制中断。相反,程序员可以完全控制协程的调度。

  2. 轻量级:由于协程在单个线程中运行,它们不需要像线程那样进行上下文切换,也不需要与其他协程同步或进行数据通信,因此它们比线程更轻量级。

  3. 便于进行异步编程:协程通常用于需要进行大量异步操作的场景,如I/O操作,网络请求等。协程使得编写这样的程序更加简单,因为它们可以以看似同步的方式编写代码,但实际上是在执行异步操作。

知乎:进程、线程、协程

进程状态的转换

  • 就绪状态(ready):等待被调度
  • 运行状态(running)
  • 阻塞状态(waiting):等待资源

应该注意以下内容:

  • 只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。
  • 阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU 时间,缺少 CPU 时间会从运行态转换为就绪态

进程调度算法

批处理系统

todo

交互式系统

时间片轮转算法。基于先来先服务的思想,线程会在队列中等待,时间片先给对首的线程,用完后中断该线程并会放到队尾。

时间片轮转算法的效率和时间片的大小有很大关系:

  • 因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。
  • 而如果时间片过长,那么实时性就不能得到保证。

实时系统

todo

同步和互斥

看完了进程同步与互斥机制,我终于彻底理解了 PV 操作

异步是操作系统的特性之一,操作系统是没办法保证多个任务的执行先后的。而我们的软件经常有A需要等待B完成之后再执行,这种就需要同步机制。

互斥是指同一时刻只能有一个线程使用某资源,需要互斥访问的资源叫临界资源,互斥访问的过程叫临界区。

两种原语:

  • 信号量:semaphore
  • 管程:java的condition,在条件上等待,条件满足时进行signal