深入解析Windows操作系统(一)概念和工具

1 关于Windows NT和Windows 95

Windows NT:Microsoft Windows NT(New Technology)是Microsoft在1993年推出的面向工作站、网络服务器和大型计算机的网络操作系统,也可做PC操作系统。它与通信服务紧密集成,基于OS/2 NT基础编制。OS/2由微软和IBM联合研制,分为微软的Microsoft OS/2 NT与IBM的IBM OS/2。协作后来不欢而散,IBM继续向市场提供先前的OS/2版本,微软则把自己的OS/2 NT的名称改为Windows NT,即第一代的Windows NT 3.1。

基于Windows NT的版本包括Windows2000, Windows XP...它将取代Windows 95(以及它的后续版本,包括Windows 98和Windows Me)。

Windows NT和Windows 95的差异:

1. Windows NT支持多处理器系统,Windows 95不支持。

2. Windows NT文件系统支持安全性(比如自主访问控制),Windows 95文件系统不支持。

3. Windows NT是完全32位(现在已是64位)的操作系统——除了为了兼容16位Windows应用程序而提供的支持代码以外,不包含任何16位代码。Windows 95则Windows       3.1 和MS-DOS继承了大量老的16位代码。

4. Windows NT是完全可重入的。Windows 95中有相当部分是不可重入的(主要是从Windows 3.1继承过来的16位代码)。在Windows 95中,一个32位应用程序调用一个系统函数,如果这个系统函数位于不可重入的16位代码中,则该应用程序必须首先获得一个系统全局范围的锁(或互斥体),以阻止其他的线程进入到不可重入的代码中。而且16位应用程序在运行的时候一直占着该锁。结果就是,虽然Windows 95的核心包含了一个抢先式的32位多线程调试器,但是应用程序通常运行在单线程下,因为Windows 95系统的相当部分代码仍然是不可重入的。

5. Windows NT提供了一种选择,让16位应用程序运行在它们自己的地址空间中;而Windows 95则总是在一个共享的地址空间中运行16位应用程序,这些程序相互影响,甚至一个程序破坏(和挂起)别的程序。

6. 在Windows NT上,进程共享的内存,只对那些映射了这一共享内存区的进程才是可见的,而Windows 95上所有的共享内存都是可见的,任何一个进程都可以写这些内存。

7. Windows 95中,有一些关键的操作系统页面在用户模式下是可写的,因此用户程序可以破坏系统,或者使系统崩溃。

 

2 进程、线程和作业

程序是指一个静态的指令序列,而进程则是一个容器,其中包含了当执行一个程序的实例时所用到的各种资源。从最高层次的抽象来看,一个Windows进程是由以下元素构成的。

1 一个私有的虚拟地址空间。

2 一个可执行的程序,它定义了初始的代码和数据,并且被映射到该进程的虚拟地址空间中。

3 一个已打开句柄的列表,这些句柄指向各种系统资源,比如信号量、通信端口和文件,该进程内所有的线程都可以访问这些系统资源。

4 一个被称为访问令牌的安全环境,它标识了与该进程关联的用户、安全组和特权。

5 一个被称为进程ID的唯一标识符。

6 至少一个线程。

每个进程也指向它的父进程或者创建者进程。如果父进程退出的话,子进程中的父进程信息并不会更新,也就是说,一个进程有可能指向一个不存在的父进程。一个进程不依赖于父进程信息的有效性。

线程是一个进程内部的实体,也是Windows执行此进程时的调度实体。线程包括以下一些最基本的部件:

1 一组代表处理器状态的CPU寄存器中的内容;

2 两个栈,一个用于当线程在内核模式下执行的时候,另一个用于线程在用户模式下执行的时候;

3 一个被称为线程局部存储区(TLS,thread-local storage)的私有存储区域,各个子系统、运行库和DLL都会用到该存储区域;

4 一个被称为线程ID(thread ID,线程标识符)的惟一标识符(进程ID和线程ID是在同一个名字空间中生成的,所以它们永远不会重叠);

5 有时候线程也有它们自己的安全环境,如果多线程服务器应用程序要模仿其客户的安全环境,则往往可以利用线程的安全环境。

易失的寄存器、栈和私有存储区域合起来被称为线程的环境(context)。通过Windows提供的GetThreadContext函数,你可以访问到这一体系结构相关的信息(CONTEXT块)。

Windows在进程模型的基础上作了一个扩展,称为作业(job)。作业对象的主要功能是,使得一组进程被当作一个整体来管理和维护。作业对象允许对特定的属性进行控制,也允许对一个进程或所有与作业相差联的进程进行限制。

 

3 WinDbg

配置WinDbg:
     运行WinDbg->菜单->File->Symbol File Path->按照下面的方法设置_NT_SYMBOL_PATH变量:
在弹出的框中输入“C:\MyCodesSymbols; SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols”(按照这样设置,WinDbg将先从本地文件夹C:\MyCodesSymbols中查找Symbol,如果找不到,则自动从MS的Symbol Server上下载Symbols)。另一种做法是从这个Symbol下载地址中http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx,下载相应操作系统所需要的完整的Symbol安装包,并进行安装

使用WinDbg:
     WinDbg提供了图形界面和命令行两种运行方式。这里介绍使用图形界面的WinDbg来调试应用程序:
     File->OpenExecutable->可以选择一个可执行文件进行调试;
     File->Attache to a Process->可以选择一个运行中的进程,并对其进行调试;

     内核调试:File->Kernel Debug->Local,然后点击OK,会提示在WIN7下需要打使用bcdedit -debug on命令,然后重启,就OK了,有关指令的帮助文档,可以参考:Help->Contents->Debugging Tools for Windows->Debuggers->Debugger Reference,该目录下列集了所有指令机器功能说明

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值