云顶娱乐平台 5

云顶娱乐平台:深入解析Windows操作系统笔记——CH1概念和术语

既然Windows API编程是与Windows操作系统进行交互,所以就必须对Windows操作系统如何运行应用程序的原理搞清楚。

1.3 挖掘Windows内部机理

主要介绍了一些调试工具,和Windows SDK

云顶娱乐平台 1

3、内核对象:

1.2.3.2 线程

线程是在进程中的实体,也是Windows执行此进程的调度实体,没有线程进程是不可能运行的。

线程的基本部件:

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

n  2个栈,一个用于线程在内核模式下执行,一个用于线程在用户模式下执行

n  线程局部存储区(TLS),线程私有存储区域,各个子系统,运行库,DLL都会用到这个区域

n  唯一表示线程的线程ID

n  线程自己的安全环境

易失的寄存器,栈,私有存储区域合起来称为线程的环境。

虽然线程有自己的环境,但是同一个进程内的线程共享该进程的虚拟地址空间及其他属于该进程的资源。

也就是说线程可以读写进程内其他线程的内存,但是不能跨进程的访问,除非另外一个进程把虚拟地址空间变成共享内存区。

2、内核空间和用户空间:

1.1操作系统版本

Windows操作系统版本已经很多了

云顶娱乐平台 2

1、保护模式

1.2.2 服务、函数和例程

主要介绍一些书中提到的专业术语:

Windows
API函数
:主要是指已经被文档化的可调用的子例程


原生的系统服务:指操作系统中未文档化的,可以在用户模式下调用的底层服务,如NtCreateProcess

云顶娱乐平台,内核支持函数(例程):值操作系统内部且只能被内核调用的子例程

Windows服务:由Windows服务管理器启动的进程(在注册表中,认为驱动定于为服务,但是书中并不这样引用)

DLL云顶娱乐平台:深入解析Windows操作系统笔记——CH1概念和术语。:一组可调用的子例程,合起来被链接成一个二进制文件,应用程序可以动态加载这些二进制文件。

    好了,现在知道在保护模式下编写程序访问的是4GB的虚拟内存,但是这4GB空间也不是全部给应用程序用的,操作系统也要使用,所以Windows规定把4GB空间分成两半,低2GB(0—0x7fffffff)空间用户可以使用,而高2GB空间(0x80000000—0xffffffff)用户不能使用,留给操作系统。所以这就有了用户空间和内核空间的区别。而这个规定其实也是用了CPU的特权级的功能:内核空间是0环,用户空间在3环,所以这就在CPU级别把内核和用户程序分割开了,目的就是确保用户程序不能骚扰内核,从而保证系统稳定。

参考

 

 

. 概念和工具 本章主要介绍 Windows
操作系统的关键概念和术语 1. 概念和工具 … 1 1.1 操作系统版本 … 1 1.2
基础概念和术语 … 2 1.2.1Window…

  
但现在问题又来了,内核空间用户不能访问,那么操作系统的各种功能我们怎么调用呢?比如往屏幕上画一条线,在实模式下很简单,就是在显存里面写一排01010101就可以了,但是在实模式下我们只能访问2GB用户空间,显存在哪里都不知道,这怎么写啊?很容易想到的就是操作系统帮我们找显存的位置,我们只要调用操作系统的相关函数就可以了。但是操作系统在高2GB的内核空间中,我们还是不能直接使用。现在操作系统既要给我们用,又不能让我们直接用,那怎么办呢,微软的工程师想出的一个办法就是给我们一个编号,也就是句柄(HANDLE),让我们要用内核什么功能就用句柄来用,这样就不必让我们知道具体的内核地址了。从而内核对象也就自然产生,Windows对硬件的所有操作都做成一个一个内核对象,我们要用的时候就申请这个对象,然后Windows给我们一个句柄,Windows内部计数器加1,我们不用了就关闭句柄,Windows内部计数器减1,当计数器为0的时候,Windows知道这个内核对象已经不用了,所以从真实物理内存中销毁。对于我们应用程序员来说,我们要做的事情就是申请内核对象,拿到句柄,操作句柄,销毁句柄。而这个流程也就是和Windows交互的流程,也就是所谓Windows编程的本质。

1.2.3.4 作业

作业是指,一组进程当一个整体来维护管理。

     操作系统是依附于cpu硬件的,所以操作系统所具备的功能也是cpu所给予的。Intel的32位CPU有两种主要的模式:实模式和保护模式。Dos操作系统就是运行在实模式下,而现代的操作系统都是充分利用了保护模式,从而使系统大大的安全稳定了很多。现代计算机都是用的冯诺依曼体系,其核心就是内存。所以CPU内部有寄存器,外部有内存,所以所谓的实模式和保护模式其本质就是对内存的访问形式不同。实模式就是对内存的直接访问,比如要在屏幕上显示一个数字就直接往显存中写就可以了,dos下编程就是这样的。但这有一个最大的问题就是不安全,任何程序可以随意访问内存,很容易就和操作系统的地址冲突,所以玩过dos的人都知道电脑是很容易死机的。为了解决这个问题,Intel在386以后的CPU都提供了保护模式。这种模式最重要的一个应用就是虚拟内存地址,大家都知道32位的CPU可以寻址的范围是4GB,在虚拟内存中给每一个进程都分配了4GB的虚拟地址。如果同时运行10个进程就要有10个4GB的虚拟内存,那问题来了,哪有这么多的内存呢?呵呵,所以这是虚拟内存嘛,不是真正的物理内存。只是面对进程,让程序员可以使用的内存地址,比如 int * p=new int 这句话是向电脑要一个4字节的内存,地址存在p里面,要是在实模式下p里面就是真正的物理地址,但是在保护模式下,p里面存的只是一个虚拟地址,至于真正的物理地址是多少是不允许程序员知道的,当windows拿到p后会把p里面的虚拟地址映射到一个物理地址中去的,而这一个过程是黑箱操作,普通的应用程序是不允许知道的。

1.2.3.3 虚拟地址描述符

虚拟地址描述符是一些数据结构,内存管理器使用这个数据结构来记录一个进程所使用的虚拟地址。

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之上。

云顶娱乐平台 3

而WinFX就是新的Windows
API(为vista特别设计的),也提供了托管代码的功能,但是缺容易混淆,后来改为.Net FrameWork 3。(关于WinFX的介绍在第6版中已经没有了)。

.NET FrameWork是对API的一种扩展。

1.2.10 UNICODE

1.2.3 进程、线程和作业

1.2.3.1 进程

程序是指一个静态的指令序列,而进程是程序的实例化,拥有各种资源。一个进程由以下元素组成:

n  私有的虚拟地址空间

n  程序定义的代码和数据,被映射到进程的虚拟地址空间中

n  一个已打开的句柄列表,这些句柄指向各种资源

n  称为访问令牌的安全环境,标示了改进程关联的用户,安全组和特权

n  进程ID,可以唯一识别一个进程

n  至少一个线程

每个进程都指向一个父进程或者创建者进程,但是如果父进程被关闭,进程就会指向一个不存在的父进程。

1.2.4 虚拟内存

Windows
实现了平面地址空间的虚拟内存系统,每个进程感觉自己独立拥有一个很大的私有地址空间。虚拟内存提供了内存逻辑视图,并不对应于内存物理布局。运行的时候,内存管理器借助硬件支持,讲虚拟地址翻译成真正的物理地址。

进程之间就隔离了,一个进程不会访问到另外一个进程的东西。

大多数系统拥有的物理内存比虚拟地址小,所以当内存不够的时候,内存管理器会把内存移动到磁盘,释放内存,让被的进程使用。

在32bit下,4GB的地址空间,其中2GB是内核地址空间,2GB是用户模式地址空间,在起用3gb参数,用户模式地址空间时3GB,内核模式地址空间时1GB

还有AWE地址窗口扩展,可以让32bit系统访问64GB的内存。缺点是程序员自己解决映射关系。

云顶娱乐平台 4

在64bit下地址空间可以达到8T,在Itanium系统上可以达到7T

云顶娱乐平台 5

1.2.8 安全性

Windows的核心安全功能包含:针对所有可共享对象的自主保护,安全审计,登录时密码认证,以及一个资源被一个进程释放后,其他进程看不到上一个进程留下的资源。

1.概念和工具

本章主要介绍Windows操作系统的关键概念和术语

1.概念和工具… 1

1.1操作系统版本… 1

1.2基础概念和术语… 2

1.2.1Windows
API2

1.2.2 服务、函数和例程… 3

1.2.3 进程、线程和作业… 4

1.2.3.1 进程… 4

1.2.3.2 线程… 4

1.2.3.3 虚拟地址描述符… 4

1.2.3.4 作业… 4

1.2.4 虚拟内存… 5

1.2.5 内核模式和用户模式…
5

1.2.6 终端服务及多个会话… 6

1.2.7 对象和句柄… 6

1.2.8 安全性… 6

1.2.9 注册表… 6

1.2.10 UNICODE.
6

1.3 挖掘Windows内部机理…
7

参考… 7

 

1.2      基础概念和术语

1.2.5 内核模式和用户模式

为了避免用户程序读写关键操作系统数据,Windows使用了2中处理器访问模式:用户模式,内核模式。用户程序代码运行在用户模式,系统代码运行在内核模式。内核模式允许访问所有系统内存和cpu指令。用内核模式来保护操作系统稳定。

虽然Windows
进程都有自己的地址空间,但是内核模式的操作系统和驱动都是使用同一个虚拟地址空间。

系统空间中的页面只有在内核模式下可以访问,用户空间中的页面在用户模式下都可以访问。

内核模式下运行的代码可以访问所有系统空间中的内存。

因为进入内核模式就缺少保护,所以第三方设备驱动程序加载时要小心。

当用户模式调用系统服务的时候,会切换到内核模式下,当要将cpu控制权返回给用户的时候要先切换到用户模式。

1.2.6 终端服务及多个会话

1.2.7 对象和句柄

内核对象是某一个静态定义的对象类型的单个运行时的实例。对象类型包含了一个系统定义的数据类型,在该对象上可用的函数,及一组对象属性。如所有的进程是进程对象类型的一个实例。

对象和普通数据结构的区别是,对象的内部结构是被隐藏的。必须要调用对象服务才能读写对象内部数据。

对象技术的实现了操作系统4个系统任务:

n  提供了可供人读的名称

n  进程间共享资源和数据

n  保护资源,避免未授权访问

n  引用跟踪,如果不再使用可以释放掉。

1.2.9 注册表

注册表是系统数据库,包含了引道和配置系统所有的信息。也反映了内存中易失的数据窗口,比如当前的硬件状态,性能计数器。