`
totoxian
  • 浏览: 1032688 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

最近的学习---一句话收获(备查用)(2)

 
阅读更多

1.在内核中分配大内存问题。

首先要明白内核没有义务为你分配连续的物理内存,因此你需要的内核中连续的物理内存就是苛刻的要求,既然在计算机系统抽象给用户一个连续的美丽的一维的虚拟内存,那么任何时候计算机都没有义务让你看到物理内存,内核之所以可以看到物理内存是因为虚拟内存的美与和谐正是操作系统内核提供的,如果说你的一个驱动需要连续的物理内存,那么很抱歉,不要这么做,记住物理内存不是让直接用的,如果非用不可,必须确保你是在做管理。因此在内存不能保证可以分配到连续的物理内存,内核中物理内存的连续分配是基于伙伴系统的,如果伙伴系统不能给你,那就没有办法了,但是内核为了给驱动参与管理的机会还是尽量优化伙伴系统从而使得连续物理内存的分配尽量被满足,如果你在内核中需要大量的内存,那么在虚拟内存的高端区域的vmalloc区域你可以映射不连续的物理内存到连续的高端虚拟内存,记住,是虚拟内存,任何时候包括内核用到的都是虚拟内存,虽然内核中有很多连续物理内存分配的函数,那只是linux的特性而不是所有操作系统的特性,linux为了更加高效率的管理内存使用了一一映射,虽然得到了物理页面,但是还是映射到了虚拟地址,虽然这种映射十分简单,就是一一对应,加上了一个固定的偏移。

2.windows实现了内存预留和内存提交,但是linux没有预留之说,windows的实现看似很高效,因为保留意味着该段虚拟内存空间已经有了目的了,用的时候可以直接提交物理内存了,而linux实际上在任何时候分配内存时都是默认直接保留了,等到该内存地址被访问的时候才提交而不是用户手动提交,但是在mmap和mlock的时候却实实在在可以提交物理内存,这一切和windows的比较看起来很乱,实际上linux并没有将内存的操作抽象给用户而windows却这么做了,想象一下有必要这样吗?windows是策略性系统,它当然需要很复杂的操作,甚至不惜将计算机的每一个部件都抽象给用户,而linux是高度抽象化的机制性操作系统,内存这种东西实在没有必要太细化的抽象给用户,这些都是策略,linux的内核不必实现。

3.当人们都在追求越来越大的硬盘时,我独爱20G的小盘,当人们都在追求越来越快的cpu时,我独爱上网本和上网机,追求一种东西并为之买单前,先考虑一下自己的需求,如果你不玩游戏,特别时大型游戏而且你也不看高清,那么你要独立显卡何用,时尚如果成了一种随波逐流那将是很可悲的事情。

4.不要相信所有的usb的东西,当我听说它是微软参与开发的一种总线技术之后,我对它的可靠性大大怀疑,结果,可靠性不说,可用性都保证不了,我的usb设备基本都不过100次;不要在u盘或者usb移动硬盘操作word文档,绝对不要。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics