210 likes | 283 Views
Chapter 3. Process Management. 概述. 3.1 进程和程序 3.2 进程状态 3.3 进程调度 3.4 进程同步与互斥 3.5 进程通信. 3.1 进程和程序. 进程是一个动态概念 , 而程序则是一个静态概念。 进程特点: ( 1 )动态性 ( 2 )并发性 ( 3 )独立性. 3.2 进程状态. 一个进程的生命期可以划分为一组状态,这些状态描述了整个过程: 创建状态 运行状态 等待状态 就绪状态 终止状态. 进程状态图. 3.3 进程调度.
E N D
Chapter 3 ProcessManagement
概述 3.1 进程和程序 3.2 进程状态 3.3 进程调度 3.4 进程同步与互斥 3.5 进程通信
3.1 进程和程序 • 进程是一个动态概念, 而程序则是一个静态概念。 • 进程特点: (1)动态性 (2)并发性 (3)独立性
3.2 进程状态 • 一个进程的生命期可以划分为一组状态,这些状态描述了整个过程: 创建状态 运行状态 等待状态 就绪状态 终止状态
3.3 进程调度 • 在Windows中,处理器调度的对象是线程。Windows把线程状态分成七种: 就绪状态(Ready) 备用状态(Standby) 运行状态(Running) 等待状态(Waiting) 转换状态(Transition) 终止状态(Terminated) 初始化状态(Initialized)
3.4 进程同步与互斥 • 信号量机制 • 管程机制
3.5 进程通信 • 消息通信 • 共享内存 • 消息管道、邮槽和套接字通信 • 动态数据交换
实验 • 3.1 进程创建 实验 • 3.2 进程终止实验
3.1 进程创建 实验 进程创建实验分析了进程创建过程和Windows API中CreateProcess函数对内核函数的调用过程。
进程创建分析 • 打开EXE文件,创建局部的段对象。 • 创建执行体进程块对象。 • 创建和初始化主线程(包括栈、上下文、执行体线程块对象的创建)。 • 通知系统新的进程已经初始化结束,系统为新的进程的运行设置环境。 • 主线程进入就绪队列,准备接受调度(如果在创建进程的时候使用了REATE_SUSPENDED标志,那么就挂起主线程)。 • 在新的进程和线程的上下文中,完成地址空间的初始化(如动态链接库的加载等)和开始执行程序。
stage 2: 创建进程内核对象 1.设置EPROCESS 2.创建进程地址空间 3.初始化KPROCESS 4.完成进程地址空间的设置 5.设置PEB 6.完成进程内核对象的创建,审核收尾工作 Ps\create.c文件中PspCreateProcess 函数
stage3 创建线程 • 进程对象中的线程计数增加 • ETHREAD被创建并初始化 • 线程ID被创建 • 用户进程空间中的TEB被设置 • 调用KeInitThread函数来设置KTHREAD结构 • 创建线程时检查权限。 • 最终,线程完整,等待它的新生 Ps\create.c文件中PspCreateThread 函数
createprocess函数验证 • 1. Win32 API函数CreateProcess() 调用了NtCreateProcessEx(),再调用NtCreateThread()。 • 2.编写一个简单的调用CreateProcess() 函数创建新进程的程序,通过windbg在ntdll中的NtCreateProcessEx()和NtCreateThread()函数上设置断点。验证进程创建过程。
3.2 进程终止分析 • •主线程的进入点函数返回。 • •进程中的一个线程调用ExitProcess函数。 • •另一个进程中的线程调用TerminateProcess函数。 • •进程中的所有线程自行终止运行,这种情况几乎从未发生。
关键代码分析 • TerminateProcess () NtTerminateProcess () • 检查被终止进程句柄,并获得权限。 • 关闭所有线程。 • 释放进程体执行块。
进程终止实验 步骤1: 修改NtTerminateProcess ()函数代码,并重新编译内核 步骤2: 测试新内核