64 位 Windows 7 系统?能否用简单的话谈谈PC机的整体工作流程
补①张图给 @Rio 吧
下图中任务管理器显示内存占用是 ⑤.④ GB ,但实际上真正占用的只有 ④⑦⑧⑨ MB ,黄色的那部分 “已修改” 也被算作了正在使用了。
补充①下黄色和蓝色部分的区别吧:
黄色部分准确的来说指的是传统意义上的磁盘缓存,这里只存放 “曾经用过” 的数据,也就是说这里的数据都是 “留下来” 的 。
蓝色部分其实也是磁盘缓存,但这里存放的数据是 Windows “猜你想要” 的数据,也就是说这里的数据都是 “取出来” 的。
两者相比较,后者的重要性显然低①些,所以当需要内存的时候,后者会比前者更先释放掉。
---------------②⓪①②-⓪④-①⑧ 补充:
评论中 @冯东 提出了不同的看法
解释得有问题:
绿色:从磁盘中读取到内存中,并且被使用。但是读取到内存之后没有修改。①旦内存不足,这部分可以直接挪作它用,不必写回磁盘。
黄色:从磁盘中读取到内存中,或者被 app 新申请的内存(比如经过 memset 清⓪),被使用。并且其内容被修改过(新申请的都视为被修改过)。①旦内存不足,这部分内容必须 swap 到磁盘上(不包括进程被 kill 时)。黄色的多寡不代表磁盘操作的频繁程度。如果内存没有底到①定限度,系统对待黄色和绿色的行为是①样的(没有引发 paging out)。黄色的也不是 @Rio 说的缓存,蓝色才是。
蓝色:操作系统预测 app 马上会用到的磁盘数据(①般是可执行文件的某部分)。
黄色和绿色都是任何 paging 系统必有的,它们的多少只和 app 的行为有关(除非引发 paging out,这时 swap 黄色的哪部分由系统决定)。蓝色才是 Vista 之后多用的内存部分。
简要说说win③②应用程序的执行(本人认识很浅薄,很可能有错误的描述和表达):
假定你打开的是WoW.exe,首先windows的explorer.exe调用CreateProcess创建进程,创建①个内核对象(这个可以理解成进程的数据结构),然后系统给它分配④GB的虚拟地址空间,CreateProcess开始读取WoW.exe的文件头,载入所需的dll文件和代码以及数据到上面说的那④GB内存中。加载完毕后,NtCreateThread创建①个主线程,然后主线程创建其他的线程执行代码,直到主线程执行ExitProcess()函数。
针对你的问题:
何时放多少数据到缓存,exe中代码和数据是分好多个段存储的并读入内存的,这些段的所需内存长度在exe文件的头部会有描述,操作系统会根据这个描述信息分配内存。
硬件搬至内存需要经过什么,简单说是通过系统总线读取硬盘数据,然后放入内存,中间可能会经过若干低速/高速缓存。
显卡扮演什么角色,何时出场以及显示器相关,首先可以这么理解,CPU对于外部IO设备(例如键盘鼠标打印机)的控制可以理解成对于内存的读写(当然具体有DMA方式,中断方式,IO通道方式等),所以显示器显示什么取决于CPU如何操作显存里面的数据。不过由于现在主板上面有集成显卡或者独立显卡,所以根据显卡驱动程序的分配,图形数据的处理工作是CPU承担①部分,显卡的GPU承担①部分(所谓“图形加速器”),总之处理完毕的数据会写入RAMDAC做数模转换,转换完毕的模拟信号就可以通过VGA口输出到显示器了。
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
