




已阅读5页,还剩81页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本章主要介绍Windows2000 NT的操作系统模型 进程管理 线程管理 文件管理 内存管理和设备管理 初步揭开Windows2000 NT操作系统工作的基本原理 第九章Windows操作系统 第九章Windows操作系统 9 1Windows2000 NT操作系统简介9 2Windows2000 NT进程管理9 3Windows2000 NT中线程的实现9 4Windows2000 NT进程互斥和同步的实现9 5Windows2000 NT中进程间通信9 6Windows2000 NT内存管理9 7Windows2000 NT设备管理9 8Windows2000 NT文件系统 9 1Windows2000 NT操作系统简介 9 1 1Windows2000 NT操作系统模型核心态 管态 当操作系统状态为核心态时 CPU处于特权模式 可以执行任何指令 并且可以改变状态 用户态 目态 CPU处于非特权 较低特权级 模式 只能执行非特权指令 一般来说 操作系统中那些至关重要的代码都运行在核心态 而用户程序一般都运行在用户态 当用户程序使用特权指令时 操作系统就能借助硬件提供的保护机制剥夺用户程序的控制权并做出相应处理 Windows2000 NT体系结构 9 1 2Windows2000 NT的构成 用户进程系统支持进程服务进程环境子系统用户应用程序微内核核心态组件执行体硬件抽象层设备驱动程序图形引擎 9 1 3Windows2000 NT可移植性的实现 提供操作系统可移植性的两个关键组件是HAL和内核Windows2000 NT用两种方法实现了对硬件结构和平台的可移植性 首先是一个分层的设计 依赖于处理机体系结构或平台的系统底层部分被隔离在单独的模块之中 系统的高层可以被屏蔽在千差万别的硬件平台之外 第二种方法是Windows2000 NT几乎全部使用高级语言写成 执行体 实用程序和设备驱动程序都是用C语言编写的 图形子系统部分和用户界面是用C 十编写的 只有那些必须和系统硬件直接通信的操作系统部分 如中断陷阱处理程序 或性能极度敏感 如描述表切换 的部分是用汇编语言编写的 9 1 4处理机和集群支持机制 Windows2000 NT支持多处理机系统Windows2000 NT能在任何可用的处理机上运行 并且其完全可重入的代码可以同时在多个处理机上运行 多处理机系统的一个关键问题是可伸缩性 Windows2000 NT系列操作系统集成了集群服务MSCS 主要支持数据库 消息 文件和打印服务 MSCS基于非单点失效结构 shared nothing 集群模型 在任何时刻集群中的任何资源都只能由一个服务器使用 不可以共享 9 1 5内核 内核执行Windows2000 NT中最基本的操作 主要提供下列功能 1 线程安排和调度 2 陷阱处理和异常调度 3 中断处理和调度 4 多处理机同步 5 供执行体使用的基本内核对象 在某些情况下可以导出到用户态 9 1 6硬件抽象层 Windows2000 NT设计的一个至关重要的方面就是在多种硬件平台上的可移植性 硬件抽象层 HAL 就是使这种可移植性成为可能的关键部分 HAL是一个可加载的核心态模块Hal dll 它为运行在Windows2000 NT上的硬件平台提供低级接口 HAL隐藏各种与硬件有关的细节 例如I O接口 中断控制器以及多处理机通信机制等任何体系结构专用的和依赖于计算机平台的函数 9 1 7执行体 1 执行体包括的函数类型 1 从用户态导出并且可以调用的函数 这些函数的接口在Ntdll dll通过Win32API或一些其他的环境子系统可以对它们进行访问 2 从用户态导出并且可以调用的函数 但当前通过任何文档化的子系统函数都不能使用 3 在Windows2000 NTDDK中已经导出并且文档化的核心态调用的函数 4 在核心态组件中调用但没有文档化的函数 例如 在执行体内部使用的内部支持例程 5 组件内部的函数 2 执行体包含的组件 1 进程和线程管理器 2 虚拟内存管理器 3 安全访问监控程序 4 I O管理程序 5 高速缓存 Cache 管理器 3 支持函数提供的功能执行体还包括四组主要的支持函数 它们由上面列出的执行体组件使用 其中大约有三分之一的支持函数在DDK中已经文档化 这四类支持函数提供下面的功能 1 对象管理程序 创建 管理以及删除Windows2000 NT的执行体对象和用于代表操作系统资源的抽象数据类型 例如进程 线程和各种同步对象 2 本地过程调用 LocalProcedureCall LPC 机制 在同一台计算机上的客户进程和服务进程之间传递信息 3 一组广泛的公用运行时函数 例如字符串处理 算术运算 数据类型转换和完全结构处理 4 执行体支持例程 例如系统内存分配 页交换区和非页交换区 互锁内存访问和两种特殊类型的同步对象 资源和快速互斥体 9 1 8设备驱动程序 设备驱动程序是可加载的核心态模块 它们是I O系统和相关硬件之间的接口 Windows2000 NT上的设备驱动程序不直接操作硬件 而是调用HAL功能作为与硬件的接口 Windows2000 NT中有以下几种类型的设备驱动程序 1 硬件设备驱动程序 操作硬件 它将输出写入物理设备或网络 并从物理设备或网络获得输入 2 文件系统驱动程序 接受面向文件的I O请求 并把它们转化为对特殊设备的I O请求 3 过滤器驱动程序 截取I O并在传递I O到下一层之前执行某些特定处理 9 1 9环境子系统和子系统动态链接库 Windows2000 NT有三种环境子系统 POSIX OS 2和Win32 OS 2只能用于X86系统 在这三个子系统中 Win32子系统比较特殊 如果没有它 Windows2000 NT就不能运行 其他两个子系统只是在需要时才被启动 而Win32子系统必须始终处于运行状态 9 1 10系统支持进程 空闲进程 对于每个CPU 空闲进程都包含一个相应的线程 用来统计空闲CPU时间 系统进程 包含核心态系统线程 会话管理器SMSS Win32子系统CSRSS 登录进程WINLOGON 本地安全身份验证服务器LSASS 服务控制器SERVICES及其相关的服务进程 9 1 11安全考虑 Windows2000 NT提供了很强的系统恢复能力 1 当一个系统进行应用程序的安装时 Windows2000 NT利用SystemRestore设置恢复点 一旦用户决定恢复系统就从恢复点开始恢复系统原来的状态 2 Windows2000 NT的可靠性还体现在驱动器的回退 保护 最后一次正确配置 LastknownGood 等方面 在进行驱动安装时 如果不希望保留安装之后的系统状态 可以进行保护 回到最后一次正确配置状态 3 而且Windows2000 NT也提供了良好的服务可靠性 在Windows2000 NT的任务管理器上至少有4个Svchost exe进程 两个运行在Localsystem 两个运行在新的服务层网络服务层和本地服务层上 新的服务层的引入改善了系统的安全性 不同的层次有不同的权限 9 2Windows2000 NT进程管理 在Windows2000 NT中系统资源分配的基本单位是进程 Windows2000 NT中的每一个进程和每一个线程都是一个对象 进程和线程对象体由进程管理器管理 对象头由对象管理器管理 进程和线程对象在内核提供的内核进程对象和内核线程对象基础上实现 9 2 1Windows2000 NT中与进程和线程管理密切相关的对象和对象管理器9 2 2Windows2000 NT中进程的实现 9 2 1Windows2000 NT中与进程和线程管理密切相关的对象和对象管理器 对象管理器是一个用于创建 删除 保护和跟踪对象的执行体组件 对象管理器提供使用系统资源的公共 一致的机制 把对象保护孤立到操作系统的一个位置 实现安全保护 它提供了一种机制来控制进程使用对象 实现了资源的访问控制 对象管理器有一套对象命名方案和统一的保留规则 能够容易地操纵现有对象 同时 对象管理器能支持各种操作系统环境的需要 Windows2000 NT中有两种类型的对象 执行体对象和内核对象 每一个对象都有一个对象头和一个对象体 对象管理器控制对象头 各执行体组件控制它们自己创建的对象类型的对象体 另外 每一个对象头都指向打开该对象的进程的列表 同时还有一个叫做类型对象的特殊对象 它包含的信息对每一个对象的实例是公用的 9 2 2Windows2000 NT中进程的实现 在Windows2000 NT中 每个进程由一个进程对象结构表现 并有一个执行现场 executioncontext 进程对象结构包括对象类型 对象体属性 服务三部分 进程执行现场包括进程的虚址空间 该进程可见的资源集合 用该进程的对象表表现 该进程的所有线程的集合 也在该进程的对象表中 1 POSIX应用进程间的父子关系 2 进程组成 在Windows2000 NT中 一个进程由以下几部分组成 1 一个可执行程序 2 一个由该进程专用的地址空间 它是该进程可使用的虚存地址的集合 3 系统资源 例如信号量 通信端口 文件等 它们是程序执行时 由操作系统分配给该进程的 系统资源体现为对象表 每个进程有一个对象表 4 至少有一个线程 没有线程 Windows2000 NT进程的程序就无法运行 一个进程可以有许多线程 3 Win32中的执行体进程块 Win32中的执行体进程块中的主要内容包括 1 线程块列表 描述属于该进程的所有线程的相关信息 以便线程调度器进行处理机资源的分配和回收 2 虚拟地址空间描述表 VirtualAddressSpaceDescriptors VAD 描述进程地址空间各部分属性 用于虚拟存储管理 3 对象句柄列表 当进程创建或打开一个对象时 就会得到一个代表该对象的句柄 用于对象访问 对象句柄列表维护该进程正在访问的所有对象列表 9 3Windows2000 NT中线程的实现 9 3 1Windows2000 NT线程的组成9 3 2Windows2000 NT中与线程相关的系统调用9 3 3Windows2000 NT中线程的状态9 3 4Windows2000 NT的线程调度 9 3 1Windows2000 NT线程的组成 在Windows2000 NT中 一个线程由以下几部分组成 1 一个惟一的标识符 称为客户ID clientID 2 表示CPU状态的一组易变 volatile 寄存器的内容 易变是指线程切换后这些寄存器的内容会被后来运行的线程覆盖 该线程再继续执行时需要恢复这些寄存器的内容 3 两个栈 一个是线程在用户态下执行时使用的用户栈 另一个是线程在核心态下执行时使用的核心栈 4 一个由该线程专用的存储区域 供保护子系统 动态连接库等使用易变寄存器 栈 指针 和专用存储区域 称为该线程的现场 每个线程有一个线程现场 存储在线程对象体中 线程现场的组成随CPU不同而不同 9 3 2Windows2000 NT中与线程相关的系统调用 在Windows2000 NT中 用户可通过系统调用CreateThread或Createprocess完成线程创建 在调用进程的地址空间上创建一个线程 以执行指定的函数 返回值为所创建线程的句柄 调用ExitThread结束当前线程 调用SuspendThread来挂起线程 调用ResumeThread激活线程 与线程调度相关的API函数 1 Get SetPriorityClass读取或设置一个进程的基本优先级类型 2 Get SetThreadPriority读取或设置一个线程相对优先级 3 Get SetProcessAffinityMask读取或设置一个进程的亲合处理器集合 4 SetThreadAffinityMask设置线程的亲合处理器集合 5 Get SetThreadPriorityBoost读取或设置当前线程的缺省优先级提升控制 6 SetThreadIdealProcessor设置一个特定线程的首选处理器 7 Get SetProcessPriorityBoost读取或设置当前进程的缺省优先级提升控制 8 SwitchToThread转换到另一个线程 该线程如果存在则可以运行 使得当前线程放弃一个或多个时间配额的运行 9 Sleep使当前线程等待指定的一段时间 10 SleepEx使当前线程进入等待状态 直到I O处理完成 有一个与该线程相关的APC或经过一段指定的时间 11 GetThreadTime返回线程得到的CPU时间的数量 9 3 3Windows2000 NT中线程的状态 Windows2000 NT中线程上下文主要包括 寄存器 线程环境块 核心栈和用户栈 Windows2000 NT有7种线程状态 初始化状态 就绪状态 备用状态 运行状态 等待状态 转换状态 终止状态 9 3 4Windows2000 NT的线程调度 Windows2000 NT在内核中实现它的线程调度代码 这些代码分布在内核中与调度相关事件出现的位置上 并不存在一个单独的线程调度模块 内核中完成线程调度功能的这些函数统称为内核调度器 Kernel sdispatcher 线程调度出现在DPC 线程调度中断优先级中 线程调度的触发事件有以下四种 1 一个线程进入就绪状态 如一个刚创建的新线程或一个刚刚结束等待状态的线程 2 一个线程由于时间配额用完而从运行状态转入终止状态或等待状态 3 一个线程由于调用系统服务而改变优先级或被Windows2000 NT系统本身改变其优先级 4 一个正在运行的线程改变了它的亲合处理器集合 9 4Windows2000 NT进程互斥和同步的实现 在Windows2000 NT中提供了互斥对象 信号量对象和事件对象三种同步对象和相应的系统调用 用于进程和线程的同步 这些同步对象都有一个用户指定的对象名称 不同进程中用同样的对象名称来创建或打开对象 从而获得该对象在本进程的句柄 从本质上讲 这组同步对象的功能是相同的 它们的区别在于适用场合和效率会有所不同 除上述三种同步对象外 Windows2000 NT还提供了一些与进程同步相关的机制 如临界区对象和互锁变量访问API等 9 5Windows2000 NT中进程间通信 进程间通信 Inter ProcessCommunication IPC 要解决的问题是进程间的信息交流 这种信息交流的量可大可小 按通信量的大小 我们可把进程间通信分成低级通信和高级通信 按通信过程中是否有第三方作为中转 我们可把进程间通信分成直接通信和间接通信 进程间通信还要考虑到通信过程中的一些其他特征 如通信链路特征 数据格式和收发双方的同步方式等 对进程间通信模式有影响的通信链路特征包括 链路是点对点还是广播链路 通信链路是否带缓冲区 链路是单向还是双向等 数据格式主要分成字节流和报文两类 收发操作的同步方式可分成阻塞和不阻塞两种 9 5 1Windows2000 NT的信号 Windows2000 NT有两组与信号相关的系统调用 分别处理不同的信号 1 SetconsoleCtrlHandler和GenerateConsoleCtrlEventSetconsoleCtrlHandler可定义或取消本进程的信号处理例程列表中的用户定义例程 GenerateConsoleCtrlEvent可发送信号到与本进程共享同一控制台的控制台进程组 这一组系统调用处理的信号包括以下 种信号 1 CTRL C EVENT 收到CTRL C信号 2 CTRL BREAK EVENT 收到CTRL BREAK信号 3 CTRL CLOSE EVENT 当用户关闭控制台时系统向该控制台的所有进程发送的控制台关闭信号 4 CTRL LOGOFF EVENT 用户退出系统时系统向所有控制台进程发送的退出信号 5 CTRL SHUTDOWN EVENT 系统关闭时系统向所有控制台进程发送的关机信号 2 signal和raise signal用于设置中断信号处理例程 raise用于发送信号 这一组系统调用处理的信号包括下列的 种信号 这 种信号是与传统的UNIX系统相同的 而前面一组系统调用处理的 种信号是Windows2000 NT中特有的 这六中信号是 1 SIGABRT 非正常终止 2 SIGFPE 浮点计算错误 3 SIGILL 非法指令 4 SIGINT CTRL C信号 对 in32无效 5 SIGSEGV 非法存储访问 6 SIGTERM 终止请求 9 5 2Windows2000 NT基于文件映射的共享存储区 共享存储区 sharedmemory 可用于进程间的大数据量通信 进行通信的各进程可以任意读写共享存储区 也可在共享存储区上使用任意数据结构 在使用共享存储区时 需要进程互斥和同步机制的辅助来确保数据一致性 Windows2000 NT采用文件映射 filemapping 机制来实现共享存储区 用户进程可以将整个文件映射为进程虚拟地址空间的一部分来加以访问 以下的系统调用与共享存储区的使用相关 1 CreateFileMapping CreateFileMapping为指定文件创建一个文件映射对象 返回对象指针 2 OpenFileMapping OpenFileMapping打开一个命名的文件映射对象 返回对象指针 3 MapViewOfFile MapViewOfFile把文件映射到本进程的地址空间 返回映射地址空间的首地址 4 FlushViewOfFile FlushViewOfFile可把映射地址的内容写到物理文件中 5 UnmapViewOfFile UnmapViewOfFile拆除文件与本进程地址空间之间的映射关系 6 CloseHandle CloseHandle可关闭文件映射对象 当完成文件到进程地址空间的映射后 就可利用首地址进行读写 在信号量等机制的辅助下 通过一个进程向共享存储区写入数据而另一个进程从共享存储区域读出数据 就可在两个进程间实现大量数据的交流 9 5 3Windows2000 NT管道 管道 pipe 是一条在进程间以字节流方式传送的通信通道 它是利用操作系统核心的缓冲区 通常几十个KB 来实现的一种单向通信 常用于命令行所指定的输入输出重定向和管道命令 在使用管道前要建立相应的管道 然后才可使用 Windows2000 NT提供无名管道和命名管道两种管道机制 利用CreatePipe可创建无名管道 并得到两个读写句柄 然后利用ReadFile和WriteFile可进行无名管道的读写 Windows2000 NT的命名管道 Windows2000 NT的命名管道是服务器进程与一个客户进程间的一条通信通道 可实现不同机器上的进程通信 它采用客户 服务器模式连接本机或网络中的两个进程 在建立命名管道时 存在一定的限制 即服务器方 创建命名管道的一方 只能在本机上创建命名管道 命名方式只能是 pipe PipeName的形式 不能在其他机器上创建管道 但客户方 连接到一个命名管道实例的一方 可以连接到其他机器上的命名管道 命名方式可为 serverName pipe pipename 形式 服务器进程为每个管道实例建立单独的线程或进程 与命名管道相关的主要系统调用 1 CreateNamedPipe 在服务器端创建并返回一个命名管道句柄 2 ConnectNamedPipe 在服务器端等待客户进程的请求 3 CallNamedPipe 从管道客户进程建立与服务器的管道连接 4 ReadFile 用于阻塞方式下命名管道的读 5 WriteFile 用于阻塞方式下命名管道的写 6 ReadFileEx 用于非阻塞方式下命名管道的读 7 WriteFileEx 用于非阻塞方式下命名管道的写 9 5 4Windows2000 NT邮件槽 Windows2000 NT中提供的邮件槽 mailslot 是一种不定长 不可靠的单向消息通信机制 消息的发送不需要接收方准备好 随时可发送 邮件槽也采用客户 服务器模式 只能从客户进程发往服务器进程 服务器进程负责创建邮件槽 它可从邮件槽中读消息 而客户进程可利用邮件糟的名字向它发送消息 在建立邮件槽时 也存在一定的限制 即服务器进程 接收方 只能在本机建立邮件槽 命名方式只能是 mailslot path name 方式 但客户进程 发送方 可打开其他机器上的邮件槽 命名方式可为 range mailslot path name 这里range可以是本机 其他机器的名字或域名 与邮件槽相关的主要系统调用如下 1 CreateMailslot 服务器方创建邮件槽 返回其句柄 2 GetMailslotInfo 服务器查询邮件槽的信息 如消息长度 消息数目 读操作等待时限等 3 SetMailslotinfo 服务器设置读操作等待时限 4 ReadFile服务器读邮件槽 5 CreateFile客户方打开邮件槽 6 WriteFile客户方发送消息 由于邮件槽不提供可靠的传输机制 因此在邮件槽关闭过程中可能出现信息丢失的情况 在邮件槽的所有服务器句柄关闭后 邮件槽被关闭 如果这时还有未读出的消息 这些消息将会被丢弃 所有客户句柄都被关闭 9 5 5套接字 套接字 socket 是一种网络通信机制 它通过网络在不同计算机上的进程间进行双向通信 套接字所采用的数据格式可为可靠的字节流或不可靠的报文 通信模式可为客户服务器模式或对等模式 为了实现不同操作系统上的进程通信 需要约定网络通信时不同层次的通信过程和信息格式 TCP IP协议就是广泛使用的网络通信协议 Windows2000 NT中的套接字规范称为 Winsock 它除了支持标准的BSD套接字外 还实现了一个真正与协议独立的应用程序编程接口 可支持多种网络通信协议 例如 在Winsock2 2中分别把send sendto recv和recvfrom扩展成WSASend WSASendto WSARecv和WSARecvfrom 9 6Windows2000 NT内存管理 9 6 1Windows2000 NT内存管理在功能与用户界面上的特点9 6 2Windows2000 NT内存管理用户界面9 6 3Windows2000 NT内存管理内部实现 9 6 1Windows2000 NT内存管理在功能与用户界面上的特点 Windows2000 NT内存管理采用页式虚存 Windows2000 NT由虚存管理程序控制如何分配存储器以及如何执行页面调度 存储器管理程序设计成可以在各种平台上运转 并且使用的页大小可以从4KB一直到64KB 1 作为32位操作系统 Windows2000 NT提供32位虚地址 因此每个进程的虚地址空间最多可达4GB 支持大而稀疏的内存使用 内存映射文件 内存共享和写时复制 通过丰富强大的用户界面 提供对环境子系统的支持 允许子系统以适当权限管理客户进程虚存 以及对所有用户进程的支持 允许进程分配 管理专用内存 9 6 2Windows2000 NT内存管理用户界面 在Windows2000 NT中 有下列 种操纵内存的机制 1 虚拟内存 最适合于管理大的对象数据或结构 尤其是动态或稀疏分配的大的对象数据或结构 包括虚存的保留和提交 以两阶段方式分配内存 释放和回收等 2 内存映射文件 最适合于管理大的数据流 通常来自文件 和在多个进程间共享数据 3 堆 最适合管理大量的小对象 9 6 3Windows2000 NT内存管理内部实现 本节将从以下九个角度较详细地说明Windows2000 NT的内存管理实现原理 1 Windows2000 NT进程页表的实现与地址映射过程2 Windows2000 NT的内存页表3 页分配 请求调页 页簇化 写时复制4 虚址描述符 大而稀疏内存使用 保留内存5 Windows2000 NT下的内存共享 原型页表项和区域对象6 页淘汰算法与工作集的自动调整7 对进程专有内存 privatememory 设置页级保护 系统区 页交换区 非页交换区 直接映射区 盘交换区管理 1 Windows2000 NT进程页表的实现与地址映射过程 Windows2000 NT支持大而稀疏内存使用 因而进程页表中的虚址不是连续的对于共享内存 表项中的内容没有指向物理页号 而是指向原型页表项 Windows2000 NT的页长是4KB WindowsNT的页长随CPU的不同而不同 在4KB到64KB间 通常为4KB 但无论什么时候 支持其他CPU与否 Windows2000 NT的进程页表都是按照IntelCPU规定的进程页表格式来组织的 而其他有些CPU 例如MIPS 则不规定进程页表格式 而由操作系统自行决定 IntelCPU规定的进程页表格式见图9 12 其中 页目录通常是进程私有的 但在环境需要时也可以在进程间共享 2 Windows2000 NT的内存页表 在Windows2000 NT中 内存页表称为物理页数据库 pageframedatabase 其中每个物理页面的信息占一项 一行 每项称为一个PFN结构 PageFrameNumber 其格式见图9 13 Windows2000 NT中物理页的 种状态 有效 valid 该物理页正在被某个进程使用 即已分配给某个进程 有一个有效的页表项指向该物理页 空闲 free 该物理页空闲 但没有被初始化 没有进程页表项 PTE 与之对应 零初始化 zeroed 该物理页处于空闲 free 状态并已被初始化为零 即该页内容已被全部填零 随时都可使用 零初始化的必要性来自安全保密的考虑 备用 standby 该物理页被一个进程使用 但已被从该进程的工作集中删去 指向它的进程页表项处于无效状态 但有一个 过渡 transition 标记 更改 modified 这个状态只有一点与备用状态不同 就是处于该状态的物理页已被使用它的进程写过 修改过 而且还没有写到磁盘上 指向它的进程页表项处于无效状态 但有一个 过渡 transition 标记 备用页和更改页都属于过渡页 transitionpage 坏页 bad 该物理页被查知有奇偶校验错或其他硬件错误 不能被使用 对后 种状态 物理页数据库把所有状态相同的物理页链接在一起 因此共形成 个链表 零初始化表 空闲表 备用表 更改表和坏页表 如图9 14 物理页的5种状态间的关系如图9 15所示 页分配 请求调页 页簇化 写时复制 Windows2000 NT采用请求调页 并采用页簇化技术 当一个线程发生缺页中断时 虚存管理程序把所需页及它附近的一些页一起装入内存 根据程序行为局部性理论 这种页簇化策略可以减少缺页中断次数 Windows2000 NT在分配物理页时 原则上是分配遇到的第一个空闲物理页 但实际上 正如上述物理页数据库中的 种状态所示 是按照 零初始化或空闲状态物理页 备用状态物理页 更改状态物理页 的顺序分配的 无论何时 只要零初始化表 空闲表 备用表的页数低于最小允许值 就唤醒一个叫 更改页写入程序 的线程 将更改表中的页写入磁盘 然后将这些页移入备用表 当创建一个新进程时 用户可以指定Windows2000 NT虚存管理程序使用下列两个方法之一来初始化其虚址空间 复制另一个进程的虚址空间 当创建一个新进程来运行一个可执行程序时 直接将该可执行目标程序文件装入并映射到该新进程的虚址空间 4 虚址描述符 大而稀疏内存使用 保留内存 由于Windows2000 NT中一个进程的虚址空间很大 4GB 所以Windows2000 NT支持大而稀疏内存使用 这种支持意味着进程页表中的虚址不是连续的 并需要额外的数据结构 通常是一棵平衡二又树 以加快对虚址的查找速度 来记录虚址分布范围 对于每一个进程 Windows2000 NT虚存管理程序保持一组虚址描述符 virtualaddressdescriptor 用来描述进程虚址空间的状态 如图9 16所示 每当为一个进程分配新的内存 或映射共享内存的视口 时 虚存管理程序都生成一个虚址描述符 来存放该分配请求中的信息 5 Windows2000 NT下的内存共享 原型页表项和区域对象 当两个进程共享一个物理页时 Windows2000 NT虚存管理程序在页表中插入一个间接引用层 如图9 17所示 把插入的数据结构称为原型页表项 原型页表项是一个32bit的数据结构 它与一般的页表项类似 同样包括物理页号 页保护 页状态等信息 但它使得Windows2000 NT虚存管理程序在管理共享页时 无须更新共享该页的每一个进程的页表 原型页表项是进程间共享内存的内部实现机制 在用户界面上 Windows2000 NT对用户进程提供了出色的共享内存机制 区域对象视口和映射对象机制 6 页淘汰算法与工作集的自动调整 Windows2000 NT页淘汰算法采用局部FIFO算法 采用局部淘汰 是为了防止Windows2000 NT环境子系统进程夺去客户进程的太多内存 使用FIFO算法 是因为这个算法简单而且Windows2000 NT可以克服这个算法的缺点 被淘汰的页在淘汰后实际上在物理内存中会停留一段时间 仅仅将该页的页表项和TLB项置为无效 并将该页在物理页数据库中的相应行置为备用或更改状态 链入备用表或更改表 因此 如果马上又用到该页的话 就可以再将该页收回 从备用表或更改表中移出 并置相应页表项和TLB项为有效 而无需读盘操作 Windows2000 NT对一个进程的工作集的定义是 该进程当前在内存中的页的集合 在Windows2000 NT中 当创建一个进程时 为其指定最小工作集 即最少页数 和最大工作集 即最多页数 并指定缺省工作集大小为30页 Windows2000 NT对工作集大小进行自动调整 当一个进程的工作集降到最小工作集后 如果该进程再发生缺页中断 并且内存还不太满 则Windows2000 NT虚存管理程序会增加该进程的工作集大小 当一个进程的工作集升到最大工作集后 如果没有足够内存可用 则该进程每发生一次缺页中断 Windows2000 NT虚存管理程序都要从该工作集中淘汰掉一页 再调入此次缺页中断所请求的页 当然有足够内存可用的话 虚存管理程序也允许一个进程的工作集超过它的最大工作集 当物理内存所剩不多时 虚存管理程序对内存中的每个进程检查其当前工作集大小是否大于其最小工作集 是则淘汰该进程工作集中的一些页 直到空闲内存数量足够或每个进程都达到其最小工作集 Windows2000 NT定时从进程中淘汰一个有效页 观察其是否对该页发生缺页中断 以此测试和调整进程当前工作集的合适大小 如果进程继续执行 并未对被淘汰的这一页发生缺页中断 则该进程工作集被减 该页被加到空闲页表中 通过以上策略 Windows2000 NT虚存管理程序总是为每个进程提供尽可能好的性能 而无需各个用户或管理员的调整干预 当然 如果用户或管理员想干预的话 也可以通过系统调用 即进程对象服务 或操作级配置手段来改变某一进程的最小和最大工作集的值 通常没有必要 不过 安全系统的局部策略数据库将给每个用户态进程设置一个绝对的最小值和最大值 7 对进程专有内存设置页级保护 Windows2000 NT为内存保护共提供了 种形式 其中前 种对于大多数现代操作系统而言是普遍存在的 第四种 以对象为基础的内存保护 是Windows2000 NT所特有的 每个进程具有单独的地址空间 硬件不允许线程访问另一进程的虚拟地址 通过地址映射机制实现这种不允许 设立核心态和用户态两种运行状态 核心态允许线程访问系统代码和数据 用户态不允许访问系统代码和数据 以页面为基础的保护机制 页表项中包含了页面级保护标志 每个虚拟页面有一组与它有联系的标识 它们决定允许在用户态和核心态中访问的类型 每个虚拟页面均有存取保护信息 实现访问监控 以对象为基础的内存保护 每次一个进程打开一个区域对象的句柄 或映射一个视口到区域对象时 Windows2000 NT的安全引用监控程序检查试图做此操作的进程是否被授权访问该对象 系统区 页交换区 非页交换区 直接映射区 系统区按速度要求不同分为 个部分 从快到慢依次为 直接映射区 非页交换区 页交换区 系统区低端的直接映射地址 directlymappedaddresses 区具有 个特性 该区中的内容永远不会按页交换出内存 这一区域由硬件直接映射 例如在MIPSR4000CPU上实现NT时 由该CPU把这一区域的虚址的最高 位清零 并把剩余的位作为物理地址 这相当于把数据放到低端物理内存中 由于这样的硬件变换 并永不交换出内存 因此存取这一区域的数据格外地快 该区用于存放核心代码和数据中需要最好性能的部分 例如在处理器中调度线程执行的那些代码 不同进程的系统区是共用的 系统页表的实现机制如图9 18所示 盘交换区管理 Windows2000 NT可以支持多达16个盘交换文件又称为调页文件 pagingfile pagefile 处于交换文件中的页的页表项 PTE 格式见图9 19 a 当程序代码或内存映射文件 不占盘交换区 所对应的页因被淘汰而暂时不在物理内存时 其页表项结构见图9 19 9 7Windows2000 NT设备管理 本节主要从Windows2000 NT设备管理的特点 Windows2000 NT设备管理实现机制来介绍Windows2000 NT的设备管理 9 7 1Windows2000 NT设备管理的特点9 7 2Windows2000 NT设备管理实现机制 9 7 1Windows2000 NT设备管理的特点 Windows2000 NT支持进程级异步I O操作 允许系统管理员动态地向系统中增加设备或从系统中删除设备 提供服务程序 使设备驱动程序的开发工作变得尽可能容易 而且能工作在多处理器系统中 且允许用高级语言编写驱动程序 具有与块设备管理相关的文件系统特点 例如 映像文件I O支持多个可装卸文件系统 新的缓冲区实现方式 借用虚存机制 分层驱动程序模型提供可扩充性 使设备的动态增删更加容易 和整个Windows2000 NT的对象模型一致 设备管理功能也把各种I O资源作为对象来管理 驱动程序对象 设备对象 文件对象 9 7 2Windows2000 NT设备管理实现机制 在这里我们利用图示法来说明Windows2000 NT设备管理机制的实现 Windows2000 NT设备管理的程序结构如图9 20所示 数据结构如图9 21所示 工作过程如图9 22所示 9 8Windows2000 NT文件系统 本节主要介绍Windows2000 NT文件系统的特点及实现机制 并详细介绍了NTFS的内部结构与工作过程 9 8 1Windows2000 NT文件系统的特点9 8 2Windows2000 NT文件系统实现机制9 8 3NTFS内部结构与工作过程 9 8 1Windows2000 NT文件系统的特点 1 兼容性和可扩充性 支持多个可装卸的不同类型的文件系统 包括NTFS Windows个人系列和DOS的FAT文件系统 OS 2的HPFS 高性能文件系统 CDROM文件系统 DFS POSIX等 并支持文件系统类型之间的联机动态转换 例如 可以将HPFS或FAT分区上的文件系统格式改为NTFS格式 2 提供了一个全新的 功能强大的向后兼容的 第一个为高端服务器以及Intel工作站家族提供健全的文件服务的文件系统 NTFS NewTechnologyFileSystem 高可靠性和安全性 提供了基于原子事务 atomictransaction 概念的文件系统可恢复性 对关键信息采取冗余存储 磁盘镜像 磁盘复制 RAID数据管理 带冗余校验的带区集 stripping 安全特性 容错特性 充分利用现有外存硬件特性 对大容量的充分利用 支持超大容量外存介质 可达264B 突破了Windows的2GB的限制 支持大文件和大文件系统 支持卷集和带区集 提高吞吐量 支持卷 集 的动态扩展 功能强大 性能优越 支持内存映像文件I O 支持硬链接和符号连接 对文件缓冲池的新实现技术 借用虚存机制 多数据流文件 文件压缩 支持长文件名 可达255 包括扩展名在内 和多个扩展名 以 隔开 用户可以选择是否区分大小写 文件名采用Unicode国际代码表示 9 8 2Windows2000 NT文件系统实现机制 Windows2000 NT文件系统的总体实现结构如图9 23所示 Windows2000 NT文件系统实现机制 1 由于Windows2000 NT的整体实现机制采用了面向对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高效英语阅读理解训练题合集
- 股权质押设计规范解读
- 防暴器械使用培训
- 小升初英语考试重点知识点总结
- 双曲线图像课件
- 工程质量问题整改通知模板范本
- 员工解除合同证明范文合集
- 双控安全培训教育记录课件
- 二手房买卖合同文本及注意事项
- 土地抵押借款合同标准范本模板
- 石油化工池类结构裂渗原因分析及控制措施
- 垃圾渗滤液处理站运维及渗滤液处理投标方案(技术标)
- ISO 22000-2018食品质量管理体系-食品链中各类组织的要求(2023-雷泽佳译)
- 卡巴斯基应急响应指南
- 理财规划大赛优秀作品范例(一)
- 2023年四川能投筠连电力招聘笔试参考题库附带答案详解
- 静配中心清洁消毒考核试题
- 一级烟草专卖管理师理论考试题库(含答案)
- 小学数学《分数除法》50道应用题包含答案
- 碳捕集、利用与封存技术课件
- 化工试生产总结报告
评论
0/150
提交评论