常见操作系统调度算法研究(2)

轮转策略

轮转策略(Round-Robin)简称为RR,在RR里面,每个准备就绪的任务只能在有限的时间内运行,也就是说不管这个任务完成与否,都会切换任务到下一个。
由于它要频繁的切换队列,我们可以把准备就绪的队列视为FIFO队列,假设任务A需要30ms,cpu的时间切片为10ms,那么它执行到10ms时,cpu便会产生一个中断信号,此时任务A来到队尾,任务B接着上去。这样做看似雨露均沾,它的平均等待时间确实比较长的。假设使用4ms的时间片,A、B、C的任务时间分别为10ms,15ms,20ms,那么它在采用RR策略下的平均等待时间为(6+11+16)/3=11ms
一般来说CPU的调度时间小于切片时间,如果我们最关心的指标是操作系统的调度时间,那么使用RR显然不是一个明智的选择。

公平策略的得与失

RR策略是一种公平策略,使用任何一种公平策略的时候就要考虑到小任务不会被优先处理,这在某一种程度上是令人难受的,但这也是现实世界的哲学,没有什么算法是十全十美的,我们更多的是要结合使用场景来选择对当前场景最有利的算法。
优化了周转时间比如SJF,STCF优化了中转时间,但对响应时间不利
优化了响应时间比如RR优化了响应时间,但由于频繁切换任务浪费的时间,对周转时间不利。

多级反馈队列

多级反馈队列的出现主要是为了平衡周转时间与响应时间,这里涉及到一个MLFQ的概念,它是把所有待处理的任务都分成队列,然后给每个队列标上不同的优先级。
MLFQ(Multilevel Feedback Queue Scheduling)先处理优先级最高的队列,将优先级较低的队列放到后面处理,如果遇到两个优先级一样的队列就会采用轮询的方式来处理
在这里插入图片描述

比例分额

并不是我们所有的算法目的都是为了在周转时间与响应时间之间找到一个平衡点,有时候只需要保准CPU对每一个任务都有一波雨露均就可以了。用一个直接粗暴的方法,每隔一段时间随机抽取一个任务处理,这个被称作彩票处理方法,随机方法具有轻量的特性,它无需比较数据库中任务的大小,直接利用随机数抽取。
这里会用到步长调度算法。步长调度也很简单。系统中的每个工作都有自己的步长,这个值与票数值成反比。在上面的例子中,A、B、C这3个工作的票数分别是100、50和250,我们通过用一个大数分别除以他们的票数来获得每个进程的步长。比如用10000除以这些票数值,得到了3个进程的步长分别为100、200和40。我们称这个值为每个进程的步长(stride)。每次进程运行后,我们会让它的计数器 [称为行程(pass)值] 增加它的步长,记录它的总体进展。

多核处理器调度

初学者编写程序时,大多数情况下编写的程序都是单核调度的,增加了CPU的个数并没有对你这个程序运行有任何作用,为了解决这个问题不得不重写应用程序,让其采用多线程的方式执行。
程序第一次读取数据,花费时间比较长,读取之后你会把它放在缓存中,以防后续再有程序想要读取它, 这个叫做时间局限性;空间局限性是指,程序读取了这个地址的数据,它接下来很有可能读取这个地址周围地址的数据,这两种局部性存在于绝大多数系统,这只是在一个处理器的情况下,当有多个处理器的时候情况会变成怎样?

缓存一致性

存在这样一种情况,当程序A想要修改在内存上的一个数据,由于这个数据不在CPU的cache里面,我们便会首先访问内存并且修改数据,把数据位置从d转移到 D D D假设这个时候,操作系统中断了这个任务的操作,这时候第二个任务也要来修改这个数据,那么它肯定在d处是找不到这个数据的,但是它不知道d处已经发生了变化,还会从d处读取一个过时的数据。
解决这个问题的方法是监控内存的访问,硬件可以保证获得正确的数据,并保证共享内存的唯一性。在基于总线的系统中,一种方式是使用总线窥探(bus snooping)[G83]。每个缓存都通过监听链接所有缓存和内存的总线,来发现内存访问。如果CPU发现对它放在缓存中的数据的更新,会作废(invalidate)本地副本(从缓存中移除),或更新(update)它(修改为新值)。

同步

在跨CPU访问数据的时候,会涉及到互斥原语,这里说几种CPU锁的结构

互斥锁

不管是互斥锁还是自旋锁,加锁的目的就是保证共享资源在任意时间里,只有一个线程访问,这样就可以避免多线程导致共享数据错乱的问题。
互斥锁,确保同一时间只有一个线程访问数据。对共享资源的访问,先对互斥量进行加锁,如果互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁。在完成了对共享资源的访问后,要对互斥量进行解锁

自旋锁

当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成 busy-waiting 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值