大城小魔

天下难事,必作于易;天下大事,必作于细

  C++博客 ::  :: 联系 :: 聚合  :: 管理

公告


最新评论

第一章:内存管理机制

 

第一节:机制与策略


内存的访问和操作涉及了大量分门别类的内容。必须施以措施保证访问有效内存,并对应正确的实际物理存储器。如果在内存保护模式下,处理器还应当负责确保执行中的任务不去访问禁止访问的内存。多任务操作系统就是基于内存保护服务构建的系统。如果使用了虚拟内存,系统会维护一个重要的内存信息记录,用以追踪记录任务所属的硬盘扇区(译注:即是虚拟内存)它比你想象的要复杂得多,并且每个环节都要求万无一失。

    注解在 Intel平台上,如果内存子系统设置了错误的数据结构,处理器将其作为所谓的(triple fault)三次错误来处理。所谓Intel平台上的(double fault)二次错误是指当处理器去处理已发生的异常错误时再次发生了异常错误。当(double fault)二级错误处理失败,三级错误产生,系统置入停机过程状态。一般说来,Intel系统如果发生这种类型的错误,会重启系统。

    为了保证执行速度,处理器厂商在芯片内部赋予了高级内存管理的能力。这使操作系统商得以将大量,单调乏味,冗余的内存管理工作交由处理器去完成,处理器内部可以以更快的速度处理各种错误校验。但是这同样也产生了操作系统商在一定程度上限定于特定的硬件平台的副作用。

    为提升了性能,尽管失去了移植性,但是仍然是很值得的。如果操作系统完全去担当实现了比如分页,分段处理功能的责任,很明显那会比得益于从处理器内建(内存管理)功能的那种方案要慢得多。想象如果真要在那种有操作系统实现的内存保护模式的操作系统上,玩类似Quake3那样密集图形的实时游戏,游戏根本没法玩。

     注解:你或许会问,我是否能提供一个测定的数值说明操作系统到底会变得多慢。我承认我给出了一些挥舞胳膊(arm-waving)的结论。根据1993年Wahbe.Lucoo.et al(请参见“引用”章节)的一篇论文指出。他们使用了一种称为“沙盒”(sandboxing)的技术,将应用程序中的代码模块分离隔离起来。使用该技术以后,带来了4%的执行速度的提升。你能够想象要添加虚拟内存技术以及权限访问方案的这样一个庞大的结构,将会给你带来什么。


题外话

挥舞胳膊(arm-waving)的结论,是一种没有经过严谨数学表达方式求证过的一般建议。数学表达方式的好处是可以对完全含糊不清的事物做出定论:结论只有是或者否。对于挥舞胳膊(arm-waving)的结论来说趋向于避开十分严格的逻辑推理更偏向于借助直觉作为判别依据。这样推理是最值得怀疑的,不仅因为直觉常常是错误的,同样也因为依据直觉的判别是模棱两可的。例如,争论世界是否是平的人趋向于依赖挥舞胳膊(arm-waving)方式的结论。



      
注解:当初Dave Cutle在创造Windows NT时,大部分的注意力都集中在操作系统的硬件抽象层(HAL)上。该想法指操作系统尽可能的和硬件分离,该独立的代码层位于底层硬件。通过这样的设计有助于解决我在几分钟前提到的硬件依赖的问题。NT平台真的可以运行在两类面向UNIX的硬件平台之上了,Dave也因此功成名就。这其中包括 Digital的 Alpha处理器和MPS RISC的处理器。问题是微软公司无法在硬件平台上施展他们的一些高层的技术,如DCOM技术不能在Intel以外的硬件平台上运行,对于基于二进制标准的对象技术来说这样的情况更加频繁出现。

 

 胜利总是属于偏好运行速度的解决方案。一位前任Control Data工程师告诉我,当Seymour Cray 在研发6600时,他碰巧得到一块比他当时使用的更快的一种芯片。可是该芯片总是出现意想不到的运算错误。Seymour 为该芯片搭建了一系列精巧的运行环境。公司执行高管们没有反对Seymour的做法,不想打扰这位作为大概是数据控制中心最有价值的技术非凡的工程师。不幸的是,他们的仓库里堆积了满满的最初的那种老芯片。不能够丢弃掉那些老芯片,必须设法都用上他们,于是诞生了CDC300,一个比6600运行速度慢并且廉价的产品。
我的观点:Seymour 眷顾更快的芯片,即使它们不是那么稳定。
速度原则:
    追求速度的趋势结果使得现有的商业操作系统都具备自己的内存管理服务并深深植根于硬件所规定的数据结构和协议标准。处理器提供基本的内存管理功能集。这些功能保证功能机制设置的平衡。它取决于操作系统是否决定使用处理的内存管理机制。如果是,则使用处理器的内存管理。操作系统创建这样的策略来权衡和控制内存管理机制。

下一章节,我会从硬件的角度来解释,硬件如何提供内存访问和控制的机制。


 




Memory Management:Alogorithms and Implementation in C/C++
by Bill Blunden

Wordware Publishing © 2003 (360 pages)

This book presents several concrete implementations of garbage collection and explicit memory management algorithms.

原书下载 地址

posted on 2008-11-27 14:03 momor 阅读(1518) 评论(1)  编辑 收藏 引用 所属分类: 翻译

Feedback

# re: C/C++ 内存管理算法与实现--第一章:内存管理机制 (翻译连载) 2008-11-28 01:16 陈梓瀚(vczh)
这本书我也读了,后来在我自己的脚本引擎里面实现了一次mark-compact。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理