当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > Linux编程白皮书 第二章 内存管理

Unix/Linux
linux查看内存的大小
在linux下写的代码,用的是utf-8,结果拿到XP下运行的时候,所有的中文都成乱码
linux su和sudo命令的区别
linux cron 下的定时执行工具使用技巧
linux 查找进程及终止进程操作的相关命令
redhat linux 安装 gcc编译器
Linux Mplayer播放各种格式的电影
一起回顾一下linux常用命令
Linux 网站项目发布要做哪些配置
linux SSH配合SecureCRT的密匙完美使用方法
GD 编译出错解决方法
Facebook Open Platform编译FAQ
Linux 系统硬盘 优化
linux 挂载详解
linux crontab定时命令
Linux 系统中确保访问三级域名畅通的方法
Linux 特权帐号VS普通帐号
确保Linux系统安全的前提条件 漏洞防护
Linux 监视系统资源使用率
Red Hat Linux上使用BIND建立DNS服务器

Unix/Linux 中的 Linux编程白皮书 第二章 内存管理


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 48 ::
收藏到网摘: n/a


第2章 内 存 管 理
内存管理子系统是操作系统最重要的部分之一。从早期计算开始,系统的内存大小就难以满足人们的需要。为了解决这个问题,可利用虚拟内存。虚拟内存通过当需要时在竞争的进程之间共享内存,使系统显得有比实际上更多的内存空间。
第2章 内 存 管 理
内存管理子系统是操作系统最重要的部分之一。从早期计算开始,系统的内存大小就难以满足人们的需要。为了解决这个问题,可利用虚拟内存。虚拟内存通过当需要时在竞争的进程之间共享内存,使系统显得有比实际上更多的内存空间。 虚拟内存不仅仅使机器上的内存变多,内存管理子系统还提供以下功能: 大地址空间 操作系统使系统显得它有比实际上大得多的内存。虚拟内存可以比系统中 的物理内存大许多倍。 保护 系统中每个进程有自己的虚拟地址空间。这些虚拟地址空间相互之间完全分离, 所以运行一个应用的进程不能影响其他的进程。同样,硬件的虚拟内存机制允许内存区 域被写保护。这样保护了代码和数据不被恶意应用重写。 内存映射 内存映射用来把映像和数据文件映像到一个进程的地址空间。在内存映射中, 文件的内容被直接链接到进程的虚拟地址空间。 公平物理内存分配 内存管理子系统给予系统中运行的每个进程公平的一份系统物理内 存。 共享虚拟内存 尽管虚拟内存允许进程拥有分隔的(虚拟)地址空间,有时你会需要进程共 享内存。例如系统中可能会有几个进程运行命令解释 shell bash。最好是在物理内存中只 有一份bash拷贝,所有运行bash的进程共享它;而不是有几份 bash拷贝,每个进程虚拟 空间一个。动态库是另一个常见的几个进程共享执行代码的例子。 共享内存也可以被用作进程间通信 (IPC)机制,两个或更多进程通过共有的内存交换信息。Linux支持Unix(tm) System V的共享内存IPC。
2.1 虚拟内存抽象模型
在考察Linux支持虚拟内存所使用的方法之前,考察一下抽象模型会有所帮助。 当处理器运行一个程序时,它从内存中读取一条指令并解码。在解码该指令过程中它可能需要取出或存放内存某个位置的内容。处理器然后执行该指令并移动到程序中下一条指令。这样处理器总是访问内存来取指令或取存数据。 在虚拟内存系统中以上所有的地址都是虚拟地址而不是物理地址。处理器基于由操作系统维护的一组表中的信息,将虚拟地址转换成物理地址。 为了使这种变换容易一些,虚拟内存和物理内存都被分为合适大小的块叫做“页 (page)”。这些页都有同样的大小。它们可以不具有同样大小,但那样的话系统将很难管理。 Alpha AXP系统上Linux使用8KB字节大小的页,Intel x86系统上使用4KB字节大小的页。这些页中每一个都有一个唯一的号码:页帧号(Page Frame Number, PFN)。在这种分页模型中,一个虚拟地址由两部分组成:一个偏移和一个虚拟页帧号。如果页大小是 4KB字节,虚拟地址的11∶0位包含偏移,12位及高位是虚拟页帧号。每当处理器面临一个虚拟地址时,它必须析取出偏移和虚拟页帧号。处理器必须将虚拟页帧号转换成物理的页帧号,然后在该物理页中正确的偏移位置上进行访问。为了完成这些处理器要使用页表。 图1-2-1展示了两个进程的虚拟地址空间,进程 X和进程Y,每个都有自己的页表。此主题相关图片如下:按此在新窗口浏览图片screen.width-500)this.style.width=screen.width-500;}}" border="0" />

这些页表将每个进程的虚拟页映射到内存中的物理页。图 1-2-1显示进程X的虚拟页帧号0映射到内存中物理页帧号 1,进程Y的虚拟页帧号1映射到物理页帧号4。理论上的页表中每一项包含下列信息: 有效标志,用来指示该页表项是否有效。 本项所描述的物理页帧号。 访问控制信息。它描述该页可以被怎样使用。它是否可以被写?是否包含可执行代码? 页表用虚拟页帧号作为偏移来访问。虚拟页帧号 5将是表中第6个元素(0是第1个)。 为了将一个虚拟地址转换成物理地址,处理器首先必须得到虚拟地址页帧号和在该虚拟页中的偏移。通过选取页大小为 2的幂,这可以很容易地屏蔽和移位得到。再看一下图 1-2-1,设页大小是0x2000字节(即十进制8192),Y进程虚拟地址空间中一个地址为 0x2194,则处理器将把该地址转换为虚拟页帧号1的偏移0x194。 处理器使用虚拟页帧号作为进程页表的索引来检索它的页表项。如果该偏移处页表项有效,处理器将从该项取出物理页帧号。如果该页表项无效,说明处理器访问了虚拟内存中不存在的区域。在这种情况下,处理器不能解析该地址,并且必须把控制传给操作系统来解决问题。 处理器如何通知操作系统一个正确的进程试图访问一个没有有效转换的虚拟地址,这是依处理器不同而不同的。无论如何