windows概念和工具
概念
Windows操作系统版本
基本概念和术语
WindowsAPI
Windows应用程序接口是Windows操作系统家族的用户模式编程接口。其最初本来只是由C语言风格的函数,但是后头随着C语言的不足,一些较新的API使用了不通的API机制:组件对象模型(COM)。COM基于两个基本原则,第一个原则是,客户端可通过接口与对象(也叫做COM服务器对象)通信。第二个原则是,组件的实现可动态加载,无需静态链接到客户端。
WIndows8新增了一种叫做Windows运行时的全新API和支持运行时(有时也简称为WinRT)。从API的角度来看,WinRT是在COM的基础上构建出来的,并对基本的COM基础架构增加了各种扩展。使用C++,C#以及JS编写的应用程序可以非常轻松地使用WinRT API,这要归功于面向这些平台开发的语言项目。
.NET FRAMEWORK是Windows的一部分。
.NET FrameWork包含两个主要组件:
- 公共语言运行时(CLR)。这是.NET的运行时引擎,其中包含的即时编译器可将公共中间语言指令转化为底层硬件CPU机器语言,垃圾回收器、类型验证、代码访问、安全性等内容。
- .NET Framework类库(FCL)。这是一个庞大的类型集合,用于实现客户端和服务器应用程序通常可能需要的功能,例如用户界面服务,网络,数据库访问等。
服务、函数和例程
- WindowsAPI函数。WindowsAPI中已经公开且可以调用的子例程,例如
CreateProcess
- 原生系统服务(系统调用) 操作系统中未公开,但可从用户模式调用的底层服务,例如windows的
CreateProcess
调用NtCreateUserProcess
- 内核支持函数(例程)。在widnows操作系统内部,只能从内核模式调用的子例程。例如,设备驱动程序可以调用
ExAllocatePoolWIthTag
例程从WIndows系统堆(也叫做池)中分配内存。 - Windows服务。由Windows服务控制管理器启动的进程。
- 动态链接库(DLL)
进程
虽然表面上程序和进程看起来很类似,但其实存在本质差异。程序是一种静态指令序列,而进程是一种容器,其中包含了执行程序实例时会用到的一系列资源。从最高层的抽象来看,一个Windows进程可以包含下列元素:
- 一块私有的虚拟地址空间
- 一个可执行的程序
- 一个已打开句柄的列表(句柄会映射至各种系统资源)
- 一个安全上下文(确定与进程相关的安全属性)
- 一个进程ID
- 至少一个执行线程
实验
Windows可以使用自带的任务管理器快速显示系统中的运行的进程列表。
一些进程可以展开,展开后会显示该进程创建的顶级可见窗口。
除此之外,还可以去详细信息里面去查看更为详细的信息。
线程
线程是位于进程中、供Windows调度执行的一种实体。如果没有线程,进程的程序将无法运行。线程包含下列基本要素。
- 代表进程状态的一系列CPU寄存器内容。
- 2个栈,一个用于线程在内核模式下执行,一个用于线程在用户模式下执行。
- 线程局部存储区(TLS),线程私有存储区域,各个子系统,运行库,DLL都会用到这个区域。
- 唯一表示线程的线程ID
- 线程自己的安全环境。
虽然线程有自己的环境,但是同一个进程内的线程共享该进程的虚拟地址空间及其他属于该进程的资源。也就是说线程可以读写进程内其他线程的内存,但是不能跨进程的访问,除非另一个进程把虚拟地址空间变成共享内存区。
作业
WIndows为进程模型提供了一种名为”作业”的扩展。作业对象的主要功能是将一组资源作为整体进行管理和操作。作业对象可用于控制某些属性,并对作业所关联的一个或多个进程加以限制。
虚拟内存
Windows实现了一种基于平面地址空间的虚拟内存系统,让每个进程可以觉得自己能够获得一个极大的私有地址空间。虚拟内存为内存提供的逻辑视图可能与物理布局不一致。在运行时,内存管理器可以对虚拟地址进行转换,即映射至实际存储了数据的物理地址。通过对保护和映射过程加以控制,操作系统即可确保进程之间不会相互影响,也不会复写操作系统的数据。
大多数系统拥有的物理内存比虚拟地址小,所以当内存不够的时候,内存管理器会把内存移动到磁盘,释放内存,让被的进程使用。
在32bit下,4GB的地址空间,其中2GB是内核地址空间,2GB是用户模式地址空间,在起用3gb参数,用户模式地址空间时3GB,内核模式地址空间时1GB
在64bit下地址空间可以达到8T,在Itanium系统上可以达到7T
内核模式和用户模式
为了避免用户程序读写关键操作系统数据,Windows使用了2种处理器访问模式:用户模式,内核模式。用户程序代码运行在用户模式,系统代码运行在内核模式。内核模式允许访问所有系统内存和CPU指令。用内核模式来保护操作系统稳定。
终端服务和多会话
终端服务是指Windows通过一个系统为多个交互式用户会话提供支持的能力。
第一个会话通常是服务会话,即会话0,其中包含系统服务承载进程。在计算机上通过控制台登录建立的第一个会话是会话1,随后可通过远程桌面连接程序(Mstsc.exe)或快速用户切换功能建立更多会话。
Windows客户端版本只允许一个远程用户连接到计算机。(所有Windows客户端版本可支持多个会话,这些会话可在本地通过名为快速用户切换的功能创建,但一次只能使用一个会话。)
Winodws服务器系统更支持两个并发远程连接。
对象和句柄
在Windows操作系统中,内核对象是指某个静态定义的对象类型的单个运行时实例。对象类型由一个系统定义的数据类型、针对该数据类型执行操作的函数,以及一组对象属性构成。就像进程,实际上是Windows底层进程对象类型的实例,文件是文件对象类型的实例。
对象属性是对象中的数据字段,这些字段定义了对象的部分状态。例如,进程类型的对象就会通过属性包含进程ID、基本调度优先级,以及访问令牌对象的指针。对象方法是指操作对象的手段,通常用于读取或者更改对象属性。
安全性
Windows的核心安全功能包括:针对所有可共享对象的自主保护,安全审计,登陆时密码认证,以及一个资源被一个进程释放后,其他进程看不到上一个进程留下的资源。
注册表
注册表其实可以看作是内部数据库,它包含了启动和配置系统必须的信息,控制Windows运行的系统级软件设置,安全数据库,以及要使用的屏幕保护程序等每个用户配置信息。