【操作系统】算法模拟系统【Java,web,含 源代码】

系统实现操作系统的一些算法,使用的是JavaWeb。

目录

1.算法

1.1进程调度算法

1.2磁盘调度算法

1.3请求分页页面置换算法

2.系统设计

2.1进程调度算法模拟设计

2.1.1先来先服务调度算法

2.1.2时间片轮转调度算法

2.1.3优先级调度算法

2.1.4多级反馈队列调度算法

2.1.5高响应比优先调度算法

2.1.6短作业优先调度算法

2.2磁盘调度算法模拟设计

2.2.1先来先服务调度算法

2.2.2最短寻道时间优先调度算法

2.2.3扫描调度算法

2.2.4循环扫描调度算法

2.3请求分页页面置换算法模拟设计

2.3.1先进先出页面置换算法

2.3.2最近最久未使用页面置换算法

2.3.3最少使用置换算法

2.3.4轮转置换算法

3.系统展示(部分)

3.1首页

3.2进程调度算法模拟实现

3.3盘调度算法模拟

3.4请求分页页面置换算法模拟


 

1.算法

1.1进程调度算法

  • 先来先服务调度算法
  • 时间片轮转调度算法
  • 优先级调度算法
  • 多级反馈队列调度算法
  • 高响应比优先调度算法
  • 短作业优先调度算法

1.2磁盘调度算法

  • 先来先服务调度算法
  • 最短寻道时间优先调度算法
  • 扫描算法(SCAN)
  • 循环扫描算法(CSCAN)

1.3请求分页页面置换算法

  • 先进先出页面置换算法
  • 最近最久未使用页面置换算法
  • 最少使用置换算法
  • 轮转置换算法

2.系统设计

2.1进程调度算法模拟设计

2.1.1先来先服务调度算法

(1)算法核心思想

先来先服务(FCFS)调度算法是最简单的调度算法,该算法既可以用于作业调度,也可以用于进程调度。在作业调度中,系统将按照作业到达的先后次序来进行调度,算法每次从后备作业中选择最先进入队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。

在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。

(2)系统参数设计

  • 输入数据参数:进程名称、进程到达时间、进程运行时间;
  • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间。

(3)算法设计

系统对用户输入的进程数据,每一个进程的数据作为一个OSProcess类的对象,将其添加进ArrayList<OSProcess>链表;然后系统将进程按照到达时间递增顺序进行排序,如果到达时间相同,则先输入者在前。至此,前面所做的工作称作对数据的预处理,下文称预处理,不再详细描述。系统对排序后进程序列的开始执行时间和结束执行时间进行迭代更新。

2.1.2时间片轮转调度算法

(1)算法核心思想

时间片轮转调度算法主要适用于分时系统。在该算法中,系统将所有就绪进程按到达时间递增次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾,等候再次运行。

在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。如果时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则该算法就退化为先来先服务调度算法。如果时间片很小,那么处理机将在进程间过于频繁切换,使处理机的开销增大,而真正运行用户进程的时间将减少。

(2)系统参数设计

  • 输入数据参数:时间片长度、进程名称、进程到达时间、运行时间;
  • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间。

(3)算法设计

先进行数据的预处理。系统设置一个队列作为就绪队列queue存放处于就绪状态的进程。设置一个参数t0表示当前时刻,初始值为第一个进程开始运行的时刻。将到达时间小于等于t0的进程按照到达时间递增次序进队列,选择队首的进程,给其分配处理机。如果该进程在一个时间片内未完成,则释放处理机,再次进入就绪队列,但如果此刻有新的进程进入就绪队列,则新进程优先进入,该进程后进入队列;若该进程在此时间片内完成,则进行标记完成。如果就绪队列为空时,处理机空转,时间递增,直到进程全部完成。

为详细直观的呈现模拟结果,系统除展示最终模拟结果外,还通过表格形式呈现详细的进程的时间片调度过程,另外,还通过动画的形式,分步演示进程的调度过程。

2.1.3优先级调度算法

(1)算法核心思想

优先级调度又称优先权调度算法,该算法既可以用于作业调度,也可以用于进程调度,该算法中的优先级用于描述作业进行的紧迫程度。

在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最高的一个或几个作业,将他们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法,每次从就绪队列中选择优先级最高的进程,将处理机分配给它们。

根据新的更高优先级进程能否抢占正在执行的进程,可将调度算法分为:

  • 非剥夺式优先级调度算法。当某一个进程正在处理机上运行时,即使某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时,才把处理机分配给更为重要或紧迫的进程。
  • 剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更为重要或紧迫的进程。

(2)系统参数设计

  • 输入数据参数:进程名称、进程到达时间、运行时间、进程优先级;
  • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间、进程优先级。

(3)算法设计

先进行数据的预处理。系统设置3个不同优先级就绪队列,优先级分别为1、2、3,1为最高优先级,3为最低优先级,系统采用剥夺式优先级调度。系统将进程数据按照优先级分别分配到三个队列,按照优先级顺序由高到低的顺序依次分配处理机执行。当低优先级进程运行过程中,如果有高优先级进程进入,则低优先级进程被中断,高优先级进程先运行,高优先级进程运行完成后,被中断的低优先级进程继续运行。

2.1.4多级反馈队列调度算法

(1)算法核心思想

多级反馈队列调度算法是时间片轮转和优先级调度算法的综合发展。该算法的实现思想如下:

  • 设置多个就绪队列,并为每个队列赋予不同的优先级,第1级队列的优先级最高,第2级队列次之,其他以此类推。
  • 赋予各个队列中进程执行时间片的大小也各不相同,在优先级越高的队列中,每个进程的运行时间片越小。一般低一级的队列中时间片大小是紧邻高一级队列时间片大小的二倍。
  • 当一个新进程进入内存后,首先将它放入低级队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如果它能在该时间片内完成,便可撤离系统;如果它在一个时间片内尚未完成,调度程序便将该进程转入第2级队列的末尾,再同样按FCFS原则仅从执行;以此类推。
  • 仅当高优先级的队列为空时,调度程序才调度第2级队列中的进程运行。如果处理机正在执行第i级队列中的某个进程时,又有新进程进入优先级较高的队列(第1~(i-1)中的任何一个队列),则此时新进程会抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i级队列的末尾,把处理机分配给新到的更高优先级的进程。

(2)系统参数设计

  • 输入数据参数:进程名称、进程到达时间、运行时间、时间片长度;
  • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间。

(3)算法设计

先进行数据的预处理。系统设置3个不同优先级就绪队列,优先级分别为1、2、3,1为最高优先级,3为最低优先级。所有进程到达后先进入最高优先级的队列q1,然后取q1中的队首进程,为其分配处理机,获得时间片大小为q。当时间片结束后,该进程仍未完成,则进程进入低一级优先级队列q2的队尾;当高优先级队列为空时,低优先级队列中的进程依次获得时间片长度为2*q;如果时间片结束,该进程进入最低一级优先级队列q3的队尾,运行时获得4*q的时间片长度,如果时间片结束后,该进程仍未完成,则进入当前优先级队列的队尾,等待运行。当低优先级进程运行时,有高优先级进程到达,低优先级进程*释放处理机,进入当前优先级队列的队尾,高优先级进程获得处理机运行。

2.1.5高响应比优先调度算法

(1)算法核心思想

高响应比优先调度算法时对先来先服务(FCFS)调度算法和短作业优先(SJF)调度算法的综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列每个作业的响应比,从中选出响应比最高的作业投入运行。

响应比的计算公式可描述为

响应比Rp=等待时间+要求服务时间要求服务时间 

  • 当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业。
  • 当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。
  • 对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。克服了饥饿状态,兼顾长作业。

(2)系统参数设计

  • 输入数据参数:进程名称、进程到达时间、运行时间、时间片长度;
  • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间。

(3)算法设计

先进行数据的预处理。建立一个链表存储就绪队列中的进程,每次执行前,先计算队列中所有进程的响应比,选择响应比最高的进程,为其分配处理机,该进程运行完成后,时刻表更新,再重新计算就绪队列中各进程的响应比,继续运行。

2.1.6短作业优先调度算法

(1)算法核心思想

短作业优先(SJF)算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法,则是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行, 直到完成或发生某件事而阻塞时,才释放处理机。

(2)系统参数设计

  • 输入数据参数:进程名称、进程到达时间、运行时间;
  • 输出数据参数:序号、进程名、到达时间、运行时间、运行结束时间。

(3)算法设计

先进行数据的预处理。对就绪队列中的进程按照执行时间的长度递增序列进行排序,选择执行时间最短的进程,为其分配处理机。新的进程到达后,进入就绪队列,每次计算,按照上述方式运行进程。

2.2磁盘调度算法模拟设计

2.2.1先来先服务调度算法

(1)算法核心思想

FCFS算法根据进程请求访问磁盘的先后顺序进行调度。具有公平性,但是算法性能往往接近于随机调度。

(2)系统参数设计

  • 输入数据参数:磁头初始位置、磁道名称、磁道号;
  • 输出数据参数:序号、磁道名称、磁道号、寻到距离、平均寻道时间。

(3)算法设计

系统设置ArrayList<OSTrack>链表,用来存储磁盘信息,按照用户的输入顺序进行磁针的移动,每次移动磁针时计算磁针移动距离,并且记录下来,模拟结束,计算平均寻道时间。

2.2.2最短寻道时间优先调度算法

(1)算法核心思想

SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短。该算法不能保证平均寻找时间最小,还可能会产生“饥饿”现象。

(2)系统参数设计

  • 输入数据参数:磁头初始位置、磁道名称、磁道号;
  • 输出数据参数:序号、磁道名称、磁道号、寻到距离、平均寻道时间。

(3)算法设计

系统设置ArrayList<OSTrack>链表,用来存储磁盘信息,将磁盘按照磁道号递增顺序进行排序,选取距离磁头最近的磁道,将磁针移向该磁道,并且更新磁针记录,每次移动磁针时计算磁针移动距离,并且记录下来,模拟结束,计算平均寻道时间。

2.2.3扫描调度算法

(1)算法核心思想

SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,实际上就是在最短寻找时间优先算法的基础上规定了磁头运动的方向。

(2)系统参数设计

  • 输入数据参数:磁头初始位置、磁道名称、磁道号;
  • 输出数据参数:序号、磁道名称、磁道号、寻到距离、平均寻道时间。

(3)算法设计

系统设置ArrayList<OSTrack>链表,用来存储磁盘信息,将磁盘按照磁道号递增顺序进行排序,从此时磁针位置开始向磁道号递增方向扫描链表中的磁道到达最外层磁道后,再向磁道号递减方向扫描,访问磁道;到达最内层刺刀后,再次转向磁道号递增方向进行磁道扫描。每次移动磁针时计算磁针移动距离,并且记录下来,模拟结束,计算平均寻道时间。

2.2.4循环扫描调度算法

(1)算法核心思想

在扫描算法的基础上规定磁头单向移动来提供服务回返时直接快速移动至起始端而不服务任何请求。

(2)系统参数设计

  • 输入数据参数:磁头初始位置、磁道名称、磁道号;
  • 输出数据参数:序号、磁道名称、磁道号、寻到距离、平均寻道时间。

(3)算法设计

该算法与上述扫描调度算法类似,唯一不同的地方是磁针移动方向一直为磁道号递增方向,到达最外层磁道后,磁针直接返回到最内层需要访问的磁道,再次向磁道号递增方向进行扫描。

2.3请求分页页面置换算法模拟设计

2.3.1先进先出页面置换算法

(1)算法核心思想

优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。该算法可能会出现Belady现象。

(2)系统参数设计

  • 输入数据参数:页表大小、页号;
  • 输出数据参数:序号、页号、页面置换过程、是否缺页、缺页中断次数、缺页率。

(3)算法设计

系统设置两个ArrayList<OSPage>链表,分别用来存放所需访问页面信息,另一个用来存放页表内页面的信息。系统按照用户输入顺序访问页面,先判断所访问页面是否再页表中,如果该页面在页表中,直接访问该页面;如果该页面不在页表中, 如果页表未满,则将该页调入页表;如果页表已满,则选择目前页表中最先进入页表的页面,将其换出,将新页面存放在该位置。

2.3.2最近最久未使用页面置换算法

(1)算法核心思想

该算法选择最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内为访问过的页面,在最近的将来可能也不会被访问。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的予以淘汰。

(2)系统参数设计

  • 输入数据参数:页表大小、页号;
  • 输出数据参数:序号、页号、页面置换过程、是否缺页、缺页中断次数、缺页率。

(3)算法设计

系统设置两个ArrayList<OSPage>链表,分别用来存放所需访问页面信息,另一个用来存放页表内页面的信息。页表中的没页面设置一个参数p,表示距离该页面最后一次被访问的时间差,页面调入页表时,该参数设置为1,每访问一次页面,页表中所有页面的p参数加一。系统按照用户输入顺序访问页面,先判断所访问页面是否再页表中,如果该页面在页表中,直接访问该页面;如果该页面不在页表中, 如果页表未满,则将该页调入页表;如果页表已满,选择页表中最久未被访问(即参数p值最大)的页面,将其换出,将新页面存放在此处。

2.3.3最少使用置换算法

(1)算法核心思想

该算法为内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。页面置换时,选择在最近时期使用最少的页面作为淘汰页。

(2)系统参数设计

  • 输入数据参数:页表大小、页号;
  • 输出数据参数:序号、页号、页面置换过程、是否缺页、缺页中断次数、缺页率。

(3)算法设计

该算法与上述最近最久未使用算法类似,不同的是,在本算法中,参数p表示该页面调入页表后被访问的次数。当有新的页面被访问时,选择也表中被访问此次数最少(即p参数最小)的进程,将其换出。

2.3.4轮转置换算法

(1)算法核心思想

该算法为每页设置移位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问为置1。置换算法在选择一页淘汰时,只需检查页的访问页。如果是0,就选择该页换出,若为1,则重新将它置0,暂不换出,给予该页第二次驻留内存的机会,再按FIFO算法检查下一个页面当检查到队列中的最后一个页面时,若其访问页为1,则返回到队首去检查第一个页面。

(2)系统参数设计

  • 输入数据参数:页表大小、页号;
  • 输出数据参数:序号、页号、页面置换过程、是否缺页、缺页中断次数、缺页率。

(3)算法设计

系统设置两个ArrayList<OSPage>链表,分别用来存放所需访问页面信息,另一个用来存放页表内页面的信息。对页表中的每个页面设置一个标志位p,当p=0时,将该页换出;若p=1,将p置为0,继续检查下一个页面。当扫描到页面的尾部时,再转到页表首位继续对页面进行扫描。

 

3.系统展示(部分)

3.1首页

【操作系统】算法模拟系统【Java,web,含 源代码】

 

3.2进程调度算法模拟实现

【操作系统】算法模拟系统【Java,web,含 源代码】

【操作系统】算法模拟系统【Java,web,含 源代码】

3.3盘调度算法模拟

【操作系统】算法模拟系统【Java,web,含 源代码】

3.4请求分页页面置换算法模拟

【操作系统】算法模拟系统【Java,web,含 源代码】

 

下附源代码:

链接:https://pan.baidu.com/s/17eY-AvZcYuDpgoWJlB3VGg 
提取码:ueif