进程调度1—静态非剥夺式优先级调度计算平均作业周转时间
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a[][]=new int[3][2];
String str;
for(int i=0;i<3;i++) {
str=sc.next();
a[i][0]=sc.nextInt();
a[i][1]=sc.nextInt();
}
if(a[0][0]<a[1][0]) {
fun(a,0,1);
}
if(a[0][0]<a[2][0]) {
fun(a,0,2);
}
if(a[1][0]<a[2][0]) {
fun(a,1,2);
}
System.out.println(String.format("%.1f", (a[1][1]*2+a[2][1])/3.0+a[0][1]));
}
private static void fun(int[][] a, int i, int j) {
int t=a[i][0];
a[i][0]=a[j][0];
a[j][0]=t;
t=a[i][1];
a[i][1]=a[j][1];
a[j][1]=t;
}
}
进程调度2–最高响应比优先计算每个作业的周转时间
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
double a[][]=new double[3][4];
String str;
int sj=0,zx=-1;
double max;
for(int i=0;i<3;i++) {
str=sc.next();
a[i][0]=sc.nextInt();
a[i][1]=sc.nextInt();
}
while(a[0][1]>0 || a[1][1]>0 || a[2][1]>0 ) {
max=0;
zx=-1;
for(int i=0;i<3;i++) {
if(a[i][1]>0 && a[i][0]<=sj) {
a[i][2]=(sj-a[i][0]+a[i][1])/a[i][1];
if(a[i][2]>max) {
max=a[i][2];
zx=i;
}else if(a[i][2]==max && a[i][0]<a[zx][0]){
max=a[i][2];
zx=i;
}
}
}
if(zx>=0) {
sj+=a[zx][1];
a[zx][3]=sj-- -a[zx][0];
a[zx][1]=0;
}
sj++;
}
for(int i=0;i<3;i++) {
System.out.print((int)a[i][3]+" ");
}
}
}
死锁—利用银行家算法判断系统的安全性
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a[][]=new int[4][6];
String str;
int x,y,z;
x=sc.nextInt();
y=sc.nextInt();
z=sc.nextInt();
for(int i=0;i<4;i++) {
str=sc.next();
a[i][0]=sc.nextInt();
a[i][1]=sc.nextInt();
a[i][2]=sc.nextInt();
a[i][3]=sc.nextInt();
a[i][4]=sc.nextInt();
a[i][5]=sc.nextInt();
x-=a[i][3];
y-=a[i][4];
z-=a[i][5];
}
int sum=0,num=0;
str="";
for(int i=0;num<=4-sum;i++,i%=4) {
if(a[i][0]>0 && x>=(a[i][0]-a[i][3]) && y>=(a[i][1]-a[i][4]) && z>=(a[i][2]-a[i][5])) {
x+=a[i][3];
y+=a[i][4];
z+=a[i][5];
a[i][0]=-1;
str+="P"+(i+1)+" ";
sum++;
num=0;
}else {
num++;
}
}
if(sum==4) {
System.out.println(str);
}else {
System.out.println(false);
}
}
}
问题 D: 存储管理—可变分区存储管理方式的最佳适应分配算法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt(),y=0;
int a[][]=new int[n][2];
for(int i=0;i<n;i++) {
a[i][0]=i+1;
a[i][1]=sc.nextInt();
}
fun(a);
for(int i=0;i<3;i++) {
int x=sc.nextInt();
for(int j=0;j<n;j++) {
if(a[j][1]>=x) {
System.out.print(a[j][0]+" ");
a[j][1]-=x;
fun(a);
break;
}
if(j+1==n) {
System.out.print(false+" ");
}
}
}
}
private static void fun(int[][] a) {
for(int i=0;i<a.length;i++) {
for(int j=i;j<a.length;j++) {
if(a[i][1]>a[j][1]) {
int t=a[i][0];
a[i][0]=a[j][0];
a[j][0]=t;
t=a[i][1];
a[i][1]=a[j][1];
a[j][1]=t;
}
}
}
}
}
问题 I: 存储管理1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int a[]=new int[64];
a[1]=a[7]=a[13]=a[23]=a[47]=a[59]=1;
for(int i=0;n>0&&i<64;i++) {
if(a[i]==0) {
n--;
if(n==0) {
System.out.println(i);
return;
}
}
}
System.out.println(false);
}
}
题目9:存储管理2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int num[]=new int[n];
for(int i=0;i<n;i++) {
num[i]=sc.nextInt();
}
int a[]=new int[64];
int sx=56;
a[2]=a[7]=a[13]=a[23]=a[37]=a[47]=a[59]=a[61]=1;
for(int i=0;i<n;i++) {
if(num[i]>sx) {
System.out.print(false+" ");
}else {
for(int j=0;num[i]>0 && j<64;j++) {
if(a[j]==0) {
num[i]--;
a[j]=1;
sx--;
}
if(num[i]==0) {
System.out.print(j+" ");
}
}
}
}
}
}
题目10:存储管理3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int num[][]=new int[n][65];
for(int i=0;i<n;i++) {
num[i][64]=sc.nextInt();
}
String string=sc.next();
int a[]=new int[64];
int sx=56;
a[2]=a[7]=a[13]=a[23]=a[37]=a[47]=a[59]=a[61]=a[41]=1;
for(int i=0;i<n;i++) {
if(num[i][64]>sx) {
System.out.print(false+" ");
}else {
for(int j=0;num[i][64]>0 && j<64;j++) {
if(a[j]==0) {
num[i][64]--;
num[i][j]=1;
a[j]=1;
sx--;
}
if(num[i][64]==0) {
System.out.print(j+" ");
}
}
}
}
System.out.println();
int x=Integer.parseInt(string.substring(1));
if(x<=n && string.charAt(0)=='p' && num[x-1][64]==0) {
for(int i=0;i<64;i++) {
if(num[x-1][i]==1) {
System.out.print(i+" ");
}
}
}else{
System.out.print(false);
}
}
}
题目11:带存储管理的处理器调度4
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Node{
String name;
int size;
int time;
int p;
boolean jr=false;
boolean zx=false;
}
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Node arr []=new Node[3];
List<Node> list=new ArrayList<>();
for(int i=0;i<3;i++) {
Node tmp=new Node();
tmp.name=sc.next();
tmp.size=sc.nextInt();
tmp.time=sc.nextInt();
tmp.p=sc.nextInt();
arr[i]=tmp;
}
int num=0,sy=0,jr=0;
while(num<3) {
while(jr<3-num) {
int tmpp=-1;
Node tmpNode=null;
for(int i=0;i<3;i++) {
if( sy+arr[i].size<=100 && arr[i].p>tmpp && arr[i].jr==false) {
tmpNode=arr[i];
tmpp=tmpNode.p;
}
}
if(tmpNode==null) {
break;
}else {
jr++;
System.out.println("jr:"+tmpNode.name);
sy+=tmpNode.size;
tmpNode.jr=true;
}
}
while(jr>0) {
int tmptime=100000000;
Node tmpNode=null;
for(int i=0;i<3;i++) {
if(arr[i].time<tmptime && arr[i].jr==true && arr[i].zx==false) {
tmpNode=arr[i];
tmptime=tmpNode.time;
}
}
jr--;
num++;
sy-=tmpNode.size;
tmpNode.zx=true;
System.out.println("zx:"+tmpNode.name);
list.add(tmpNode);
break;
}
}
for(Node tmpNode :list) {
System.out.print(tmpNode.name+" ");
}
}
}
问题 E: 存储管理—FIFO页面替换算法计算中断次数
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt(),y=0;
int a[]=new int[n];
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
int x=sc.nextInt();
int a2[][]=new int[x][2];
for(int i=0;i<n;i++) {
for(int j=0;j<x;j++) {
if(a[i]==a2[j][1] && a2[j][0]>0) {
break;
}
if(j==x-1) {
y++;
a2[0][1]=a[i];
a2[0][0]=i+1;
fun(a2);
}
}
}
System.out.println(y);
}
private static void fun(int[][] a) {
for(int i=0;i<a.length;i++) {
for(int j=i;j<a.length;j++) {
if(a[i][0]>a[j][0]) {
int t=a[i][0];
a[i][0]=a[j][0];
a[j][0]=t;
t=a[i][1];
a[i][1]=a[j][1];
a[j][1]=t;
}
}
}
}
}
进程调度3-优先级调度
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int a[][]=new int[n][3];
String str;
int zx=-1;
int max,x=0;
for(int i=0;i<n;i++) {
str=sc.next();
str=str.substring(1);
a[i][0]=sc.nextInt();
a[i][1]=sc.nextInt();
a[i][2]=Integer.parseInt(str);
}
while(x<n) {
max=-1000000;
for(int i=0;i<n;i++) {
if(a[i][1]>0 && a[i][0]>max) {
max=a[i][0];
zx=i;
}
}
a[zx][1]--;
a[zx][0]--;
System.out.print("P"+(a[zx][2])+" ");
if(a[zx][1]==0) {
x++;
a[zx][0]=-1;
}
}
}
}
进程调度4----时间片轮转
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
int n=sc.nextInt();
int a[]=new int[n];
String str;
for(int i=0;i<n;i++) {
str=sc.next();
a[i]=sc.nextInt();
}
int num=sc.nextInt(),y=-1,n2=n;
while(num >0 && n2>0) {
for(int i=0;i<n;i++) {
if(a[i]>0) {
a[i]-=x;
if(a[i]<=0) {
n2--;
}
num--;
if(num==0) {
y=i;
}
}
}
}
if(y>0) {
System.out.println("P"+(y+1));
}else {
System.out.println("over");
}
}
}