进程管理模拟实验指导书09

合集下载

实验一 进程管理模拟

实验一 进程管理模拟

3 、实验步骤: 实验步骤:
( 1 )复习进程管理部分内容 ( 2 )预习 C++ Builder 或 VC 、 Dephi 、 J++ Builder 线程编程 运行示例程序, ( 3 )运行示例程序,进一步明确实验要求 上机编程, ( 4 )上机编程,调式程度 ( 5 )完成实验报告
实验一
进程ቤተ መጻሕፍቲ ባይዱ理
1 、实验目的: 实验目的:
• 通过本次实验,进一步理解进程 PCB 的概 通过本次实验, 如何实现, 念,以及 PCB 如何实现,组织 • 复习数据结构中如何对链的操作,包括建 复习数据结构中如何对链的操作, 删除、 链、删除、插入结点等 • 通过实验使学生进一步了解进程、进程状 通过实验使学生进一步了解进程、 态、进程控制块等基本概念
2 、实验内容: 实验内容:
建立一个结点, ( 1 )建立一个结点,即 PCB 块包括用户标 识域、状态域(执行、等待、就绪)、 识域、状态域(执行、等待、就绪)、 link 域 建立三个队列(执行队列、就绪队列、 ( 2 )建立三个队列(执行队列、就绪队列、 等待队列) 等待队列) ( 3 )根据进程状态转换实现对三个队列的 具体操作 ( 4 )用 switch 选择语句选择状态 运行结果(其中的一种情况) ( 5 )运行结果(其中的一种情况)

进程管理模拟实验

进程管理模拟实验

进程管理一、目的与要求1.目的进程是操作系统最重要的概念之一,是了解操作系统实质的关键。

本课题实习的目的是,加深对进程概念及进程管理各部分内容的理解;熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构、通讯机构的实施。

2.要求要求设计一个允许n个进程并发运行的进程管理模拟系统。

该系统包括以下内容:(1)简单的进程控制(2)同步及通讯机构(3)中断机构(4)进程调度。

其进程调度算法可任意选择。

每个进程用一个PCB表示,其内容可根据具体情况设置。

各进程之间有一定的同步关系。

系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。

二、范例1.题目支持多个进程并发运行的简单进程管理模拟系统本系统的同步机构采用信号量上的P、V操作的机制;控制机构包括阻塞和唤醒操作;时间片中断处理程序模拟时间片中断;进程调度程序负责为各进程分配处理机。

系统中涉及了3个并发进程。

它们之间的关系是:3个进程需要互斥使用临界资源S2,进程1和进程2又需互斥使用临界资源S1.本系统在运行过程中随机打印出各进程的状态变换过程,系统的调度过程及公共变量的变化情况。

2.算法与N~S图系统为进程设置了5种运行状态:e—执行态;r—高就绪态;t—低就绪态(执行进程因时间片到限而转入);w—等待态;c—完成态。

各进程的初始状态均设置为r.系统分时执行各进程,并规定3个进程的执行概率均为33%。

通过产生随机数x来模拟时间片。

当进程process1访问随机数x时,若x>=0.33;当进程process2访问x时,若x<0.33或x>=0.66;当进程process3访问x时,若x<0.66,则分别认为各进程的执行时间片到限,产生“时间片中断”而转入低就绪态t。

进程调度算法采用剥夺式最高优先数法。

各进程的优先数通过键盘输入予以静态设置。

调度程序每次总是选择优先数最小(优先权最高)的就绪进程投入执行。

操作系统实验1--进程管理

操作系统实验1--进程管理

设计一个有N个进程的进程调度程序一、实验目的通过一个简单的进程调度模拟程序的实现,加深对各种进程调度算法,进程切换的理解。

二、实验内容1、进程调度算法:采用动态最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。

2、每个进程有一个进程控制块(PCB)表示。

进程控制块可以包含如下信息:●进程名----进程标示数ID;●优先数----Priority,优先数越大优先权越高;●到达时间----进程的到达时间为进程输入的时间;●进程还需要运行时间----AllTime,进程运行完毕AllTime =0;●已用CPU时间----CPUTime;●进程的阻塞时间StartBlock----表示当进程在运行StartBlock个时间片后,进程将进入阻塞状态;●进程的阻塞时间StartTime----表示当进程阻塞StartTime个时间片后,进程将进入就绪状态;●进程状态----State;●队列指针----Next,用来将PCB排成队列。

3、调度原则●进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。

进程的到达时间为进程输入的时间;●进程的运行时间以时间片为单位进行计算;●进程在就绪队列中带一个时间片,优先数加1;●每个进程的状态可以是就绪R(Ready)、运行R(Run)、阻塞B(Block)、或完成F(Finish)四种状态之一;●就绪进程获得CPU后都只能运行一个时间片,用已占用CPU时间加1来表示;●如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减3,然后把它插入就绪队列等待CPU;●每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查;●重复以上过程,直到所要进程都完成为止。

三、实验要求完成实验内容并写出实验报告,报告应具有以下内容:1、实验目的。

进程管理实验报告源代码(3篇)

进程管理实验报告源代码(3篇)

第1篇---进程管理实验报告一、实验目的1. 理解进程的概念和进程管理的基本原理。

2. 掌握进程的创建、调度、同步和通信等操作。

3. 通过编程实现简单的进程管理功能。

二、实验环境1. 操作系统:Windows/Linux2. 编程语言:C/C++3. 开发环境:Visual Studio/Code::Blocks三、实验内容1. 进程的创建与终止2. 进程的同步与互斥3. 进程的通信4. 进程调度算法四、实验步骤1. 进程的创建与终止```cinclude <stdio.h>include <sys/types.h>include <unistd.h>int main() {pid_t pid;// 创建子进程pid = fork();if (pid < 0) {// 创建进程失败perror("fork failed");return 1;} else if (pid == 0) {// 子进程printf("Child process, PID: %d\n", getpid()); // 执行子进程的任务...sleep(5); // 子进程暂停5秒_exit(0); // 子进程退出} else {// 父进程printf("Parent process, PID: %d\n", getpid()); wait(NULL); // 等待子进程结束printf("Child process has terminated.\n");}return 0;}```2. 进程的同步与互斥```cinclude <stdio.h>include <pthread.h>pthread_mutex_t mutex;void thread_func(void arg) {pthread_mutex_lock(&mutex); // 加锁printf("Thread %ld is running\n", (long)arg);sleep(1); // 模拟任务执行pthread_mutex_unlock(&mutex); // 解锁return NULL;}int main() {pthread_t thread1, thread2;// 初始化互斥锁pthread_mutex_init(&mutex, NULL);// 创建线程pthread_create(&thread1, NULL, thread_func, (void )1); pthread_create(&thread2, NULL, thread_func, (void )2); // 等待线程结束pthread_join(thread1, NULL);pthread_join(thread2, NULL);// 销毁互斥锁pthread_mutex_destroy(&mutex);return 0;}```3. 进程的通信```cinclude <stdio.h>include <stdlib.h>include <sys/ipc.h>include <sys/shm.h>int main() {key_t key;int shmid;int data;// 生成共享内存标识符key = ftok("shmfile", 65);// 创建共享内存段shmid = shmget(key, sizeof(int), 0666 | IPC_CREAT); if (shmid == -1) {perror("shmget failed");exit(1);}// 连接到共享内存段data = (int )shmat(shmid, (void )0, 0);if (data == (int )(-1)) {perror("shmat failed");exit(1);}// 使用共享内存data = 100;printf("Data in shared memory: %d\n", data); // 分离共享内存段if (shmdt(data) == -1) {perror("shmdt failed");exit(1);}// 删除共享内存段if (shmctl(shmid, IPC_RMID, NULL) == -1) { perror("shmctl failed");exit(1);}return 0;}```4. 进程调度算法```cinclude <stdio.h>include <stdlib.h>include <sys/time.h>typedef struct {int pid;int arrival_time;int burst_time;int waiting_time;int turnaround_time;} Process;int main() {Process processes[] = {{1, 0, 5, 0, 0},{2, 1, 3, 0, 0},{3, 4, 8, 0, 0}};int n = sizeof(processes) / sizeof(processes[0]);// 计算等待时间和周转时间int total_waiting_time = 0, total_turnaround_time = 0;for (int i = 0; i < n; i++) {if (i == 0) {processes[i].waiting_time = 0;} else {processes[i].waiting_time = processes[i - 1].turnaround_time;}processes[i].turnaround_time = processes[i].burst_time + processes[i].waiting_time;total_waiting_time += processes[i].waiting_time;total_turnaround_time += processes[i].turnaround_time;}printf("Average Waiting Time: %f\n", (float)total_waiting_time / n);printf("Average Turnaround Time: %f\n", (float)total_turnaround_time / n);return 0;}```五、实验结果与分析(此处应填写实验结果,包括运行程序输出、图表等,以及对实验结果的分析。

进程管理实验报告_共10篇 .doc

进程管理实验报告_共10篇 .doc

★进程管理实验报告_共10篇范文一:_进程管理实验报告进程管理实验报告一、进程与线程1.实验目的:1.通过本实验学习Linux中创建进程的方法。

2.学习系统调用fork的使用方法。

3.学习系统调用exec族调用的使用方法。

2.实验准备1.进程的创建创建一个进程的系统调用很简单,只要调用fork函数就可以了。

#includepid_tfork();当一个进程调用了fork以后,系统会创建一个子进程,这个子进程和父进程是不同的地方只有它的进程ID和父进程ID,其他的都一样,就像父进程克隆(clone)自己一样,当然创建两个一模一样的进程是没有意义的,为了区分父进程和子进程,我们必须跟踪fork调用返回值。

当fork调用失败的时候(内存不足或者是用户的最大进程数已到)fork返回—1,否则fork的返回值有重要的作用。

对于父进程fork返回子进程ID,而对于fork 子进程返回0,我们就是根据这个返回值来区分父子进程的。

2.关于fork的说明使用该函数时,该函数被调用一次,但返回两次,两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程ID。

将子进程ID返回给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数可以是一个子进程获得其所有子进程的进程ID。

而fork函数使子进程得到的返回值是0的理由是:一个子进程只会有一个父进程,所以子进程总是可以调用函数getpid获得其父进程的进程ID。

3.系统调用exec族调用的说明父进程创建子进程后,子进程一般要执行不同的程序。

为了调用系统程序,我们可以使用系统调用exec族调用。

Exec族调用有以下五个函数:intexecl(constchar*path,constchar*arg,?);intexeclp(constchar*file,constchar*arg,?);intexecle(constchar*path,constchar*arg,?);intexecv(constchar*path,constchar*argv[]);intexecvp(constchar*file,constchar*argv[]);exec族调用可以执行给定程序。

进程管理模拟实验报告

进程管理模拟实验报告

实验三进程管理模拟实验关键问题:阅读后面的C语言实例,修改程序,使其优先数在运行期间可以变化(动态优先数)。

例如当某进程被时间片中断次数增加到一定数目时,提高其优先权。

设计思路:首先在进程控制块中增加一个记录进程被中断的次数的整形变量sum;然后在初始化函数中对它初始化赋值为0;然后在block()函数中在每个进程被中断后sum进行加1操作,再显示该被中断进程被中断的次数;然后再find()函数中设计当某个进程被中断的次数达到3时修改该进程的优先权,并把该优先权设计为最高!然后再由find()函数返回被选中的进程的进程号!然后通过原来的相关代码来执行它相应的操作(其他部分代码不用变动)!实现的关键代码://在3个进程中按就绪状态及其优先数选出进程。

返回选出的进程号。

int find(){int j,pd=NIL,w=MAXPRI;for (j=0;j<3;j++) //选择高就绪状态优先级最高的进程{if(pcb[j].sum==3){pcb[j].priority=0;pcb[j].sum=0;printf("《进程%d中断次数达到3次,该进程优先权最高》\n",j+1);w=pcb[j].priority;pd=j;}else{if ((pcb[j].status=='r') && (pcb[j].priority<w)){w=pcb[j].priority;pd=j;}}}if (pd==NIL) //没有高就绪状态的进程,寻找低就绪状态的进程。

{for (j=0;j<3;j++){if(pcb[j].sum==3){pcb[j].priority=0;pcb[j].sum=0;printf("《进程%d中断次数达到3次,该进程优先权最高》\n",j+1);w=pcb[j].priority;pd=j;}else{if ((pcb[j].status=='t') && (pcb[j].priority<w)){w=pcb[j].priority;pd=j;}}}}return (pd);}程序运行结果:总结及进一步改善建议:该实验综合用了进程调度,进程控制,进程同步,进程调度算法等相应知识。

操作系统原理课程设计方案说明书进程管理器的模拟实现

操作系统原理课程设计方案说明书进程管理器的模拟实现

数学与计算机学院课程设计说明书课程名称: 操作系统原理-课程设计课程代码:8404161题目:进程管理器的模拟实现年级/专业/班:学生姓名:学号:开始时间:2018年12月11日完成时间:2018年12月24日课程设计成绩:指导教师签名:年月日《操作系统原理》课程设计任务书学院名称:数学与计算机学院课程代码:_8404061__专业:计算机科学与技术年级: 2009一、设计题目进程管理器的模拟实现二、主要内容目的:编程模拟实现进程管理器,加深对进程、程序概念掌握,并提高编程能力。

内容:利用Windows相关编程工具,实现进程管理器的相关功能:(1)显示当前正在运行的进程及其占用的资源(2)可以对某一进程进行停止;三、具体要求及应提交的材料1、完成系统的需求分析:包含功能需求、数据需求、性能需求等。

2、完成系统设计:包含系统概要设计<软件结构图)及详细设计<画出流程图)。

3、测试:编写合适的测试用例完成系统的测试工作并分析结果。

4、完成后应上交的材料:课程设计说明书:包含封面、任务书、说明书<说明书见后面模板)。

包括系统设计目的要求,类的层次图<包括类成员列表)、设计思路,系统功能模块图、参考资料、程序清单、设计心得总结等。

对照自己设计的完成情况认真书写。

软件源程序光盘。

注:学生完成课程设计后,提交课程设计报告及相关电子文档,要求将前述全部内容依先后顺序写成设计报告一份,要求文字通畅、字迹工整,文字不少于20000字,装订成册。

四、进度安排课程设计共两周<15、16周)进行,其进度时间大致分配如下:五、参考资料[1]. 谢青松. 操作系统原理. 人民邮电出版社.2004[2]. 曹先彬. 操作系统原理与设计. 机械工业出版社[3]. 袁宝华. 操作系统实验教程. 北京交通大学出版社指导教师签名日期年月日系主任审核日期年月日目录1 引言41.1 问题的提出41.2国内外研究的现状41.3任务与分析42.程序的主要功能42.1创建进程功能42.2查看进程功能42.3 换出进程功能42.4杀死进程功能52.5退出功能53 程序运行平台54 总体设计55 程序说明66 模块分析86.1 创建模块86.2 查看模块116.3 换出模块116.4 杀死模块136.5 退出模块137 系统测试138 结论151 引言1.1 问题的提出进程管理器是我们经常用到的一个工具,我们可以通过C语言编程来模拟进程管理器的功能,加深对进程、程序概念掌握,并提高编程能力1.2国内外研究的现状进程管理器在各种操作系统中广泛应用,不管是windows还是linux 都有进程管理器,方便用户对系统资源进行管理。

进程管理模拟

进程管理模拟
查看置换后内存进程情况
4.杀死进程
进程杀死后运行结果(用负数来表示进程已经被杀死)
5进程之间的通讯(通过进程值的单偶关系来改变进程中标志量的值简单的描述进程之间的通讯)
实验总结
通过这次实验,使我对操作系统中的进程的概念有了进一步的了解。通过自己实际编写程序,对进程的创建以、查看、换出以及杀死某个进程等操作更加熟悉,是对课本知识的一次检验和加深印象的过程。
}பைடு நூலகம்
else
{
printf("\n请输入新进程的pid\n");
scanf("%d",&neicun[shumu].pid);
printf("\n请输入新进程的优先级\n");
scanf("%d",&neicun[shumu].youxian);
printf("\n请输入新进程的大小\n");
scanf("%d",&neicun[shumu].daxiao);
{
neicun[j].flag=22;
printf("\n发现偶数进程时,进程%d标志变量为%d",j,neicun[j].flag);//当进程中进程值为偶数,把所有进程中的标志位置
}
}
for(n=0;n<shumu;n++)
if(neicun[n].pid%2==1)
{
for(m=1;m<shumu;m++)
neicun[j].pid=-1;
printf("此进程%d被杀死",p);
}
}
}
voidtongxun()//通过进程是单双数改变进程中的参数,来达到进程之间通讯的简单描述
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进程管理模拟系统实验指导书2
一、实验目的
学习进程管理的设计与实现,学习和运用操作系统原理,设计一个操作系统子系统的模拟系统。

通过该系统的设计调试可增加对操作系统实现的感知性。

同时可发挥团队协作精神和个人创造能力。

使同学们对操作系统学习有一个实现的尝试和创新的思维。

二、实验规则
1.每组设计一个模拟系统(共100分)
2.每人设计系统中的一部分(满分60分)
3.集体调试创意(满分40分)
三、实验要求
1.进程管理功能以进程调度为主要功能。

以进程控制为辅助功能。

2.体现操作系统原理中进程调度算法和进程控制算法。

按照操作系统原理设计。

3.结构化设计。

设计时构建出模块结构图并存于文件中。

模块化实现,对每一功能,每一操作使用模块、函数、子程序设计方法实现。

4.进程以PCB为代表。

队列、指针用图示。

每一步功能在桌面上能显示出来。

5.系统应具有排错功能,对可能出现的错误应具有排查功能和纠错能力。

6.界面自行设计,语言自行选择。

(可用VC/C++/C/C#语言,也可用你会的其他语言,甚至还可用PPT)
7.每人的设计功能都能表现或说明出来。

8.进程以队列法组织,对不同进程调度算法:
FIFO队列或PRI队列或rotate(轮转队列)用同一个进程序列组织,对阻塞队列可设置一个,也可设多个。

9.因为是模拟系统,所以要显示每个功能和操作结果。

显示应力求清晰、易读和一目了然(一屏),最好能用汉字,否则可用英语或汉语拼音。

10.操作方便,使用便捷。

可视化程度高。

11.设计出系统后,还需要写出(介绍系统采用的语言、支撑平台、小组成员及分工。

如何安装、如何启动、如何操作)
12.每组需写一份课程设计报告,内容包括:课程设计内容,课程设计设计思路,课程设计结构图,及分工内容、介绍。

13. 实验结果演示验收后,将可在任何环境下运行的可执行文件和系统说明书一起存盘并交盘。

(可合组一张盘),上标:班级、组号、姓名。

14. 实验结束后从中选出优秀作品,介绍给大家。

四、系统功能
1.创建进程:主要创建PCB,并在创建后显示PCB及所在RL队列。

内容包括①标识数(按产生顺序产生),②进程名(字母序列),③优先数(随机产生),④进程状态,⑤队列指针(可用数字或图表示),⑥其它(可自定义:如运行时间、家族等)。

创建进程的个数可人工设定,或可自动设定,也可两者兼有。

2.撤销进程:撤销进程主要显示PCB的消失和队列的变化。

3.进程队列的组织:进程队列可对创建的所有进程变化队形:可组织成FIFO队列,也可组织成PRI队列;或rotate队列,对队列有插入、移出的功能,也有在队列中某位置插入删除功能。

4.显示功能:模拟系统在整个演示过程中都需要可视化,因此显示功能非常重要,要求对队列、PCB每次操作前后予以显示,以表示操作功能的实施效果。

5.进程调度:按不同队列选取队首元素组织成进程调度算法的实施。

例如:FIFO、PRI、rotate。

同时进程调度后,被调度进程改变状态、优先级(在PRI中)、设定(或人工控制)时间片后,运行者或进入就绪队列RL,或进入阻塞队列sq。

阻塞PCB在一定时机(自定)后可进入RL。

其间每次变化或转换,应显示相应内容(PCB、队列或其它数据)。

在进入就绪、运行等状态后,可设置或消耗完时间片后被撤销。

6.可选功能:能对不同功能给予选择和显示。

五、实验方法与进度:
1.各组首先组织学习实验指导书,搞清实验内容,明确实验目的。

以此为基础商议系统构成,设计目标、界面、接口、模块及组员分工。

2.每组成员分头编程并调试,然后共同组合。

3.上机时间:8——16周二(计0903)、周三(09合)1,2节(计1,2,信)5,6节在Z4—326实验室上机,平时自己上机。

第8周:进程管理模拟子系统总体设计,框架设计,界面设计;第9周:进程管理的详细设计,编程;第10、11周:模块设计调试;第12、13周:组装调试;第14-15周:系统检查与验收;17周优秀作品交流。

4.第十四周开始验收和考评,在验收和考评每组成员时,问到问题涉及到哪位同学,这位同学就回答,根据回答、演示和整个系统功能给出每人成绩。

六、进程管理模拟系统设计框架之例、
数据结构PCB内容包括:进程名:name;标识数:n;优先数:pro;状态:st。

阻塞队列Sq内容包括:进程名:name;标识数:n;优先数:prost。

就绪队列Rl内容包括:进程名:name;标识数:n;优先数:prost。

模块设计方法:
模块设计可采用模块逐层调用方法。

例:创建进程
if(emp) then crq(Rl);/如果队列空,则调用创建模块创建就绪队列。

lsq(Rl);/调用显示模块显示就绪队列。

Crch(n)/创建过程
申请PCB块/创建进程调用创建PCB模块;
填写进程名;标识数;优先数;状态;家族;
lsp(PCB名);/调用显示模块显示新创建的进程。

in(Rl);/调用插入模块将所创建进程插入就绪队列。

lsq(Rl);/调用显示模块显示就绪队列。

……
七、整体构架和目标功能设计
将整体内容整理出来,对设计目标分析整理,按设计目标将整体内容及关系搭建出来。

例如:进程管理内容包括进程创建、进程阻塞、进程唤醒、进程撤销、进程调度等等,目标是进程调度和进程控制。

于是得出:进程管理下属包括进程创建、进程阻塞、进程唤醒、进程撤销、进程调度等功能。

整体中还包括进入和退出的功能。

1)目标模块设计
目标模块设计主要是模块功能的设计以及模块组成。

例如:创建进程模块功能有:寻找PCB;填写PCB;插入队列。

它由查找、填写、插队等模块(函数)组成。

2)调用关系设计根据目标模块设计,
设计调用关系并画出图示,以标明每个函数或模块由谁调用,调用谁。

3)具体模块设计(伪代码设计)
针对设计的每个模块功能、调用关系,写出操作顺序,此时可以用伪代码或类似自然语言的代码编写。

4)界面设计
依据调用关系和具体模块设计来设计主界面,再设计每一个具体界面。

力求一屏化设计界面
5)数据结构设计
依据调用关系和具体模块设计来确定总体结构和每个模块的数据结构。

要实现整体统一。

6)编程与调试——模块程序设计
利用所学语言将伪代码设计的模块用语言编写出程序来。

并对每个模块逐一加入不同数据(信息)调试运行,观其运行情况而修改程序。

反复调试修改,直至运行结果与设计目标一致为止。

7)链接与整体调试
将各个模块按照每个组成部分调试运行,观察运行结果,直至运行结果与设计目标一致为止;再加一层模块,调试运行,逐步加至整体,调试运行至成功。

相关文档
最新文档