Windows内核情景分析-概述

现在的Windows

现在的windows内核包含了两大部分,一部分是本来意面上的操作系统内核,另一部分则是移到了内核中的视窗服务,前者对应ntoskrnl.exe后者win32k.sys;后者部分为了保证效率。windows操作系统包含多个子系统,最常用就是windows子系统;貌似现在的windows10提供了linux子系统,所以在windows上可以运行linux的程序。

现代意义上的操作系统

第一,操作系统的区域受到保护,不会因为用户程序的错误而损坏,分用户程序空间和内核空间,内核空间受到保护。

第二,不用应用程序之间互相防护,一个程序的错误不影响另一个应用程序。

第三,程序在物理内存中的位置可以浮动,允许多程序同时运行。

windows系统结构

windows操作系统分用户空间和系统空间,32bitOS 0~0x7fffffff属于用户空间,0x80000000~0xffffffff属于操作系统空间。用户空间属于特定进程,内核空间是共享的;内核空间只有当cpu处于系统态才可以访问,进程空间则都可以访问。CPU通过三种方式进入系统态,分别为“系统调用”、“中断”、“异常”。

 Windows IRQL

windows与Linux内核不同,其内核相当一部分的页面是可倒换的,但并非所有,例如中断和异常的有关代码和数据所在页面,以及和页面倒换相关代码数据就是不可倒换。Windows为CPU运行状态定义了很多IRQL,在任一时间,CPU总是为其中某一个级别,这个级别表名哪些操作可以做哪些操作不可以。基本意图为,如果CPU处于某一个级别,其操作就不能被低级别的操作所干扰。用户空间无法更改IRQL,IRQL定义如图:

接上,关注PASSIVE_LEVEL、APC_LEVEL、DISPATCH_LEVEL,级别 >= 3用于硬件中断 。上面所说中断和异常代码数据所在页面是不允许置换,可能因为:中断处理内部不允许线程切换(具体原因?),所以无法切换到处理置换的线程(单独内核线程处理该操作),而待执行的代码又已经置换到磁盘上,无法置换入内存,所以这里就行不通;此外,线程切换必须等到IRQL从DISPATCH_LEVEL降下来。在页面置换问题上,只要CPU的IRQL级别不高于APC_LEVEL的层次,其代码都是运行置换的,因为允许线程切换到内核负责置换的线程。在windows中管理层代码中几乎所有函数开头放上宏PAGED_CODE(),说明作者意图该函数可置换,通过 #pragma alloc_text(PAGE,NtQueryObejct)编译时将代码放在可置换区。

windows内核函数命名 

 了解命名规则对于后面理解函数有帮助,可以一眼看出该函数的大概作用。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值