精华内容
下载资源
问答
  • 然而,苹果产品封闭的系统无法运行某些开放的软件,这让许多人苦恼不已,“Mac小白”将其当做“傻瓜机”来用,还有人在Mac和Windows操作系统之间痛苦纠结。 从腾讯ISUX用户研究中心调查的数据来看,中国的Mac电脑...

    如今,随处可见对着Mac笔记本狂敲的人,Mac因其拥有良好的性能和外观设计广受消费者喜爱,在学生、上班族、甚至中老年人群中都有大批忠实用户。然而,苹果产品封闭的系统无法运行某些开放的软件,这让许多人苦恼不已,“Mac小白”将其当做“傻瓜机”来用,还有人在Mac和Windows操作系统之间痛苦纠结。

     

    从腾讯ISUX用户研究中心调查的数据来看,中国的Mac电脑用户只有66%的人使用OS系统,33%的用户表示一定要安装macOS和Windows双系统才能满足使用,剩余1%的用户无法在本质上区分macOS与Windows系统,只安装了Windows系统。

     

    基于上述市场缺陷,越来越多的软件公司开始提供跨平台服务,不断推出各类虚拟化桌面软件。全球领先的跨平台解决方案供应商Parallels公司也积极抓住了这一机遇,创造性的推出了无需重启便可在Mac上运行Windows应用软件的Parallels Desktop。如今,Parallels Desktop成为了在Mac上运行Windows应用程序销售量最高的软件。

     

    那么,市场上虚拟机软件那么多,Parallels Desktop备受Mac用户喜爱的原因是什么呢?下面来进行分析。

    创新是关键


    众所周知,创新对于企业来说是极其重要的,技术创新和产品创新更是其中的热门话题。例如苹果公司,新产品一年一次准时发布,OS X操作系统的更新升级则更为频繁。与此同时,为了满足已经运行新OS X 系统的用户的需求,虚拟机生产商也需要跟住苹果公司的步伐,对其软件进行创新与升级。

     

    在虚拟机软件的更新方面,Parallels做的是比较好的,产品一年更新一次。8月底,Parallels又在京召开媒体发布会,正式宣布Parallels Desktop 13 for Mac在中国上市。从2015年的Parallels Desktop 11到2016年的Parallels Desktop 12,再到今年的Parallels Desktop 13,Parallels产品的更新速度值得点个赞。

     


    但这里所说的创新并非盲目的想象创新,而是能紧跟市场潮流,抓住市场流行趋势来进行。全新发布的Parallels Desktop 13,支持 macOS High Sierra 和即将推出的 Windows 10功能。比如Touch Bar很火热,那么Parallels Desktop 13就将其集成到微软Office办公软件以及Windows常用浏览器中。

    真正地以用户为中心


    作为一款可以让用户在Mac操作系统下直接运行Windows应用软件的工具,如何让每一个使用Mac的用户更为简单、便捷地同时使用两款操作系统是其需要解决的首要问题。

     

    Parallels亚太区总经理Kevin Greely在媒体见面会上表示:“Parallels一直以来都希望在两个操作系统之下进行更好的整合,让用户使用起来更加容易。”

     

    Parallels亚太区总经理Kevin Greely


    根据以往的各个版本来看,我们不难发现Parallels一直以来都致力于寻找Mac系统和苹果硬件中有意思的功能,并把这些功能迁移到Windows操作系统中。例如前几年苹果公司推出的Retina屏,Parallels通过与苹果公司的合作确保了Windows7、Windows8、Windows10的操作系统可以完全支持Retina屏的全像素。

     

    根据Parallels全球高级产品经理Kurt Schmucker的现场演示来看,Parallels Desktop 13重点在以下几方面进行了技术融合与创新:

     

    • 其一,Parallels Desktop 13将Touch Bar集成到微软Office办公软件以及Internet Explorer、Microsoft Edge、Google Chrome和Opera等浏览器中。当用户使用Windows“开始”菜单或桌面时,Parallels Desktop 13允许在Touch Bar中固定任务栏元素,同时默认显示Cortana、任务视图和设置。如果默认的一组功能键不够用,Parallels Desktop还支持数千个Windows应用程序自定义常用的Touch Bar操作。

     


    • 其二,Parallels Desktop不仅增强了现有的Mac功能,还引入了Windows的一些性能。如Parallels Desktop 13集成了即将推出的 Windows 10 功能 People Bar,方便用户将联系人固定到任务栏。与Windows将People Bar联系人数量限制为三个相比,Mac Dock并不限制常用联系人数量。

     

    • 其三,新版本出现了更多的效率提升工具。如Parallels Desktop 13 中的创新型功能画中画 (PiP) 视图。此功能可用于创建其他可操作的虚拟机窗口,并使其保持在屏幕前端,始终显示窗口,即使有Mac 应用程序处于全屏模式,也不例外。

     


    • 除此之外,Parallels Desktop 13的性能也得到大幅提升。例如,外部 SSD驱动器的性能提升高达100%;快照创建速度提升高达50%;在传统机械硬盘上虚拟机处理 Windows 文件的速度提升高达 47%;在Mac上处理 Windows 文件的速度提升高达47%等等。

    不想当将军的士兵不是好士兵


    Parallels Desktop如今是Mac上运行Windows应用程序销售量最高的软件,在全球获得了超过500万活跃用户的支持。可以说,Parallels如今已坐上个人消费虚拟机销量最高的宝座,但Parallels仍有野心,就是冲入企业级市场。

     

    企业级市场对于软件行业提供商来说,始终是一个更加庞大、充满想象空间的领域。如果说个人用户市场主要是解决Mac和Windows之间的平台壁垒问题,那么面对企业级市场,Parallels要解决的事情更加复杂,包括Windows、Mac、iOS、Android、Chromebook、Linux等多平台的程序和文件的跨平台应用。

     

    为了进入企业级市场,Parallels早已开始布局。先是在2015年3月收购应用程序虚拟化、远程应用程序交付和移动设备管理解决方案提供商2X Software,2016年发布Parallels RAS V15,今年又发布了Parallels RAS V16。实际上Parallels已经为企业级用户构想了一个清晰的跨平台应用场景。但Parallels在企业级市场能否延续个人消费市场的辉煌,目前尚且未知。

     

    总体来说,一个企业成长所需的机遇、技术创新与野心,Parallels全部具备了,期待品牌未来的表现。



    展开全文
  • 主要介绍了Windows PowerShell是啥Windows PowerShell是什么?Windows PowerShell有哪些特性?Windows PowerShell有什么用?看完本文你就懂它了,需要的朋友可以参考下
  • windows常用命令行命令

    万次阅读 多人点赞 2017-08-31 11:16:21
    windows常用命令 打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口... 也可以通过cmd /c 命令和cmd /k 命令的方式来直接运行命令 注:/c表示执行完命令后关闭cmd窗口;/k表示执行完命令后保留cmd窗口 # ...

     

    转载自:windows常用命令

    打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口...

    也可以通过cmd /c 命令 和 cmd /k 命令的方式来直接运行命令

    注:/c表示执行完命令后关闭cmd窗口;/k表示执行完命令后保留cmd窗口

    # 控制台命令窗口中一些技巧

    复制内容:右键弹出快捷菜单,选择“标记(K)”,然后选中所需复制的内容,然后右键即可

    粘贴内容:右键弹出快捷菜单,选择“粘贴(P)

    在文件夹空白处按住Shift,然后右键弹出快捷菜单,可以看到“在此处打开命令行窗口

    使用上下方向键,翻看使用过的命令

    tab补齐功能

    命令参数的路径:要使用反斜杠'\',不要使用正斜杠'/'   如:del d:\test2\file\my.txt

    命令参数的路径:若存在空格,应使用双引号将路径引起来  如:del "d:\program files\file\my.txt"

    文件及目录名中不能包含下列任何字符:\ / : * ? " < > |

    rem  // 在批处理文件中添加注解,其后的命令不会被执行,但会回显

    ::  // ::也可以起到rem的注释作用,且不会有回显

    任何以冒号:开头的字符行, 在批处理中都被视作标号(label), 而直接忽略其后的所有内容
    有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别
    无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,::常被用作注释符号

    0. 获取帮助

    command /?  // 查看command命令帮助说明

    1. 中断命令执行

    1. Ctrl+C:完全中断。类似于C语言在while循环中的Break;
    2. Ctrl+Break(Pause键):单步中断。类似于C语言在while循环中的Continue;

    2. 文件/目录

    cd   切换目录

    例:cd   // 显示当前目录

    例:cd ..   // 进入父目录

    例:cd /d d:   // 进入上次d盘所在的目录(或在直接输入:d:)

    例:cd /d d:\   // 进入d盘根目录

    例:cd d: // 显示上次d盘所在的目录

    例:cd /d d:\src // 进入d:\src目录

    例:cd prj\src\view  // 进入当前目录下的prj\src\view文件夹

    pushd  popd  使用栈来维护当前目录

    md d:\mp3 // 在D:\建立mp3文件夹
    md d:\mp4 // 在D:\建立mp4文件夹
    cd /d d:\mp4 // 更改当前目录为d:\mp4
    pushd c:\mp3 // 将当前目录d:\mp4入栈,并切换当前目录为c:\mp3
    popd  // 将刚才保存的d:\mp4弹栈,并设置为当前目录

    dir  显示目录中的内容

    例:dir   // 显示当前目录中的子文件夹与文件

    例:dir /b  // 只显示当前目录中的子文件夹与文件的文件名

    例:dir /p  // 分页显示当前目录中的子文件夹与文件

    例:dir /ad  // 显示当前目录中的子文件夹

    例:dir /a-d  // 显示当前目录中的文件

    例:dir c:\test   // 显示c:\test目录中的内容

    例:dir keys.txt  // 显示当前目录中keys.txt的信息

    例:dir /S   // 递归显示当前目录中的内容

    例:dir key*  // 显示当前目录下以key开头的文件和文件夹的信息

    例:dir /AH /OS  // 只显示当前目录中隐藏的文件和目录,并按照文件大小从小到大排序

    tree 显示目录结构

    例:tree d:\myfiles  // 显示d:\myfiles目录结构

    ren  文件或目录重命名

    例:ren rec.txt rec.ini  // 将当前目录下的rec.txt文件重命名为rec.ini

    例:ren c:\test test_01  // 将c盘下的test文件夹重命名为test_01

    例:ren Logs.txt Logs-%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%.txt  // 将当前目录下的Logs.txt文件重命名为Logs-20150114_2135.txt或Logs-20150114_ 812.txt(注意:小时只有个位数时会多一个空格,可以使用字符串替换:将空格替换成0)

    md  创建目录

    例:md movie music  // 在当前目录中创建名为movie和music的文件夹

    例:md d:\test\movie  // 创建d:\test\movie目录

    rd  删除目录

    例:rd movie // 删除当前目录下的movie空文件夹

    例:rd /s /q d:\test  // 使用安静模式删除d:\test(除目录本身外,还将删除指定目录下的所有子目录和文件)

    copy 拷贝文件

    例:copy key.txt c:\doc  // 将当前目录下的key.txt拷贝到c:\doc下(若doc中也存在一个key.txt文件,会询问是否覆盖)

    例:copy jobs c:\doc  // 将当前目录下jobs文件夹中文件(不递归子目录)拷贝到c:\doc下(若doc中也存在相应的文件,会询问是否覆盖)

    例:copy key.txt c:\doc\key_bak.txt  // 将当前目录下的key.txt拷贝到c:\doc下,并重命名为key_bak.txt(若doc中也存在一个key_bak.txt文件,会询问是否覆盖)

    例:copy /Y key.txt c:\doc  // 将当前目录下的key.txt拷贝到c:\doc下(不询问,直接覆盖写)

    例:copy key.txt +  // 复制文件到自己,实际上是修改了文件日期

    例:copy /Y key1.txt + key2.txt key.txt  // 将当前目录下的key1.txt与key2.txt的内容合并写入key.txt中(不询问,直接覆盖写)

    例:copy /B art_2.7z.* art_2.7z    // 将当前目录下的art_2.7z.开头的所有文件(按照名称升序排序)依次合并生成art_2.7z

    例:copy /B art_2.7z.001+art_2.7z.002 art_2.7z    // 将当前目录下的art_2.7z.001、art_2.7z.002文件合并生成art_2.7z

    xcopy  更强大的复制命令

    例:xcopy c:\bat\hai d:\hello\ /s /h /e /f /c    // 将c:\bat\hai中的所有内容拷贝到d:\hello中  注意:需要在hello后加上\  表示hello为一个目录,否则xcopy会询问hello是F,还是D

    例:xcopy c:\bat\hai d:\hello\ /d:12-29-2010  // 将c:\bat\hai中的2010年12月29日后更改的文件拷贝到d:\hello中

    move 移动文件

    例:move *.png test  // 将当前目录下的png图片移动到当前目录下test文件夹中 (若test中也存在同名的png图片,会询问是否覆盖)

    例:move /Y *.png test  // 将当前目录下的png图片移动到当前目录下test文件夹中 (不询问,直接覆盖写)

    例:move 1.png d:\test\2.png  // 将当前目录下的1.png移动到d盘test文件夹中,并重命名为2.png (若test中也存在同名的png图片,会询问是否覆盖)

    例:move test d:\new  // 若d盘中存在new文件夹,将当前目录下的test文件夹移动到d盘new文件夹中;若不存在,将当前目录下的test文件夹移动到d盘,并重命名为new

    del 删除文件   注意:目录及子目录都不会删除

    例:del test  // 删除当前目录下的test文件夹中的所有非只读文件(子目录下的文件不删除;删除前会进行确认;等价于del test\*

    例:del /f test  // 删除当前目录下的test文件夹中的所有文件(含只读文件;子目录下的文件不删除;删除前会进行确认;等价于del /f test\*

    例:del /f /s /q test d:\test2\*.doc  // 删除当前目录下的test文件夹中所有文件及d:\test2中所有doc文件(含只读文件;递归子目录下的文件;删除前不确认)

    ++++++++++++++++++++++

    /ar、/ah、/as、/aa 分别表示删除只读、隐藏、系统、存档文件
    /a-r、/a-h、/a-s、/a-a 分别表示删除除只读、隐藏、系统、存档以外的文件

    ++++++++++++++++++++++

    例:del /ar *.* // 删除当前目录下所有只读文件

    例:del /a-s *.* // 删除当前目录下除系统文件以外的所有文件

    replace 替换文件即使这个文件在使用,仍然可以替换成功

    例:replace d:\love.mp3 d:\mp3   // 使用d盘下的love.mp3强制替换d盘mp3目录中的love.mp3文件

    mklink  创建符号链接(win7引入)创建的符号链接文件上会有一个类似快捷方式的箭头

    win7下的mklink命令通过指定参数可以建立出不同形式的文件或目录链接,分为硬链接(hard link)符号链接(symbolic link)目录联接(junction)三种。

    (1) 符号链接(symbolic link)

     建立一个软链接相当于建立一个文件(或目录),这个文件(或目录)用于指向别的文件(或目录),和win的快捷方式有些类似。

      删除这个链接,对原来的文件(或目录)没有影像没有任何影响;而当你删除原文件(或目录)时,再打开链接则会提示“位置不可用”。

    (2) 目录联接(junction)

     作用基本和符号链接类似。区别在于,目录联接在建立时会自动引用原目录的绝对路径,而符号链接允许相对路径的引用。

    (3) 硬链接(hard link)

     建立一个硬链接相当于给文件建立了一个别名,例如对1.txt创建了名字为2.txt的硬链接;

      若使用记事本对1.txt进行修改,则2.txt也同时被修改,若删除1.txt,则2.txt依然存在,且内容与1.txt一样。

    建立链接请注意:
    a、建立文件或目录链接限于 NTFS 文件系统;符号链接(目录联接)的建立可以跨分区(如:在d盘可以建立c盘文件或目录的链接),硬链接只能建立同一分区内的文件指向
    b、硬链接只能用于文件,不能用于目录;目录联接只能用于目录;符号链接则均可以;
    c、硬链接不允许对空文件建立链接,符号(软)链接可以。

    +++++++++++++++++++++++++++++++++

    mklink [[/d] | [/h] | [/j]] Link Target

    /d   创建目录符号链接。黙认为文件符号链接。
    /h   创建硬链接,而不是符号链接。
    /j   创建目录联接。
    Link  指定新的符号链接名称。
    Target 指定新链接引用的路径(相对或绝对)。

    +++++++++++++++++++++++++++++++++

    例:mklink /j "C:\Users" "D:\Users"   // 创建D盘Users目录联接到C盘,并命名为Users

    attrib  查看或修改文件或目录的属性  A:存档  R:只读  S:系统  H:隐藏

    例:attrib 1.txt   // 查看当前目录下1.txt的属性

    例:attrib -R 1.txt  // 去掉1.txt的只读属性

    例:attrib +H movie  // 隐藏movie文件夹

    assoc 设置'文件扩展名'关联到的'文件类型'

    例:assoc // 显示所有'文件扩展名'关联

    例:assoc .txt // 显示.txt代表的'文件类型',结果显示.txt=txtfile

    例:assoc .doc // 显示.doc代表的'文件类型',结果显示.doc=Word.Document.8

    例:assoc .exe // 显示.exe代表的'文件类型',结果显示.exe=exefile

    例:assoc .txt=txtfile  // 恢复.txt的正确关联

    ftype 设置'文件类型'关联到的'执行程序和参数'

    例:ftype // 显示所有'文件类型'关联

    例:ftype exefile // 显示exefile类型关联的命令行,结果显示 exefile="%1" %*

    例:ftype txtfile=C:\Windows\notepad.exe %1 // 设置txtfile类型关联的命令行为:C:\Windows\notepad.exe %1

    当双击一个.txt文件时,windows并不是根据.txt直接判断用notepad.exe打开
    而是先判断.txt属于txtfile'文件类型';再调用txtfile关联的命令行:txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1

    3. 文件查看

    type 显示文本文件内容

    例:type c:\11.txt   // 显示c盘中11.txt的文本内容

    例:type conf.ini  // 显示当前目录下conf.ini的文本内容

    例:type c:\11.txt | more  // 分页显示c盘中11.txt的文本内容

    more 逐屏的显示文本文件内容

    例:more conf.ini  //  逐屏的显示当前目录下conf.ini的文本内容   空格:下一屏 q:退出 】

    4. 注册表命令

    reg 注册表相关操作

    参数说明:

    KeyName [\Machine]FullKey
               Machine为远程机器的机器名 - 忽略默认到当前机器。
               远程机器上只有 HKLM 和 HKU。
               FullKey ROOTKEY+SubKey
               ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
               SubKey 所选ROOTKEY下注册表项的完整名
    /v        所选项之下要添加的值名
    /ve      为注册表项添加空白值名<无名称>
    /t        RegKey 数据类型
               [ REG_SZ | REG_MULTI_SZ | REG_DWORD_BIG_ENDIAN |
               REG_DWORD | REG_BINARY | REG_DWORD_LITTLE_ENDIAN |
               REG_NONE | REG_EXPAND_SZ ]
               如果忽略,则采用 REG_SZ
    /s        指定一个在 REG_MULTI_SZ 数据字符串中
               用作分隔符的字符;如果忽略,则将""用作分隔符
    /d        要分配给添加的注册表ValueName的数据
    /f        不提示,强行改写现有注册表项

    例:reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v MyApp /t REG_SZ /d "c:\tools\myapp.exe" /f  // 强制添加一条开机启动c:\tools\myapp.exe程序的注册表项

    例:reg add "HKLM\SOFTWARE\ScmClient" /v AgreementConfirmed /t REG_SZ /d 1 /f  // 解决32位xp打开ioa后,弹出的框关不掉问题

    例:reg add "HKCU\ControlPanel\Desktop" /v WaitToKIllAppTimeOut /t REG_SZ /d 10000 /f // 强制添加一条加速关闭应用程序的注册表项

    例:reg add "HKCR\*\shell\WinDbg\command" /t REG_SZ /d "\"D:\Program Files (x86)\windbg\windbg.exe\" -z \"%1\" " /f    // 强制添加windbg打开dump文件到右键菜单的注册表项(不指明/v,键值将写入默认值名中)

    例:reg add "HKCR\*\shell\WinHex\command" /t REG_SZ /d "\"D:\software-setup\system\winhex\winhex.exe\"  \"%1\" " /f    // 强制添加winhex到右键菜单的注册表项(不指明/v,键值将写入默认值名中)

    注册表中%1 %2 %3 %4的含义:
    --  %1表示文件列表,%2表示默认打印机,%3表示驱动器,%4表示端口

    例:reg add "hkcu\software\microsoft\windows\currentversion\internet settings" /v AutoConfigURL /t REG_SZ /d "http://txp-01.tencent.com/proxy.pac" /f  // 为IE设置代理:http://txp-01.tencent.com/proxy.pac

    例:reg add "hkcu\software\Sysinternals\Process Monitor" /v EulaAccepted /t REG_DWORD /d 1 /f  // 为Procmon.exe工具(Process Monitor为其属性面板上的描述名)添加License同意

    例:reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v MyApp /f  // 强制删除值名的MyApp的注册表项

    例:reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe" /f  // 强制删除让任务栏里的任务管理器为灰色的注册表项

    例:reg copy "hkcu\software\microsoft\winmine" "hkcu\software\microsoft\winminebk" /s /f  // 强制复制winmine下所有的子项与值到winminebk中

    例:reg export "hkcu\software\microsoft\winmine" c:\regbak\winmine.reg  // 导出winmine下所有的子项与值到c:\regbak\winmine.reg文件中

    例:reg import c:\regbak\winmine.reg  // 导入c:\regbak\winmine.reg文件到注册表中

    例:reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE" /s   // 查询ie的安装路径

    例:reg query HKCR\.dsw /ve  // 查询.dsw默认值

    例:reg query HKEY_CURRENT_USER\Software\Tencent\QQGame\SYS /v GameDirectory  // 查询QQGame安装路径

    5. @#@

    &  顺序执行多条命令,而不管命令是否执行成功

    例:cd /d d:\src&work.exe /o c:\result.txt  // 先将当前工作目录切换到d:\src下,然后执行work.exe /o c:\result.txt命令

    &&  顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令

    例:find "ok" c:\test.txt && echo 成功 // 如果找到了"ok"字样,就显示"成功",找不到就不显示

    ||   顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令

    例:find "ok" c:\test.txt || echo 不成功   // 如果找不到"ok"字样,就显示"不成功",找到了就不显示

    |    管道命令

    例:dir *.* /s/a | find /c ".exe"   // 先执行dir命令,然后对输出结果(stdout)执行find命令(输出当前文件夹及所有子文件夹里的.exe文件的个数)

    例:dir *.* /s/a 2>&1 | find /c ".exe"   // 先执行dir命令,然后对输出结果(stdout)和错误信息(stderr)执行find命令(输出当前文件夹及所有子文件夹里的.exe文件的个数)

    >  将当前命令输出以覆盖的方式重定向

    例:tasklist > p1.txt   // 将tasklist的输出结果(stdout)以覆盖的方式重定向到p1.txt文件中(注:tasklist的输出结果就不会打印到屏幕上了)

    例:tasklist 1> p1.txt  // 等同于:tasklist > p1.txt

    例:dir bin 2> p1.txt  // 输出结果(stdout)打印在屏幕上,错误信息(stderr)以覆盖的方式重定向到p1.txt中(注:bin目录不存在时,会输出错误信息)

    例:dir bin > p1.txt 2>&1  // 将错误信息(stderr)重定向到输出结果(stdout),然后将输出结果(stdout)以覆盖的方式重定向到p1.txt中(注:bin目录不存在时,会输出错误信息)

    例:dir bin 2> p1.txt 1>&2  // 将输出结果(stdout)重定向到错误信息(stderr),然后将错误信息(stderr)以覆盖的方式重定向到p1.txt中(注:bin目录不存在时,会输出错误信息) 注:与上条命令结果一致

    例:tasklist >nul   // 屏幕上不打印tasklist的输出结果(stdout),错误信息(stderr)仍会打印

    例:dir bin 2>nul   // 屏幕上不打印命令的错误信息(stderr),输出结果(stdout)仍会打印(注:bin目录不存在时,会输出错误信息)

    例:dir bin >nul 2>&1   //  将命令的错误信息(stderr)重定向到输出结果(stdout),然后不打印输出结果(stdout)【屏幕上错误信息(stderr)和输出结果(stdout)都不打印】(注:bin目录不存在时,会输出错误信息)

    例:dir bin 2>nul 1>&2   //  将命令的输出结果(stdout)重定向到错误信息(stderr),然后不打印错误信息(stderr)【屏幕上错误信息(stderr)和输出结果(stdout)都不打印】(注:bin目录不存在时,会输出错误信息)

    >>  将当前命令输出以追加的方式重定向

    例:tasklist >> p2.txt   // 将tasklist的输出结果(stdout)以追加的方式重定向到p2.txt文件中(注:tasklist的输出结果就不会打印到屏幕上了)

    例:tasklist 1>> p2.txt  // 等同于:tasklist >> p2.txt

    例:dir bin 2>> p2.txt  // 输出结果(stdout)打印在屏幕上,错误信息(stderr)以追加的方式重定向到p2.txt中(注:bin目录不存在时,会输出错误信息)

    例:dir bin >> p2.txt 2>&1  // 将错误信息(stderr)重定向到输出结果(stdout),然后将输出结果(stdout)以追加的方式重定向到p2.txt中(注:bin目录不存在时,会输出错误信息)

    例:dir bin 2>> p2.txt 1>&2  // 将输出结果(stdout)重定向到错误信息(stderr),然后将错误信息(stderr)以追加的方式重定向到p2.txt中(注:bin目录不存在时,会输出错误信息) 注:与上条命令结果一致

    <    从文件中获得输入信息,而不是从屏幕上,一般用于date time label等需要等待输入的命令

    例:date <temp.txt  // temp.txt中的内容为2005-05-01

    编号Handle说明
    0stdin键盘输入
    1stdout在命令提示窗口上打印输出结果(默认)
    2stderr在命令提示窗口上打印错误信息(默认)
    3-9undefined应用程序自己定义和指定

     

    @   命令修饰符  在执行命令前,不打印出该命令的内容

    例:@cd /d d:\me   // 执行该命令时,不打印出命令的内容:cd /d d:/me

    ,    在某些特殊的情况下可以用来代替空格使用

    例:dir,c:\   // 相当于:dir c:\

    ;    当命令相同的时候,可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回错误报告但程序还是会继续执行

    例:dir c:\;d:\;e:\   // 相当于顺序执行:dir c:\    dir d:\     dir e:\

    echo.   // 输出一个"回车换行",空白行

    echo off   // 后续所有命令在执行前,不打印出命令的内容

    echo on   // 后续所有命令在执行前,打印出命令的内容

    echo 123   // 输出123到终端屏幕

    echo "Hello World!!!"   // 输出Hello World!!!到终端屏幕

    echo %errorlevel%   // 每个命令运行结束,可以用这个命令行格式查看返回码;默认值为0,一般命令执行出错会设errorlevel为1

    echo test > p1.txt  // 输出test的字符串到当前目录中的p1.txt文件中(以覆盖的方式)

    set  // 显示当前用户所有的环境变量

    set path // 查看path的环境变量值(准确的说是查看以path开头的环境变量)

    set path=    // 清空path变量

    set path=d:\execute  // 将path变量设置为d:\execute(注:修改的path只会影响当前回话,也不会存储到系统配置中去;当前cmd窗口关闭,新设置的path也就不存在了)

    set path=%path%;d:\execute   // 在path变量中添加d:\execute(注:修改的path只会影响当前回话,也不会存储到系统配置中去;当前cmd窗口关闭,新设置的path也就不存在了)

    path // 显示当前path变量的值

    path ; // 清除所有搜索路径设置并指示cmd.exe只在当前目录中搜索

    path d:\xxx;%PATH%  // 将d:\xxx路径添加到path中

    ---------------------------------------------------

    set p=aa1bb1aa2bb2 // 设置变量p,并赋值为aa1bb1aa2bb2

    echo %p% // 显示变量p代表的字符串,即aa1bb1aa2bb2

    echo %p:~6% // 显示变量p中第6个字符以后的所有字符,即aa2bb2

    echo %p:~6,3% // 显示第6个字符以后的3个字符,即aa2

    echo %p:~0,3% // 显示前3个字符,即aa1

    echo %p:~-2% // 显示最后面的2个字符,即b2

    echo %p:~0,-2% // 显示除了最后2个字符以外的其它字符,即aa1bb1aa2b

    echo %p:aa=c% // 用c替换变量p中所有的aa,即显示c1bb1c2bb2

    echo %p:aa=% // 将变量p中的所有aa字符串置换为空,即显示1bb12bb2

    echo %p:*bb=c% // 第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2

    set p=%p:*bb=c% // 设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2

    set /a p=39 // 设置p为数值型变量,值为39

    set /a p=39/10 // 支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3

    set /a p=p/10 // 用 /a 参数时,在 = 后面的变量可以不加%直接引用

    set /a p="1&0" // &运算要加引号。其它支持的运算符参见set/?

    ---------------------------------------------------

    cls  清除屏幕

    ver  显示当前windows系统的版本号

    winver  弹框显示当前windows系统信息

    vol  显示当前分区的卷标

    label  显示当前分区的卷标,同时提示输入新卷标

    label c:system  设置c盘的卷标为system

    time  显示或设置当前时间

    例:time /t  // 显示当前时间

    例:time   // 设置新的当前时间(格式:hh:mm:ss),直接回车则表示放弃设置

    date  显示或设置当前日期

    例:date /t  // 显示当前日期

    例:date   // 设置新的当前日期(格式:YYYY/MM/DD),直接回车则表示放弃设置

    title 正在做命令行测试  // 修改当前cmd窗口的标题栏文字为正在做命令行测试

    prompt orz:   // 将命令提示符修改为orz:

    print 1.txt  // 使用设置好的打印机来打印1.txt文本文件

    call ff.bat   // 调用执行ff.bat脚本(ff.bat脚本执行完原脚本才会往下执行)

    start  运行某程序或命令

    例:start /max notepad.exe  // 最大化的方式启动记事本

    例:start /min calc.exe   // 最小化的方式启动计算器

    例:start  tasklist  // 启动一个cmd实例窗口,并运行tasklist

    例:start explorer f:\  // 调用资源管理器打开f盘

    例:strat iexplore "www.qq.com"  // 启动ie并打开www.qq.com网址

    例:start ff.bat  // 启动开始执行ff.bat(启动ff.bat脚本后,原脚本继续执行,不会等ff.bat脚本执行完)

    exit  退出当前cmd窗口实例

    例:exit 0  // 退出当前cmd窗口实例,并将过程退出代码设置为0(0表示成功,非0表示失败)

    例:exit /B 1  // 退出当前bat脚本,并将ERRORLEVEL系统变量设置为1

    pause   暂停批处理程序,并显示出:请按任意键继续....

    color  设置当前cmd窗口背景色和前景色(前景色即为字体的颜色)

    例:color  // 恢复到缺省设置

    例:color 02 // 将背景色设为黑色,将字体设为绿色

    --------------------------------------
    0 = 黑色 8 = 灰色
    1 = 蓝色 9 = 淡蓝色
    2 = 绿色 A = 淡绿色
    3 = 浅绿色 B = 淡浅绿色
    4 = 红色 C = 淡红色
    5 = 紫色 D = 淡紫色
    6 = 黄色 E = 淡黄色
    7 = 白色 F = 亮白色
    --------------------------------------

    mode con cols=200 lines=60 & color 9f    设置DOS窗口颜色为9f,大小:200行 60列(若屏幕缓冲区大小的宽度w<200或高度h<60,最终DOS的窗口就会为w行,h列)

    systeminfo  查看当前计算机的综合信息

    systeminfo | findstr /i "初始安装日期 系统启动时间"   只查看当前计算机的初始安装日期和系统启动时间

    wmic 查看硬件的信息   -- C:\Windows\System32\wbem\WMIC.exe

    例:wmic logicaldisk   // 查看计算机上各个盘的相关信息

    例:wmic LogicalDisk where "Caption='C:'" get FreeSpace,Size /value   // 获取C盘的剩余空间大小与总大小(单位:Byte)

    例:wmic os get Caption,InstallDate,OSArchitecture /value  // 获取当前os的Caption、安装日期以及系统架构信息

    wmic 查看进程信息

    例:wmic process where Caption="buyticket.exe" get commandline,ExecutablePath,ProcessId,ThreadCount /value // 查看名为"buyticket.exe"所有进程命令行,exe全路径,PID及线程数

    例:wmic process where Caption="buyticket.exe" get ExecutablePath,HandleCount /value   // 查看名为"buyticket.exe"所有进程的exe全路径及当前打开的句柄数

    例:wmic process where Caption="buyticket.exe" get ExecutablePath,VirtualSize,WorkingSetSize /value   // 查看名为"buyticket.exe"所有进程的exe全路径、当前虚拟地址空间占用及物理内存工作集

    logoff  注销当前用户

    shutdown  关闭、重启、注销、休眠计算机

    例:shutdown /s  // 关闭计算机

    例:shutdown /s /t 3600  // 一小时后,关闭本地计算机

    例:shutdown /a  // 终止系统关闭

    例:shutdown /r  // 关闭并重启本地计算机

    例:shutdown /m 192.168.1.166 /r  // 关闭并重启ip为192.168.1.166的计算机

    +++++++++++++++++++++

    远程关机权限的获取:
    1)修改远程pc的“本地安全策略”,为指定的用户开放权限
    在WindowsXP默认的安全策略中,只有Administrators组的用户才有权从远端关闭计算机,如果要给xxxx用户远程关机的权限。
    可利用WindowsXP的“组策略”或“管理工具”中的“本地安全策略”来实现。 
    1.命令行运行gpedit.msc打开“组策略编辑器“;
    2.导航到“计算机配置/Windows设置/安全设置/本地策略/用户权利指派”; 
    3.修改“从远端系统强制关机”,添加xxxx用户即可。

    2)获得远程IPC管理权限
    如果配置第一步后还出现“拒绝访问。”,则需要在运行shutdown命令前先运行如下命令
    net use \\[ip地址或计算机名]\ipc$ password /user:xxxx
    其中password为帐号xxxx的登录密码。

    +++++++++++++++++++++

    例:shutdown /g  // 关闭并重启计算机,重启后重新启动所有注册的应用程序

    例:shutdown /l  // 注销本地计算机

    例:shutdown /h /f // 休眠本地计算机(强制正在运行的应用程序关闭,不前台警告用户)

    例:shutdown /s  // 关闭计算机

    regsvr32  注册或反注册com组件

    例:regsvr32 /s clock.ocx  // 以无声的方式注册clock.ocx组件

    例:regsvr32 /u myCommon.dll  // 卸载myCommon.dll组件

    format  格式化磁盘

    例:format J: /FS:ntfs   // 以ntfs类型格式化J盘 【类型有:FAT、FAT32、exFAT、NTFS或UDF】

    例:format J: /FS:fat32 /Q  //  以fat32类型快速格式化J盘

    chkdsk /f D:   // 检查磁盘D并显示状态报告;加参数/f表示同时会修复磁盘上的错误

    subst   磁盘映射  -- 磁盘映射信息都保存在注册表以下键值中:HKEY_CURRENT_USER\Network

    例:subst  // 显示目前所有的映射

    例:subst z: \\com\software  // 将\\com\software共享映射为本地z盘

    例:subst y: e:\src  // 将e:\src映射为本地y盘

    例:subst z: /d  // 删除z盘映射

    cmdkey   凭据(保存的用户名和密码)

    例:cmdkey /list  // 列出可用的凭据

    例:cmdkey /list:10.12.190.82  // 列出指定目标的凭据

    例:cmdkey /list:Domain:target=10.12.190.82  // 列出指定目标的凭据

    例:cmdkey /add:Domain:target=10.12.190.82 /user:LiLei /pass:123456  // 添加凭据

    例:cmdkey /delete:Domain:target=10.12.190.82  // 删除指定目标的凭据

    cscript  执行vbs脚本

    例:cscript /Nologo mac.vbs  // 执行mac.vbs脚本,显示本机mac地址

    -------mac.vbs----------

    Dim mc,mo
    Set mc=GetObject("Winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")
    For Each mo In mc
    If mo.IPEnabled=True Then
    MsgBox "本机网卡MAC地址是: " & mo.MacAddress
    Exit For
    End If
    Next

    --------------------------

    6. net命令

    net start  // 查看已经启动的服务

    net start "Task Scheduler"   // 开启任务计划服务

    net stop "Task Scheduler"   // 关闭任务计划服务

    net start dnscache  // 开启dns缓存服务

    net stop dnscache  // 关闭dns缓存服务

    net share   // 查看当前用户下的共享目录

    net share workFile /delete  // 取消名为workFile的共享状态

    net share xxx=c:\360Downloads   // 将c:\360Downloads设为共享,并取名为xxx

    net share ipc$ // 开启ipc$共享

    net share ipc$ /del // 删除ipc$共享

    net share c$ /del // 删除c盘共享

    net use \\192.168.1.166\ipc$ " " /user:" " // 建立192.168.1.166的ipc空链接

    net use \\192.168.1.166\ipc$ "123456" /user:"administrator"   // 直接登陆后建立192.168.1.166的ipc非空链接(用户名为administrator 密码为123456)

    net use h: \\192.168.1.166\c$ "123456" /user:"administrator"   // 直接登陆后映射192.168.1.166的c盘到本地为h盘(用户名为administrator 密码为123456)

    net use h: \\192.168.1.166\c$   // 登陆后映射192.168.1.166的c盘到本地为h盘

    net use \\192.168.1.166\ipc$ /del  // 删除ipc链接

    net use h: /del // 删除本地的h盘的映射

    net view   // 查看本地局域网内开启了哪些共享

    net view \\192.168.1.166  // 查看192.168.1.166的机器上在局域网内开启了哪些共享

    net time \\127.0.0.1   // 查看本地机器的日期及时间

    net time \\localhost   // 查看本地机器的日期及时间

    net time \\192.168.1.166   // 查看192.168.1.166机器的日期及时间

    net time \\192.168.1.166 /set  // 设置本地计算机时间与192.168.1.166主机的时间同步,加上参数/yes可取消确认信息

    net user  // 查看当前机器上的用户

    net user Administrator   // 查看当前机器上的Administrator用户的信息

    net user Guest /active:yes  // 启用Guest用户

    net user dev 123456 /add   // 新建一个名为dev,密码为123456的用户

    net localgroup administrators dev /add  // 把名为dev的用户添加到管理员用户组中,使其具有管理员权限

    net user dev /del  // 删除名为dev的用户

    7. 进程操作

    tasklist  // 显示当前运行的进程信息(可查看PID)

    taskkill  结束指定的进程

    例:taskkill /im notepad.exe  // 结束名为notepad.exe的进程

    例:taskkill /pid 1230 /pid 1241 /pid 1253 /t // 结束pid为1230、1241和1253的进程以及由它们启动起来的子进程

    例:taskkill /f /im cmd.exe /t   // 强制结束有名为cmd.exe的进程以及由它启动起来的子进程

    8. 网络操作

    ping  // 用于检测网络是否通畅,以及网络时延情况(工作在ICMP协议上)

    例:ping baidu.com   //  测试与baidu服务器的连接情况

    例:ping chen-pc0   // 测试机器名为chen-pc0的连接情况

    例:ping 220.181.111.86   // 测试与ip为220.181.111.86的连接情况

    例:ping -l 65500 -n 10 qq.com   // 向qq.com发送10次65500字节的ping

    例:ping -n 6 127.0.0.1 // 对当前主机执行6次ping操作(花费时间为5s)

    例:ping -t baidu.com   // 不断地测试baidu服务器的连接情况   Ctrl+Pause Break:查看ping的统计信息;Ctrl+C:终止当前任务

    a. 首先查本地arp cache信息,看是否有对方的mac地址和IP地址映射条目记录 
    b. 如果没有,则发起一个arp请求广播包,等待对方告知具体的mac地址 
    c. 收到arp响应包之后,获得某个IP对应的具体mac地址,有了物理地址之后才可以开始通信了,同时对ip-mac地址做一个本地cache 
    d. 发出icmp echo request包,收到icmp echo reply包

    ipconfig /all  // 查看本地ip地址等详细信息

    ipconfig /displaydns  // 显示本地dns缓存的内容

    ipconfig /flushdns  // 清除本地dns缓存的内容

    nslookup www.cnblogs.com  // 获取www.cnblogs.com的域名解析

    服务器: gm-captiva.tencent.com//DNS服务器的主机名
    Address: 10.6.18.41//DNS服务器IP

    非权威应答:
    名称: www.cnblogs.com//解析的域名URL
    Address: 42.121.252.58//解析回的IP

    nslookup -d www.cnblogs.com  // 打印出www.cnblogs.com的域名解析所有记录

    netstat -a   // 查看开启了哪些端口

    netstat -n  // 查看端口的网络连接情况

    netstat -v   // 查看正在进行的工作

    netstat -p tcp  // 查看tcp协议的使用情况

    tracert 182.140.167.44  // 查看本机到达182.140.167.44的路由路径

    route print  // 显示出IP路由

    telnet 182.140.167.44 8000   // 探测182.140.167.44是否使用TCP协议监听8000端口(注意:telnet命令不支持UDP端口检测)

    说明:如果端口关闭或者无法连接,则显示不能打开到主机的链接,链接失败;端口打开的情况下,链接成功,则进入telnet页面(全黑的),证明端口可用。

    用于探测指定IP的端口号,只是telnet的一个基本功能;

    远程登录到网络中的计算机,并以命令行的方式远程管理计算机才是telnet命令的强大之处。

    windows telnet服务器(默认端口:23)环境配置过程如下: 参考1

    a. 安装telnet服务器

    b. 启动Telnet服务

    c. 关闭windows防火墙    注:若不想关闭防火墙,则需要在Windows防火墙 -- 高级设置里面对Telnet服务器的访问规则进行配置

      

    ftp 46.19.34.198 21  // 连接46.19.34.198 ftp服务器(21为端口号),然后会要求输入用户名与密码;连接成功后,具体如何使用可以键入?来查看帮助说明

    arp   显示和修改地址解析协议(ARP)使用的“IP到mac”的地址转换表

    例:arp -a  // 显示arp缓存表

    at  计划任务(必须保证“Task Scheduler”服务启动   net start "task scheduler"

    例:at  // 查看所有的计划任务

    例:at /delete /yes  // 停止所有任务计划(不需要确认)

    例:at 1  // 开启id为1的计划任务

    例:at 1 /delete /yes  // 停止id为1的计划任务(不需要确认)

    例:at 12:42 shutdown –s –t30   // 到12:42 ,电脑会出现“ 系统关机 ”对话框,并默认 30 秒延时自动关机

    例:at cmd /c dir > c:\test.out   // 如果命令不是exe文件,必须在命令前加上cmd /c

    例:at 6:00AM /every:Saturday task.bat   // 在每周六早上6点,电脑定时启动task.bat批处理文件

    例:at \\chen 12:00 shutdown /r   // 到12:00时,关闭名为chen的计算机

    例:at \\192.168.1.166 12:00 shutdown /r   // 到12:00时,关闭ip为192.168.1.166的计算机

    9. 文本处理 

    edit config.ini  // 编辑config.ini文件(会进入edit字符编辑器;按alt,可以选择对应的菜单) win7 x64下没有该命令

    find  文件中搜索字符串

    例:find /N /I "pid" 1.txt  // 在1.txt文件中忽略大小写查找pid字符串,并带行号显示查找后的结果

    例:find /C "exe" 1.txt  // 只显示在1.txt文件中查找到exe字符串的次数

    例:find /V "exe" 1.txt  // 显示未包含1.txt文件中未包含exe字符串的行

    findstr  文件中搜索字符串

    例:findstr "hello world" 1.txt  // 在1.txt文件中搜索hello或world

    例:findstr /c:"hello world" 1.txt  // 在1.txt文件中搜索hello world

    例:findstr /c:"hello world" 1.txt nul  // 在1.txt文件中搜索hello world,并在每行结果前打印出1.txt:   注:findstr只有在2个及以上文件中搜索字符串时才会打印出每个文件的文件名,nul表示一个空文件

    例:findstr /s /i "Hello" *.*   // 不区分大小写,在当前目录和所有子目录中的所有文件中的hello

    例:findstr  "^[0-9][a-z]" 1.txt  // 在1.txt中搜索以1个数字+1个小写字母开头子串的行

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201902/24/1550993811_324417.png) VMware workstation安装windows2012出现缺少介质驱动程序是啥原因引起的? 所安装的镜像源是没有问题的。如何解决?
  • 深入了解Windows句柄到底是什么

    万次阅读 多人点赞 2013-12-30 11:02:23
    总是有新入门的Windows程序员问我Windows的句柄到底是什么,我说你把它看做一种类似指针的标识就行了,但是显然这一答案不能让他们满意,然后我说去问问度娘吧,他们说不行网上的说法太多还难以理解。今天比较闲,我...

    总是有新入门的Windows程序员问我Windows的句柄到底是什么,我说你把它看做一种类似指针的标识就行了,但是显然这一答案不能让他们满意,然后我说去问问度娘吧,他们说不行网上的说法太多还难以理解。今天比较闲,我上网查了查,光是百度百科词条“句柄”中就有好几种说法,很多叙述还是错误的,天知道这些误人子弟的人是想干什么。

    这里我列举词条中的关于句柄的叙述不当之处,至于如何不当先不管,继续往下看就会明白:

    1.windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。

    2.如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针指针


    通常我们说句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数。这句话是没有问题的,但是想把这句话对应到具体的内存结构上就做不到了。下面我们来详细探讨一下Windows中的句柄到底是什么。

    1.虚拟内存结构

    要理解这个问题,首先不能避开Windows的虚拟内存结构。对于这个问题已有前人写了比较好的解释,这里我为了保证博客连贯性,直接贴上需要的部分(原文是讲解Java JVM虚拟机的性能提升的文章,在其中涉及到了虚拟内存的内容,解释的非常好,这里我截取这部分略加修改,这里是文章链接)


    我们知道,CPU是通过寻址来访问内存的。32位CPU的寻址宽度是 0~0xFFFFFFFF ,计算后得到的大小是4G,也就是说可支持的物理内存最大是4G。但在实践过程中,碰到了这样的问题,程序需要使用4G内存,而可用物理内存小于4G,导致程序不得不降低内存占用。

    为了解决此类问题,现代CPU引入了 MMU(Memory Management Unit 内存管理单元)。

    MMU 的核心思想是利用虚拟地址替代物理地址,即CPU寻址时使用虚址,由 MMU 负责将虚址映射为物理地址。MMU的引入,解决了对物理内存的限制,对程序来说,就像自己在使用4G内存一样。

    内存分页(Paging)是在使用MMU的基础上,提出的一种内存管理机制。它将虚拟地址和物理地址按固定大小(4K)分割成页(page)和页帧(page frame),并保证页与页帧的大小相同。这种机制,从数据结构上,保证了访问内存的高效,并使OS能支持非连续性的内存分配。在程序内存不够用时,还可以将不常用的物理内存页转移到其他存储设备上,比如磁盘,这就是大家耳熟能详的虚拟内存。

    在上文中提到,虚拟地址与物理地址需要通过映射,才能使CPU正常工作。
    而映射就需要存储映射表。在现代CPU架构中,映射关系通常被存储在物理内存上一个被称之为页表(page table)的地方。
    如下图:

    物理内存之间的交互关系

    从这张图中,可以清晰地看到CPU与页表,物理内存之间的交互关系。

    进一步优化,引入TLB(Translation lookaside buffer,页表寄存器缓冲)
    由上一节可知,页表是被存储在内存中的。我们知道CPU通过总线访问内存,肯定慢于直接访问寄存器的。
    为了进一步优化性能,现代CPU架构引入了TLB,用来缓存一部分经常访问的页表内容。
    如下图:

    加入了TLB物理内存之间的交互关系

    对比 9.6 那张图,在中间加入了TLB。

    为什么要支持大内存分页?
    TLB是有限的,这点毫无疑问。当超出TLB的存储极限时,就会发生 TLB miss,之后,OS就会命令CPU去访问内存上的页表。如果频繁的出现TLB miss,程序的性能会下降地很快。

    为了让TLB可以存储更多的页地址映射关系,我们的做法是调大内存分页大小。

    如果一个页4M,对比一个页4K,前者可以让TLB多存储1000个页地址映射关系,性能的提升是比较可观的。


    简而言之,虚拟内存将内存逻辑地址和物理地址之间建立了一个对应表,要读写逻辑地址对应的物理内存内容,必须查询相关页表(当然现在有还有段式、段页式内存对应方式,但是从原理上来说都是一样的)找到逻辑地址对应的物理地址做相关操作。我们常见的对程序员开放的内存分配接口如malloc等分配的得到的都是逻辑地址,C指针指向的也是逻辑地址

    这种虚拟内存的好处是很多的,这里以连续内存分配和可移动内存为例来讲一讲。

    首先说一说连续内存分配,我们在程序中经常需要分配一块连续的内存结构,如数组,他们可以使用指针循环读取,但是物理内存多次分配释放后实际上是破碎的,如下图


    图中白色为可用物理内存,黑色为被其他程序占有的内存,现在要分配一个12大小的连续内存,那么显然物理内存中是没有这么大的连续内存的,这时候通过页表对应的方式可以看到我们很容易得到逻辑地址上连续的12大小的内存。

    再说一说可移动内存,我们使用GlobalAlloc等函数时,经常会指定GMEM_MOVABLE和GMEM_FIXED参数,很对人对这两个参数很头疼,搞不明白什么意思。

    实际上这里的MOVABLE和FIXED都是针对的逻辑地址来说的。GMEM_MOVABLE是说允许操作系统(或者应用程序)实施对内存堆(逻辑地址)的管理,在必要时,操作系统可以移动内存块获取更大的块,或者合并一些空闲的内存块,也称“垃圾回收”,它可以提高内存的利用率,这里的地址都是指逻辑地址。同样以分配12大小连续的内存,在某种状态时,内存结构如下


    显然这时候是无法分配12连续大小的内存,但是如果这里的逻辑地址都指明为GMEM_MOVABLE的话,操作系统这时候会对逻辑地址做管理,得到如下结果


    这时候就实现了逻辑地址的MOVE,相对比实现物理内存的移动,这样的代价当然要小得多撒,但是聪明的小伙伴们是不是要问,这样在逻辑地址中移动了内存,那么实际访问数据不都乱套了吗,还能找到自己分配的实际物理内存数据吗,等等,不要心急,这就是等下要讲的句柄做的事情了。

    GMEM_FIXED是说允许在物理内存中移动内存块,但是必须保证逻辑地址是不变的,在早期16位Windows操作系统不支持在物理内存中移动内存,所以禁止使用GMEM_FIXED,现在的你估计体会不到了。

    事实上用GlobalAlloc分配内存时指定GMEM_FIXED参数返回的句柄就是指向内存分配的内存块的指针,不理解???接着看下面的句柄结构,你就明白了。

    2.句柄结构

    在上面讲解虚拟内存结构的过程中,我们就引出了几个问题:MOVABLE的内存访问为什么不会乱,FIXED的内存为什么说就是指向分配内存块的指针。
    事实上我们尽管Windows没有给出源码,但是从一些头文件、MSDN和Windows早期内存分配函数中我们还是可以一窥端倪。
    在Winnt.h头文件中做了通用句柄的定义
    #ifdef STRICT
    typedef void *HANDLE;
    #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
    #else
    typedef PVOID HANDLE;
    #define DECLARE_HANDLE(name) typedef HANDLE name
    #endif
    typedef HANDLE *PHANDLE;
    在Windef.h做了特殊句柄的定义
    #if !defined(_MAC) || !defined(GDI_INTERNAL)
    DECLARE_HANDLE(HFONT);
    #endif
    DECLARE_HANDLE(HICON);
    #if !defined(_MAC) || !defined(WIN_INTERNAL)
    DECLARE_HANDLE(HMENU);
    #endif
    DECLARE_HANDLE(HMETAFILE);
    DECLARE_HANDLE(HINSTANCE);
    typedef HINSTANCE HMODULE;      /* HMODULEs can be used in place of HINSTANCEs */
    #if !defined(_MAC) || !defined(GDI_INTERNAL)
    DECLARE_HANDLE(HPALETTE);
    DECLARE_HANDLE(HPEN);
    #endif
    DECLARE_HANDLE(HRGN);
    DECLARE_HANDLE(HRSRC);
    DECLARE_HANDLE(HSTR);
    DECLARE_HANDLE(HTASK);
    DECLARE_HANDLE(HWINSTA);
    DECLARE_HANDLE(HKL);
    这里微软把通用句柄HANDLE定义为void指针,显然啦,他是不想让人知道句柄的真实类型,但是和他以往的做法一样,微软空有一个好的想法结果没有实现。马上,如果定义了强制类型检查STRICT, 他又定义了特殊类型句柄宏DECLARE_HANDLE,这里用到了##,这是比较偏僻的用法,翻译过来,对于诸如 DECLARE_HANDLE(HMENU)定义其实就是
    typedef struct HMENU__
    {
        int unused;
    } *HMENU;
    到这里,你是不是觉得有一点眉目了呢,对, 句柄是一种指向结构体的指针,结合这里的int unused定义很容易猜到结构体的第一个字段就是我们的逻辑地址(指针) 。那么,是不是仅仅如此呢,当然不是!!!由于指向结构体指针可以强制截断只获取第一个字段,这里的struct结构体绝对不止一个字段,联系我们在Windows中的编程经验,对于线程HANDLE有计数那么必须有计数段,对于事件HEVENT等内核对象会要求指定属性那么必须有属性段,对于内存分配HANDLE有可移动和不可移动之说那么必须有内存可移动属性段,等等。基于此我们可以大胆猜测Windows的句柄指向的结构类似如下
    struct  
    {
    	int pointer;		//指针段
    	int count;			//内核计数段
    	int attribute;		//文件属性段:SHARED等等
    	int memAttribute;	//内存属性段:MOVABLE和FIXED等等
    	...
    };
    事实上, Windows内存管理器管理的其实都是句柄,通过句柄来管理指针,Windows的系统整理内存时检测内存属性段,如果是可以移动的就能够移动逻辑地址,移动完后将新的地址更新到对应句柄的指针段中,当要使用MOVABLE地址时的时候必须Lock住,这时候计数加1,内存管理器检测到计数>0便不会移动逻辑地址,这时候才能获得固定的逻辑地址来操作物理内存,使用完后Unlock内存管理器又可以移动逻辑地址了,到此MOVABLE的内存访问为什么不会乱这个问题就解决了。
    下面再说一说,FIXED的内存为什么说就是指向分配内存块的指针。我们看上面的通用句柄定义,可以发现HANDLE的句柄定义一直是void指针,其他的特殊句柄在严格类型检查的时候定义为结构体指针,为什么不把二者定义为一样的呢。查看MSDN关于GlobalAlloc的叙述对于GMEM_FIXED类型"Allocates fixed memory. The return value is a pointer.",这里返回的是一个指针,为了验证这个说法,我写了一小段程序
    	//GMEM_FIXED
    	hGlobal = GlobalAlloc(GMEM_FIXED, (lstrlen(szBuffer)+1) * sizeof(TCHAR));
    	pGlobal = GlobalLock(hGlobal);
    	lstrcpy(pGlobal, szBuffer);
    	_tprintf(TEXT("pGlobal和hGlobal%s\n"), pGlobal==hGlobal ? TEXT("相等") : TEXT("不相等"));
    	GlobalUnlock(hGlobal);
    
    	_tprintf(TEXT("使用句柄当做指针访问的数据为:%s\n"), hGlobal);
    
    	GlobalFree(hGlobal);
    运行结果为
    pGlobal和hGlobal相等
    使用句柄当做指针访问的数据为:Test text
    对比使用GMEM_MOVABLE程序为
    	//GMEM_MOVABLE
    	hGlobal = GlobalAlloc(GMEM_MOVEABLE, (lstrlen(szBuffer)+1) * sizeof(TCHAR));
    	pGlobal = GlobalLock(hGlobal);
    	lstrcpy(pGlobal, szBuffer);
    	_tprintf(TEXT("pGlobal和hGlobal%s\n"), pGlobal==hGlobal ? TEXT("相等") : TEXT("不相等"));
    	_tprintf(TEXT("使用句柄当做指针访问的数据为:%s\n"), hGlobal);
    	GlobalUnlock(hGlobal);
    	
    	GlobalFree(hGlobal);
    运行结果为
    pGlobal和hGlobal不相等
    使用句柄当做指针访问的数据为:?
    显然,使用GMEM_FIXED和使用GMEM_MOVABLE得到的数据类型不是一样的,我们有理由相信Windows在调用GlobalAlloc使用GEM_FIXED的时候返回的就是数据指针,使用Windows在调用GMEM_MOVABLE的时候返回的是指向结构体的句柄,这样操作的原因相信是为了使用更加方便。那么这里我们就要修正一下前面的说法了: 通用句柄HANDLE有时候是逻辑指针,大多数时候是结构体指针,特殊句柄如HMENU等是结构体指针。这样第二个问题也解决了。


    那么总结来说,就是下面一幅图了

    下面,我们再回头看一看博文开头说的叙述不当之处,说他们不当是因为不是完全错误: 第一点,确实句柄有管理内存地址变动之用,但是并不只是这个作用,内核对象访问级别、文件是否打开都是和他相关的;第二点,指向指针的指针,看得出来作者也是认真思考了的,但是他忽略了句柄包含的其他功能和管理内存地址的作用。

    那么到这里对于句柄你应该非常理解了,在此基础我们在Windows编程上是不是可以有一些启发:
    1.通用句柄HANDLE和特殊句柄一般情况下是可以相互转换的,但是有时候会出错
    2.如果不考虑跨平台移植的话,应该多采用Windows SDK提供的内存管理函数,这样可以获得更好的内存管理
    3.C语言的内存分配函数的实现都是依靠使用GMEM_FIXED调用Windows SDK的内存分配函数的

    完整测试源代码 下载链接
    注意可能在新的VS2005等系列编译器中看不到本文说的一些内容,因为在VC6时候有些代码还不是那么完善,所以给了我们机会去挖掘潜在的内容。至于微软苦心积虑不让我们看到句柄的真实定义那是必然的,试想一下主要的内存对象结构都被摸清楚了,那么黑客们还不反了天了。
    原创,转载请注明来自 http://blog.csdn.net/wenzhou1219






    展开全文
  • Real-Time Windows Target允许在PC系统上实时运行Simulink 以及Stateflow模型。用户可以通过Simulink来创建实时程序并可以控制该程序的执行。使用Real-Time Windows Target可以生成C代码,经过编译及链接后,通过PC...

     Real-Time Windows Target允许在PC系统上实时运行Simulink 以及Stateflow模型。用户可以通过Simulink来创建实时程序并可以控制该程序的执行。使用Real-Time Windows Target可以生成C代码,经过编译及链接后,通过PC机的I/O接口和硬件联接。在整个操作过程中,可以同时运行其他Windows程序。

          I/O设备驱动可以支持各种I/O板卡,连接实时系统中的传感器,执行器和其他实验、开发和测试设备。用户可以编辑Simulink中的模块框图,使用Real-Time Workshop创建新的实时二进制文件。这种集成的环境使得用户可以快速的应用各种设计,无需繁琐的手工编程和调试。

    特点

    • 在台式机或笔记本上实时运行模型
    • 提供高速的小延迟点对点数据处理,符合控制系统设计要求
    • 采样率可高达10K
    • 可以采用250多种实时数据I/O板
    • 与Simulink的外部模式集成使用,支持在线调参,使用Simulink的输出(Scope)实时显示输出信号数据
    • 包含C编译器用于编译链接实时代码
    • 支持Simulink配置集configuration sets来对同一模型进行实时和离线的切换

    强大功能

          由于有了Real-Time Windows Target,用户可以实时地将传感器,执行部件,控制器及其他真实物理部件与Simulink模型直接相连,搭建物理系统的实时原型。有了这种能力,用户的Simulink模型可以实时的采集,进行动态计算并输出真实的控制信号,实时的测试用户的设计。整个开发过程是:首先在Simulink下创建系统的框图,然后利用RTW自动产生C代码,最后创建在Real-Time Windows Target上实时可运行代码。

    • 可以反复设计,而且速度快,只需编辑Simulink框图模型而不需要编辑代码
    • 使用Real-Time Windows Target不需要手写代码和调试,加快了设计速度
    • MathWorks提供了Windows下高度优化的实时内核,这种内核运行在Windows最高优先级(Ring 0),支持单任务和多任务
    • 超过250个PC I/O板用于实时输入输出
    • 可以实时地调整参数,当实时代码在运行时,用户可以修改Simulink模型中的参数值,这个新的参数值自动的传递给正在实时运行的模型
    • 支持Simulink的外部模式,可以使用Gauges Blockset作为交互界面。同时,用户可以使用外部模式来存储运行数据,数据以MAT文件格式存储。
    • 在代码运行期间,使用Simulink 中的Scope模块观察输出信号。
    • 支持PCMCIA卡,适用于便携式电脑实现快速原型

    来源:http://www.hirain.com/Product/Article.asp?ArtClassID=1461

    展开全文
  • windows系统中,cleartype和平滑屏幕字体边缘,这两种技术的区别是啥?
  • Windows to Windows SSH登录

    万次阅读 2017-06-07 11:09:36
    网上一直都是windows to linux或者linux to linux的SSH登录,现记录windows to windows的SSH登录。 SSH 登录原理参考:http://www.cnblogs.com/hukey/p/6248468.html先来个目录,理清思路: - 服务器端PowerShell...
  • Windows CMD常用命令大全(值得收藏)

    万次阅读 多人点赞 2021-08-22 10:45:42
    Windows CMD常用命令大全前言1. 常用命令1.1 cd命令1.2 查看目录文件1.3 创建目录和删除目录1.4 查看本机ip1.5 清除屏幕1.6 复制文件1.7 移动文件1.8 删除文件1.9 ping1.10 taskkill1.11 netstat 查看网络连接状态...
  • 【caffe-Windows】caffe+VS2013+Windows无GPU快速配置教程

    万次阅读 多人点赞 2016-05-09 22:02:48
    首先来一波地址: happynear大神的第三方caffe:...Neil Z大神的第三方caffe:https://initialneil.wordpress.com/2015/01/11/build-caffe-in-windows-with-visual-studio-2013-cu
  • 什么是windows10的Shell Infrastructure Host

    万次阅读 2019-04-28 20:10:14
    windows10操作系统里,shell infrastructure host的可执行镜像为sihost.exe, 是微软操作系统的一部分。 无法在任何文件夹里直接找到这个文件。文件大小为0字节。 要获取更多Jerry的原创文章,请关注公众号"汪...
  • 什么是Windows系统文件?

    千次阅读 2020-09-30 01:30:33
    Technically speaking, a Windows system file is any file with the hidden system attribute turned on. In practice, system files are those files that Windows depends upon to operate properly. These range...
  • windows NT到底是什么

    千次阅读 2017-06-29 18:07:43
    Windows NT(New Technology),新技术视窗操作系统,是微软为高端个人用户和服务器设计的操作系统;发行的版本实际上有好几个,我们为了讨论方便把它们视为一个系统。自从2000年公布的Windows ME终结后,目前所有的...
  • 常说购买服务器,是购买安装linux系统还是windows系统,请问二者有区别 新手入门,常说购买服务器,是购买安装linux 系统还是windows系统,请问二者有区别,是不是自己办公室的电脑分为linux和windows,还是指...
  • 侯捷:搞Windows程序设计我们需要

    千次阅读 热门讨论 2008-06-17 15:18:00
    侯捷:搞Windows程序设计我们需要如果你是一位资深的Windows程序员,相信你对Jeffrey Richter一定不会陌生,是不是有些崇拜和景仰?如果你是一位刚涉足这个领域的Windows程序员,Jeffrey Richter是何许人也许你还...
  • docker在windows上为需要虚拟化。

    千次阅读 2016-05-09 16:07:46
    docker在linux上运行不需要虚拟化,但是,如果在windows上安装运行就需要虚拟化,找到答案了。 Docker 底层的核心技术包括 Linux 上的名字空间( Namespaces) 、 控制组( Control groups) 、 Union ...
  • 什么是 Windows Admin Center?

    千次阅读 2019-09-13 09:00:25
    Windows Admin Center 是一个在本地部署的基于浏览器的新管理工具集,让你能够管理 Windows Server,而无需依赖 Azure 或云。利用 Windows Admin Center,你可以完全控制服务器基础结构的各个方面,对于在未连接到 ...
  • 什么是windows用户账户

    千次阅读 2018-04-18 10:46:44
    但如果你认为Windows用户帐户就有这么一点作用那就错了。下面笔者就简单地向大家介绍一下Windows的的用户账户系统以及基本操作方法。 账户的作用 账户有什么用?按照很多人的理解,账户的存在就是为了防止他人...
  • windows 认证机制

    千次阅读 多人点赞 2020-10-08 23:03:02
    早期SMB协议在网络上传输明文口令,后来出现"LAN Manager Challenge/Response"验证机制,简称LM,由于容易被破解,微软提出了windows NT挑战/响应机制,称之为NTLM。现在已经有了更新的NTLM v2以及Kerberos验证体系...
  • Windows 7

    千次阅读 2010-03-31 19:00:00
    系统简介 系统名称:Windows 7 核心版本号:Windows NT 6.1 开发代号:Blackcomb及Windows Vienna 测试历史: 2007年12月20日 :windows 7 Milestone1(build 6519.1) 2008年12月12日 :windows 7 beta...
  • 关于windows 10 安装

    千次阅读 2016-06-24 23:54:20
    1,Windows 10微软福利啊,免费升级windows 10,赶紧升级下自己的电脑。 微软的升级是有期限的,是7月底。还有 1个多月的时间。 https://www.microsoft.com/zh-cn/windows/windows-10-upgrade 下载一个 exe直接...
  • 本次是在win10环境下的windows container模式中部署mysql镜像 部署步骤如下: 1、在dockerhub上拉取winamd64版本的mysql镜像。 2、启动命令 docker run -p 3307:80 -it --name mysqlContainer -d nanoserver/...
  • Windows内核

    千次阅读 2007-11-04 09:33:00
    每天我们都在使用Windows系统学习、编程、听音乐、玩游戏,Windows的操作想来是很熟练了,可是你又对Windows到底了解多少呢?本系列的目的,就是让你对Windows系统有个更直观、更清楚、更彻底的认识。虽然我们大多数...
  • Windows配置darknet

    千次阅读 热门讨论 2018-12-12 22:05:50
    网上搜索了几篇前辈关于Windows下配置darknet的文章,有三种方式在Windows下配出来darknet,但是我搞得要吐了,还是没配置出来我想要的。不过最终还是搞出来了,做下记录··· 法1:因为darknet的作者是在Linux下...
  • windows install mysql

    千次阅读 2018-07-31 10:26:33
      注意一个环节 这个环节是配置 windows...Windows下如果要启动MySQL服务的话,首先要记住的就是你配置的mysql服务名是啥。。。我一般配成 mysql 1、用管理员打开命令行 , 否则启动服务 报 【拒绝访问】错误...
  • Windows注册表究竟是什么?

    千次阅读 2015-04-22 11:10:15
    注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。 2.存放了什么数据?  (1)软...
  • 这些软件太强了,Windows必装!尤其程序员!

    万次阅读 多人点赞 2020-01-08 01:00:48
    Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的...
  • Windows系统的【Windows照片查看器】没有了 有时候想用【Windows照片查看器】打开图片的时候发现在打开方式里找不到这个功能时候,可能是系统没有这个功能,需要重新安装。献上一段注册表代码。复制到你的xxx.txt...
  • Windows 10 上的 Windows 容器

    千次阅读 2019-08-29 20:04:53
  • Windows 关机或重启的时候出现正在准备Windows,请不要关机 现象描述: 在使用Windows 10的过程中有的时候在关机或重启会出现如下界面: 该过程可能持续几分钟到一小时不等,且有的时候强制下电再上电在开机还会有这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,461
精华内容 46,984
关键字:

windows是啥