- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows02解读
马洪兵清华大学电子工程系hbma@tsinghua.edu.cn, Windows的进程与线程 Windows的线程调度 Windows的进程间通信 实验一:线程同步 进程的定义和描述 进程控制块的内容 进程描述信息: 进程标识符(process ID),唯一,通常是一个整数; 进程名,通常基于可执行文件名; 用户标识符(user ID);进程组 (process group) 进程控制信息: 当前状态; 优先级(priority); 代码执行入口地址; 程序的外存地址; 运行统计信息(执行时间、页面调度); 阻塞原因 资源占用信息:虚拟地址空间的现状、打开文件列表 CPU现场保护结构:寄存器值(通用、程序计数器PC、状态PSW,地址包括栈指针) 进程上下文/描述表(context) 用户级上下文:进程的用户地址空间(包括用户栈各层次),包括用户正文段、用户数据段和用户栈; 寄存器级上下文:程序寄存器、处理机状态寄存器、栈指针、通用寄存器的值; 系统级上下文: 静态部分(PCB和资源表格) 动态部分:核心栈(核心过程的栈结构,不同进程在调用相同核心过程时有不同核心栈) Windows 的进程 Windows 的进程由执行体进程块EPROCESS表示, EPROCESS即执行体进程对象。 进程对象的属性:PID, PCB, Access Token, Base Priority, 句柄表,指向进程环境块PEB的指针,亲和处理器集合等 在Windows 中,PCB也称为内核进程块KPROCESS, KPROCESS即内核进程对象。 EPOCESS和KPROCESS位于内核空间,PEB位于用户空间 CreateProcess()函数用于创建新进程及其主线程,以执行指定的程序。 新进程可以继承:打开文件的句柄、各种对象(如进程、线程、信号量、管道等)的句柄、环境变量、当前目录、原进程的控制终端、原进程的进程组(用于发送Ctrl+C或Ctrl+Break信号给多个进程)--每个句柄在创建或打开时能指定是否可继承; 新进程不能继承:优先权类、内存句柄、DLL模块句柄 CREATE_NEW_CONSOLE表示新进程有一个新的控制台 CREATE_NEW_PROCESS_GROUP表示新进程是一个新的进程组的根。 进程退出 线程的基本概念 进程和线程的比较 地址空间和其他资源(如打开文件):进程间相互独立,同一进程的各线程间共享--某进程内的线程在其他进程不可见 通信:进程间只能使用IPC 线程间可以直接读写进程数据段(如全局变量)来进行通信 也需要同步和互斥手段的辅助,以保证数据的一致性 调度:线程上下文切换比进程上下文切换要快得多; Windows线程的有关API CreateThread()函数在调用进程的地址空间上创建一个线程,以执行指定的函数;返回值为所创建线程的句柄。 ExitThread()函数用于结束本线程。 SuspendThread()函数用于挂起指定的线程。 ResumeThread()函数递减指定线程的挂起计数,挂起计数为0时,线程恢复执行。 Windows的进程与线程 Windows的线程调度 Windows的进程间通信 实验一:线程同步 Windows的线程调度 Windows 线程调度的特征 与线程调度相关的Win32 API函数 线程优先级 线程时间配额 调度数据结构 调度策略 线程优先级提升 空闲线程 Windows 线程调度的特征 每个优先级的就绪线程排成一个先进先出队列; 当一个线程状态变成就绪时,它可能立即运行或排到相应优先级队列的尾部。 系统总是运行优先级最高的就绪线程; 在同一优先级的各线程按时间片轮转算法进行调度; 在多处理机系统中多个线程并行运行; 与线程调度相关的Win32 API函数 Suspend/ResumeThread Get/SetPriorityClass Get/SetThreadPriority Get/SetProcessPriorityBoost Get/SetThreadPriorityBoost Get/SetProcessAffinityMask SetThreadAffinityMask SetThreadIdealProcessor SwitchToThread Sleep SleepEx 线程优先级 实时优先级 在应用程序中,要把线程的优先级提升到实时优先级,用户必须有升高线程优先级的权限。 如果用户进程在实时优先级运行时间过多,它将可能阻塞关键系统功能的执行,阻塞系统线程的运行;但不会阻塞硬件中断处理。 在被其他线程抢先时,具有实时优先级线程与具有可变优先级线程的行为是不同的。 Windows 并不
文档评论(0)