资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实 验(二)进程的创建实 验 目 的l练习使用 EOS API 函数 CreateProcess 创 建一个进程,掌握创建进程的方法,理解 进程和程序的区别。l调试跟踪 CreateProcess 函数的执行过程 ,了解进程的创建过程,理解进程是资源 分配的单位。程序和进程 l进程是动态的,程序是 静态的。l进程是暂时的,程序可 长久保存。l进程和程序的组成不同 。l进程与程序的对应关系 。 进程控制块(EOS在ps/psp.h文件中定义了PCB结构) (PCB: Process Control Block) typedef struct _PROCESS BOOLEAN System;/ 是否系统进程 UCHAR Priority;/ 进程的优先级 PMMPAS Pas;/ 进程地址空间 PHANDLE_TABLE ObjectTable;/ 进程的内核对象句柄表 LIST_ENTRY ThreadListHead;/ 线程链表头 PTHREAD PrimaryThread;/ 主线程指针 LIST_ENTRY WaitListHead;/ 等待队列,等待进程结束的线程在此队列等待PSTR ImageName;/ 二进制映像文件名称 PSTR CmdLine;/ 命令行参数 PVOID ImageBase;/ 可执行映像的加载基址 PPROCESS_START_ROUTINE ImageEntry; / 可执行映像的入口地址HANDLE StdInput;/ 标准输入句柄 HANDLE StdOutput;/ 标准输出句柄 HANDLE StdError;/ 标准错误输出句柄ULONG ExitCode;/ 进程退出码 PROCESS;lEOS的PCB结构中主要包括了进程控制信息(是 否系统进程标志、优先级),进程所拥有的资源 (地址空间、内核对象句柄表等)。可以认为在 EOS的PCB结构中除了进程控制信息,其它的都 是进程所拥有的资源。l一般来说,PCB中应该包括用来保存CPU现场的 结构,这样才能使多个进程并发执行。但是EOS 中使用了线程概念,将线程做为CPU执行和调度 的单位,进程仅仅做为资源的容器,所以,用来 保存CPU现场的结构就被定义在线程控制块( TCB: Thread Control Block)中了。线程控制块(EOS在psp.h文件中定义了TCB结构) (TCB: Thread Control Block) typedef struct _THREAD PPROCESS Process;/ 线程所属进程指针 LIST_ENTRY ThreadListEntry;/ 进程的线程链表项 UCHAR Priority;/ 线程优先级 UCHAR State;/ 线程当前状态 ULONG RemainderTicks;/ 剩余时间片,用于时间片轮转调度 STATUS WaitStatus;/ 阻塞等待的结果状态 KTIMER WaitTimer;/ 用于有限等待唤醒的计时器 LIST_ENTRY StateListEntry;/ 所在状态队列的链表项 LIST_ENTRY WaitListHead;/ 所有等待线程结束的线程都在此队列等待PVOID KernelStack;/ 线程位于内核空间的栈 CONTEXT KernelContext;/ 线程执行在内核状态的上下文环境状态PMMPAS AttachedPas;/ 线程在执行内核代码时绑定进程地址空间PTHREAD_START_ROUTINE StartAddr;/ 线程的入口函数地址 PVOID Parameter;/ 传递给入口函数的参数ULONG LastError;/ 线程最近一次的错误码 ULONG ExitCode;/ 线程的退出码 THREAD;CONTEXT结构体定义的成员变 量用来保存线程的CPU现场。在 inc/ke.h中找到CONTEXT结构体 的定义 CONTEXT 结构体定义 typedef struct _CONTEXT ULONG Eax; ULONG Ecx; ULONG Edx; ULONG Ebx; ULONG Esp; ULONG Ebp; ULONG Esi; ULONG Edi; ULONG Eip; ULONG EFlag; ULONG SegCs; ULONG SegSs; ULONG SegDs; ULONG SegEs; ULONG SegFs; ULONG SegGs; CONTEXT, *PCONTEXT;可以看到CPU现场主要包 含了CPU中各个寄存器的 值。当一个线程被中断执 行时,CPU现场被保存在 该线程的TCB中,当该线 程可以继续执行时,TCB 中保存的现场被恢复到 CPU中,该线程就可以从 中断处继续执行了。EOS创建进程的过程创建一个进程对象 (PCB) 为进程分配一个进程地址空间和一个句柄表 系统将进程的可执行文件装入进程的用户地 址空间中,并和内核进行装入的动态链接。 系统为进程创建一个主线程, 主线程的可执行文件被加载到 内存中的入口地址开始执行 CreateProcess 函数 EOS提供的用于创建进程的API函数定义如下,EOS应用 程序通过调用此函数为程序(可执行文件)创建进程。BOOL CreateProcess( IN PCSTR ImageName, IN PCSTR CmdLine, IN ULONG CreateFlags, IN PSTARTUPINFO StartupInfo, OUT PPROCESS_INFORMATION ProcInfo );typedef struct _STARTUPINFO HANDLE StdInput; HANDLE StdOutput; HANDLE StdError; STARTUPINFO, *PSTARTUPINFO;typedef struct _PROCESS_INFORMATION HANDLE ProcessHandle; HANDLE ThreadHandle; ULONG ProcessId; ULONG ThreadId; PROCESS_INFORMATION,*PPROCESS_INFORMATION;其它 API 函数 HANDLE GetStdHandle( ULONG StdHandle /进程标准句柄的索引 )ULONG WaitForSingleObject( IN HANDLE Handle, /指定要等待的句柄 IN ULONG Milliseconds /指定超时时间 ) BOOL GetExitCodeProcess( IN HANDLE ProcessHandle, /指定要得到退出码的进程的句柄 OUT PULONG ExitCode /输出进程退出码 )BOOL CloseHandle( HANDLE Handle /指定要关闭的句柄 ) ULONG GetLastError( VOID ) #define STD_INPUT_HANDLE1 #define STD_OUTPUT_HANDLE2 #define STD_ERROR_HANDLE3得到调用此函数 的进程所使用的 标准句柄 等待直到指定的句 柄进入有信号状态 或者超时后才返回 在进程执行完毕 后,得到进程的 退出码 关闭指定 的句柄 得到调用此函数 的线程保存的最 后的错误码 main 函数 流程图EOS应用程序eosapp.exe创建的进程
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号