增加了针对文件的符号链接
线程调度的时间计算
以前:基于时钟中断来计算线程执行时间
现在:按照实际执行时间
I/O系统改进
1.I/O完成端口改进
关于I/O完成端口为何物,可参考此文
以前,每次完成都立即切换到发出请求的线程
现在,延迟到该线程来读取或者处理此请求,从而避免不必要的线程环境切换
2.同步I/O可以取消
CancelSynchronouslo可取消其他线程发出的I/O操作
Cancello取消本线程I/O,CancelloEx取消任何线程操作
系统文件对话框都支持取消操作,如访问远程机器等待连接过程中
3.I/O优先级改进
以前,I/O优先级根据线程I/O优先级确定
现在,引入两种I/O优先级模式a,I/O优先级;b,I/O带宽预留
内存管理改进
1.内存池大小可以是动态的
在32位vista上,虚拟内存分配根据需要动态变化,主要针对页内存池,非换页内存池和会话内存池
2.SuperFecth
XP中prefetcher只是在启动进程是针对单个进程来预取数据
Vista中Superfetch课根据更加复杂的模式来预取数据,可阔约多个应用程序,能够适应一个系统的内存使用模式。如:a,应用程序启动时 b,系统从休眠货挂起状态恢复时 c,低优先级或不常用程序运行时
3.ReadyBoost
支持flash缓存,性能位于RAM和硬盘之间,数据被压缩和加密
引导和停机:
1.引导配置数据库,取代boot.ini
与平台无关的引导机制
贮存在注册表里HKLM\BCD000000
2.两个引导程序
Windows boot manager, \Bootmgr
OS loader, \systemroot\system32\winload.exe
3.启动过程和session管理改进
session0隔离
控制台用户位于session1中
4.停机过程改进
原先等待20s
服务可以请求停机等待
可以指定服务停机顺序
可靠性和系统恢复
1.内核事务管理器(KTM)
提供事务语义,要么完成,要么啥都不做
协调应用程序和资源管理器(注册表,NTFS文件系统)
2.Volume Shadow Copy
在XP中引用,备份工具
server 2003中用语共享文件夹的影像拷贝,版本管理
vista中可用于系统恢复,以前只可恢复已知的系统文件
3.Windows Error reporting
以前,未处理异常在一场线程环境中执行
目前,该线程发送消息web来处理
安全性
1.Bitlocker驱动器加密
对整个OS卷加密,要求a,TPM 1.2 或USB或支持USB的BIOS;b,1.5未加密系统卷
2.Code integrity verification
OS loader和内核执行代码签名检查
3.受保护进程
4.ASLR, address space load randomization, 如kenerl.dll
用户栈位置也随机
5.最小特权原则 the principle of least privilege
6.UAC user account control用标准用户来运行程序
网上有的 -> 收藏至 del.icio.us
自己总结的 -> 写在blogger上 -> 收藏至 del.icio.us
doc, ppt等文档 -> 放在 google doc -> 收藏至 del.icio.us
考虑一下怎么更好的贴标签
自己总结的 -> 写在blogger上 -> 收藏至 del.icio.us
doc, ppt等文档 -> 放在 google doc -> 收藏至 del.icio.us
考虑一下怎么更好的贴标签
发信人: Hakkk (蓝猫淘气3k问·荷兰篇), 信区: NewSoftware
标 题: 虚拟内存,物理内存,页面文件,还有任务管理器
发信站: 水木社区 (Tue Nov 20 21:56:20 2007), 站内
虚拟内存(Virtual Memory)是Windows管理所有可用内存的方式。
对于32位Windows系统,每个进程所用到的虚拟内存地址从0到2^32-1,总容量4GB,
其中2GB是与操作系统以及其他所有进程所共享,
另外2GB分派给进程独占(这就是常说的32位Windows中一个进程最多能用2G内存的由来)。
4GB虚拟地址空间(Virtual Address Space,VAS)中,2GB的进程独占VAS是进程隔离的,
换句话说,每个进程都可以从RAM或者硬盘上映射到属于自己的2GB VAS。
所以虽然32位Windows每个进程最多只能获得4GB可用虚拟内存,
但是所有进程总和可以使用总量超过4GB的虚拟内存。
可惜XP只支持4GB RAM,也就是说超出部分一定得靠页面文件补足;
而比如2003企业版通过PAE支持32GB RAM,可以减少页面文件的用量。
(但单个进程最多仍然只有4GB虚拟内存地址空间,而不是32GB)
所以,一个简单的计算示例:
三个进程最多能用掉多少VAS?
2GB(共享)+2GB(独占)×3=8GB
这4GB的虚拟地址空间,按照4KB的大小进行分页(page),
然后以页为单位映射到实际存储单元中,包括:
·物理内存(RAM)
·页面文件(Page File,在Win9x中称为交换文件Swap File,即win386.swp)
·其他文件自身(比如一些长时间未活动的进程的exe文件自身)
可见,通常人们所说的虚拟内存实际上只是指其中的页面/交换文件而已,
这是对虚拟内存的一个错误的理解。
虚拟内存≠页面文件
RAM中除了保存最近读写的文件缓存(File Cache,相当于Win9x中的Vcache)
主要用来存储正在使用的程序代码和数据,
当RAM资源紧张,或者有程序码或数据长时间未使用时,
XP通常会将非活跃程序码所在的地址页映射回程序文件(exe、dll等),
将数据所在的地址页映射到页面文件(pagefile.sys)中并拷贝数据,
然后将它们本来占用的RAM空间释放。
这个过程称为页出(Page Out)。
当系统读取某个虚拟内存地址,而该地址所在的页不在RAM中时,
将产生一个页面错误(Page Fault)中断,
告诉系统从页面文件或者程序文件中取回包含该地址的虚拟内存页,
即将内容拷回到RAM并建立新的虚拟地址映射,并将页面文件中对应部分标记为未使用,
这个过程就是页入(Page In)。
页入成功的话就是一个Valid Page Fault,否则就是Invalid Page Fault。
前者非常普遍,(可以在任务管理器的进程页监视到)
而后者是由程序或硬件错误引起,
如果发生在进程上会导致非法操作,如果是系统自身则很可能蓝屏。
内存用量可以在任务管理器的性能页中看到。
其中物理内存的总量、可用数等是指安装的RAM容量和剩余RAM容量,
而内存使用或者提交更改的总量和限制是指虚拟内存的Commit Limit和Committed Bytes,
可以理解成系统可以使用的虚拟内存总量和当前使用量,
其中总量是由RAM大小+页面文件大小决定的。
而在任务管理器的进程页中,“内存使用”和“虚拟内存大小”造成的误解很多,
而实际上,这两个值是对应性能监视器中该进程的Working Set和Private Bytes,
Working Set是指一个进程的4GB虚拟地址空间中被映射到RAM中的部分的大小,
通常是该进程的虚拟内存中的活跃部分。
表面看来这个表述和“进程占用的RAM大小”没有太大区别,
但至少有两种情况导致了例外的发生:
第一种是这部分虚拟内存如果是属于2G的系统共享虚拟内存,
那么它映射到的RAM地址可能和其他进程有重复,计算多个进程占用RAM总和就不正确,
使得所有进程的Working Set之和比实际占用RAM要大。
第二种是一个进程中可能有同一段RAM内容的多个引用,比如一个文件被loop多次,
此时虚拟空间中会有多段地址被映射到同一段RAM上,
从而造成该进程的Working Set比实际占用RAM要大。
Private Bytes是一个进程的2GB独占虚拟地址空间中用到的部分的大小,
无论这部分是在RAM中还是在页面文件中,甚至是在exe、dll等文件中。
所以,任务管理器进程页中的虚拟内存绝对不反映pagefile.sys的用量。
所以,任务管理器无论是进程页还是性能页都不能直接反映pagefile的使用情况,
诸如“关掉pagefile还能看到虚拟内存”之类的疑问,应该很清楚了。
下面是一个简单图示,
两个进程,各自拥有2G独占VAS,共同拥有2G共享VAS,
W代表映射到RAM中的部分(Working Set),P代表页出的部分。
0 …………………2GB独占内存……………… 2G ………2GB共享内存……… 4G
进程1 |--PPPP---------------WW-----PPPP--------|
\\\\ || \\\\
\\\\ || \\\\
\\\\ || |||| |--PPPPPPPPPPPP--WWWWWWWW--|
exe2 exe1 dll RAMemory pagefile.sys |||||||||||| ||||||||
|||| /// //\ / || | 共享内核/dll等 共享RAM空间
进程2 |-PPPP------PPP---WW--WW------PP----P----|
然后,任务管理器的进程页中的“内存”就是上图中的W,
所以所有进程的内存项加起来肯定比实际用的RAM大,因为有共享部分
此外还有重复引用,比如上图中进程2独占内存中第二和第三个W指向同一段RAM空间。
而任务管理器进程页中的“虚拟内存”就是上图中右半部分,“独占VAS”。
可见pagefile只是其中的一部分,而RAM,只要用于独占VAS,一样计入了该处“虚拟内存”。
最后,实际的页面文件用量(pagefile.sys中实际使用部分),
可以在性能监视中看到,即Paging File下的% Usage和% Usage Peak
配合当前pagefile.sys的大小就可以计算出字节数,
这个值可以做为设定页面文件最小值的一个参考,
而不是用任务管理器进程页的所有进程的虚拟内存大小相加做为页面文件最小值的参考。
标 题: 虚拟内存,物理内存,页面文件,还有任务管理器
发信站: 水木社区 (Tue Nov 20 21:56:20 2007), 站内
虚拟内存(Virtual Memory)是Windows管理所有可用内存的方式。
对于32位Windows系统,每个进程所用到的虚拟内存地址从0到2^32-1,总容量4GB,
其中2GB是与操作系统以及其他所有进程所共享,
另外2GB分派给进程独占(这就是常说的32位Windows中一个进程最多能用2G内存的由来)。
4GB虚拟地址空间(Virtual Address Space,VAS)中,2GB的进程独占VAS是进程隔离的,
换句话说,每个进程都可以从RAM或者硬盘上映射到属于自己的2GB VAS。
所以虽然32位Windows每个进程最多只能获得4GB可用虚拟内存,
但是所有进程总和可以使用总量超过4GB的虚拟内存。
可惜XP只支持4GB RAM,也就是说超出部分一定得靠页面文件补足;
而比如2003企业版通过PAE支持32GB RAM,可以减少页面文件的用量。
(但单个进程最多仍然只有4GB虚拟内存地址空间,而不是32GB)
所以,一个简单的计算示例:
三个进程最多能用掉多少VAS?
2GB(共享)+2GB(独占)×3=8GB
这4GB的虚拟地址空间,按照4KB的大小进行分页(page),
然后以页为单位映射到实际存储单元中,包括:
·物理内存(RAM)
·页面文件(Page File,在Win9x中称为交换文件Swap File,即win386.swp)
·其他文件自身(比如一些长时间未活动的进程的exe文件自身)
可见,通常人们所说的虚拟内存实际上只是指其中的页面/交换文件而已,
这是对虚拟内存的一个错误的理解。
虚拟内存≠页面文件
RAM中除了保存最近读写的文件缓存(File Cache,相当于Win9x中的Vcache)
主要用来存储正在使用的程序代码和数据,
当RAM资源紧张,或者有程序码或数据长时间未使用时,
XP通常会将非活跃程序码所在的地址页映射回程序文件(exe、dll等),
将数据所在的地址页映射到页面文件(pagefile.sys)中并拷贝数据,
然后将它们本来占用的RAM空间释放。
这个过程称为页出(Page Out)。
当系统读取某个虚拟内存地址,而该地址所在的页不在RAM中时,
将产生一个页面错误(Page Fault)中断,
告诉系统从页面文件或者程序文件中取回包含该地址的虚拟内存页,
即将内容拷回到RAM并建立新的虚拟地址映射,并将页面文件中对应部分标记为未使用,
这个过程就是页入(Page In)。
页入成功的话就是一个Valid Page Fault,否则就是Invalid Page Fault。
前者非常普遍,(可以在任务管理器的进程页监视到)
而后者是由程序或硬件错误引起,
如果发生在进程上会导致非法操作,如果是系统自身则很可能蓝屏。
内存用量可以在任务管理器的性能页中看到。
其中物理内存的总量、可用数等是指安装的RAM容量和剩余RAM容量,
而内存使用或者提交更改的总量和限制是指虚拟内存的Commit Limit和Committed Bytes,
可以理解成系统可以使用的虚拟内存总量和当前使用量,
其中总量是由RAM大小+页面文件大小决定的。
而在任务管理器的进程页中,“内存使用”和“虚拟内存大小”造成的误解很多,
而实际上,这两个值是对应性能监视器中该进程的Working Set和Private Bytes,
Working Set是指一个进程的4GB虚拟地址空间中被映射到RAM中的部分的大小,
通常是该进程的虚拟内存中的活跃部分。
表面看来这个表述和“进程占用的RAM大小”没有太大区别,
但至少有两种情况导致了例外的发生:
第一种是这部分虚拟内存如果是属于2G的系统共享虚拟内存,
那么它映射到的RAM地址可能和其他进程有重复,计算多个进程占用RAM总和就不正确,
使得所有进程的Working Set之和比实际占用RAM要大。
第二种是一个进程中可能有同一段RAM内容的多个引用,比如一个文件被loop多次,
此时虚拟空间中会有多段地址被映射到同一段RAM上,
从而造成该进程的Working Set比实际占用RAM要大。
Private Bytes是一个进程的2GB独占虚拟地址空间中用到的部分的大小,
无论这部分是在RAM中还是在页面文件中,甚至是在exe、dll等文件中。
所以,任务管理器进程页中的虚拟内存绝对不反映pagefile.sys的用量。
所以,任务管理器无论是进程页还是性能页都不能直接反映pagefile的使用情况,
诸如“关掉pagefile还能看到虚拟内存”之类的疑问,应该很清楚了。
下面是一个简单图示,
两个进程,各自拥有2G独占VAS,共同拥有2G共享VAS,
W代表映射到RAM中的部分(Working Set),P代表页出的部分。
0 …………………2GB独占内存……………… 2G ………2GB共享内存……… 4G
进程1 |--PPPP---------------WW-----PPPP--------|
\\\\ || \\\\
\\\\ || \\\\
\\\\ || |||| |--PPPPPPPPPPPP--WWWWWWWW--|
exe2 exe1 dll RAMemory pagefile.sys |||||||||||| ||||||||
|||| /// //\ / || | 共享内核/dll等 共享RAM空间
进程2 |-PPPP------PPP---WW--WW------PP----P----|
然后,任务管理器的进程页中的“内存”就是上图中的W,
所以所有进程的内存项加起来肯定比实际用的RAM大,因为有共享部分
此外还有重复引用,比如上图中进程2独占内存中第二和第三个W指向同一段RAM空间。
而任务管理器进程页中的“虚拟内存”就是上图中右半部分,“独占VAS”。
可见pagefile只是其中的一部分,而RAM,只要用于独占VAS,一样计入了该处“虚拟内存”。
最后,实际的页面文件用量(pagefile.sys中实际使用部分),
可以在性能监视中看到,即Paging File下的% Usage和% Usage Peak
配合当前pagefile.sys的大小就可以计算出字节数,
这个值可以做为设定页面文件最小值的一个参考,
而不是用任务管理器进程页的所有进程的虚拟内存大小相加做为页面文件最小值的参考。
2008 server core没有GUI,管理全靠命令行。下面是作为QA知道会比较方便的tips:
1.在2008 server core上安装VMware tools:
这里的步骤讲的很清楚,同一网站上还提供了如何改变屏幕解析度,改变睡眠设置
2.启动romotedesktop
cscript c:\windows\system32\scregedit.wsf /AR 0
启动完就可以远程登录玩了
3.传输文件
2008自带了ftp服务,用来传送文件应该最为稳定。如果不用自带服务,从远程ftp下载文件,需要把防火墙关了
netsh firewall set opmode disable
测试时,强烈建议关了防火墙,不然总有些莫名其妙的问题,关了一了百了
4. 在2008 server core上增加新硬件
pnputil -i -a ; driverinf is the file name of the .inf file for the driver
1.在2008 server core上安装VMware tools:
这里的步骤讲的很清楚,同一网站上还提供了如何改变屏幕解析度,改变睡眠设置
2.启动romotedesktop
cscript c:\windows\system32\scregedit.wsf /AR 0
启动完就可以远程登录玩了
3.传输文件
2008自带了ftp服务,用来传送文件应该最为稳定。如果不用自带服务,从远程ftp下载文件,需要把防火墙关了
netsh firewall set opmode disable
测试时,强烈建议关了防火墙,不然总有些莫名其妙的问题,关了一了百了
4. 在2008 server core上增加新硬件
pnputil -i -a


