⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 进程调度xr.txt

📁 操作系统实验.rar
💻 TXT
字号:
Option Explicit
Private Type PCB
PID As String           '定义PCB
PRIORITY As Integer
RUNTIME As Integer
End Type
Private pro(20) As PCB, Run1 As PCB, Run2 As PCB, Rea(20) As PCB, Waiting(20) As PCB
Dim SUM As Integer, R1 As Integer, R2 As Integer, Re As Integer, N As Integer, x As Integer


Private Sub ADD_Click() '添加新进程
Dim j As Integer, k As Integer
Dim S As PCB
If SUM > 20 Then
 MsgBox "进程已满", 48, "警告!"
 Exit Sub
Else
 For j = 0 To SUM - 1
  If pro(j).PID = Text1.Text Then
     MsgBox "进程名有重复,请重新命名", 48, "警告!"
     Exit Sub
  End If
 Next j
End If
If (Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "") Then
    MsgBox "要填的空不能为空", 48, "警告!"
    Exit Sub
Else
 With pro(SUM)
 .PID = Text1.Text
 .PRIORITY = CInt(Text3.Text)
 .RUNTIME = CInt(Text2.Text)
 End With
  all.List(SUM) = pro(SUM).PID
  SUM = SUM + 1
 With Rea(Re)
  .PID = Text1.Text
  .PRIORITY = CInt(Text3.Text)
  .RUNTIME = CInt(Text2.Text)
 End With
 Re = Re + 1
 For j = 0 To Re - 1 '将就绪队列按优先级排序
 For k = j + 1 To Re - 1
  If Rea(j).PRIORITY < Rea(k).PRIORITY Then
  S = Rea(j)
  Rea(j) = Rea(k)
  Rea(k) = S
  End If
 Next k
 Next j
 For j = 0 To Re - 1
  ready(0).List(j) = Rea(j).PID
  ready(1).List(j) = Rea(j).PRIORITY
  ready(2).List(j) = Rea(j).RUNTIME
 Next j
End If
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
RUN.Enabled = True
hangup.Enabled = True
release.Enabled = True
End Sub

Private Sub Form_Load()
SUM = 0
N = 0
Re = 0
R1 = 0
R2 = 0
x = -1
RUN.Enabled = False
hangup.Enabled = False
release.Enabled = False
Timer1.Enabled = False
Timer2.Enabled = False
End Sub

Private Sub hangup_Click()
Timer1.Enabled = False
Timer2.Enabled = False
If Text5.Text = "" Then
 MsgBox "进程名不能为空", 48, "警告!"
ElseIf Text5.Text = Run1.PID Then
 Waiting(N) = Run1
 wait(0).List(N) = Run1.PID
 wait(1).List(N) = Run1.PRIORITY
 wait(2).List(N) = Run1.RUNTIME
 N = N + 1
 List3(0).List(0) = ""
 List3(1).List(0) = ""
 List3(2).List(0) = ""
 R1 = R1 - 1
ElseIf Text5.Text = Run2.PID Then
 Waiting(N) = Run2
 wait(0).List(N) = Run2.PID
 wait(1).List(N) = Run2.PRIORITY
 wait(2).List(N) = Run2.RUNTIME
 N = N + 1
 List3(0).List(0) = ""
 List3(1).List(0) = ""
 List3(2).List(0) = ""
 R1 = R1 - 1
Else
 MsgBox "输入进程名错误,请重新输入", 48, "警告!"
End If
Text5.Text = ""
 Timer1.Enabled = True
End Sub

Private Sub release_Click()
Dim j As Integer, k As Integer
Dim flag As Boolean
Dim S As PCB
flag = False
Timer1.Enabled = False
Timer2.Enabled = False
If Text4.Text = "" Then
 MsgBox "要填的空不能为空", 48, "警告!"
Else
 For j = 0 To N - 1
  If Text4.Text = Waiting(j).PID Then
   flag = True
   k = j
  End If
 Next j
 If flag = False Then
  MsgBox "输入进程名错误,请重输", 48, "警告!"
 End If
 If flag = True Then    '找到解挂队列,添加到就绪队列
  RUN.Enabled = True
  hangup.Enabled = True
  Rea(Re) = Waiting(k)
  Re = Re + 1
  For j = 0 To Re - 1  '将就绪队列按优先级排序
   For k = j + 1 To Re - 1
    If Rea(j).PRIORITY < Rea(k).PRIORITY Then
     S = Rea(j)
     Rea(j) = Rea(k)
     Rea(k) = S
    End If
   Next k
  Next j
  For j = 0 To Re - 1
    ready(0).List(j) = Rea(j).PID
    ready(1).List(j) = Rea(j).PRIORITY
    ready(2).List(j) = Rea(j).RUNTIME
  Next j
  For j = k To N - 2
   Waiting(k) = Waiting(k + 1)
   wait(0).List(k) = wait(0).List(k + 1)
   wait(1).List(k) = wait(1).List(k + 1)
   wait(2).List(k) = wait(2).List(k + 1)
  Next j
  wait(0).List(N - 1) = ""
  wait(1).List(N - 1) = ""
  wait(2).List(N - 1) = ""
  N = N - 1
 End If
End If
Text4.Text = ""
Timer1.Enabled = True
Timer2.Enabled = True
End Sub

Private Sub RUN_Click()
Timer1.Enabled = True
End Sub

Private Sub STOP_Click()
Timer1.Enabled = False
Timer2.Enabled = False
End Sub

Private Sub Timer1_Timer()
Dim j As Integer, k As Integer
If R1 = 0 Then
 If Re > 0 Then
 Run1 = Rea(0)
 List3(0).List(0) = Run1.PID
 List3(1).List(0) = Run1.RUNTIME
 List3(2).List(0) = Run1.PRIORITY
 R1 = 1
 For j = 0 To Re - 1
  Rea(j) = Rea(j + 1)
 Next j
 For j = 0 To Re - 2
  ready(0).List(j) = Rea(j).PID
  ready(1).List(j) = Rea(j).PRIORITY
  ready(2).List(j) = Rea(j).RUNTIME
 Next j
  ready(0).List(j) = ""
  ready(1).List(j) = ""
  ready(2).List(j) = ""
  Re = Re - 1
 Else
  Timer1.Enabled = False
  Timer2.Enabled = False
  RUN.Enabled = False
  hangup.Enabled = False
  List1(0).List(0) = ""
  List1(1).List(0) = ""
  List1(2).List(0) = ""
 End If
Else
 If Run1.RUNTIME > 0 Then
    Run1.RUNTIME = Run1.RUNTIME - 1
    List3(1).List(0) = Run1.RUNTIME
 ElseIf Run1.RUNTIME = 0 Then
    List3(0).List(0) = ""
    List3(1).List(0) = ""
    List3(2).List(0) = ""
 End If
End If
Timer2.Enabled = True
Timer1.Enabled = False
End Sub

Private Sub Timer2_Timer()
Dim j As Integer, k As Integer
If R2 = 0 Then
 If Re > 0 Then
  Run2 = Rea(0)
  List1(0).List(0) = Run2.PID
  List1(1).List(0) = Run2.RUNTIME
  List1(2).List(0) = Run2.PRIORITY
  R2 = 1
  For j = 0 To Re - 1
   Rea(j) = Rea(j + 1)
  Next j
  For j = 0 To Re - 2
   ready(0).List(j) = Rea(j).PID
   ready(1).List(j) = Rea(j).PRIORITY
   ready(2).List(j) = Rea(j).RUNTIME
  Next j
   ready(0).List(j) = ""
   ready(1).List(j) = ""
   ready(2).List(j) = ""
   Re = Re - 1
 Else
   Timer1.Enabled = False
   Timer2.Enabled = False
   RUN.Enabled = False
   hangup.Enabled = False
   List1(0).List(0) = ""
   List1(1).List(0) = ""
   List1(2).List(0) = ""
 End If
Else
 If Run2.RUNTIME > 0 Then
    Run2.RUNTIME = Run2.RUNTIME - 1
    List1(1).List(0) = Run2.RUNTIME
 ElseIf Run2.RUNTIME = 0 Then
      List1(0).List(0) = ""
      List1(1).List(0) = ""
      List1(2).List(0) = ""
      R2 = 0
 End If
End If
Timer1.Enabled = True
Timer2.Enabled = False
End Sub


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -