源代码.cpp
上传用户:shijie7711
上传日期:2022-07-21
资源大小:162k
文件大小:3k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. #define NULL 0
  2. #include <iostream>
  3. #include <string> 
  4. using namespace std;
  5. typedef struct pcb                   //进程控制块
  6. {
  7. string pname;
  8. int  pnum;
  9. int  runtime;
  10. int  priority;
  11. char state;
  12.     struct pcb * next;
  13. }PCB;
  14. PCB  *head;                         //进程链表头指针
  15. PCB  *run_process;                  //指向正在运行的进程
  16. static R = 'r', C = 'c';
  17. int needtime[5];
  18. void InputProcess()                 //进程输入函数
  19. {   
  20. PCB *p ;
  21.     head = new PCB;
  22. p = head;
  23. for(int i = 0; i < 5; i++)      
  24. {
  25. cin>>p->pname>> p->runtime >> p->priority ;
  26. p->state = R;
  27. p->pnum = i;
  28. needtime[p->pnum] = p->runtime;
  29. if(i != 4)
  30. {
  31. p->next = new PCB;
  32. p = p->next;
  33. }
  34. else
  35. {
  36. p->next  = NULL;
  37. }
  38. }
  39. }                                      //输入5个进程的进程名,估计运行时间和优先级
  40. void RunProcess()                     //进程运行函数
  41. {
  42. PCB *p1,*p2,*p3;
  43. p3 = p1 = run_process;
  44. p2 = head;
  45. p1->priority++;               //优先级+1
  46. p1->runtime--;                //运行时间-1
  47.         if(p1->runtime <= 0)          //如果运行完成,状态改成C
  48. {
  49. p1->state = C;
  50. }
  51. cout<<"刚运行的进程:"<<endl;
  52. cout<<"进程名: "<< p1->pname<<"  "<<"优先级: "<<p1->priority
  53. <<"  "<<"剩余时间: "<<p1->runtime<<"  "<<"已运行时间: "
  54. <<needtime[p1->pnum] - p1->runtime<<"  "<<"状态: "<<p1->state<<endl;
  55.         
  56.         if(p1->runtime <= 0)           //如果进程运行完成,从链表中删除
  57. {
  58. if(head == p1)
  59. {
  60. head = head->next;
  61. }
  62. else 
  63. {
  64. while(p2->next != p1 )
  65. {
  66.      p2 = p2->next;
  67. }
  68.                 p2->next = p1->next;
  69. }
  70. run_process = head;
  71. }
  72. p1  = head;
  73. if(p1 != NULL)
  74. {
  75.         cout<<"就绪队列中的进程:"<<endl;
  76. }
  77. while(p1 != NULL)                      //输出就绪队列中的进程情况
  78. {
  79. if(p1 != p3)
  80. {  
  81. cout<<"进程名: "<<p1->pname<<"  "<<"优先级: "<<p1->priority
  82. <<"  "<<"剩余时间: "<<p1->runtime<<"  "<<"已运行时间: "
  83. <<needtime[p1->pnum] - p1->runtime<<"  "<<"状态: "<<p1->state<<endl; 
  84. }
  85. p1 = p1->next;
  86. }
  87. cout<<endl;
  88. }
  89. int readydata()                 //判断就绪队列是否为空,不为空则选择优先级高(数字低)
  90. {                               //的进程运行
  91. PCB *p3;
  92. p3 = head;
  93. if(head == NULL)
  94. {
  95. return 0;
  96. }
  97. else if(head->next == NULL)
  98. {
  99. run_process = head;
  100. return 1;
  101. }
  102. else
  103. {
  104. if(run_process == NULL)
  105. {
  106. run_process = head;
  107. }
  108. while(p3 != NULL)
  109. {
  110.     if(run_process->priority > p3->priority)
  111. {
  112.     run_process = p3;     
  113. }
  114. p3 = p3->next;
  115. }
  116. return 1;
  117. }
  118. }
  119. int main()
  120. {
  121.     int m;
  122. cout<<"请输入5个进程名及其估计运行时间和优先级:"<<endl;
  123. cout<<"进程名  运行时间  优先级"<<endl;
  124.     InputProcess();                              //输入进程
  125. while((m = readydata()) != 0)                //选择就绪队列中的进程
  126. {
  127. RunProcess();                            //运行进程
  128. }
  129. }