第一章
Windows NT系列和Windows 95系列的区别:
Windows API:Windows 应用编程接口是针对Microsoft Windows操作系统家族的系统编程接口,每个操作系统实现了Windows API不同的子集。
Windows API可以分成以下几个大类:
程序和进程的关系:程序是指一个静态的指令序列,而进程则是一个容器,其中包括了当执行一个程序的特定实例时所使用的各种资源。
一个Windows进程由以下几个元素构成:
每个进程也指向它的父进程或者创建者进程,但是,如果父进程推出的话,子进程中的父进程信息并不会被更新,因此,一个进程有可能指向一个已经不存在的父进程。
线程是一个进程内的实体,也是Windows执行此进程时的调度实体。如果没有线程,进程的程序是不可能运行的。
一个线程包括以下内容:
寄存器、栈和私有的存储区域合在一起被称为线程的环境。
纤程与线程:纤程使得一个应用程序可以调度它自己的“线程”的执行过程,而不必依赖于Windows内置的基于优先级的调度机制。纤程常常被称为轻量级的线程。从调度的角度来看,它们对于内核是不可见的,因为它们是在用户模式下实现的。
一个进程内的所有线程可以读或者写另一个线程的内存,然而,一个进程中的线程是不可能直接引用另一个进程的地址空间的。
虚拟地址描述符(VAD,virtual address descriptor)是指一些数据结构,内存管理区利用这些数据结构来记录一个进程所使用的虚拟地址。
Windows实现了一个基于线性地址空间的虚拟内存系统,每个进程感觉自己独立拥有一个很大的私有地址空间。虚拟内存提供了一个内存逻辑视图,它可能并不对应于内存的物理布局。在运行的时候,内存管理器借助于硬件的支持,将虚拟地址翻译或者映射成真正存放数据的物理地址。操作系统通过控制这一层保护或者映射机制,可以保证一个进程不会闯入另一个进程中,也不会改写操作系统的数据。
为了避免用户应用程序访问或者修改关键的操作系统数据,Windows使用了两种处理器访问模式:用户模式和内核模式。用户程序代码运行在用户模式下,而操作系统代码运行在内核模式下。内核模式允许访问所有的系统内存和所有的CPU指令,处理器让操作系统软件比应用软件有更高的特权级,从而为操作系统设计者提供了一层保护的基础,确保一个行为不正常的应用程序不会破坏系统整体的稳定性。
Intel x86处理器的体系结构定义了四种特权级,Windows使用特权级0(或者0环)作为内核模式,特权级3(或者3环)作为用户模式。
虚拟内存中的每一个页面都被标记了处理器必须在什么访问模式下才可以读和/或写该页面,系统空间中的页面只能在内核模式下才可以访问,而用户地址空间中的所有页面在用户模式下都是可以访问的,只读页面在任何模式下都是不可写的。
从用户模式到内核模式的转换本身并不会影响线程的调度——模式转换并不是环境切换。因此对于一个用户线程来说,它的一部分时间在用户模式下执行,令部分时间在内核模式下运行,这是很正常的。
终端服务是指Windows为了在单个系统中支持多个可交互的用户会话而提供的能力。利用Windows终端服务,一个远程用户可以在另一个机器上建立一个会话,并且登陆进去,在该服务器上运行应用程序,服务器把图形界面传送到客户机,客户机把用户的输入传回到服务器上。
在Windows操作系统中,对象指某一个静态定义的对象类型的单个运行时的实例,对象类型包含了一个系统定义的数据类型、在该数据类型的实例上进行操作的一些函数,以及一组对象属性,在Windows中,任何一个进程都是进程对象类型的一个实例。
对象属性是对象中的数据域,每个对象属性定义了对象的一部分状态。
对象和普通数据结构之间最根本的区别:对象的内部结构是被隐藏的,必须调用一个对象服务才能获得对象内部的数据,或者把数据置到对象内部,这样很好的将对象的底层实现和哪些仅仅使用该对象的代码隔离开。
Windows核心安全功能包括
Windows提供了两种访问控制机制
Windows操作系统区别与其他大多数操作系统的特点之一是它的大多数内部文本串是以16为宽度的Unicode字符来存储和处理的。接受字符串参数的Windows函数一般都有两个入口点:一个Unicode和一个ANSI。如果你调用一个Windows的窄字符版本,则输入的字符串参数在被系统处理之前,先转成Unicode,而输出的参数则在被返回给应用程序之前,从Unicode转成ANSI字符串。