内核层的进程机构--KPROCESS

来源:互联网 发布:3d美工 编辑:程序博客网 时间:2024/05/21 20:29
1.WRK中的KPROCESStypedef struct _KPROCESS {    //    // The dispatch header and profile listhead are fairly infrequently    // referenced.    //    DISPATCHER_HEADER Header;//此域表明KPROCESS对象也是一个分发器对象    LIST_ENTRY ProfileListHead;//用于该进程参与性能分析时,作为一个节点加入到全局的性能分析进程列表。    //    // The following fields are referenced during context switches.    //    ULONG_PTR DirectoryTableBase[2];//第一项指向该进程的页目录表地址,第二项指向该进程的超空间的页目录地址#if defined(_X86_)    KGDTENTRY LdtDescriptor;//该进程的LDT(局部描述符表)    KIDTENTRY Int21Descriptor;//为了兼容DOS程序,允许他们通过int 21H指令来调用DOS    USHORT IopmOffset;//指定了IOPM的位置,内核通过IOPM可控制进程的用户模式I/O访问权限    UCHAR Iopl;//定义了进程的I/O优先级    BOOLEAN Unused;#endif#if defined(_AMD64_)    USHORT IopmOffset;#endif    volatile KAFFINITY ActiveProcessors;//记录了当前进程正在哪个处理上允许。    //    // The following fields are referenced during clock interrupts.    ////这两个字段分别记录了当前进程对象在内核模式和用户模式下所化的时间//KernelTime和UserTime时间值等于其所属线程的对应KernelTime和UserTime值的和。//由于仅当一个线程结束时才更新其进程的这两个时间,所以,若有一个进程中尚未有一个线程结束,则这两个域中的//值为0    ULONG KernelTime;    ULONG UserTime;    //    // The following fields are referenced infrequently.    //    LIST_ENTRY ReadyListHead;//双向练链表,记录了这个进程中处于就绪状态但尚未被加入全局就绪链表的线程。    SINGLE_LIST_ENTRY SwapListEntry;#if defined(_X86_)    PVOID VdmTrapcHandler;//指向处理Ctril+C中断的函数,仅用于在VDM环境下运行16位程序#else    PVOID Reserved1;#endif    LIST_ENTRY ThreadListHead;//一个链表头,此链表包含了该进程的所有当前线程。    KSPIN_LOCK ProcessLock;//自旋锁(spin lock)对象,它的用途是保护此进程中的数据成员。    KAFFINITY Affinity;//指定该进程的线程可以在哪写处理器上运行,去类型是KAFFINITY    //    // N.B. The following bit number definitions must match the following    //      bit field.    //    // N.B. These bits can only be written with interlocked operations.    //#define KPROCESS_AUTO_ALIGNMENT_BIT 0#define KPROCESS_DISABLE_BOOST_BIT 1#define KPROCESS_DISABLE_QUANTUM_BIT 2    union {        struct {            LONG AutoAlignment : 1;//内存访问对其设置            LONG DisableBoost : 1;//下面这两个字段和线程调度过程中的优先级提升和时限分配有关,            LONG DisableQuantum : 1;            LONG ReservedFlags : 29;        };           LONG ProcessFlags;    };    SCHAR BasePriority;//进程中的线程调度参数,基本优先级,所有线程在启动时都会继承进程的BasePriority    SCHAR QuantumReset;    UCHAR State;//进程是否在内存中    UCHAR ThreadSeed;//该进程的线程选择适当的处理器    UCHAR PowerState;//记录电源状态    UCHAR IdealNode;    BOOLEAN Visited;    union {        KEXECUTE_OPTIONS Flags;        UCHAR ExecuteOptions;    };#if !defined(_X86_) && !defined(_AMD64_)    PALIGNMENT_EXCEPTION_TABLE AlignmentExceptionTable;#endif    ULONG_PTR StackCount;    LIST_ENTRY ProcessListEntry;//将当前系统所有具有活动线程的进程串成一个链表。} KPROCESS, *PKPROCESS, *PRKPROCESS;

简单归纳一下,KPROCESS对象中记录中记录的信息主要包括两类:一类跟进进程的内存环境相关,比如页目录表,交换状态等;另一类与其线程相关的一些属性,比如线程列表以及线程所需的优先级,时限设置等。



原创粉丝点击