【Windows内核原理与实现】读书笔记(六)

来源:互联网 发布:java字符串单个字符 编辑:程序博客网 时间:2024/05/17 06:04

      Windows内核中执行体层负责各种与管理和策略相关的功能,而内核层(或微内核)实现了操作系统的核心机制。

内核层的进程和线程对象

      内核层中线程和进程中的数据结构分别是KPROCESS和KTHREAD。其中KPROCESS的定义为:

typedef struct _KPROCESS {//这两个头部很少被使用    DISPATCHER_HEADER Header;//用于当该进程参与性能分析(profiling)时,作为一个节点加入到全局的性能分析进程列表(KiProfileListHead)LIST_ENTRY ProfileListHead;//上下文切换时会用到的字段//第一项指向该进程的页目录表地址//第二项指向该进程的超空间(hyper space)的页目录地址ULONG_PTR DirectoryTableBase[2];#if defined(_X86_)//LDT描述符    KGDTENTRY LdtDescriptor;//兼容DOS程序,允许通过int 21h来调用DOS系统功能KIDTENTRY Int21Descriptor;//I/O权限表,I/O Privilege Map    USHORT IopmOffset;//IOPM可控制进程的用户模式I/O访问权限;Iopl域定义了进程的I/O优先级    UCHAR Iopl;BOOLEAN Unused;#endif#if defined(_AMD64_)USHORT IopmOffset;#endif//当前进程记录了当前进程正在哪些处理器上运行volatile KAFFINITY ActiveProcessors;//当时钟中断发生的时候,下列两个域会被引用,记录了用户模式和内核模式下所花的时间,线程结束时才进行更新ULONG KernelTime;ULONG UserTime;//下面两个域很少被引用到//该链表记录了这个进程中处于就绪状态但尚未被加入到全局就绪链表中的线程    LIST_ENTRY ReadyListHead;//当进程要被换出内存时,通过这个域加入到KiProcessOutSwapListHead中//当进程要被换入内存时,通过这个域加入到KiProcessInSwapListHead中SINGLE_LIST_ENTRY SwapListEntry;#if defined(_X86_)//指向处理Ctrl+C中断的函数,仅用于VDM(虚拟DOS机)环境下运行16位程序。PVOID VdmTrapcHandler;#elsePVOID Reserved1;#endif//此链表包含了该进程的所有当前进程LIST_ENTRY ThreadListHead;//自旋锁对象,保护此进程中的数据成员KSPIN_LOCK ProcessLock;//指定了该进程的线程可以在哪些处理器上运行,其二进制表示的每一位分别对应于当前计算机的一个处理器(核)KAFFINITY Affinity;//接下来定义的位必须与接下来的位字段相符//这些位只能使用互锁操作进行写入#define KPROCESS_AUTO_ALIGNMENT_BIT 0#define KPROCESS_DISABLE_BOOST_BIT 1#define KPROCESS_DISABLE_QUANTUM_BIT 2union {struct {LONG AutoAlignment : 1;LONG DisableBoost : 1;LONG DisableQuantum : 1;LONG ReservedFlags : 29;};LONG ProcessFlags;};//指定进程中的线程的基本优先级SCHAR BasePriority;//QuantumReset指定一个进程中线程的基本时限重置值SCHAR QuantumReset;//指明进程是否在内存中    UCHAR State;//用于为该进程的线程选择适当的理想处理器UCHAR ThreadSeed;//用于记录电源状态UCHAR PowerState;//为一个进程选择优先的处理器节点UCHAR IdealNode;//WRK中未使用BOOLEAN Visited;union {KEXECUTE_OPTIONS Flags;//设置一个进程的内存执行选项,为了支持NX(No-Execute,内存不可执行)UCHAR ExecuteOptions;};#if !defined(_X86_) && !defined(_AMD64_)PALIGNMENT_EXCEPTION_TABLE AlignmentExceptionTable;#endif//记录当前进程中有多少个线程的栈位于内存中ULONG_PTR StackCount;//将当前系统中所有具有活动线程的进程串成一个链表LIST_ENTRY ProcessListEntry;} KPROCESS, *PKPROCESS, *PRKPROCESS;

      每一个进程都对应一个KPROCESS对象。KPROCESS中主要记录了两类信息:一类跟进程的内存环境相关,一类是与其线程相关的一些属性。

      KTHREAD结构中,许多域都与线程调度机制有关:

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机卡网上销户以后剩余话费怎么办 联通新号注册微信发不了短信怎么办 韩博士装机卡在驱动恢复怎么办 xp打印后程序服务没有运行怎么办 刚注册的微信显示异常怎么办 不小心删了照片怎么办不要钱 qq邀请好友辅助验证成功后怎么办 微信申诉怎么让好友发验证码怎么办 微信申诉好友都删除了怎么办 恋与制作人原来的帐号不见了怎么办 手机号被别人注册了手机银行怎么办 想上老婆的陌陌号但要验证码怎么办 中国家医居民端注册信息有误怎么办 别人给我充的q币怎么办 qq忘记密码手机号码也换了怎么办 手机号码不用了微信忘记密码怎么办 手机号码注销了微信忘记密码怎么办 微信忘记密码手机号码也换了怎么办 微信钱包里的钱莫名少了怎么办 被骗给人冲q币了怎么办 支付宝账户异常无法领取红包怎么办 微信q币支付错了怎么办 王者荣耀不小心把点卷用了怎么办 微信绑定的qq号密码忘记了怎么办 微信红包实名认证没银行卡怎么办 手机烂了换新手机微信支付宝怎么办 支付宝转账给别人号码没用了怎么办 微信转账验证码收不到怎么办 陌生网友生日叫我发红包怎么办 微信群的群主不小心推出群该怎么办 支付宝验证码被别人知道了怎么办 微信解除银行卡绑定零钱清零怎么办 qq号被盗了理财通的钱怎么办 工行转错账号的钱被冻结怎么办 微信20w限额满了怎么办 通过qq号申请微信被盗了怎么办 微信号被盗手机绑定被改怎么办 腾讯视频激活码兑换达到限制怎么办 虚拟服务购买自动每月扣q币怎么办 微信被骗充值Q币怎么办 微信给别人充q币怎么办