内存管理
Memory management is the act of managing computer memory. The essential requirement of memory management is to provide ways to dynamically allocate portions of memory to programs at their request, and free it for reuse when no longer needed. This is critical to any advanced computer system where more than a single process) might be underway at any time.
内存管理术语
页框 | 内存中一个固定长度的块 |
---|---|
页 | 一个固定长度的数据块,储存在二级存储中(如磁盘)。数据页可以临时复制入内存中的页框中。 |
段 | 一个变长的数据块,储存在二级存储器中。整个段可以临时复制到内存的一个可用区域内(分段),或者可以将一个段分为许多页,将每页单独复制到内存中(分段和分页相结合)。 |
内存管理需求:重定位、保护、共享、逻辑组织、物理组织
内存管理最基本的操作是由处理器把程序装入内存中执行。
内存分区
内存管理最基本的操作是由处理器把程序装入内存中执行。
内存管理技术
技术 | 说明 | 优势 | 弱点 |
---|---|---|---|
固定分区 | 在系统生成阶段,内存被划分成许多静态分区。进程可以被装入到大于或等于自身大小的分区中。 | 实现简单,只需要极少的操作系统开销。 | 由于有内部碎片,对内存的使用不充分;活动进程的最大数目是固定的。 |
动态分区 | 分区是动态创建的,因而使得每个进程可以被装入与自身大小正好相等的分区中 | 没有内部碎片;可以更充分地使用内存。 | 由于需要压缩外部碎片,处理器利用率低。 |
简单分页 | 内存被划分成许多大小相等的页框;每个进程被划分成许多大小与页框相等的页;要装入进程,需要把进程包含的所有页都装入到内存中不一定连续的页框中。 | 没有外部碎片 | 有少量的内部碎片 |
简单分段 | 每个进程被划分成许多段;要装入进程,需要把进程包含的所有段都载入到内存中不一定连续的某些动态分区中。 | 没有内部碎片;相对于动态分区,提高了内存利用率减少开销 | 存在外部碎片 |
虚拟内存分页 | 除了不需要装入进程的所有页之外,与简单分页一样;非驻留页在以后需要时自动调入内存 | 没有外部碎片;支持更高道数的多道程序设计;巨大的虚拟地址空间。 | 复杂的内存管理开销 |
虚拟内存分段 | 除了不需要装入进程的所有段之外,与简单分段一样,非驻留段在以后需要时自动调入内存 | 没有内部碎片;支持更高道数的多道程序设计;巨大的虚拟地址空间。支持保护和共享 | 复杂的内存管理开销 |
固定分区
使用大小相等的固定分区有两个难点:
- 程序可能太大而不能放到一个分区中。在这种情况下,程序员必须使用覆盖技术设计程序,使得任何时候该程序只有一部分需要放到内存中。
- 内存的利用率非常低。由于被装入的数据块小于分区大小,从而导致分区内部有空间浪费,这种现象称为内存碎片(internal fragmentation)。
可以通过大小不等的分区来缓解这两个问题。
放置算法
对于大小相等的分区策略,进程在内存中的放置非常简单。只要存在可用分区,进程就可以装入分区。由于所有的分区大小相等,因而使用哪个分区都没有关系。
动态分区
对于动态分区,分区长度和数目是可变的。当进程被载入内存时,系统会给它分配一块和它所需容量完全相等的内存空间。
动态分区方法在开始时是很好的,但它最终会导致在内存中出现许多小的空洞。随着时间的推移,内存中产生了越来越多的碎片,内存的利用率随之下降。这种现象成为外部碎片(external fragmentation),指在所有分区外的存储空间变成越来越多的碎片,这与前面的内部碎片正好相对。
克服外部碎片的一种技术是压缩(compaction)
操作系统不时地移动进程,使得进程占用的空间连续,并且所有的空闲空间连成一片。
放置算法
三种放置算法:最佳适配、首次适配和下次适配。这三种算法都是在内存中选择等于或大于该进程的空闲块。差别在于:最佳适配选择与要求的大小最接近的块;首次适配从头开始扫描内存,选择大小足够的第一个可用块;下次适配从上一次放置的位置开始扫描内存,选择下一个大小足够的可用块。
置换算法
伙伴系统
固定分区和动态分区都有缺陷。固定分区方案限制了活动进程的数目,并且如果可用分区的大小与进程大小非常不匹配,则内存空间的利用率非常低。动态分区的维护特别复杂,并且引入了进行压缩的额外开销。一种更有吸引力的折中方案是伙伴系统。
重定位
分页
Paged allocation divides the computer’s primary memory into fixed-size units called page frames, and the program’s virtual address space into pages) of the same size. The hardwarememory management unit maps pages to frames. The physical memory can be allocated on a page basis while the address space appears contiguous.
分页与固定分区的区别在于:采用分页技术的分页相当小,一个程序可以占据多个分区,并且这些分区不需要是连续的。
总之,采用简单分页技术,内存被分成许多大小相等且很小的页框,每个进程被划分成同样大小的页;较小的进程需要较少的页,较大的进程需要较多的页;当一个进程被装入时,它的所有页都被装入到可用框中,并且建立一个页表。
分段
Segmented memory is the only memory management technique that does not provide the user’s program with a ‘linear and contiguous address space.”Segments are areas of memory that usually correspond to a logical grouping of information such as a code procedure or a data array. Segments require hardware support in the form of a segment table which usually contains the physical address of the segment in memory, its size, and other data such as access protection bits and status (swapped in, swapped out, etc.)
采用简单分段技术,进程被划分成许多段,段的大小不需要相等。当一个进程被调入时,它的所有段都被装入内存的可用区域中,并建立一个段表。和分页一样,采用分段技术时的逻辑地址也是由两部分组成:段号和偏移量。
安全问题
缓冲区溢出(buffer overflow)也叫内存越界(buffer overrun).
输入到一个缓冲区或者数据保存区域的数据量超过了其容量,从而导致覆盖了其他信息的一种状况。攻击者造成并利用折中状况使系统崩溃或者通过插入特质的代码来控制系统。
虚拟内存
Two general approaches to memory management can be used, depending (in part) on the available hardware. The simplest strategy, called swapping, consists of bringing in each process in its entirety, running it for a while, then putting it back on the disk. The other strategy, called virtual memory, allows programs to run even when they are only partially in main memory. copy at a rate of 2 GB/sec (0.5 nsec/byte) it takes about 0.5 sec to compact all of memory. That may not seem like much time, but it would be noticeably disruptive to a user watching a video stream.
In computing, virtual memory is a memory management technique that is implemented using both hardware and software. It maps memory addresses used by a program, called virtual addresses, into physical addresses in computer memory. Main storage as seen by a process or task appears as a contiguous address space or collection of contiguous segments. The operating system manages virtual address spaces and the assignment of real memory to virtual memory. Address translation hardware in the CPU, often referred to as a memory management unit or MMU, automatically translates virtual addresses to physical addresses. Software within the operating system may extend these capabilities to provide a virtual address space that can exceed the capacity of real memory and thus reference more memory than is physically present in the computer.
虚拟内存术语
虚拟内存 | 在内存分配机制中,尽管备用内存是主内存的一部分,它也可以被寻址。 |
---|---|
虚拟地址 | 在虚拟内存中分配给某一位置的地址使该位置可以被访问,仿佛它是主内存的一部分 |
虚拟地址空间 | 分配给进程的虚拟存储 |
地址空间 | 可用于某进程的内存地址范围 |
实地址 | 内存中存储位置的地址 |
有两种实现方法可以提高系统的利用率,其中第二种的效果比第一种更令人吃惊。这两种实现方法分笔试:
- 在内存中保留多个进程。
- 进程可以比内存的全部空间还大。
由于一个进程只能在内存中执行,因此这个存储器称作实存储器(real memory),简称实存。但是程序员或用户感觉到的是一个更大的内存,通常它被分配在磁盘上,这称为虚拟内存(virtual memory),简称虚存。
硬件和控制结构
分页和分段的特点**
简单分页 | 虚拟分页 | 简单分段 | 虚存分段 |
---|---|---|---|
内存被划分成大小固定的小块,称作页框 | 内存被划分成大小固定的小块,称作页框 | 内存未被划分 | 内存未被划分 |
程序被编译器或内存管理系统划分为页 | 程序被编译器或内存管理系统划分为页 | 由程序员给编译器指定程序段 | 由程序员给编译器指定程序段 |
页框中有内部碎片 | 页框中有内部碎片 | 没有内部碎片 | 没有内部碎片 |
没有外部碎片 | 没有外部碎片 | 有外部碎片 | 有外部碎片 |
操作系统必须为每个进程维护一个页表,以说明每个页对应的页框 | 操作系统必须为每个进程维护一个页表,以说明每个页对应的页框 | 操作系统必须为每个进程维护一个段表,以说明每一段中的加载地址和长度 | 操作系统必须为每个进程维护一个段表,以说明每一段中的加载地址和长度 |
操作系统必须维护一个空闲页框列表 | 操作系统必须维护一个空闲页框列表 | 操作系统必须维护一个内存中的空闲的空洞列表 | 操作系统必须维护一个内存中的空闲的空洞列表 |
处理器使用页号和偏移量来计算绝对地址 | 处理器使用页号和偏移量来计算绝对地址 | 处理器使用段号和偏移量来计算绝对地址 | 处理器使用段号和偏移量来计算绝对地址 |
当程序运行时,它的所有页必须都在内存中,除非是用了覆盖技术 | 当进程在运行时,并不是它的所有页都必须在内存页框中,只在需要时才读入页 | 当程序运行时,它的所有页必须都在内存中,除非是用了覆盖技术 | 当进程在运行时,并不是它的所有段都必须在内存页框中,只在需要时才读入段 |
把一页读入内存可能需要把另一页写到磁盘 | 把一段读入内存可能需要把另外的一个段或几个段写出到磁盘 |
局部性
如果一块正好在将要被用到之前唤出,操作系统就不得不很快把它取回来。太多的这类操作会导致一种称为系统抖动(thrashing)的情况:处理器的大部分时间都用于交换块,而不是执行指令。
操作系统试图根据最近的历史来猜测在不远的将来最可能用到的块。这类推断基于局部性原理(principle of locality)。概括来说,局部性原理描述了一个进程中程序和数据引用的集簇倾向。因此,假设在很短的时间内仅需要进程的一部分块是合理的。同时,还可以对在不远的将来可能会访问的快进行猜测,从而避免系统抖动。
操作系统软件
操作系统的内存管理设计取决于三个基本方面的选择:
- 是否使用虚拟内存技术
- 使用分页还是分段,或者是二者的组合
- 为各种存储管理特征采用的算法
为了有效地使用处理器和I/O设备,希望能在内存中保留尽可能多的进程。此外,还希望能解除程序在开发时对程序使用内存大小的限制。
解决这两个问题的途径是虚拟内存技术。
支持虚拟内存技术的两种基本方法是分页和分段。
Q
virtual memory vs. swap space
Simply put, virtual memory is a combination of RAM and disk space that running processes can use.
Swap space is the portion of virtual memory that is on the hard disk, used when RAM is full.
虚拟内存是硬盘空间和内存的混合体。交换空间是虚拟内存再硬盘空间上的一部分,当内存不足的时候会发生交换。
buffer vs. cache
The page cache caches pages of files to optimize file I/O. The buffer cache caches disk blocks to optimize block I/O.
Cached is the size of the page cache. Buffers is the size of in-memory block I/O buffers. Cached matters; Buffers is largely irrelevant.
Reference
操作系统 精髓与设计原理
http://stackoverflow.com/questions/4970421/difference-between-virtual-memory-and-swap-space