实验一 进程控制与描述
一、实验目的
1. 利用 Windows 提供的 API 函数,编写程序,实现进程的创建和终止(如创建写字板进程
及终止该进程)。
2. 加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程
的应用程序编程经验。
二、实验内容与步骤
1. 进程的创建和终止。编写一段程序,可以创建一个进程,并终止当前创建的进程。试观
察记录程序执行的结果,并分析原因。
2. 利用 VC++实现上述程序设计和调试操作,对于进程创建的成功与否、终止进程操作的成
功与否提供一定的提示框。
3. 通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法。
三、实验中遇到的问题及解决方法
1.进程的句柄与退出代码
'
查阅相关资料,对句柄的概念有一个初步的了解:
从数据类型上来看它只是一个 32 位(或 64 位)的无符号整数。
在 Windows 环境中,句柄是用来标识项目的。WINDOWS 程序中并不是用物理地址来标识一个
内存块,文件,任务或动态装入模块的。相反,WINDOWS API 给这些项目分配确定的句柄,
并将句柄返回给应用程序,然后通过句柄来进行操作。
在程序设计中,句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、
操作系统)所管理的内存块或对象时,就要使用句柄。
句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理
的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强
了系统对引用对象的控制。
在本实验中,Create Process()中创建了进程 pi ,可直接用获取。
2.句柄和进程 ID 的区别
句柄实际是一个指针,他指向一块包含具体信息数据的内存,可以当做索引 ,所以进程句
柄是当你要访问该进程时取得的,使用完毕必须释放。
id 一般是一个标识符,用来区别不同项 一个进程在不同的调用时间中有可能句柄的值是不
一样的,但是 ID 只有也只能有一个。
四、思考
1.对可执行文件分配内存,执行。
.
2. 编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为效
的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链
接生成可执行程序。
3. 系统为所有用户进程维护了一个 task table,在这里面存放着指向每个进程的进程控制
块(PCB)的指针。在某次时钟中断中,轮到一个进程被唤醒(新建进程也得乖乖进入任务
队列排队),CPU 读取该进程 PCB 结构中那个指向 TTS 的指针。各进程的 TTS 构成一个表,
表的段描述符存放于 GDT(全局段描述符表)或者 LDT(局部段描述符表)。然后 CPU 读取
TTS 中的各项数据并且根据它的各项值来设置寄存器,包括 CS(代码段选择子)和 IP(指