【2021/7/19更新】【梳理】简明操作系统原理 第十章 多核心调度 基于事件的并发(docx)

配套教材:
Operating Systems: Three Easy Pieces Remzi H. Arpaci-Dusseau Andrea C. Arpaci-Dusseau Peter Reiher
参考书目:
1、计算机操作系统(第4版) 汤小丹 梁红兵 哲凤屏 汤子瀛 编著 西安电子科技大学出版社

在线阅读:
http://pages.cs.wisc.edu/~remzi/OSTEP/
University of Wisconsin Madison 教授 Remzi Arpaci-Dusseau 认为课本应该是免费的
————————————————————————————————————————
这是专业必修课《操作系统原理》的复习指引。
需要掌握的概念在文档中以蓝色标识,并用可读性更好的字体显示 Linux 命令和代码。代码部分语法高亮。
文档下载地址:
链接:https://pan.baidu.com/s/1L-nvtuC5KQZIq_rScfrc5w
提取码:0000

十 多核心调度 基于事件的并发

这一章涉及到一些组成原理的知识。这里只粗略讲一些需要用到的内容。请认真学习《计算机组成原理》。

操作系统在多个核心上调度任务时,需要注意缓存一致性(cache coherence)的问题。
例如:一个程序在CPU 0上运行,从内存地址A中读到一个数据,写入CPU 0的缓存中;后来,程序修改内存地址A存储的值,但修改只在缓存中生效,操作系统在之后才会写入内存。这个原因在前面的章节中已经讲过了:暂缓写入到较慢的存储器中的操作,在要写入的数据凑成一块后再写入,速率会提高;而且,一旦很快就撤销修改,在更高速的存储器中操作就可以了,而无需在更低速的存储器中进行操作,又进一步提高了速率。
后来,由于调度器的作用,操作系统决定将该进程从CPU 0移到CPU 1上继续。这时,程序又要从内存地址A中读取数据;然而,在之前这个程序已经修改了该值,但修改操作还没有正式应用到内存;这一次,程序又读入了修改前的值。
解决方案是硬件提供的一种古老的技术:总线探听(bus snooping / bus sniffing)。具体来说,一个CPU核心通过总线注意到缓存中的数据有更新后,有两种实现:
·将自己拥有的副本将标记为无效。这种实现是最常用的。
·将修改在自己的缓存中同步。这种实现不太常用。

既然硬件会负责保持一致性的操作,这是不是意味着OS或程序本身就不需要做任何事情了呢?不是的。前面的章节已经学习过:程序(或操作系统)本身需要用互斥锁、条件变量,或者信号量来维持同步,确保数据的正确性。当然,也可以使用无锁的数据结构,但是无锁数据结构较为复杂,也不是在所有的场合都能使用。随着核心数的增长,在访问对同步要求较高的数据结构时,CPU的总利用率已经变得越来越低。

一个多核调度器需要考虑缓存亲和性(cache affinity),即:进程在某个给定的CPU上尽量长时间地运行,而不被迁移到其它CPU的倾向性。如果进程频繁在不同的CPU上继续运行,那么它需要重新将数据读入缓存(假如相应的缓存不是共享的),大大降低运
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值