1 / 21

Chapter 3

Chapter 3. Process Management. 概述. 3.1 进程和程序 3.2 进程状态 3.3 进程调度 3.4 进程同步与互斥 3.5 进程通信. 3.1 进程和程序. 进程是一个动态概念 , 而程序则是一个静态概念。 进程特点: ( 1 )动态性 ( 2 )并发性 ( 3 )独立性. 3.2 进程状态. 一个进程的生命期可以划分为一组状态,这些状态描述了整个过程: 创建状态 运行状态 等待状态 就绪状态 终止状态. 进程状态图. 3.3 进程调度.

Download Presentation

Chapter 3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 3 ProcessManagement

  2. 概述 3.1 进程和程序 3.2 进程状态 3.3 进程调度 3.4 进程同步与互斥 3.5 进程通信

  3. 3.1 进程和程序 • 进程是一个动态概念, 而程序则是一个静态概念。 • 进程特点: (1)动态性 (2)并发性 (3)独立性

  4. 3.2 进程状态 • 一个进程的生命期可以划分为一组状态,这些状态描述了整个过程: 创建状态 运行状态 等待状态 就绪状态 终止状态

  5. 进程状态图

  6. 3.3 进程调度 • 在Windows中,处理器调度的对象是线程。Windows把线程状态分成七种: 就绪状态(Ready) 备用状态(Standby) 运行状态(Running) 等待状态(Waiting) 转换状态(Transition) 终止状态(Terminated) 初始化状态(Initialized)

  7. 线程状态转换图

  8. 3.4 进程同步与互斥 • 信号量机制 • 管程机制

  9. 3.5 进程通信 • 消息通信 • 共享内存 • 消息管道、邮槽和套接字通信 • 动态数据交换

  10. 实验 • 3.1 进程创建 实验 • 3.2 进程终止实验

  11. 3.1 进程创建 实验 进程创建实验分析了进程创建过程和Windows API中CreateProcess函数对内核函数的调用过程。

  12. 进程创建分析 • 打开EXE文件,创建局部的段对象。 • 创建执行体进程块对象。 • 创建和初始化主线程(包括栈、上下文、执行体线程块对象的创建)。 • 通知系统新的进程已经初始化结束,系统为新的进程的运行设置环境。 • 主线程进入就绪队列,准备接受调度(如果在创建进程的时候使用了REATE_SUSPENDED标志,那么就挂起主线程)。 • 在新的进程和线程的上下文中,完成地址空间的初始化(如动态链接库的加载等)和开始执行程序。

  13. stage 2: 创建进程内核对象 1.设置EPROCESS 2.创建进程地址空间 3.初始化KPROCESS 4.完成进程地址空间的设置 5.设置PEB 6.完成进程内核对象的创建,审核收尾工作 Ps\create.c文件中PspCreateProcess 函数

  14. stage3 创建线程 • 进程对象中的线程计数增加 • ETHREAD被创建并初始化 • 线程ID被创建 • 用户进程空间中的TEB被设置 • 调用KeInitThread函数来设置KTHREAD结构 • 创建线程时检查权限。 • 最终,线程完整,等待它的新生 Ps\create.c文件中PspCreateThread 函数

  15. createprocess函数验证 • 1. Win32 API函数CreateProcess() 调用了NtCreateProcessEx(),再调用NtCreateThread()。 • 2.编写一个简单的调用CreateProcess() 函数创建新进程的程序,通过windbg在ntdll中的NtCreateProcessEx()和NtCreateThread()函数上设置断点。验证进程创建过程。

  16. 3.2 进程终止分析 • •主线程的进入点函数返回。 • •进程中的一个线程调用ExitProcess函数。 • •另一个进程中的线程调用TerminateProcess函数。 • •进程中的所有线程自行终止运行,这种情况几乎从未发生。

  17. 关键代码分析 • TerminateProcess ()  NtTerminateProcess () • 检查被终止进程句柄,并获得权限。 • 关闭所有线程。 • 释放进程体执行块。

  18. 进程终止实验 步骤1: 修改NtTerminateProcess ()函数代码,并重新编译内核 步骤2: 测试新内核

More Related