
Windows核心编程(笔记)
dyufei
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第四章 进程(1)
进程一A:进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:•OS用来管理进程的内核对象(内核对象也是系统用来存放关于进程的统计信息的地方)•地址空间 (它包含所有可执行模块或 DLL模块的代码和数据,它还包含动态内存分配的空间)当创建一个进程时,系统会自动创建它的第一个线程,称为主线程。然后,该线程可以创建其他的线程。B: Windows支持两种类型的应用原创 2008-12-29 22:21:00 · 287 阅读 · 0 评论 -
第七章 线程的调度、优先级和亲缘性(3)
五、线程的运行时间 BOOL GetThreadTimes (HANDLE hThread, PFILETIME pftCreationTime, PFILETIME pftExitTime, PFILETIME pftKernelTime, PFILETIME pftUserTime);该函数返回四个时间值,时 间 值 含 义创建时间 格林威治1601/01/0原创 2009-05-16 14:46:00 · 233 阅读 · 0 评论 -
第七章 线程的调度、优先级和亲缘性(6)
九、程序的优先级(1)进程优先级 当调用CreatProcess时,可以在fdwCreate参数中传递需要的优先级类, 创建子进程的进程负责选择子进程运行的优先级类。优先级类 标 识 符实时 REALTIME _PRIORITY _ CLASS高 HIGH_PRIORITY _ CLASS高于正常 ABOVE _ NORMAL _PRIORITY _ CLASS正常 N原创 2009-05-16 14:50:00 · 283 阅读 · 0 评论 -
第八章 用户方式中线程的同步(1)
线程需要通信的情况:• 当有多个线程访问共享资源而不使资源被破坏时。• 当一个线程需要将某个任务已经完成的情况通知另外一个或多个线程时。原子访问:是指线程在访问资源时能够确保所有其他线程都不在同一时间内访问相同的资源。原子操作:指线程运行过程不中不发生中断。1、互锁函数互锁函数的执行方式与CPU平台相关, x 8 6 C P U,互锁函数会对总线发出一个硬件信号,防止原创 2009-05-30 10:07:00 · 311 阅读 · 0 评论 -
第八章 用户方式中线程的同步(2)
二、高级线程同步 如果线程访问共享资源或者等待一些特殊事件的发生,如果共享资源可用或特殊事件已发生则函数返回同时该进程保持可调度状态,否则该线程处于等待状态。系统将处于等待状态的线程不占用系统资源(不浪费CPU时间),当资源可用或特殊事件发生时将线程处于可调度状态,该线程与资源或特殊事件保持同步。应该避免一个线程(通过不断查询多个线程共享或可以访问的变量的状态)与另一个线程原创 2009-05-30 10:10:00 · 247 阅读 · 0 评论 -
第九章 线程与内核对象的同步(3)
三、等待定时器内核对象等待定时器,是在某个时间或按规定的间隔时间发出自己的信号通知的内核对象。通常用来在某个时间执行某个操作。创建等待定时器内核对象HANDLE CreateWaitableTimer(PSECURITY_ATTRIBUTES psa, BOOL fManualReset, PCTSTR pszName); //参数同CreateEvent当发出人原创 2009-05-30 10:19:00 · 360 阅读 · 0 评论 -
第九章 线程与内核对象的同步(6)
六、其他的线程同步函数1、异步设备I/O异步设备I/O使得线程能够启动一个读操作或写操作,但是不必等待读操作或写操作完成。设备对象是可以同步的内核对象,可以调用WaitForSingleObject函数传递文件、套接字和通信端口的句柄。当系统执行异步I/O时,设备对象处于未通知状态。一旦操作完成,系统就将对象的状态改为已通知状态,该线程就知道操作已经完成。线程就可以继续运行。2、原创 2009-05-30 10:24:00 · 474 阅读 · 0 评论 -
第八章 用户方式中线程的同步(3)
关键代码段与循环锁 当线程访问另一个线程拥有的关键代码段时,调用线程就立即被置于等待状态。即该线程从用户态转入内核态。调用EnterCriticalSection函数时它使用循环锁进行循环,设法多次取得该资源。只有每次都失败时,该线程才转入内核态以便进入等待状态。 BOOL InitializeCriticalSectionAndSpinCount(PCR原创 2009-05-30 10:13:00 · 335 阅读 · 0 评论 -
第九章 线程与内核对象的同步(5)
五、互斥对象内核对象互斥对象内核对象,能够确保线程拥有对单个资源的互斥访问权。互斥对象包含使用计数、线程ID(用于标识系统中的哪个线程当前拥有互斥对象)、递归计数器(用于指明该线程拥有互斥对象的次数)。互斥对象的行为特性与关键代码段相同,但是互斥对象属于内核对象(不同进程中的多个线程能够访问单个互斥对象,并且线程在等待访问资源时可以设定一个超时值)。而关键代码段则属于用户方式对象。互原创 2009-05-30 10:23:00 · 270 阅读 · 0 评论 -
第七章 线程的调度、优先级和亲缘性(7)
1、动态提高线程的优先级等级通过将线程的相对优先级与线程的进程优先级类综合起来考虑,系统就可以确定线程的优先级等级。有时这称为线程的基本优先级等级。系统常常要提高线程的优先级等级,以便对窗口消息或读取磁盘等I / O事件作出响应。系统只能为基本优先级等级在 1至1 5之间的线程提高其优先级等级,这个范围称为动态优先级范围。BOOL SetProcessPriorityBoost(HAN原创 2009-05-16 14:51:00 · 668 阅读 · 0 评论 -
第七章 线程的调度、优先级和亲缘性(4)
六、运用结构环境环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方。Windows实际上允许查看线程内核对象的内部情况,以便抓取它当前的一组 C P U寄存器。若要进行这项操作,只需要调用G e t T h r e a d C o n t e x t函数 BOOL GetThreadContext(HANDLE hThrea原创 2009-05-16 14:48:00 · 285 阅读 · 0 评论 -
第七章 线程的调度、优先级和亲缘性(5)
八、对优先级的抽象说明Windows API展示了系统的调度程序上的一个抽象层,这样就永远不会直接与调度程序进行通信。Windows 支持的优先级类优先级类 描 述实时 进程中的线程必须立即对事件作出响应, 以便执行关键时间的任务。该进程中的线程还会抢先于操作系统组件之前运行。使用本优先级类时必须极端小心高 进程中的线程必须立即对事件作出响应,以便执行关键时间的任务。TaskM原创 2009-05-16 14:49:00 · 368 阅读 · 0 评论 -
第三章 内核对象(1)
进程的内核对象与句柄表当进程初始化时系统为他分配一张句柄表,该句柄表只能用于内核对象而不能用于用户和GDI对象。创建内核对象当进程首次初始化时句柄表还是空的,当进程中的某一线程调用了创建内核对象的函数时,内核就为该对象分配一块内存,并且初始化它。然后内核扫描进程句柄表,寻找一个空白项,进行初始化。所有创建内核对象的函数都返回一个与进程相关的句柄,它能被所有运行在该进程中的原创 2008-11-16 17:30:00 · 338 阅读 · 0 评论 -
第三章 内核对象(2)
进程间共享内核对象内核对象的句柄是可以被继承的但内核对象本身是不能被继承的。每个句柄都有一个标志位指出该句柄是否可以被继承。如果创建内核对象时传递的LPSECURITY_ATTRIBUTES参数位NULL则,返回的句柄是不可继承的(标志位为0)把binheritHandle设为TURE就使得标志位为1。句柄的继承:(1)A:当父进程创建内核对象时,通知OS该对象的句柄原创 2008-11-16 17:38:00 · 341 阅读 · 0 评论 -
第四章 进程(2)进程的实例句柄
1、进程的实例句柄加载到进程地址空间的每个可执行文件或DLL文件均被赋予一个独一无二的实例句柄可执行文件的实例作为( w ) Wi n M a i n的第一个参数h i n s t E x e来传递。对于加载资源的函数调用来说,通常都需要该句柄的值。H M O D U L E与H I N S TA N C E是完全相同的对象(1)可执行文件的映像加载到的基地址是由链接程序决原创 2009-04-26 16:12:00 · 442 阅读 · 0 评论 -
第六章 (3)CreateThread函数
CreateThread函数1、CreateThread函数概述要创建一个或多个辅助线程(辅助函数),只需要让一个已经运行的线程来调用CreatThreadHANDLE CreateThread(PSECURITY_ATTRIBUTES psa, DWORD cbStack,PTHREAD_START_ROUTINE pfnStartAddr, PVOID pvPara原创 2009-04-26 16:29:00 · 944 阅读 · 0 评论 -
第四章 进程(6)CreateProcess函数详解
二、CreateProcess函数BOOL CreateProcess(LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes。LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInherit原创 2009-04-26 16:20:00 · 2055 阅读 · 0 评论 -
第六章 线程的基础知识
A: 线程由两个部分组成:•线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。• 另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。多个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,(因为句原创 2009-04-26 16:26:00 · 304 阅读 · 0 评论 -
第七章 线程的调度、优先级和亲缘性(2)
二、暂停和恢复进程的运行Windows不存在暂停或恢复进程的概念,因为进程不会被安排获得 C P U时间。Windows允许一个进程暂停另一个进程中的所有线程的运行,但是从事暂停操作的进程必须是个调试程序。三、线程的睡眠方式VOIDSleep(DWORD dwMilliseconds);使线程自己暂停运行dwMillisecondsMS,在此时间片内线程是不可调度状态。原创 2009-05-16 14:43:00 · 292 阅读 · 0 评论 -
第七章 线程的调度、优先级和亲缘性(1)
上下文转换:每隔2 0 m s左右,Windows要查看当前存在的所有线程内核对象。在这些对象中,只有某些对象被视为可以调度的对象。Windows选择可调度的线程内核对象中的一个,将它加载到 CPU的寄存器中,它的值是上次保存在线程的环境中的值。这项操作称为上下文转换。一、暂停和恢复线程的运行A: 在线程内核对象的内部有一个值,用于指明线程的暂停计数。当调用 CreateProces原创 2009-05-16 14:41:00 · 364 阅读 · 0 评论 -
第九章 线程与内核对象的同步(1)
进程内核对象,是一个BOOBLE值,进程运行的时候内核对象处于未通知状态(FALSE),当进程终止的时候处于已通知状态(TRUE)。当线程等待的内核对象处于未通知状态时,线程不可调度。当内核对象变为已通知状态时线程立即变为可调度状态并投入运行。可处于已通知态和为通知态的内和对象:进程、线程、作业、文件、控制台输入、文件修改通知、事件、可等待计时器、信标、互斥对象一、等待函数等原创 2009-05-30 10:15:00 · 487 阅读 · 0 评论