程序员的自我修养

操作系统杂谈--内存&进程&线程

2018-04-08  本文已影响24人  siriusing

作为一个程序员,至少对操作系统是要有些了解的,最近被问了几次,主要是内存分配算法的实现思路,其实这次过来复习不过是为了熟悉专业名词。正如上次被问到LRU,主要是不知道这东西是什么?
也发现其实关于线程的实现,其实当年学过...

连续内存分配

最先匹配:First Fit Allocation

image.png

最佳匹配:Best Fit Allocation

思路:分配n字节分区时, 查找并使用不小于n的最小空闲分区

最差匹配: Worst Fit Allocation

思路:分配n字节,使用尺寸不小于n的最大空闲分区


image.png

连续内存分配的缺点:

非连续内存

段地址空间

更细粒度和灵活的分离与共享

进程的段地址空间由多个段组成:


页式存储管理

帧 (Frame):

物理内存被划分成大小相等的帧

内存物理地址的表示:二元组 (f, o)

页(Page)

进程逻辑地址空间被划分为大小相等的页

页内偏移 = 帧内偏移
通常:页号大小 ≠ 帧号大小

进程逻辑地址的表示:二元组 (p, o)

页式存储中的地址映射

页到帧的映射:逻辑地址中的页号是连续的,映射到物理地址中的物理帧号就变成是不连续的

页表
页式存储管理机制的性能问题
段页式存储管理

在段式存储管理基础上,给每个段加一级页表

页置换

场景:内存里所有帧都被分配了,无法将虚拟内存中的页映射到新的帧上

使用修改位,只有修改过的才被回写到硬盘

页置换的基本方法

  1. 查找所需页在磁盘上的位置(假设页已经被写到磁盘)
  2. 查找一空闲帧
    • 如果有空闲帧,那么就使用它
    • 如果没有空闲帧,那么就使用页置换算法以选择一个“牺牲”帧(victim frame)。
    • 将“牺牲”帧的内容写到磁盘上(如果是脏页);改变页表和帧表。
  3. 将所需页读入(新)空闲帧;改变页表和帧表
  4. 重启用户进程。

页面置换算法

最优页面置换算法(OPT, Optimal)
先进先出算法(FIFO)
最近最久未使用算法(LRU)

LRU: Least Recently Used

时钟置换算法(Clock)
最不常用算法(LFU)

LFU: Least Frequently Used

LRU、FIFO的比较
LRU、FIFO和Clock的比较

进程

组成

特点:

进程 = 执行中的程序 = 程序 + 执行状态
进程 = CPU + 内存

image.png

线程:
优点:


线程的三种实现方式

用户线程
内核线程
轻量级进程
image.png

  内核支持的用户线程。一个进程可有一个或多个轻量级进程,每个轻量级进程由一个单独的内核线程来支持。


  1. Belady: 对有的页置换算法,页错误率可能会随着所分配的
    帧数的增加而增加

  2. PCB: process Controller Block

  3. TCB: Thread Controller Block

上一篇 下一篇

猜你喜欢

热点阅读