【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结构中,许多域都与线程调度机制有关:
- 【Windows内核原理与实现】读书笔记(六)
- Windows 内核原理与实现 - 读书笔记
- 读书笔记之《Windows内核原理与实现》
- 读书笔记之《Windows内核原理与实现》
- 【Windows内核原理与实现】读书笔记(一)
- 【Windows内核原理与实现】读书笔记(二)
- 【Windows内核原理与实现】读书笔记(三)
- 【Windows内核原理与实现】读书笔记(四)
- 【Windows内核原理与实现】读书笔记(五)
- 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
- 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
- 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
- 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
- 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
- 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
- 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
- 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
- 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
- 【Windows内核原理与实现】读书笔记(三)
- 【Windows内核原理与实现】读书笔记(四)
- 【Windows内核原理与实现】读书笔记(五)
- 【QT学习】(一)配置Qt+VS2008环境
- 【Qt学习】(二)第一个Qt程序
- 【Windows内核原理与实现】读书笔记(六)
- 【每天进步一点】2012.04.12
- 【Linux】GNU C库 accept函数的逐层下调的研究
- 数据挖掘之关联分析的基本概念
- 计算机"端口"详解
- 棋盘覆盖
- 数据结构之AVL树
- MySQL调优脚本tuning-primer.sh使用说明
- Swap in JAVA, 不是想象中的简单