首 页
┆
源码下载
┆
IT学院
┆
字体下载
┆
模板下载
┆
源码发布
┆
广告合作
┆
网站地图
┆
虚拟主机
┆
中文域名
►
设为首页
►
加入收藏
►
联系我们
源码下载
>>
ASP源码
|
PHP源码
|
ASP.net源码
|
JSP源码
|
CGI源码
|
VC/C++源码
|
VB源码
|
Delphi源码
|
Flash源码
文章学院
>>
网络编程
|
网页设计
|
图形图象
|
数据库
|
服务器
|
网络媒体
|
网络安全
|
操作系统
|
办公软件
|
软件开发
|
黑客知识
字体下载
>>
精制字体
|
非英字体
|
艺术字体
|
著名字体
|
哥特式
|
简单字体
|
手写体
|
节假日
|
图案字体
|
精度像素
|
中文字体
模板下载
>>
企业门户
|
数码网络
|
休闲娱乐
|
影视音乐
|
旅游名胜
|
文化艺术
|
电子商务
|
个性展示
|
登陆导航
|
Flash模板
源码搜索
文章搜索
字体搜索
模板搜索
►►
您当前的位置:
源码园
→
IT学院
→
操作系统
→
Linux
→ 文章内容
Linux编程白皮书 第二章 内存管理
作者:佚名 来源:网上收集 发布时间:2006-5-22 18:20:30
第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,每个都有自己的页表。此主题相关图片如下:
这些页表将每个进程的虚拟页映射到内存中的物理页。图 1-2-1显示进程X的虚拟页帧号0映射到内存中物理页帧号 1,进程Y的虚拟页帧号1映射到物理页帧号4。理论上的页表中每一项包含下列信息: 有效标志,用来指示该页表项是否有效。 本项所描述的物理页帧号。 访问控制信息。它描述该页可以被怎样使用。它是否可以被写?是否包含可执行代码? 页表用虚拟页帧号作为偏移来访问。虚拟页帧号 5将是表中第6个元素(0是第1个)。 为了将一个虚拟地址转换成物理地址,处理器首先必须得到虚拟地址页帧号和在该虚拟页中的偏移。通过选取页大小为 2的幂,这可以很容易地屏蔽和移位得到。再看一下图 1-2-1,设页大小是0x2000字节(即十进制8192),Y进程虚拟地址空间中一个地址为 0x2194,则处理器将把该地址转换为虚拟页帧号1的偏移0x194。 处理器使用虚拟页帧号作为进程页表的索引来检索它的页表项。如果该偏移处页表项有效,处理器将从该项取出物理页帧号。如果该页表项无效,说明处理器访问了虚拟内存中不存在的区域。在这种情况下,处理器不能解析该地址,并且必须把控制传给操作系统来解决问题。 处理器如何通知操作系统一个正确的进程试图访问一个没有有效转换的虚拟地址,这是依处理器不同而不同的。无论如何处理器能够处理它,这被称作“页故障 (page fault)”。操作系统被告知故障的虚拟地址和故障原因。 如果访问的是有效的页表项,处理器取出物理页帧号,并将它乘以页的大小以得到物理内存中该页的基地址。最后,处理器将偏移加到所需的指令或数据的地址。 再以上面的例子为例,进程 Y的虚拟页帧号 1映射到物理页帧号 4,起始于 0x8000(4×0x2000)。加上0x194字节的偏移,最后得到物理地址 0x8194。 通过用这种方式映射虚拟地址和物理地址,虚拟内存能够以任何次序被映射到系统物理页。例如,在图1-2-1中进程X的虚拟页帧号0被映射到物理页帧号1,而虚拟页帧号7被映射到物理页帧号0,尽管在虚拟内存中它比虚拟页帧号 0要高。这说明了虚拟内存的一个有趣的副作用:虚拟内存页不必以任何特定次序出现在物理内存中。
下一章:2.1.1 请求调页 近期发布
[] [
返回上一页
] [
打 印
]
上一篇文章:
sniffer的含义及原理
下一篇文章:
部分的ADSL路由器默认帐号密码
相关文章:
Linux的用户口令及其安全性
Linux网络服务器的渗透测试
Linux下安装配置DNS服务器的方法
如何探查Linux系统DNS服务器运行状况
[图文]
Linux系统中文输入法新选择Fitx
Linux操作系统的Root密码修复
Linux系统下手写网卡的配置文件
Linux安装Apache与PHP的方法
深入了解Linux内核安全入侵侦察系统
详解Linux系统下常用的安全工具
Linux中的后门和常见日志工具
黑客入侵Linux操作系统实例
关于本站
-
网站帮助
-
广告合作
-
下载声明
-
友情连接
-
网站地图
-
源码发布
Copyright © 2003-2009
Ymyasp
.Com
. All Rights Reserved .
备案序号:粤ICP备07029071号