太原理工大学操作系统实验报告2016
太原理工大学微机原理实验报告课案

本科实验报告课程名称:微机原理及应用实验项目:实验地点:专业班级:机械xxx班学号:xxxxxxxxxx 学生姓名:xx指导教师:2016年12月28日实验一汇编语言程序开发环境与程序调试一、实验要求和目的1.熟悉在微机上编辑、汇编、连接、调试和运行汇编语言程序的过程,掌握PC 环境下命令行方式的特点。
2.熟悉汇编过程中一些常见出错信息。
3.熟悉程序调试的方法, DOS命令窗口的debug的常用命令。
二、实验内容1、项目要求:在屏幕上显示字符串‘Hello,world!’。
2、程序设计思想:运用DOS系统功能调用(INT 21H)的9号功能。
DOS系统功能调用的9号功能是显示字符串,它调用的参数DS:DX=串地址,且字符串以“$”结束。
程序流程图如图1-1:图1-1 程序流程图3、程序清单:完整指令代码如下(简化段定义格式):.model small ;定义程序的存储模式.486 ;说明使用的80x86微处理器指令.stack ;定义堆栈段.data ;定义数据段String db 'Hello, world!','$'.code ;定义代码段.startup ;程序执行开始Mov ax, seg String ;把String的段地址送axMov ds,ax ;ax送ds,ds取得string的段地址mov dx,offset String ;String的偏移地址送dxmov ah,9 ;字符串显示功能int 21h ;DOS功能调用mov ax,4c00hint 21h ;返回DOS.exitend三、结果与分析指导教师:年月实验二内存数据的移动一、实验要求与目的:1、实验要求:编写程序实现把数据段的字符串数据移动到附加段中。
2、实验目的:通过项目学习汇编的数据传送指令和串处理类指令,巩固寻址方式,学习汇编程序设计。
二、实验内容:1、项目要求:把数据段中以dstring地址标号为开始地址的“hello world!”字符串移动到附加段以sstring地址标号为开始地址中去。
太原理工大学软件测试实验报告材料2016

本科实验报告课程名称:软件测试技术实验项目:软件测试技术实验实验地点:逸夫楼304专业班级:软件1415学号:2014005960 学生:朱伟指导教师:兰方鹏2016 年 9 月 12日测试用例表用例编号输入期望结果覆盖标准覆盖路径实际结果1 x=4,y=6,z=7;j=1;k=23语句覆盖abcdfghjj=1k=232 x=4,y=6,z=7j=1;k=23判定覆盖abcdfghjj=1;k=233 x=4,y=4,z=11j=2;k=0判定覆盖abeghjj=2;k=0;4 x=4,y=4,z=11j=2;k=0条件覆盖abeghjj=2;k=05 x=0,y=6,z=9j=1;k=0条件覆盖abeghjj=1;k=06 x=4, j=1; 基本路径覆盖abcdfghj j=1;k=23期望结果与实际结果相同一、语句覆盖:(覆盖路径:abcdfghj)二、判定覆盖:(1)覆盖路径(abcdfghj)(2)覆盖路径(abeghj)三、条件覆盖(1)覆盖路径(abeghj)(2)覆盖路径(abeghj)四、基本路径覆盖(1)覆盖路径(abcdfghj)(2)覆盖路径(abcdfij)(3)覆盖路径(abeghj)(4)覆盖路径(abeij)五、程序代码#include<stdlib.h>#include<stdio.h>#include<math.h>void DoWork(int x,int y,int z){ int k=0,j=0;if ((x>0)&&(z<10)){k=x*y-1;j=sqrt(k);}if((x=4)||(y>5)){j=x*y+10;}j=j%3;printf("j=%d\n",j);printf("k=%d\n",k);}void main(){int a,b,c;图3⑶在弹出的“RecordandRunSettings”对话框中切换至“Windows Applications”标签,如图4 所示:图4⑷在弹出的对话框中,选择“Application details:”中右边的“+”标签,如图 5所示:图5⑸在弹出的对话框中按照默认选项选择,然后点击“ok”按钮,如图6 所示:图6⑹在弹出的“Login”界面中输入用户名和密码,如图7 所示。
太原理工大学计算机网络实验报告

本科实验报告课程名称:计算机网络B实验地点:专业班级:学号:学生姓名:指导教师:2016年12月2日实验1 Packet Trace基本使用一.实验目的掌握Cisco Packet Tracer软件的基本使用方法。
二.实验任务在Cisco Packet Tracer中使用HUB组建局域网,利用PING命令检测机器的互通性。
三.实验设备集线器(HUB)一台,工作站PC三台,直连电缆三条。
四.实验环境实验环境如图所示:五.实验步骤1.运行Cisco Packet Tracer软件,在逻辑工作区放入一台集线器(HUB)和三台终端设备PC,用直连线按实验环境图所示将HUB和PC工作站连接起来,HUB端接Port口,PC端分别接以太网(Fastethernet)口。
2.分别点击各工作站PC,进入其配置窗口,选择桌面(Desktop)项,选择运行IP地址配置(IP Configuration),设置IP地址和子网掩码分别为PC0:1.1.1.1,255.255.255.0;PC1:1.1.1.2,255.255.255.0;PC2:1.1.1.3,255.255.255.0。
3.点击Cisco Packet Tracer软件右下方的仿真模式(Simulation Mode)按钮,将Cisco Packet Tracer的工作状态由实时模式(Realtime)转换为仿真模式(Simulation)。
4.点击PC0进入配置窗口,选择桌面(Desktop)项,选择运行命令提示符。
在上述DOS 命令行窗口中输入Ping 1.1.1.2命令,运行回车。
然后在仿真面板(Simulation Panel)点击自动捕获/播放(Auto Capture/Play)按钮。
5.观察数据包发送的演示过程,对应地在仿真面板的时件列表(Event List)中观察数据包的类型。
六.实验心得本次实验掌握了PackTracer模拟器基本使用,掌握在Cisco Packet Tracer中使用HUB组建局域网,利用PING命令检测机器的互通性,PC的IP地址配置和Ping命令检测机器连通性。
太原理工大学计算机网络实验报告

本科实验报告课程名称:计算机网络B 实验地点:行勉楼专业班级:学号学生姓名:指导教师:实验成绩:2016年 6 月 14 日实验3 VLAN基本配置一、实验目的掌握交换机上创建VLAN、分配静态VLAN成员的方法。
二、实验任务1、配置两个VLAN:VLAN 2和VLAN 3并为其分配静态成员。
2、测试VLAN分配结果。
三、实验设备Cisco交换机一台,工作站PC四台,直连网线四条,控制台电缆一条。
四、拓扑结构五、实验结果PC0到PC1 想通PC0到PC2 不通,不在相同VLANPC2到PC3 不通,网段不同。
Switch#sh runBuilding configuration...Current configuration : 1127 bytes!versionno service timestamps log datetime msecno service timestamps debug datetime msecno service password-encryption!hostname Switch!!spanning-tree mode pvst!interface FastEthernet0/1!interface FastEthernet0/2switchport access vlan 2!interface FastEthernet0/3switchport access vlan 2!interface FastEthernet0/4switchport access vlan 2!interface FastEthernet0/5switchport access vlan 3!interface FastEthernet0/6switchport access vlan 3!interface FastEthernet0/7switchport access vlan 3!六、实验心得输入容易出现错误。
太原理工大学系统分析实验报告

本科实验报告课程名称:系统分析与设计实验项目:《系统分析与设计》实验实验地点:行逸楼B114专业班级:软件学号:学生姓名:指导教师:孟东霞2015年11月4日一、实验目的通过《系统分析与设计》实验,使学生在实际的案例中完成系统分析与系统设计中的主要步骤,并熟悉信息系统开发的有关应用软件,加深对信息系统分析与设计课程基础理论、基本知识的理解,提高分析和解决实际问题的能力,使学生在实践中熟悉信息系统分析与设计的规,为后继的学习打下良好的基础。
二、实验要求学生以个人为单位完成,自选题目,班题目不重复,使用UML进行系统分析与设计,并完成实验报告。
实验报告以纸质版(A4)在课程结束后二上提交(12)。
三、实验主要设备:台式或笔记本计算机四、实验容1 选题及项目背景美食评价系统背景:互联网时代下网络评论越来越随意,希望可以规化的进行。
2 定义美食评价系统为用户提供美食指导和参考。
任人都可注册为会员,个人资料包括姓名,性别,收藏的餐厅以及口味爱好。
会员可以收藏餐馆,浏览餐馆信息以及其他会员的评价。
餐厅必须向管理人员提出注册并审核通过后才能显示。
管理人员需到工商局和餐厅具体审查后才能通过。
会员可以提供来自餐馆提供的小票在次日来对用餐进行评价,一小票仅可提供一次评价。
餐馆则提供当日用餐小票记录给管理人员,用以核对用户提供的小票是否正确,然后系统则会审核评价有无不良信息,审核通过发布在餐厅信息上,并根据会员评价次数对给会员评星(1-5)。
个人信息和餐馆信息可被所有人访问,管理员信息只能管理员访问。
3 参考资料1.GB8567-88 《计算机软件产品文件编制规》2.GB/T11457-1995 《软件工程术语》3.GB 1526—89 信息处理--数据流程图、程序流程图、系统流程图、程序网络图和系统资源图的文件编制符号及约定4.GB8566-88 《软件开发规》4 系统分析与设计4.1需求分析4.1.1识别参与者用户,餐厅,管理人员4.1.2 对需求进行捕获与描述1用例名称:注册个人用户执行者:用户目的:完成一次注册个人用户的完整过程。
太原理工大学web程序设计基础实验报告2016

课程名称:WEB程序设计基础实验项目:WEB程序设计基础实验实验地点:逸夫楼402 专业班级:软件1415班学生姓名:朱伟学号:2014005960指导教师:田玉玲2016年11 月21 日实验一HTML语言一、实验目的1.掌握常用的HTML语言标记;2.利用文本编辑器建立HTML文档,制作简单网页。
二、实验要求1.独立完成实验。
2.书写实验报告书。
三、实验内容1.在文本编辑器“记事本”中输入如下的HTML代码程序,以文件名sy1.html保存,并在浏览器中运行。
(请仔细阅读下列程序语句,理解每条语句的作用)(1)程序代码:<!doctype html><html lang="en"><head><meta charset="UTF-8"><title>Example</title></head><body bgcolor="#00DDFF"><h1><B><I><FONT COLOR="#FF00FF"><MARQUEE BGCOLOR="#FFFF00"direction=left behavior=alternate>welcome to you</MARQUEE></FONT></I></B></h1><hr><h2 align=center><FONT COLOR="#0000FF">A simple HTML document</FONT></h2><EM> Welcome to theworld of Html</EM><p>This is a simple HTML document.It is to give you an outline of how to write HTML file and how the <b>markup tags </b>work in the<I>HTML</I>file</p><p>Following is three chapters<ul><li>This is the chapter one</li><li><A HREF="#item">This is the chapter two</A></li><li>This is the chapter three</li></ul></p><hr><p><A NAME="item">Following is items of the chapter two</A></p><table border=2 bgcolor=gray width="40%"><tr><th>item</th><th>content</th></tr><tr><td>item1</td><td>font</td></tr><tr><td>item2</td><td>table</td></tr><tr><td>item3</td><td>form</td></tr></table><hr><p>1<p>2<p>3<p>4<p>5<p>6<p>7<p><B><I><FONT COLOR=BLUE SIZE=4>End of the example document</FONT></I></B> </p></body></html></body></html>(2)实验结果2.编写一个能输出如图所示界面的HTML文件。
太原理工大学数据结构实验报告2016

《数据结构》实验报告专业:软件工程班级:软件姓名:2016年12月太原理工大学学生实验报告}[运行情况]Input a linktable(a string):lopui↙Build link is :lopuiPlease input a char you want to insert after:p↙Please input a char you want to insert:y↙After p insert y,link is:lopyuiPlease input a char you want to delete:p↙after delete p,link is:loyuiOpsite result is :iuyol三.实习题用单链表ha 存储多项式A(x )=a0+a1x1+a2x2+…+a n x n(其中a I为非零系数),用单链表hb 存储多项式B (x )=b0+b1x1+b2x2+…+b m x m(其中b j为非零系数),要求计算C(x )= A(x )+B(x ),结果存到单链表hc中。
试写出程序。
实验程序:#include"stdio.h"#include <malloc.h>#include"stdafx.h"#include<malloc.h>static int n;static int m;static int max;struct Polynomial{float data;struct Polynomial* next;};struct Polynomial* Creat_H(int k){struct Polynomial* L;struct Polynomial* p;p = (struct Polynomial*)malloc(sizeof(struct Polynomial));L = p;float temp;int i;printf("请依次输入系数(中间用空格隔开):\n");for (i = 0; i <= k; i++){scanf_s("%f", &temp);p->data = temp;if (i == k){p->next = NULL;break;}p->next = (struct Polynomial*)malloc(sizeof(struct Polynomial));p = p->next;}return L;}struct Polynomial* Calculate(struct Polynomial* Pa, struct Polynomial* Pb){ struct Polynomial* Pc;struct Polynomial* L;int i;max = n >= m ? n : m;Pc = (struct Polynomial*)malloc(sizeof(struct Polynomial));L = Pc;for (i = 0; i <= max; i++){if (i == max){Pc->next = NULL;break;}Pc->next = (struct Polynomial*)malloc(sizeof(struct Polynomial));Pc = Pc->next;}Pc = L;while (Pa != NULL&&Pb != NULL){Pc->data = Pa->data + Pb->data;Pc = Pc->next;Pa = Pa->next;Pb = Pb->next;}if (Pa == NULL){while (Pb != NULL){Pc->data = Pb->data;Pc = Pc->next;Pb = Pb->next;}}else if (Pb == NULL){while (Pa != NULL){Pc->data = Pa->data;Pc = Pc->next;Pa = Pa->next;}}return L;}int main(){int i;struct Polynomial *Ha, *Hb, *Hc;printf("请输入多项式a的最高次系n:\n");scanf_s("%d", &n);Ha = Creat_H(n);printf("请输入多项式b的最高次系m:\n");scanf_s("%d", &m);Hb = Creat_H(m);Hc = Calculate(Ha, Hb);printf("系数: 次数:\n");for (i = 0; i <= max; i++){printf("%f%-4d\n", Hc->data, i);if (i == max){break;}Hc = Hc->next;}return 0;}太原理工大学学生实验报告太原理工大学学生实验报告temp=(struct VNode*)malloc(sizeof(struct VNode));temp->position=k;temp->next=NULL;p[i].first=temp;p[i].mark=0;flag=temp;scanf("%d",&k);while(k!=-1){temp=(struct VNode*)malloc(sizeof(struct VNode));temp->position=k;temp->next=NULL;flag->next=temp;flag=temp;scanf("%d",&k);}}}i=0;while(p[i].mark==0){DFS(p,(p+i));num++;i=0;while(p[i].mark!=0&&i<n){i++;}}printf("此图的连通分量个数为:%d\n",num);return 0;}return Search(a, k, mid + 1, hight);}}int main(){int *p;int i, n, key, position;printf("输入数据数量:\n");scanf("%d", &n);p = (int*)malloc(n*sizeof(int));printf("请按非递减序列输入你的数据(整型),并用空格隔开:\n");scanf("%d", &p[0]);for (i = 1; i<n; i++){scanf("%d", &p[i]);while (p[i]<p[i - 1]){printf("你输入的数据不合理,请重新输入:\n");scanf("%d", &p[i]);}}printf("请输入你要查找的数据:\n");scanf("%d", &key);position = Search(p, key, 0, n - 1);if (position == 0){printf("没有找到你要查找的数据!\n");}else{printf("你所查找的数据位于原有序表的第%d个位置!\n", position);}return 0;}if (n == 0)return;int x;NODE *p;p = (NODE*)malloc(sizeof(NODE));head->next = p;scanf("%d", &x);p->x = x;read(p, n - 1);}void write(NODE *head, int n){NODE *p;if (n == 0)return;p = head->next;printf("%d ", p->x);write(p, n - 1);}void px(NODE *head, int n){if (n == 0)return;int min;int i, s = 0;NODE *p;NODE *r;NODE *t;p = head->next;r = head->next;t = head;min = p->x;for (i = 0; i<n; i++){if (min>p->x){min = p->x;r = p;s = i;}p = p->next;}for (i = 0; i<s; i++)t = t->next;t->next = r->next;r->next = head->next;head->next = r;px(head->next, n - 1);}void main(){int n;NODE *head;head = (NODE *)malloc(sizeof(NODE));printf("输入数据个数n:\n");scanf("%d", &n);printf("输入%d个数据,并用空格隔开\n", n);read(head, n);printf("输入数据为:\n");write(head, n);printf("\n排序后数据为:\n");px(head, n);write(head, n);}。
太原理工大学计算机操作系统期末总结

太原理工大学计算机操作系统期末总结操作系统复习大纲1.设置操作系统的目的:①有效性:提高系统资源利用率;提高系统的吞吐量;②方便性:方便用户;③可扩展性;开放性2.操作系统的定义:操作系统是一组控制和管理计算机硬件和软件资源,合理地对各类作业进行调度,以及方便用户使用的程序的集合。
3.操作系统功能与特征(14、18)特征:并发性、共享性、虚拟性、异步性。
功能:处理机管理、存储器管理、设备管理、文件管理、操作系统与用户之间的接口。
4.多道程序设计与并发性进程的含义:进程是程序的一次执行;进程是一个程序及其数据在处理机上顺序执行时所发生的活动;进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
为使程序能并发执行,且为了对并发执行的程序加以描述和控制,引入“进程”。
结构特征(由程序段、相关的数据段、PCB构成进程实体)、动态性、并发性、独立性、异步性5.进程控制块的内容与作用(41)作用:是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。
进程控制块中的信息:进程标识符、处理机状态、进程调度信息、进程控制信息。
6.引起进程创建的事件(44)用户登录、作业调度、提供服务、应用请求7.进程的3种基本状态及其转换(38)就绪状态、执行状态、阻塞状态(图2-5)8.线程的定义,引入线程的目的,进程与线程的主要区别(71、72、73)比进程更小的能独立运行的基本单位——线程;为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性;区别:①调度性:线程作为调度和分派的基本单位,而进程作为资源拥有的基本单位;②并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,使得操作系统具有更好的并发性,从而能更加有效地提高系统资源的利用率和系统的吞吐量;③拥有资源:一般而言,线程自己不拥有系统资源,但它可以访问其隶属进程的资源,即一个进程的代码段、数据段及所拥有的系统资源;④系统开销:操作系统所付出的开销明显大于线程创建或撤销时的开销。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称:操作系统B实验项目:操作系统实验实验地点:逸夫楼402、逸夫楼502教室专业班级:软件1415班学生姓名:朱伟学号:********** 指导教师:***2016年11月28日实验一几种操作系统的界面一、目的和要求(一)目的本实验的目的是使学生熟悉1—2种操作系统的界面,在熟练使用机器的基础上,能了解各种操作命令和系统调用在系统中的大致工作过程。
也就是通过操作系统的外部特征,逐步深入到操作系统的内部实质内容中去。
(二)要求1.能熟练的在1—2种操作系统的环境下工作,学会使用各种命令,熟悉系统提供的各种功能,主动而有效地使用计算机。
2.熟悉系统实用程序的调用方法和各种系统调用模块的功能和作用二、实验内容在某种操作系统的环境下建立、修改、运行、打印源程序和结果,最后撤消一个完整的程序。
提示:可按下述步骤进行1.编写一个完整的源程序,通过编辑命令送入机器,建立源程序文件;2.编译该源文件,建立相应的目标文件;3.编译有错时,再用编辑命令修改源文件,消除全部词法和语法错误;4.连接目标文件,形成可执行文件;5.执行该文件,得到结果;6.打印输出源程序和运行结果;7.撤消本次实验中形成的所有文件。
三、实验步骤及程序流程图1、按住Windows键+R输入notepad回车调出记事本。
2、编辑一个java程序选择另存为F:。
3、按住Windows键+R输入cmd回车。
4、进入Dos界面输入F:。
5、输入dir查看java文件,使用javac命令进行编辑四、程序清单class demo{public static void main(String [] args){System.out.print("软件1415班朱伟 2014005960");}}五、实验心得这次实验是在win7操作系统下进行的,通过编译连接一个java小程序熟悉DOS命令的使用。
实验中用到的DOS工具:dir:列出当前控制台所在的路径下的所有文件以及文件夹。
javac:编译。
这次实验,通过查找一些常用的DOS命令,进一步熟悉了DOS命令的使用,了解了部分操作命令和系统调用在系统中的工作过程。
实验二进程调度程序设计一、目的和要求(一)目的进程是操作系统最重要的概念之一,进程调度是操作系统的主要内容,本实验要求学生独立地用高级语言编写一个进程调度程序,调度算法可任意选择或自行设计,本实验可使学生加深对进程调度和各种调度算法的理解。
(二)要求1.设计一个有几个进程并发执行的进程调度程序,每个进程由一个进程控制块(PCB)表示,进程控制块通常应包括下述信息:进程名,进程优先数,进程需要运行的时间,占用CPU的时间以及进程的状态等,且可按照调度算法的不同而增删。
2.调度程序应包含2—3种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较。
3.系统应能显示或打印各进程状态和参数的变化情况,便于观察。
二、示例1.题目本程序可选用优先数法或简单轮转法对五个进程进行调度。
每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假定起始状态都是就绪状态W。
为了便于处理,程序中进程的运行时间以时间片为单位计算。
各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。
进程控制块结构如表2-1所示:表2-1PCB进程控制块链结构如图2-1所示:RUN HEAD TAIL图2-1 进程控制块链结构其中:RUN—当前运行进程指针;HEAD—进程就绪链链首指针;TAIL—进程就绪链链尾指针。
2. 算法与框图程序框图如图2-2所示。
图2-2 进程调度框图(1)优先数法。
进程就绪链按优先数大小从大到小排列,链首进程首先投入运行。
每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3。
理由是该进程如果在一个时间片中完成不了,优先级应降低一级。
接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续运行,否则,调度就绪链链首进程投入运行。
原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。
(2)简单轮转法。
进程就绪链按各进程进入的先后次序排列,链首进程首先投入运行。
进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相应于优先数法的优先数记录项位置)。
每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。
三、实验代码:#include<stdio.h>#include<stdlib.h>#define furthest 5struct process /*PCB STRUCTURE*/{int id;int priority;int cputime;int alltime;char state;int next;}prochain[furthest - 1];int procnum;int rand();int algo;int run, head, tail, j;void print();void insert(int q);void insert2();void timesch();void init();void prisch();int main() /*MAIN PROGRAM*/{agan: printf("type the algorithm is (1:RR,2:PRIO):");scanf("%d", &algo);if (algo == 2){printf("output of priority.\n");init();prisch();}else{if (algo == 1){printf("output of round robin.\n");init();timesch();}else{printf("try again,please\n");goto agan;}}for (j = 1; j <= 40; j++){printf("=");}printf("\n\n");for (j = 1; j <= 40; j++){printf("=");}printf("\n\n");printf("system finished\n");getchar();}void print() /*PRINT THE RUNNING PROCESS,WAITING QUEUE AND PCB SEQUENCE LIST*/{int k, p;for (k = 1; k <= 40; k++)printf("=");printf("\nrunning proc. "); printf("waiting queue.");printf("\n %d ", prochain[run].id); p = head;while (p != 0){printf("%5d", p);p = prochain[p].next;}printf("\n");for (k = 1; k <= 40; k++)printf("=");printf("\n");printf(" id ");for (k = 1; k<furthest + 1; k++)printf("%5d", prochain[k].id);printf("\n");printf("priority ");for (k = 1; k<furthest + 1; k++)printf("%5d", prochain[k].priority); printf("\n");printf("cputime ");for (k = 1; k<furthest + 1; k++)printf("%5d", prochain[k].cputime); printf("\n");printf("alltime ");for (k = 1; k<furthest + 1; k++)printf("%5d", prochain[k].alltime); printf("\n");printf("state ");for (k = 1; k<furthest + 1; k++)printf("%5c", prochain[k].state);printf("\n");printf("next ");for (k = 1; k<furthest + 1; k++)printf("%5d", prochain[k].next);printf("\n");}void insert(int q) /*INSERT A PROCESS*/{int p, s;p = head;s = prochain[head].next;while ((prochain[q].priority<prochain[s].priority) && (s != 0)) {p = s;s = prochain[s].next;}prochain[p].next = q;prochain[q].next = s;}void insert2() /*PUT A PROCESS ONTO THE TAIL OF THE QUEUE*/{ prochain[tail].next = run;tail = run;prochain[run].next = 0;}void init() /*CREATE A WAITING QUEUE*/{int i;head = 0;if (algo == 2){for (i = 1; i<furthest + 1; i++){prochain[i].id = i;prochain[i].priority = (rand() + 11) % 41;prochain[i].cputime = 0;prochain[i].alltime = (rand() + 1) % 7;prochain[i].state = 'W';prochain[i].next = 0;if ((prochain[i].priority<prochain[head].priority) && (head != 0)) insert(prochain[i].id);else{prochain[i].next = head;head = prochain[i].id;}}}else{for (i = 1; i<furthest + 1; i++){prochain[i].id = i;prochain[i].priority = (rand() + 1) % 3 + 1;prochain[i].cputime = 0;prochain[i].alltime = (rand() + 1) % 7;prochain[i].state = 'W';prochain[i].next = (i + 1) % (furthest + 1);}head = 1;tail = furthest;prochain[furthest].next = 0;}run = head;prochain[run].state = 'R';head = prochain[head].next;prochain[run].next = 0;print();}void prisch() /*THE PROCESS WITH PRIO ALGORITHM*/{while (run != 0){prochain[run].cputime += 1;prochain[run].priority -= 3;prochain[run].alltime -= 1;if (prochain[run].alltime == 0){prochain[run].state = 'F';prochain[run].next = 0;if (head != 0){run = head;prochain[run].state = 'R';head = prochain[head].next;}else{prochain[0].id = prochain[run].id;run = 0;}}else{if ((prochain[run].priority< prochain[head].priority) && (head != 0)){prochain[run].state = 'W';insert(run);run = head;prochain[run].state = 'R';head = prochain[head].next;}}print();}}void timesch() /*THE PROCESS WITH RR ALRORITHM*/ {while (run != 0){prochain[run].alltime -= 1;prochain[run].cputime += 1;if (prochain[run].alltime == 0){prochain[run].state = 'F';prochain[run].next = 0;if (head != 0){run = head;prochain[run].state = 'R';head = prochain[head].next;}else{prochain[0].id = prochain[run].id;run = 0;}}else{if ((prochain[run].cputime == prochain[run].priority) && (head != 0)){prochain[run].state = 'W';prochain[run].cputime = 0;insert2();run = head;prochain[run].state = 'R';head = prochain[head].next;}}print();四、实验结果:(1)(2)五、实验心得:通过本次实验,加深了对进程调度和调度算法的理解。