《高级语言程序设计》课程设计报告
- 格式:doc
- 大小:214.50 KB
- 文档页数:19
2013-2014学年第二学期《高级语言程序设计》
课程设计报告
题目:进程调度模拟
专业:计算机科学与技术
班级:12级对口(3)班
姓名:刘以鹏
指导教师:代美丽
成绩:
计算机与信息工程系
2014年 5月 23日
目录
1 1 设计目的及要求 (3)
1.1 设计目的 (3)
1.2 课程设计的实验环境 (3)
1.3 课程设计的预备知识 (3)
1.4 课程设计要求 (3)
2 课程设计内容 (3)
2.1程序功能介绍 (3)
2.2程序整体设计说明 (4)
2.2.1设计思路 (4)
2.2.2数据结构设计及用法说明 (5)
2.2.3程序结构(流程图) (5)
2.2.4各模块的功能及程序说明 (6)
2.2.5程序运行结果 (7)
3 总结 (9)
参考资料 (11)
程序源代码 (12)
1 设计目的及要求
1.1 设计目的
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。本课程设计的目的和任务:
1. 巩固和加深学生对C语言课程的基本知识的理解和掌握
2. 掌握C语言编程和程序调试的基本技能
3. 利用C语言进行基本的软件设计
4. 掌握书写程序设计说明文档的能力
5. 提高运用C语言解决实际问题的能力
1.2 课程设计的实验环境
硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。
1.3 课程设计的预备知识
熟悉C语言及C语言开发工具。
1.4 课程设计要求
1. 分析课程设计题目的要求
2. 写出详细设计说明
3. 编写程序代码,调试程序使其能正确运行
4. 设计完成的软件要便于操作和使用
5. 设计完成后提交课程设计报告
2课程设计内容
2.1程序功能介绍
在多道程序环境下,进程数目往往多于处理机数目,致使他们争用处理机。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使
之运行。分配处理机的任务是由进程调度程序完成的。一个进程被建立后,系统为了便于对进程进行管理,将系统中的所有进程按其状态,将其组织成不同点进程队列。于是系统中有运行进程队列、就绪队列和各种事件的进程等待队列。进程调度的功能就是从就绪队列中挑选一个进程到处理机上运行。
2.2程序整体设计说明
用C语言实现进程调度-操作系统课程设计设计思想:“最高优先数优先”调度算法的基本思想是把cpu分配给就绪队列中优先数最高的进程。采用动态优先数,即优先数在创建进程时给定一个初始值,当进程获得一次cpu后其优先数就减少1。它用C语言编写的实现模拟进程调度的程序,用户模拟几个进程,输入它们的进程名,优先级,运行时间等,进程的初使状态为就绪状态。然后就按优先级优先方式调度各个进程,进程的状态也因此会变成等待状态或完成状态。
2.2.1设计思路
进程是当前操作系统下一个被加载到内存的、正在运行的应用程序的实例。每一个进程都是由内核对象和地址空间所组成的,内核对象可以让系统在其内存放有关进程的统计信息并使系统能够以此来管理进程,而地址空间则包括了所有程序模块的代码和数据以及线程堆栈、堆分配空间等动态分配的空间。进程仅仅是一个存在,是不能独自完成任何操作的,必须拥有至少一个在其环境下运行的线程,并由其负责执行在进程地址空间内的代码。在进程启动的同时即同时启动了一个线程,该线程被称作主线程或是执行线程,由此线程可以继续创建子线程。如果主线程退出,那么进程也就没有存在的可能了,系统将自动撤消该进程并完成对其地址空间的释放。
加载到进程地址空间的每一个可执行文件或动态链接库文件的映象都会被分配一个与之相关联的全局唯一的实例句柄。该实例句柄实际是一个记录有进程加载位置的基本内存地址。进程的实例句柄在程序入口函数中通过第一个参数传递,其实际值即为进程所使用的基本地址空间的地址。对于VC++链接程序所链接产生的程序,其默认的基本地址空间地址为0x00400000,如没有必要一般不要修改该值。
通过创建一个新的进程及在其地址空间内运行的主线程来启动并运行一个新的程序。具体的,在执行函数时,首先由操作系统负责创建一个进程内核对象,初始化计数为1,并立即为新进程创建一块虚拟地址空间。随后将可执行文件或其他任何必要的动态链接库文件的代码和数据装载到该地址空间中。在创建主线程时,也是首先由系统负责创建一个线程内核对象,并初始化为1。最后启动主线程并执行进程的入口函数RunProc(),完成对进程和执行线程的创建。
2.2.2数据结构设计及用法说明
数据结构设计:本程序运用了struct函数,并用if语句判断运行指针,用while循环语句确定插入位置。
typedef struct PCB{
char NAME[10]; //进程名字
int PRIO; //进程优先数
int ROUNT; //轮转时间片
int COUNT; //计数器
int NEEDTIME; //需要的CPU时间
int CPUTIME; //占用cpu时间
char *STATE; //进程状态
}ElemPCB;
用法说明:
1.进程通过定义一个进程控制块的数据结构(PCB)来表示;
2.每个进程需要赋予进程信息、进程到达时间、进程需要运行的总时间的属性;
3.在程序进程中,以1为时间片单位;
4.运行时,输入5个进程序列,按照进程的信息输出其执行序列。
2.2.3程序结构(流程图)