首页 > 其他分享 >计算机操作系统秋招学习第一轮(二)

计算机操作系统秋招学习第一轮(二)

时间:2022-08-15 01:14:10浏览次数:82  
标签:第一轮 操作系统 cache MESI 线程 秋招 串行化 数据 CPU

主要参考书籍:《CSAPP》、《图解操作系统》

上回学到了写传播

在解决这个缓存一致性的问题,其实我们只需要做到写传播和事务串行化
写传播就是指一个核心的cache发生了数据变更,必须传播到其他的核心当中去。

不过还存在一个问题,不同核心接收到传播的数据变更顺序可能不一样。我们必须保证不同
核心接收到的数据变更顺序是一样的。--我们称之为事务串行化

如何实现写传播与事务串行化

总线嗅探

Bus Snooping 每个核心都时时刻刻监听着总线上的广播条件 , 每次自己核心发生数据变更的时候,就发出广播事件
然后监听的核心检查变动的数据在自己的cache里面存不存在,如果也存在这个数据的话,就也更新自己的数据内容。

这样的话就能够实现写传播,虽然会给总线带来不少的负荷(但这是不可避免的)

可是还是没实现事务串行化,于是就

MESI协议

MESI协议是已修改(Modified)、独占(Exclusive)、共享(Shared)、失效的(Invalid)四个状态的英文首字母缩写组成的协议。
四个状态组成了有限状态机,四个状态的变化来自于本地的CPU cache请求或者是总线上其他核心CPU cache的请求。

主要能够理解状态机的运转就嗯呢该理解基于总线嗅探的MESI协议

能够深度、完整地描述出这两张图的过程 MESI协议基本就过关了。

虽然前面有提到用锁来解决事务串行化的问题,但在MESI协议中又没有提到关于锁的内容。

有关CPU读写数据的问题

虽然标题是关于CPU是如何读写数据的,但在之前其实有很多内容已经重复和讲解了,其实讲解的内容更多地是针对一些
CPU读写机制造成的问题。比如说下面这个问题:

伪共享

多个线程不断交替修改同一个cache line上的不同变量时导致的CPU cache存储数据失效的问题

如何避免伪共享

在Linux中有些时候多核系统会通过用空间换时间的思想去避免这个问题的发生
通过宏定义的字节对齐将不同变量放在不同的cache line 中

而CPU如何读写数据从前面几节我们也能略知一二了:
CPU核心通过内存地址(包含有很多信息)先从缓存开始读数据,读到了就结束(缓存命中),否则一路向下,沿着存储金字塔的结构一路走到存储的最底层【也未必就是最底层】(内存)。过程中涉及一些需要解决的问题:写数据、缓存保持一致...

有关CPU线程、进程的问题

其实很奇怪 在第一章为了能够理解程序在CPU中是如何运行的,需要用很多后面的知识(陌生,还没学)去理解

  • 线程、进程的基础在图解系统的第四章,因此我们也直接跳到第四章一并解决了这些问题。(后续搞吧)
    当然我们最终是为了理解程序在CPU中是如何运行的。

因为在系统运作的过程中有很多的线程和进程在运行,于是我们需要了解系统是如何选择哪个线程、进程去运行

所以线程、进程是什么暂时不用知道。

选择机制(调度策略)

有哪些机制、策略

标签:第一轮,操作系统,cache,MESI,线程,秋招,串行化,数据,CPU
From: https://www.cnblogs.com/black-worrior-2000/p/16586845.html

相关文章

  • 计算机操作系统秋招学习第一轮(四)
    #主要参考书籍:《CSAPP》、《图解操作系统》、《MOS现代操作系统》上一篇主要就是进程概念的阐述与拓展本篇我们来学习一下:如何控制进程控制进程,即控制进程的......
  • 计算机操作系统秋招学习第一轮(三)
    主要参考书籍:《CSAPP》、《图解操作系统》、《MOS现代操作系统》本篇着重学习线程与进程进程小林coding对进程的解释:代码以二进制的文件形式存储到内存当中,CPU读取并执......
  • c++xx 秋招学习STL库(三)
    主要参考:本篇学习无序关联式容器无序关联式容器种类无序容器功能unordered_map存储键值对<key,value>类型的元素,其中各个键值对键的值不允许重复,且该......
  • c++xx 秋招学习STL库(二)
    Map、Set、Unordered_map类与数据结构中所描述的一致,数组作为顺序型ADT,在STL库中vector也被称为序列式容器同时还存在着一些无序型容器我们本节主要就学习这类无序......
  • c++xx 秋招学习STL库 (一)【vector】
    c++xx秋招学习STL库(一)vector类主要针对一些编程时使用发现的一些问题与思考进行记录Vector的初始化一维数组//usingnamespacestd;vector<int>int_vec;vector<......
  • 周回顾并发编程与数据库08.14:UDP协议、操作系统发展史、相关名词、进程、线程、验证py
    目录UDP协议操作系统发展史相关名词进程线程锁信号量event事件池协程数据库MySQLSQL与NoSQL内容UDP协议Internet协议集支持一个无连接的传输协议,该协议......
  • vmware下 安装 最新版 ubuntu server 操作系统(二)
    1.vmware安装Linux配置完成 VMware中操作步骤:https://www.cnblogs.com/sunbenbao/p/16558584.html2.点击启动虚拟机后操作:默认选中“TryorInstallUbuntu......
  • 操作系统
    操作系统什么是操作系统操作系统是计算机系统中最基本的系统软件。操作系统能够管理计算机硬件与软件的资源,合理组织、调度计算机工作与资源的分配,进而为用户和其他软件......