(个人笔记)操作系统之内存管理

多个进程的执行需要共享 CPU,为了提高 CPU 的利用率和响应用户的速度,这些进程必须都放在内存中,即多个进程不仅需要共享 CPU,也需要共享内存!在整个关于操作系统内存管理的部分,一共分为以下两大部分:

一、基本内存的管理,不引入虚拟内存技术

这一部分的主要任务是介绍如何给进程分配内存,即一些 memory-management 算法:contiguous allocation, paging, segmentation, and combinations of paging and segmentation. 通过这一部分的学习,你会知道在没有虚拟内存的情况下,都能做些什么!

二、引入虚拟内存技术的内存管理

上一部分学习到的基本内存的管理告诉我们:一个进程在执行之前,需要把它全部放在内存当中。而引入虚拟内存之后,可以执行一个不完全在内存中的进程。这个部分的主要学习任务就是:1. 介绍引入虚拟内存的好处。2. 解释 demand paging,page-replacement algorithms,and allocation of page frames 的概念。3、讨论 working-set model 和 thrashing 的原理。

 

 

第一部分:基本内存管理

## Address Binding

 

 

 

 

Internal VS External Fragmentation

 

 

一、各自出现的时机比较

 

  • Internal fragmentation:When the memory assigned to the process is slightly larger than the memory requested by the process this creates free space in the allocated block causing internal fragmentation.
  • External fragmentation:When the process is removed from the memory, it creates the free space in the memory causing external fragmentation.

二、各自的解决方案比较

 

  • Internal fragmentation:The memory must be partitioned into variable sized blocks and assign the best fit block to the process.
  • External fragmentation:Compaction, paging and segmentation.

 


## Dynamic Loading And Dynamic Linking


## Swapping

 

 

Segmentation(Operating System Concepts: 364)

 

在这种内存分配机制下,程序员把内存看作是由各种 segment 所组成的,比如:代码 segment,全局变量 segment,heap segment,每个线程使用的栈 segment. 每个 segment 包含两部分:segment number 和 segment length. 因此逻辑地址由 segment number 和 offset 所组成。

Segmentation 的原理如下图所示。Segment table 中的每个 entry 由一个 segment base 和一个 segment limit 所组成。Segment base 包含这个 segment 在内存中的起始物理地址,Segment limit 指定了当前这个 segment 的长度。一个逻辑地址由 segment number(下图中的s)和这个 segment 中的 offset(下图中的d) 所组成。

我用下图举例说明一下。最左面是各种不同大小的 segment,总共有5个 segments. 如果一个逻辑地址所引用的是 segment 2 内的第53个字节,那么转换成相应的物理地址为 4300 + 53 = 4353. 如果一个逻辑地址所引用的是 segment 0 内的第1222个字节,会 trap to the operating system,产生一个错误!

Paging(Operating System Concepts: 366)

The basic method for implementing paging involves breaking physical memory into fixed-sized blocks called frames and breaking logical memory into blocks of the same size called pages. 关于 paging 的原理如下图所示。一个逻辑地址由 page number (下图的p) and a page offset (下图的d) 所组成,page number 用于索引 page table,一个 page table 包含 base address of each page in physical memory. 这个 base address 结合逻辑地址中的 page offset 会得到一个内存中的物理地址。

Page size 的大小是2的指数,这样做会把逻辑地址转换到 page number and page offset 变得更加容易!比如,如果一个逻辑地址空间是由m bits 组成的,一个 page 的大小 2^n,因此一共可以包含 2^(m-n)=2^m / 2^n 个 page,如下图所示,正好用 m-n 个bits 来表示 page number,用剩下的 n bits 表示 page offset(一个 page 的大小为2^n,这正好)!

下图是关于整个 paging 过程的例子。我们假设 m=4, n=2. 因此一个 page 的大小为4个字节,因此一个 frame 的大小也为4个字节(如下图中最右侧所示),总共有4个 page,通过中间的 page table 可以看出,第0个 page 对应第5个 frame,以此类推。如果你的逻辑地址为 3 (0011, page 0, offset 3),那么映射到的物理地址为23=5*4 + 3.

 

 

第二部分:虚拟内存

 

 

上面介绍的内存管理技术需要:在进程执行之前,把整个进程都要放入物理内存当中。而引入虚拟内存技术之后,我们可以执行一个部分在内存中的进程。关于它们之间的好处和坏处参考「操作系统概念」398页。

Demand Paging

Demand paging 是实现虚拟内存的一种方式,它的原理实际上非常简单,正如下图所示,在进程执行的时候,我们需要哪个 page 时在把它加载到内存中,不需要某个 page 时,有可能会把它换出去。

当我们访问一个没有被加载到内存中的 page 时,会产生一个 page fault,从产生它开始,到重新执行发生它的指令时,经过下图中的过程。下图中的 page table 比上面介绍的页表多了一个标志位,它用来表明当前页是在内存中还是在 disk 中。下图按照序号的次序已经把 page fault 描述的非常清楚了,这里俺就不多说了!

Page Replacement(OS 概念409页)

这个小节中主要介绍了几个页面置换算法,俺就不具体介绍它们的细节了!

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值