深入解析Windows操作系统笔记——CH1概念和术语
1.概念和工具
本章主要介绍Windows操作系统的关键概念和术语
1.1操作系统版本
Windows操作系统版本已经很多了
1.2 基础概念和术语
1.2.1 Windows API
Windows API(应用程序接口),是针对Windows操作系统的系统编程接口。
Windows API有几个分类:
n 基本服务
n 组件服务
n 用户界面服务
n 图形和多媒体服务
n 消息和协议
n Web服务
本书重点介绍基本服务(比如,进程和线程,内存管理,I/O,安全性)。
关于.Net和WinFX
.NET FrameWork由框架类库(FCL)和一个提供托管代码运行环境的(CLR)组成。
CLR提供即时编译,类型检查,垃圾回收和代码访问安全性等。
托管代码:在最初编译时,将源代码编译成中间代码(IL),然后在运行时,使用运行库编译器在受控的环境下,将中间代码编译成机器码。
在微软体系下,认为不是托管代码就是非托管代码。
CLR是一个典型的COM服务器,建立在Windows API之上。
而WinFX就是新的Windows API(为vista特别设计的),也提供了托管代码的功能,但是缺容易混淆,后来改为.Net FrameWork 3。(关于WinFX的介绍在第6版中已经没有了)。
.NET FrameWork是对API的一种扩展。
1.2.2 服务、函数和例程
主要介绍一些书中提到的专业术语:
n Windows API函数:主要是指已经被文档化的可调用的子例程
n 原生的系统服务:指操作系统中未文档化的,可以在用户模式下调用的底层服务,如NtCreateProcess
n 内核支持函数(例程):值操作系统内部且只能被内核调用的子例程
n Windows服务:由Windows服务管理器启动的进程(在注册表中,认为驱动定于为服务,但是书中并不这样引用)
n DLL:一组可调用的子例程,合起来被链接成一个二进制文件,应用程序可以动态加载这些二进制文件。
1.2.3 进程、线程和作业
1.2.3.1 进程
程序是指一个静态的指令序列,而进程是程序的实例化,拥有各种资源。一个进程由以下元素组成:
n 私有的虚拟地址空间
n 程序定义的代码和数据,被映射到进程的虚拟地址空间中
n 一个已打开的句柄列表,这些句柄指向各种资源
n 称为访问令牌的安全环境,标示了改进程关联的用户,安全组和特权
n 进程ID,可以唯一识别一个进程
n 至少一个线程
每个进程都指向一个父进程或者创建者进程,但是如果父进程被关闭,进程就会指向一个不存在的父进程。
1.2.3.2 线程
线程是在进程中的实体,也是Windows执行此进程的调度实体,没有线程进程是不可能运行的。
线程的基本部件:
n 一组代表处理器状态的CPU寄存器中的内容
n 2个栈,一个用于线程在内核模式下执行,一个用于线程在用户模式下执行
n 线程局部存储区(TLS),线程私有存储区域,各个子系统,运行库,DLL都会用到这个区域
n 唯一表示线程的线程ID
n 线程自己的安全环境
易失的寄存器,栈,私有存储区域合起来称为线程的环境。
虽然线程有自己的环境,但是同一个进程内的线程共享该进程的虚拟地址空间及其他属于该进程的资源。
也就是说线程可以读写进程内其他线程的内存,但是不能跨进程的访问,除非另外一个进程把虚拟地址空间变成共享内存区。
1.2.3.3 虚拟地址描述符
虚拟地址描述符是一些数据结构,内存管理器使用这个数据结构来记录一个进程所使用的虚拟地址。
1.2.3.4 作业
作业是指,一组进程当一个整体来维护管理。
1.2.4 虚拟内存
Windows 实现了平面地址空间的虚拟内存系统,每个进程感觉自己独立拥有一个很大的私有地址空间。虚拟内存提供了内存逻辑视图,并不对应于内存物理布局。运行的时候,内存管理器借助硬件支持,讲虚拟地址翻译成真正的物理地址。
进程之间就隔离了,一个进程不会访问到另外一个进程的东西。
大多数系统拥有的物理内存比虚拟地址小,所以当内存不够的时候,内存管理器会把内存移动到磁盘,释放内存,让被的进程使用。
在32bit下,4GB的地址空间,其中2GB是内核地址空间,2GB是用户模式地址空间,在起用3gb参数,用户模式地址空间时3GB,内核模式地址空间时1GB
还有AWE地址窗口扩展,可以让32bit系统访问64GB的内存。缺点是程序员自己解决映射关系。
在64bit下地址空间可以达到8T,在Itanium系统上可以达到7T
1.2.5 内核模式和用户模式
为了避免用户程序读写关键操作系统数据,Windows使用了2中处理器访问模式:用户模式,内核模式。用户程序代码运行在用户模式,系统代码运行在内核模式。内核模式允许访问所有系统内存和cpu指令。用内核模式来保护操作系统稳定。
虽然Windows 进程都有自己的地址空间,但是内核模式的操作系统和驱动都是使用同一个虚拟地址空间。
系统空间中的页面只有在内核模式下可以访问,用户空间中的页面在用户模式下都可以访问。
内核模式下运行的代码可以访问所有系统空间中的内存。
因为进入内核模式就缺少保护,所以第三方设备驱动程序加载时要小心。
当用户模式调用系统服务的时候,会切换到内核模式下,当要将cpu控制权返回给用户的时候要先切换到用户模式。
1.2.6 终端服务及多个会话
略
1.2.7 对象和句柄
内核对象是某一个静态定义的对象类型的单个运行时的实例。对象类型包含了一个系统定义的数据类型,在该对象上可用的函数,及一组对象属性。如所有的进程是进程对象类型的一个实例。
对象和普通数据结构的区别是,对象的内部结构是被隐藏的。必须要调用对象服务才能读写对象内部数据。
对象技术的实现了操作系统4个系统任务:
n 提供了可供人读的名称
n 进程间共享资源和数据
n 保护资源,避免未授权访问
n 引用跟踪,如果不再使用可以释放掉。
1.2.8 安全性
Windows的核心安全功能包含:针对所有可共享对象的自主保护,安全审计,登录时密码认证,以及一个资源被一个进程释放后,其他进程看不到上一个进程留下的资源。
1.2.9 注册表
注册表是系统数据库,包含了引道和配置系统所有的信息。也反映了内存中易失的数据窗口,比如当前的硬件状态,性能计数器。
1.2.10 UNICODE
略
1.3 挖掘Windows内部机理
主要介绍了一些调试工具,和Windows SDK
参考
http://zh.wikipedia.org/wiki/WinFX
http://en.wikipedia.org/wiki/Framework_Class_Library
http://zh.wikipedia.org/wiki/托管代码
http://zh.wikipedia.org/wiki/CLR