现在的位置: 首页 > 综合 > 正文

一些Windows系统的知识(未完待续)

2013年09月03日 ⁄ 综合 ⁄ 共 2190字 ⁄ 字号 评论关闭

这是最近看到的关于Windows系统的一些知识:

 

为了实现可移植性,Windows在设计时被设计为软件分层的体系结构,除了硬件抽象层(HAL),操作系统中的其他组件几乎和硬件没有关联性。在移植过程中,只需要修改相关的硬件抽象层以迎合新硬件即可。

 

Windows一直以来都有着一致的Win32 API接口,尽管各版本Windows的API实现 方法有所不同,但它们都保持着一贯的名称和调用接口。体现了Windows的兼容性。

 

用户模式和内核模式的划分设计,使得Windows拥有良好的健壮性和可靠性。所有用户程序只能运行在特权级别低的用户模式,所有错误操作都会被操作系统检测到,并给出相应提示与建议。操作系统的核心代码均运行与特区级别高的内核模式下。值得一提的是,任何涉及操作硬件的操作,应用程序都无法在用户模式下完成。API是操作系统提供给应用程序的唯一接口,当应用程序想要访问硬件设备时,必须通过API向操作系统提出申请,只有当校验参数合法时,操作系统才会通过应用程序的请求许可。

 

操作系统内核只负责关于线程调度的工作,而系统的其他诸如内存管理组件、进程管理组件等其他独立于内核的,我们称之为执行程序组件,他们都是独立于内核而工作的组件。

 

Windows的I/O操作是基于异步设计的,线程在发起一个I/O请求时,可以不等待这个I/O操作结束,就发起另外的I/O请求,最大限度的利用CPU的时间资源;同时也是基于多进程和多线程的,并且尽可能使多个任务并行执行,当内核进行线程调度时尽可能多的让个线程保持看上去同时运行,而不是出于等待状态,这样可以将处理器的等待时间最小化,最大限度的发挥CPU的功能。

 

Intel x86架构的CPU分为4个特权层,Ring 0层到Ring 3层,其中,Ring 0层的特权最高,可以执行任意代码,而Ring 3层只能执行有限的代码。在Windows系统中,内核模式运行在Ring 0层,用户模式运行在Ring 3层。这样一来,核心代码运行在内核模式下,可最大限度防止系统核心组件受到恶意攻击。

 

和大多数现代操作系统一样,Windows操作系统的总体设计也是居于分层设计思路的,每层由若干个组件组成,。操作系统作为一个整体,依赖于上层组件对下层组件向下一层组件的调用,而且不同的组件都有其固定的的接口,靠近上层的组件将任务转化成对底层组件的调用,因为底层组件具有更高的操作权限。系统的各个组件或者模块是通过消息进行通信的。

 

Windows系统采用了微内核操作以系统结构,它基于C/S模式,采用面向对象技术,应用“机制与策略分离原理”,拥有足够小的内核。能有效的实现进程(线程)管理,低级存储器管理和中断与陷入处理等功能,在提高系统可扩展性,增强系统可靠性,可移植性,融入了面向对象技术,同时还提供了对分布式系统的支持。

 

下图是Windows操作系统的简化结构:

 

 

从图中可以看出,在用户模式下,应用程序调用各个子系统的API接口,而其他子系统通过Win32 子系统的接口来实现。Win32子系统将API函数转化为Native API函数,由Native API接口将这种调用转化为系统服务函数的调用,穿过了用户模式和内核模式的界面,将操作(调用)请求通过系统服务函数(位于ntdll.dll中)传递到系统内核,在通过系统内核向硬件发生相关指令完成操作。

每当应用程序需要用到内核或内核的扩展模块所提供的的服务时,应用程序通过硬件指令从用户模式切换到内核模式中,当系统内核完成了所请求的服务以后,控制权又回到了用户模式。

 

内核模式下,由I/O管理器,对象管理器,进程管理器,虚拟内存管理器,即插即用管理器,安全引用管理器,配置管理器(注册表)缓存管理器,本地过程调用(LPC),文件系统以及其他组件组成的执行体组件,提供了大量的内核函数提供驱动程序调用。内核组要负责进程和线程的调度,中断和异常处理,同步对象以及各种同步机制。而驱动程序通过硬件抽象层(HAL)简介与硬件进行相关操作。

执行体组件和和内核层位于同一个二进制模块,称为ntoskrnl.exe,是内核的基本模块。内核层实现操作系统的基本机制,所有的策略决定留给执行体。应用程序通过ntdll.dll切换到内核模式下的执行体API函数中,以调用内系统中的服务。Ntdll.dll是连接用户模式代码和内核模式系统服务的桥梁。

 

在Win32 系统中,内核代码可以完全访问当前进程的4GB虚拟地址空间(0X00000000~0XFFFFFFFF),而用户代码只能访问地段的2GB虚拟地址(0X00000000~0X7FFFFFFF,若启动内核开关的话可访问3GB)。其中,2GB以下称为进程地址空间,2GB以上称为系统地址空间。而实际上,在两者之间有一快特殊的64KB地址空间,位于0X7FFF0000~0X7FFFFFFF之间,在两种模式下均不可访问。

 

Windows的微内核位于内核模块ntknrl.exe中的下层部分(上层部分为执行体),最接近于HAL层。除了负责进程、线程的调度,中断与异常处理外,它还负责同步处理器之间的行为,让系统中的处理器尽可能的忙和高效,以优化系统的性能。

Windows的内核实现了抢占式线程调度机制,按照优先级顺序将线程分配到处理器上,并且允许高优先级的线程中断或者抢占低优先级的线程。

 

 

抱歉!评论已关闭.