操作系统

187 阅读4分钟

用户态、内核态

  • 用户态:CPU 只能执行非特权指令
  • 核心态:特权、非特权都可以执行

特权指令不允许用户程序使用

线程管理

进程是资源分配的最小单位,线程是 CPU 调度的最小单位。一个进程中可以有多个线程,与进程不同的是同类的多个线程共享进程的方法区资源,但每个线程有自己的程序计数器虚拟机栈本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多

进程调度算法

先来先服务、短作业优先(饥饿)、最短剩余时间优先
时间片轮转、优先级调度、多级反馈队列

进程同步

一次仅允许一个进程使用的资源称为临界资源

同步:多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系
互斥:多个进程在同一时刻只有一个进程能进入临界区

进程通信

进程同步与进程通信很容易混淆,它们的区别在于:

  • 进程同步:控制多个进程按一定顺序执行
  • 进程通信:进程间传输信息

管道
消息队列
共享存储:允许多个进程共享一个给定的存储区。因为数据不需要在进程之间复制,所以这是最快的一种 IPC
套接字:不同机器间的通信

线程通信

  • 共享内存:共享内存指的是多条线程共享同一片内存,发送者将消息写入内存,接收者从内存中读取消息,从而实现了消息的传递。需要程序员来控制线程的同步,即线程的执行次序
  • 消息传递:消息传递指的是发送线程直接将消息传递给接收线程。由于执行次序由并发机制完成,因此不需要程序员添加额外的同步机制,但需要声明消息发送和接收的代码

死锁(对不可剥夺资源的不合理分配,会导致死锁)

互相等待对方手里的资源,导致各自进程阻塞,都无法向前推进

必要条件

  • 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁
  • 不剥夺条件
  • 请求和保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
  • 循环等待条件(按序申请资源来预防):若干进程之间形成一种头尾相接的循环等待资源关系

处理策略

  • 预防死锁
  • 避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁 (银行家算法)
  • 死锁的检测与解除

内存管理

虚拟内存(目的是为了让物理内存扩充成更大的逻辑内存)使用了空分复用技术。即,程序不需全部装入即可运行,运行时根据需要动态调入数据,若内存不够,换出一些数据。(基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其余部分留在外存,就能启动程序执行。在程序执行过程中,当访问的信息不在内存时,将所需要的部分调入内存,然后继续执行程序。另一方面,将内存中暂时不使用的内容换出到外存上。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。)

逻辑地址(相对地址)

进程在内存中的起始地址是不确定的,因此进程中的变量在内存中的存放位置要用相对地址表示

逻辑地址存放在指令中

  • 逻辑地址空间分为若干页;物理内存空间分为若干页框

物理地址

变量在内存中实际存放的地址

页面置换算法(请求分页存储管理中的知识)

  • 最佳置换算法(OPT):选择以后永不使用,或者最长时间内不被访问的页面。(计算机中无法实现)
  • 先进先出置换算法(FIFO):字面意思,算法性能差,会有 Belady 异常
  • 最近最久未使用置换算法(LRU):每次淘汰的页面是最近最久未使用的页面。局部性原理。LinkedHashMap
  • 时钟置换算法(没看)

设备管理

磁盘调度算法

  • 先来先服务
  • 最短寻道时间优先(饥饿)
  • 电梯算法