吉林大学2023操作系统实验二思考题

 

解决方案:

思考题一:

我的思路是,如果说两次调度是没必要的,那为什么自然不必要进行把主线程的控制权交换以及重新获取的操作。那我们就不做此操作了。关键在于,“没必要”的理解。

我认为,有以下两种情况是没必要的:

  1. 调度太过频繁,使得大量的时间花在了切换上,这个时候及时调度的序列即是合理也会浪费大量时间。
  2. 两次调度结果一样。

算法改进方案

  1. 增大两次调度的时间片间隔
  2. 预测下一次调度的结果,如果一样则不进行切换。

  修改代码:

    for(i=0;i<demo_time;i+=10)      //每十个时间片调度一次

    {

         int j;

         Tmp=select_proc(alg);

         if(curr_proc==Tmp)     //预测调度结构

          {

         if((curr_proc=select_proc(alg))!=-1)

         {  

             pthread_mutex_unlock(&proc_wait[curr_proc]);

             pthread_mutex_lock(&main_wait);  

          }

          else

          {   

              pthread_mutex_unlock(&idle_wait);  

              pthread_mutex_lock(&main_wait);

          }

}

         for(j=0;j<task_num;j++)

          {  

              if(--tasks[j].ti_left==0)

              {

                  tasks[j].ti_left=tasks[j].ti;

                  tasks[j].ci_left=tasks[j].ci;

                  pthread_create(&tasks[j].th,NULL,(void*)proc,&tasks[j].arg);

                  tasks[j].flag=2;

              }

         }

    }

   思考题二:

   增加计数器即可

   设置全局变量  

   Int timeOfEDF=0,timeOfRMF=0;

   把计数器加入线程切换的位置加入代码:

   Switch(alg)

{

   Case  1: timeOfEDF++;

   Case  2: timeOfRMF++;

}

即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值