0xAA55 发表于 2016-11-10 02:09:53

【内存】Windows与Linux的内存管理

Windows和Linux的内存管理还是存在着一些差别的,这里说的Windows指的是针对普通桌面用户的Windows,比如Windows 98,Windows XP,Windows Vista,Windows 7,Windows 8,Windows 8.1,Windows 10等,而这里说的Linux,举个例子,就是类似于用CentOS 6.7的标准的DVD版iso装的CentOS Linux系统等。这里说的内存管理,指的是常见的r3程序(国产软件除外)在使用API的过程中,操作系统内部进行的行为。

桌面版Windows主要面向需要经常“玩电脑”的用户,比如用Office Word给一个文件进行针对A4纸的排版,或者用浏览器上网、查东西、浏览网页,或者运行电脑游戏等。因为这样的使用环境,用户会不断地进行各种操作,比如打开新的软件,复制文件,或者用网络传文件等。为了保证用户每次要运行新的软件的时候,系统能有足够的内存供新的软件运行,桌面版Windows会自动将正在运行的程序使用的托管内存丢进分页文件(pagefile.sys)里,以便于能让新程序能立即运行起来,而旧的程序在需要用到那些内存的时候,Windows会从分页文件里自动加载之前存储的内存页。

这个过程非常频繁,因为本身一个程序运行的时候就会不断地对内存进行操作,为了运行各种功能代码,它经常会有分配、释放内存的动作。分页文件在固态硬盘容易加快存储颗粒的磨损。

用户使用桌面版Windows根本不需要自己管理内存,那些电脑管家类软件提供的“内存清理”操作,实质上就是把正在运行的程序使用的内存直接转存到分页文件。虽然你的物理内存被腾出来了,但你的程序能实际用到的内存的量并没有增加。除非你接下来必须用最高优先级运行一个非常需要耗费内存的程序,并且就算其他的程序(包括Windows系统在内)完全卡住无法运行,你也要紧急运行你的新程序的话,你才有必要进行这样的操作。然而这种情况你还不如直接重启电脑。

Linux则是为了让正在运行的程序能尽可能高效率地工作,会自动将读取的文件缓存到内存里,在内存中缓存读取过的文件的内容(取决于内存空间是否足够,如果内存快用完了,就释放掉一些缓存的文件)。

在Linux的服务器上开启HTTP服务器和MySQL数据库后,服务器会把所有的内存都用上,让你的服务器程序能全速运行。Linux也因为这个机制使得它并不十分适合桌面用户使用,因为用户使用电脑,随时会有要打开新程序的需求,比如上个网查一下资料等。此时用户打开新程序的时候,Linux就要调整缓存,先清理出一部分内存,再启动浏览器,整个过程其实是需要耗费一些时间的,这导致浏览器的启动比较慢。而如果用户突然又不想启动浏览器了(脑子里想的应该是“看它老不出来,我还是先想想然后再查资料吧”)的时候浏览器又加载好了,然后弹出来吓用户一跳。。作为对比,Windows点开新程序,同时运行多个程序,效果似乎都挺能让桌面用户满意的,因为大多数都是点了就能开,就比如浏览器,直接就会出来。虽然每个程序运行得都不是很快吧——毕竟有内存页交换的过程在里面。

但Linux的磁盘IO访问比较少,磁盘开销低,而且对于正在运行的程序,能提供几乎全速的运行环境,就这点,在除了服务器以外的很多地方也是有很不错的发挥空间的。尤其对于嵌入式的情况,Linux资源消耗低,这方面专注于桌面用户的Windows就不太合适了。

页: [1]
查看完整版本: 【内存】Windows与Linux的内存管理