操作系统进程调度——优先权法和轮转法(附上样例讲解)

网友投稿 937 2022-05-29

操作系统之进程调度——优先权法和轮转法(附上样例讲解)

操作系统之银行家算法—详解流程及案例数据

操作系统之多线程编程—读者优先/写者优先详解

操作系统之存储管理——FIFO算法和LRU算法

操作系统之磁盘调度——SCAN实例讲解

要求

一、实验目的

多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。

二、实验内容

1.优先权法、轮转法

简化假设

1)进程为计算型的(无I/O)

2)进程状态:ready、running、finish

3)进程需要的CPU时间以时间片为单位确定

2.算法描述

1)优先权法——动态优先权

当前运行进程用完时间片后,其优先权减去一个常数。

2)轮转法

三、流程图

优先权:

轮转法:

分析

?想要完成操作系统算法第一步要弄清楚操作系统相关的专业术语。弄清各个算法的流程和目的要求。才能模拟出相关算法的过程。下面先附上实验的相关要求?

通过本次实验,深刻的理解了操作系统中线程资源的分配方式和进程的调度方式。操作系统实验重在理解每一个算法的意图和目的,那么就选择适当的数据结构模拟过程就可以完成相关算法了。

所有线程的序列核心是围绕优先权的权值大小。并且该优先权的大小会动态的变化,那么我们选区以权值为排序准则的优先队列是处理该结构的最好方法。能够有效的节省空间,算法复杂度。

而优先权算法某个线程的结束标识是还需要的时间needtime。所以在随机选区线程的时候和输出状态的时候要判断该线程还需不需要资源。

至于状态还有一点很重要的是要即使转换。当进行下一个操作要即使转换上一个线程的状态和下一个线程的状态防止状态混淆。

轮转法强调先进先出的拉链式顺序,而不以其他的权值作为开始/调度的先后顺序,所以普通先进先出的普通队列是解决该算法的最好方法。

. 轮转法和优先权法不一样的是优先权法每次只进一个线程只执行一次。而轮转法是进一个可以执行最多是该线程可轮转的次数/轮转值(可能在中间就完成线程的释放),所以在写程序的时候每次都要判断是否已经轮转。并且到最后还要判断还是否需要调度。如果需要,再抛入队尾。

代码

实现的代码(java):

import java.util.ArrayDeque; import java.util.Comparator; import java.util.PriorityQueue; import java.util.Queue; import java.util.Scanner; public class priority { static pcb pcb[]; public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.println("创建线程数量:"); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); pcb=new pcb[n]; for(int i=0;iq1=new ArrayDeque<>(); for(int i=0;iq1=new PriorityQueue(com); for(int i=0;i0) { team.status="ready"; q1.add(team); } else team.status="finish"; } printstatus(); } private static void printstatus() { // TODO 自动生成的方法存根 for(int i=0;i com=new Comparator() { @Override public int compare(pcb o1, pcb o2) { // TODO 自动生成的方法存根 return o2.proty-o1.proty; } }; static class pcb { int id;//进程id String status;//进程状态 int proty; int needalltime;//需要总时间 int lunhzuan;//轮转时间树 public pcb(int id, String status) { // TODO 自动生成的构造函数存根 this.id=id; this.status=status; } } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

操作系统之进程调度——优先权法和轮转法(附上样例讲解)

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

数据打印

优先权:

2:轮转法:

声明:这只是本人的个人理解,如果又纰漏,还请大神指出!?

如果对后端、爬虫、数据结构算法等感性趣欢迎关注我的个人公众号交流:bigsai

任务调度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:tempfile库:Python临时文件系统对象
下一篇:【Java核心面试宝典】Day10、面向对象常见面试题汇总(五)
相关文章