分类: LINUX
2009-03-14 10:06:35
previously on 零基础学习Liunx:
上一次讲到Unix的多任务处理。
7.计算机如何保证不同的进程之间互相独立运行?
内核调度器负责将不同的进程区分开,同时,操作系统也要保障各个进程在空间上隔离,这里的空间是指内存。如果不这样做,当一个程序中存在一个Bug时,可能会导致其他进程也崩溃,这不是我们希望看到的结果。操作系统解决这个问题的办法称为内存管理。
每一个进程都需要 一块自己的内存空间,包括代码段以及数据段。数据段是绝对唯一的,但是代码段可能被运行相同代码的程序所共享。
8.虚拟内存
使用虚拟内存的原因是某些大型的程序可能不能全部装入现有的内存中,因为空间的限制。为了解决这个问题,Linux使用了虚拟内存
技术,它只将当前需要的代码和数据装入内存中,剩余的放在Swap
Space中,当需时再调入内存中。所以程序“认为”可以使用的内存数量将比实际的物理内存数量大,因为它实际上是由两部分组成的:实际的物理内存以及
Swap Space(在磁盘上划分出的一块空间)。
事实上,计算机内一共有(至少)5中类型的“内存”:寄存器,内部Cache,外部Cache,RAM,DISK
。他们的访问速度依次递减。为什么需要这么多种“内存”呢?答案是因为成本的原因不可能全部使用最快的内存。虚拟内存的效率取决于操作系统使用的算法。经
验表明,最有效率的内存使用方法是LRU算法。所谓LRU算法,就是当需要进行Swap操作时,首先将最近使用最少的内存块调如交换区。由于历史的原因交
换的单位是line而不是page。
9.内存管理单元MMU
操作系统中的内存管理(Memory
manager注意,这个与MMU的区别,后者是硬件模块)的首要任务就是负责实现Swap操作,但是即使你的内存足够大,大到可以装下一切程序,内存管
理还是有其他的重要任务需要完成。它要确保进程只能访问属于自己的内存数据段,这是通过维护一张表实现的,这张表记录了各个进程的内存使用情况。这张表用
来向底层的硬件MMU(Memory management Uint)发送指令。MMU拥有在隔离保护内存块的功能。
例子:If you ever see a Unix message that says "Segmentation fault", "core dumped" or something similar, this is exactly what has happened; an attempt by the running program to access memory (core) outside its segment has raised a fatal interrupt. This indicates a bug in the program code; the core dump it leaves behind is diagnostic information intended to help a programmer track it down.
译:如果你在Unix系统中看到“Segmention fault”或者“core dumped”等类似的信息,这些都是表明模个进程试图访问自己内存段之外的区域,这是非法的。表明程序中可能有某种Bug。core dump会打印出相应的诊断信息帮助使用者找出追踪原因。
To be continued........