Windows Internals学习一:基础概念和术语

基础概念和术语

1:Windows API
Windows应用编程接口(API)是针对Windows操作系统家族的系统编程接口,大致可以分以下几类:
1)基本服务
2)组件服务
3)用户界面服务
4)图形和多媒体服务
5)消息和协作
6)网络
7)Web服务

2:进程、线程和作业
首先区分一下程序和进程:程序是一个静态的指令序列,而进程则是指包含了执行一个程序的特定实例时所用到的各种资源,一般来说,一个Windows进程由以下元素构成:
1)一个私有的虚拟地址空间。
2)一个可执行的程序,它定义了初始的代码和数据,并且被映射到进程的虚拟地址空间。
3)一个已打开的句柄列表,指向各种系统资源(如信号量,通信端口和文件等),进程的所有线程都可以访问这些系统资源。
4)一个被称为访问令牌的安全环境,标识了与该进程关联的用户、安全组和特权。
5)进程ID,唯一标识该进程。
6)至少一个的线程。
每个进程都记录了它的父进程(创建者进程)的ID,当父进程退出时,子进程中记录的父进程信息不会被更新,不过这不是问题,因为任何一个进程都不必依赖于父进程信息的有效性。
查看进程信息的工具有很多,典型的有Windows自带的任务管理器和sysinternals出品的procexp工具。
线程是一个进程内部的实体(如前所述,每个进程都至少包含一个线程),线程包括以下最基本的部件:
1)一组代表处理器状态(CPU寄存器中的内容)的信息。
2)两个栈:分别用于线程和内核模式下和用户模式下执行时。
3)线程局部存储区(TLS:thread-local storage),线程私有,线程运行中调用各个子系统、运行库和DLL都会用到这个区域。
4)线程ID(和进程ID在同一个名字空间中,所有永远不可能重叠)。
5)有时线程也会有它们自己的安全环境。
其中易失的寄存器,栈以及么有存储区合起来被称为线程的环境(context),与Windows所在不计算机的体系结构有关。通过Windows提供的GetThreadContext接口,你可以访问这些线程的环境。
虽然线程有自己的执行环境,但是同一个进程内部的所有线程共享该进程和虚拟地址空间以及其它的属于该进程的资源。这样一个线程就可能读或写另一个线程的内存,但是在进程之间,这种互相访问是不允许的。不过凡事都有例外,当一个进程把它的一部分私有地址空间变为共享内存区(Windows APi中称为文件映射对象),或一个进程有权打开第二个进程,调用一些跨进程的函数时,一个进程内的线程就可以直接引用另一个进程的地址空间。
Windows中没有提供类似于Unix中的进程树的概念,不过Windows对进程模型作了扩展,称为作业(job)。作业对象的主要功能为:使得一组进程被当作一个整体来管理和维护。

3:虚拟内存
Windows实现了一个基于平面(线性)的的地址空间的虚拟内存分系统。每个进程都感觉自己有很大的一块私有地址空间。虚拟内存提供了一个内存逻辑视图,它可能并不对应于内存的物理布局。运行的时候,借助于硬件的支持,内存管理器把虚拟地址映射成真正存放数据的物理地址(一般都会把数据放到磁盘上)。由于有了硬件支持,内存管理器不需要任何的进程或线程的信息。

4:内核模式与用户模式
为了安全,Windows使用内核模式和用户模式两种处理器模式。
用户程序代码运行在用户模式下,操作系统服务(如系统服务和设置驱动程序)运行在内核模式下。在内核模式下,程序可以访问所有的内存和CPU资源。
虽然每个Windows进程都有它自己私有的内存空间,但是,内核模式的操作系统和设置驱动程序共享一个虚拟地址空间。虚拟内存中每一个页面都被标记了处理器必须在什么访问模式下才可能读或写。
当用户程序需要发出一个系统服务调用时,就会从用户模式切换了内核模式下(通过专门的处理器指令完成),将控制权交还给用户线程时,处理器的模式切换回用户模式。用户模式与内核模式之间的转换本身不会影响线程的调用,因为模式转换并不是环境切换。

5:对象和句柄
在Windows中,对象是指一个静态定义的对象类型的单个运行时的实例(如进程、线程、文件等)。对象类型包括了一个系统定义的数据类型、在该数据类型的实例上进行操作的一些函数,以及一组对象属性。
句柄:即指向对象实例的引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值