湖北师范大学计信2018届操作系统实训(参考答案)
第一题 问题 A: 各位同学请先完成此题以规范你们的语法
参考代码(Java):
import java.util.Scanner;/*** @author 作者 : 吴泽胜* @createDate 创建时间:2020-5-21 上午11:19:35*/public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();System.out.println(a+b);}}
第二题 问题 B: 进程调度1:最高响应比优先
操作系统中高响应比优先调度算法例子
进程 到达时刻 运行时间/ms
P1 0 10
P2 1 1
P3 2 2
P4 3 1
P5 4 5
0时刻P1运行, 10时刻,P1运行完,此时P2-P5的响应比分别为: P2:(1+9)/1=10 P3:(2+8)/2=5 P4:(1+7)/1=8 P5:(5+6)/5=2.2因此执行P2 11时刻。
P2运行完,此时P3-P5的响应比分别为: P3:(2+9)/2=5.5 P4:(1+8)/1=9 P5:(5+7)/5=2.4因此执行P4 11时刻。
P4运行完,此时P3.P5的响应比分别为: P3:(2+10)/2=6 P5:(5+8)/5=2.6因此执行P3,最后执行P5。
所以此算法进程的平均周转时间为:(10+10+12+9+15)/5=56/5=11.2
参考代码(Java)(运行的内存17560 KB>16M,不能通过,换成C语言了):
import java.util.Scanner;/*** @author 作者 : 吴泽胜* @createDate 创建时间:2020-5-21 上午11:30:58*/class thread{String name; //线程名int start_time; //开始时刻int run_time; //运行时间//Set方法public void Set(String name, int start_time,int run_time){this.name = name;this.start_time = start_time;this.run_time = run_time;}
}public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);thread theads[] = new thread[3];for(int i = 0 ; i < 3 ; i++){ //输入数据theads[i] = new thread();theads[i].Set(sc.next(), sc.nextInt(), sc.nextInt());}sc.close();int k = 0, j = 0, m = 0, i = 0;//寻找最小时间,最初开始的线程int time = theads[0].start_time + theads[0].run_time;for(i = 1 ; i < 3 ; i++){if( theads[i].start_time < theads[0].start_time){k = i;time = theads[i].start_time + theads[i].run_time;}else if(theads[i].start_time == theads[0].start_time) {if (theads[i].run_time < theads[0].run_time) {k = i;time = theads[i].start_time + theads[i].run_time;}}}for (i = 0; i < 2 ; i++) {if (i != k) {j = i + 1;if (j != k) {if (theads[j].start_time < theads[i].start_time) {m = i; i = j; j = m;}break;}}}if (theads[i].start_time <= time) {if (theads[j].start_time <= time) {//最高响应比优先的调度算法公式if (((time - theads[j].start_time) * theads[i].run_time) > ((time - theads[i].start_time) * theads[j].run_time) ) {System.out.print(theads[i].name);}else{System.out.print(theads[j].name);}}//需算相应比else {System.out.print(theads[j].name);}}else {if ((time - theads[j].start_time) * theads[i].run_time < (time - theads[i].start_time) * theads[j].run_time) {System.out.print(theads[j].name);}else {System.out.print(theads[i].name);}}}
}
参考代码(C语言)
#include<stdio.h>
struct proce
{char name[10];int start_time;int run_time;
}pro[3];int main()
{int m = 0;int time = 0;int i, j , k = 0;for (i = 0; i < 3; i++) {scanf("%s %d %d", pro[i].name, &pro[i].start_time, &pro[i].run_time);}time = pro[0].start_time + pro[0].run_time;for (i = 1; i < 3; i++) {if (pro[i].start_time < pro[0].start_time) {k = i;time = pro[i].start_time + pro[i].run_time;}else if (pro[i].start_time = pro[0].start_time) {if (pro[i].run_time < pro[0].run_time) {k = i;time = pro[i].start_time + pro[i].run_time;}}}//printf("%d %d\n",k,time);//min:最小开始时间;k:进程数for (i = 0; i <2 ; i++) {if (i != k) {j = i + 1;if (j != k) {if (pro[j].start_time < pro[i].start_time) {m = i; i = j; j = m;}break;}}}//printf("%d %d\n", i, j);if (pro[i].start_time <= time) {if (pro[j].start_time <= time) {if (((time - pro[j].start_time) * pro[i].run_time) > ((time - pro[i].start_time) * pro[j].run_time) ) {printf("%s", pro[i].name);}else{printf("%s", pro[j].name);}}//需算相应比else {printf("%s", pro[j].name);}}else {if ((time - pro[j].start_time) * pro[i].run_time < (time - pro[i].start_time) * pro[j].run_time) {printf("%s", pro[j].name);}else {printf("%s", pro[i].name);}}return 0;
}
第三题 问题 C: 进程调度2:最短剩余时间优先
参考代码(C语言):
#include<stdio.h>struct proce
{char name[10];int start_time; //开始时刻 int run_time; //运行时间
}pro[3];int main(){int run_time1,run_time2,run_time3;for (int i = 0; i < 3; i++) //导入数值 scanf("%s %d %d", pro[i].name, &pro[i].start_time, &pro[i].run_time);run_time1=pro[0].run_time-(pro[1].start_time-pro[0].start_time);run_time2=pro[1].run_time;if(run_time1<run_time2){run_time1=run_time1-(pro[2].start_time-pro[1].start_time);run_time3=pro[2].run_time;if(run_time1>=run_time3){printf("%s",pro[1].name);}else{if(run_time2>=run_time3){printf("%s",pro[1].name);}else{printf("%s",pro[2].name);}}}else{run_time3=pro[2].run_time;if(run_time1>=run_time3){printf("%s",pro[0].name);}else{printf("%s",pro[2].name);}} return 0;
}
第四题 问题 D: 进程调度3
参考代码(C语言):
#include<stdio.h>
#include<string.h>struct process
{char name[10]; // 进程名 m int priority; // 优先级 a int run_time; // 运行时间 b
}pro[25535];int main(){int N, n = 0, index, count = 0, num = 0;scanf("%d",&N);char m[N][20];for(int i = 0;i < N;i++)scanf("%s %d %d",&pro[i].name,&pro[i].priority,&pro[i].run_time);int M = 0; //累加优先级数 for(int i = 0;i < N;i++)M += pro[i].priority; for( int i = M - 1; i >= 0; i-- ){index = 0;for(int j = 0;j < N;j++){if(pro[j].priority == 0)num++;if(num == N)count = 1;if(pro[j].run_time > 0)if(pro[j].priority > index){index = pro[j].priority;n = j;}}if(count == 0){if(pro[n].priority > 0)pro[n].priority--;pro[n].run_time--;printf("%s",pro[n].name);if(i > 0)printf(" ");}else{for(int j = 0;j < N;)if(pro[j].run_time > 0){printf("%s",pro[j].name);if(i > 0)printf(" ");pro[j].run_time--;break;}elsej++;}}return 0;
}
第五题 问题 E: 进程调度4:时间片轮转
参考代码(C语言):
#include<stdio.h>
#include<string.h>struct proce
{char name[10];int run_time;
}pro[100];int main(){int Time_Slice = 0; //时间片 1int n = 0; //n个进程数 3int Time_Slice_number = 0; //时间片轮转次数 3scanf("%d",&Time_Slice); //输入时间片scanf("%d",&n); //输入进程数 for(int i = 0 ; i < n ; i++) //输入进程 scanf("%s %d",&pro[i].name,&pro[i].run_time);scanf("%d",&Time_Slice_number); //输入时间片轮转次数//此方法很笨,不是更优解 int number = 0; //已进行的轮转次数 int k = 0,i = 0,m = 0; // k:记录目前所在进程的位置 i:循环进程 m:控制循环跳出 while( m < 1000){ //控制跳出 if(number >= Time_Slice_number ) break;if( pro[i].run_time > 0){ //当进程的运行时间不为0时,运行 k = i; //k记录当前进程位置 pro[i].run_time -= Time_Slice; //运行时间减去时间片时间 number++; //记录时间片轮转次数if(pro[i].run_time < 0) //当运行时间小于0时,应该为0 pro[i].run_time = 0;}i++;if( i == n){i = 0; //返回循环点 m++; //进程循环次数+1 }}if( m == 1000)printf("over");elseprintf("%s",pro[k].name);return 0;
}
第六题 问题 F: 存储管理1
参考代码(Java):
import java.util.Scanner;/*** @author 作者 : 吴泽胜* @createDate 创建时间:2020-5-22 上午09:38:13*/public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int n = sc.nextInt(); sc.close();int arr[] = new int[64];int count = 0;arr[1] = 1; arr[7] = 1; arr[13] = 1; arr[23] = 1; arr[47] = 1; arr[59] = 1;if(n>58){System.out.print("false");}else{for (int i = 0; i < n+1; i++){if (arr[i]==1)count++;}System.out.print(count+n-1);}}}
第七题 问题G_存储管理2backup
参考代码(Java):
import java.util.Scanner;/*** @author 作者 : 吴泽胜* @createDate 创建时间:2020-5-22 上午09:49:02*/public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int n = sc.nextInt();int arr[] = new int[n];for(int i = 0 ; i < n ; i++)arr[i] = sc.nextInt();sc.close();int Memory[] = new int[64]; //内存块for(int i = 0 ; i < 64 ; i++){if(i == 2 || i == 7 || i == 13 || i == 23 || i == 37 || i == 47 || i == 59 || i == 61)Memory[i] = 1;elseMemory[i] = 0;}int count = arr[0];for(int i = 0 ; i < n ; i++){if(arr[i] > count){System.out.print("false"+ " ");continue;}count += arr[i];for(int j = 0 ; j < 64 ; j++){if(arr[i] == 0){System.out.print (j-1);break;}if(Memory[j] == 0){Memory[j] = 1;arr[i]--;}}System.out.print(" ");}}}
第八题 问题H_存储管理3
参考代码(Java):
import java.util.Scanner;/*** @author 作者 : 吴泽胜* @createDate 创建时间:2020-5-22 下午12:56:15*/public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int n = sc.nextInt();int arr[] = new int[n];for(int i = 0 ; i < n ; i++)arr[i] = sc.nextInt();String tread_ = sc.next();sc.close();String str_=String.valueOf(tread_.charAt(1));int reback = Integer.parseInt(str_) ;int Memory[] = new int[64]; //内存块for(int i = 0 ; i < 64 ; i++){if(i == 2 || i == 7 || i == 13 || i == 23 || i == 37 || i == 47 || i == 59 || i == 61)Memory[i] = 1;elseMemory[i] = 0;}int count = arr[0];boolean flag = false;for(int i = 0 ; i < n ; i++){if(arr[i] > count){System.out.print("false"+ " ");if(i == reback - 1) flag = !flag;continue;}count += arr[i];for(int j = 0 ; j < 64 ; j++){if(arr[i] == 0){System.out.print (j-1);break;}if(Memory[j] == 0){if(i == reback - 1){Memory[j] = 2;arr[i]--;continue;}Memory[j] = 1;arr[i]--;}}System.out.print(" ");}System.out.println();if(flag)System.out.print("false");else{for(int j = 0 ; j < 64 ; j++)if(Memory[j] == 2)System.out.print(j + " ");} }
}
湖北师范大学计信2018届操作系统实训(参考答案)相关推荐
- 湖北师范大学计信2018届计算机组成原理实训(参考答案)
第一题 问题 A: 简单运算器-74LS181 参考代码(C语言): #include <stdio.h> #include <stdlib.h>int main() {cha ...
- 湖北师范大学计信计科2018届期末实训EduCoder习题 (参考答案)
题一:抢红包小程序 第1关:抢红包小程序之随机分配红包 编程要求 仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中完成随机分配红包的功能,具体要求如下: RedPacketUtil ...
- 江西师范大学20届Java方向实训参考答案
江西师范大学20届Java方向实训参考答案 送分题-A+B Problem 略 #1. A + B Problem 略 「HNOI2017」抛硬币 中国剩余定理+范德蒙德卷积+拓展Lucas+预处理伪 ...
- 湖北师范大学计信学院C语言学期实训
目录 1.进制转换 1.1二进制转十进制 1.2十进制整数转二进制 1.3十进制小数转二进制
- linux管道通信题目,操作系统实训(Linux)——习题解答、例题解析、实验指导-王红-实验实验7软中断及管道通信课案.ppt...
操作系统实训(Linux)--习题解答.例题解析.实验指导-王红-实验实验7软中断及管道通信课案.ppt 实验7 软中断及管道通信 一.实验目的(1)掌握linux系统软中断通信的实现方法.(2)掌握 ...
- 计算机基础知识实训答案,《计算机应用基础》实训作业答案
<<计算机应用基础>实训作业答案.doc>由会员分享,可免费在线阅读全文,更多与<<计算机应用基础>实训作业答案>相关文档资源请在帮帮文库(www.wo ...
- 头歌实践教学平台答案(Java实训作业答案)
搜集整理了一份最新最全的头歌(EduCoder)Java实训作业答案,分享给大家.(EduCoder)是信息技术类实践教学平台.(EduCoder)涵盖了计算机.大数据.云计算.人工智能.软件工程.物 ...
- 计算机操作系统实训心得总结,计算机操作系统安全实训心得总结
<计算机操作系统安全实训心得总结>由会员分享,可在线阅读,更多相关<计算机操作系统安全实训心得总结(2页珍藏版)>请在人人文库网上搜索. 1.本次实训,是对我能力的进一步锻炼, ...
- 进程管理系统的设计与实现 SDUT 操作系统实训 项目 Java
进程管理系统的设计与实现 要求: (1)设计一个完整的进程调度系统,至少包含三种常用的算法(FCFS.SPF.静态优先权.响应比.时间片轮转),系统中至少包含5个进程,并且能够体现进程的动态申请; ( ...
最新文章
- java url json字符串_使用HttpClient将URL中的JSON查询字符串发送到Web服务(Java)
- ubuntu进入linux系统安装程序,Ubuntu Linux下安装软件方法
- 内温的整体优先效应实验_陕西师范大学《普通心理学》第四章-知觉
- 获取顺序容器vector,deque,string和array的首尾元素的方法有四个
- Go标准库os/exec使用指南
- C#实例:datagridview单元格合并
- 【Python】Scrapy的安装与使用
- php __FILE__,__CLASS__等魔术变量,及实例
- 原型设计-结对第一次作业
- linux逻辑分区被删除了怎么办,找到了linux分区顺序错乱修复方法
- 实现同步请求_图解 Promise 实现原理(二)—— Promise 链式调用
- 中国联通加快数据中心建设:全网机架数量超过32万架
- logback日志pattern_003、Spring Boot使用slf4j进行日志记录
- c++语言偶数分离,在C++的链表中分离偶数和奇数节点
- Oracle不完全恢复-主动恢复和incarnation/RMAN-20208/RMAN-06004
- linux关闭的时候出现异常: java.net.ConnectException: 拒绝连接 (Connection refused)
- 【Django 2021年最新版教程36】 python django runserver 后台运行
- 【简记】Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist: No URLs in
- SQLiteSpy下载安装
- 超详细!Jmeter性能测试(一)