在刚过去的近的一段时间,老师在讲linux内存管理,她让我们每周都写周报告,看来她是用管理研究生的方式来对付我们了。哎,没办法,人在屋檐下,不得不低头,谁让咱是人家的学生捏。
  其实老师也是对大家的一个督促,渐渐地,我发现,其实也周报告有一个好处是把以前自己不太关注的问题摆到台面上,使自己对一个老的问题有了新的认识,这样其实也是不错的,还是非常感谢老师的良苦用心。
  下面我将我对内存管理的一些问题的理解列出来,如果你看了之后有什么不同意见,可以留言给我,我很期待你的意见或者建议,上次写了一个ARM串行通信的例子,结果没人留言,不知道为什么,园子里没人做这方面的工作吗?对此表示怀疑,呵呵...
  我是按照一问一答的形式进行的,所以在这也这样了,近心情起伏比较大,见谅。老师说做学问忌讳的是摘抄不指明出处,所以我说明一下,一些这些总结是我从计算机的心智上总结归纳出来的,要是现在不说以后有人告发我,说我抄袭怎么办。
  1.     为什么要进行内存管理?
  CPU需要两种信息:数据和代码,这些数据存放在内存,操作系统要控制CPU的运行,要对内存进行管理。
  2.     几个难以区分的概念
  用户空间 地址空间 进程空间 内核空间 虚拟内存(虚拟地址空间)
  进程空间:进程所要的所有资源
  内核空间:供内核使用的空间
  虚拟内存:每个进程可以通过系统调用进入内核,所以内核空间其实是所有进程共享,从进程角度看,每个进程都可拥有4GB的虚拟地址空间(目前)
  3.     内存管理的目标
  地址保护:一个程序不能访问另一个程序地址空间
  地址独立:程序发出的地址应与物力主存地址无关
  4.     多道编程的内存管理
  多道编程环境下,无法将程序加到固定的内存地址上,即:无法使用静态地址翻译,这需要动态地址翻译
  虚拟地址                    物理地址
  用户进程——————>地址翻译器——————>物理内存
  5.     地址翻译的方法
  一个程序是加载到内存事先划分好的某片区域,而且该程序是整个加在进去
  物理地址 = 虚拟地址 + 程序所在区域的起始地址
  多个程序需要地址保护,并进行合法访问
  合法访问条件:
  程序所在区域起始地址<=有效地址<=程序所在区域起始地址 + 程序长度
  动态地址翻译的优点:
  1.灵活
  2.保护地址
  3.实现虚拟内存
  6.     内存管理方法
  固定加载地址  固定分区  分固定分区  交换
  7.     页式内存管理
  内存管理出现的问题:空间浪费   程序大小受限
  页式内存管理克服外部碎片,增大程序的可用空间