内存管理

内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效、快速的分配,并且在适当的时候释放和回收内存资源。

一个执行中的程序,譬如网页浏览器在个人电脑或是图灵机(Turing machine)里面,为一个进程将资料转换于真实世界及存储器之间,然后将资料存于存储器内部(在计算机科学,一个程序是一群指令的集合,一个进程是电脑在执行中的程序)。存储器能被实际组织在许多方法里头,例如磁带或是磁盘,或是小数组容量的微芯片。 从1950年代开始,计算机变的更复杂,它被连线于许多种类的存储器。内存管理的任务也变得复杂,甚至必须要在同一台机器上相同的时间执行多个进程

在存储器内,一个程序(操作系统)在每一个资料区段持续地追踪实体位置,及移动实体上的资料去改善其性能及保证可靠性,对于每个用户层(user-level)的程序,操作系统分配一段虚拟内存空间,当行程起始时,不需要移动资料到实体设备间,资料存于磁盘内的虚拟内存空间,也不需要去配置主存储器空间给该行程,当用户有需要用到时,他们才会很自由地加载到主存储器内。

可以想像一个很大的程序,当他执行时变成行程,而大部分的存储器空间都被存到磁盘内虚拟内存地址,需要用到的部分才被加载到存储器内部提供服务。

主存储器使用

一个程序结构由以下两部分而成:

  • “本文区段”,也就是指令存放,提供CPU使用及执行
  • “资料区段”,存储程序内部本身设置的资料,例如常量字符串,像是GUI接口内部一些文字消息,或是程序设计时所放入的消息资料,资料可借由程序执行时由输入(input)的方式加入,或者经由程序执行的流程中被移除。

当一个程序执行,操作系统将程序的资料区段及本文区段映射到虚拟内存空间内部,然后在存储器执行程序的指令(见范纽曼架构),无论如何,当程序执行时就必须去存储暂时性的资料,或更重要的,它会调用一些函数(function)或是例程(subroutine),并且存储当前函数的状态,最好的数据结构方法,资料由堆栈(stack)的方式存储,当我们完成这个函数,资料会由堆栈的pop方式取出,堆栈将会在函数的生命周期内动态的成长,操作系统提供区分本文区段及资料区段,而堆栈区段则在一个行程的最顶端,这种方式称为段式结构(segments)或“分段”。

参考文献

参见