《深入解析Windows操作系统》读书笔记(1)

 第一章

Windows NT系列和Windows 95系列的区别:

  • Windows NT支持多处理器,Windows 95不支持。
  • Windows NT文件系统支持安全性(例如自主访问控制),Windows 95不支持。
  • Windows NT是完全32位,而Windows 95Windows 3.1MS-DOS继承了大量的16位代码。
  • Windows NT是完全可重入的,Windows 95有一部分是不可重入的。
  • Windows NT可以让16位应用程序运行在它们自己的地址空间中,而Windows 95总是在一个共享的地址空间中运行16Windows应用程序,在这个共享的地址空间中,这些程序相互影响,甚至一个程序破坏(或挂起)别的程序。
  • Windows NT进程共享的内存只对哪些影射了这一共享内存的进程才是可见的,在Windows 95上,所有的共享内存都是可见的,而且在任何一个进程内都可以写这些内存,因此任何一个进程都可以改写或者破坏其他协作进程所使用的共享内存。
  • Windows 95中,有一些关键的操作系统页面在用户模式下是可写的,从而允许一个用户程序破坏系统,或者使系统崩溃。

 

Windows APIWindows 应用编程接口是针对Microsoft Windows操作系统家族的系统编程接口,每个操作系统实现了Windows API不同的子集。

Windows API可以分成以下几个大类:

  • 基本服务
  • 组件服务
  • 用户界面服务
  • 图形和多媒体服务
  • 消息和协作
  • 网络
  • Web服务

 

程序和进程的关系:程序是指一个静态的指令序列,而进程则是一个容器,其中包括了当执行一个程序的特定实例时所使用的各种资源。

一个Windows进程由以下几个元素构成:

  • 一个私有的虚拟地址空间
  • 一个可执行的程序
  • 一个已打开句柄的列表,这些句柄指向各种系统资源
  • 一个被称为访问令牌的安全环境,它标识了与该进程相关的用户、安全组和特权。
  • 一个被称为进程ID的唯一标识符
  • 至少一个执行线程

 

每个进程也指向它的父进程或者创建者进程,但是,如果父进程推出的话,子进程中的父进程信息并不会被更新,因此,一个进程有可能指向一个已经不存在的父进程。

 

线程是一个进程内的实体,也是Windows执行此进程时的调度实体。如果没有线程,进程的程序是不可能运行的。

一个线程包括以下内容:

  • 一组代表处理器状态的CPU寄存器中的内存
  • 两个栈,一个用于当前线程在内核模式下执行的时候,一个用户线程在用户模式下执行的时候。
  • 一个被称为线程局部存储区(TLS)的私有存储区域,各个子系统、运行库和DLL都会用到该存储区域。
  • 一个被称为线程ID的唯一标识符
  • 有时线程也有他们自己的安全环境,如果多线程服务器应用程要模拟其客户的安全环境,则往往可以利用线程的安全环境。

寄存器、栈和私有的存储区域合在一起被称为线程的环境。

 

纤程与线程:纤程使得一个应用程序可以调度它自己的“线程”的执行过程,而不必依赖于Windows内置的基于优先级的调度机制。纤程常常被称为轻量级的线程。从调度的角度来看,它们对于内核是不可见的,因为它们是在用户模式下实现的。

 

一个进程内的所有线程可以读或者写另一个线程的内存,然而,一个进程中的线程是不可能直接引用另一个进程的地址空间的。

 

虚拟地址描述符(VADvirtual 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字符串。

 

posted @ 2008-08-31 15:11  李潘  阅读(1535)  评论(0编辑  收藏  举报