硬件:
CPU是怎么运行的?
这个问题在写并发程序的时候困惑过我, 我一直搞不清楚并发的 可见性 和 volatile 到底是怎么实现的。
虽然看过很多帖子 , 但是模糊不清。
研究了 CPU 和 Linux的内存模型才有了一下见解。
首先CPU如同一个资源嵌在主板上,处理器的执行由外部时钟来监控。这个时钟称为系统时钟,它每隔相同的时间间隔就向CPU发送一个脉冲。在每个时钟脉冲上,处理器都会做一些工作。比如,处理器每个时钟脉冲上执行一条指令。处理器的速度一般以系统时钟的速率来描叙(说到这里,我知道了以前玩超频到底怎么回事, 提高)。一个100MHz的处理器每秒将接收100,000,000 个时钟滴答。但是用CPU的时钟频率来描叙CPU的工作能力是不正确的,因为它们执行的指令不相同。另外CPU并不总是100%工作的,它取决于操作系统分配给它的用户指令。(CPU有两种执行指令方式:内核和用户,支持VM的CPU还有客户模式用来运行虚拟机指令)
然而,快速的时钟可以在某种程度上代表高性能的CPU。处理器执行的指令是非常简单的;例如"将内存X处的内容读入寄存器Y"。寄存器是微处理器的内部存储部件,用来存储数据并对数据执行某些指令。寄存器依据存储内容不同分为多种,常见如:PC(程序计数器,记录下条指令地址,执行指令后自增长),SP(堆栈指针),PS(处理结果,执行方式等)。有些指令有可能使处理器停止当前的工作而跳转到内存中另外一条指令执行(操作系统就是这样进行进程切换的) 。
在CPU的外部还有一些缓存, 如 一级缓存, 二级缓存, 他们快于内存, 慢于寄存器, 主要作用就是提高速度。
在Java中不同线程也同进程一样被CPU在不同时刻或同时执行, 内存中的数据必须读入寄存器中才能被运算, 当先一个线程改变寄存器中的数据但没有同步到内存中时,其他线程重复从内存相同位置读取数据到寄存器,使得在寄存器中不同时刻代表相同意义的数据不一致, 而且 volatile关键字就是标志JVM保证变量在寄存器中的改变和内存是保持一致的。
而Java中的锁都是在JVM级别直接避免不同线程在同一时刻操作相同数据的机制。
分享到:
相关推荐
这本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一。该课程是为期四个月的全日制职业培训,要求学员毕业时具备非常Solid的C编程能力,能熟练地使用Linux系统,同时对计算机...
《深度探索Linux操作系统:系统构建和原理解析》 [1] 是探索Linux操作系统原理的里程碑之作,在众多的同类书中独树一帜。它颠覆和摒弃了传统的从阅读Linux内核源代码着手学习Linux操作系统原理的方式,而是基于实践...
Linux操作系统总结与心得 一 知识总结 我很荣幸选了"Linux操作系统"这门课程,因为在这门课程的学习过程中,我们通过老 师的讲解以及在网上查阅资料,学到了许多关于Linux操作系统的知识,更重要的是学会 了如何应用...
这本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一,作者宋劲松。 这是一本从零基础开始学习编程的书,不要求读者有任何编程经验,但读者应勤于思考。本书尽最大努力理清...
这本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一。该课程是为期四个月的全日制职业培训,要求学员毕业时具备非常Solid的C编程能力,能熟练地使用Linux系统,同时对计算机...
《深度探索linux操作系统:系统构建和原理解析》是探索linux操作系统原理的里程碑之作,在众多的同类书中独树一帜。它颠覆和摒弃了传统的从阅读linux内核源代码着手学习linux操作系统原理的方式,而是基于实践,以从...
《深度探索linux操作系统:系统构建和原理解析》是探索linux操作系统原理的里程碑之作,在众多的同类书中独树一帜。它颠覆和摒弃了传统的从阅读linux内核源代码着手学习linux操作系统原理的方式,而是基于实践,以从...
本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一,也适合作为高等院校程序设计基础课程的教材。本书对于C语言的语法介绍得非常全面,对C99标准做了很多解读,因此也可以作为...
《深度探索linux操作系统:系统构建和原理解析》是探索linux操作系统原理的里程碑之作,在众多的同类书中独树一帜。它颠覆和摒弃了传统的从阅读linux内核源代码着手学习linux操作系统原理的方式,而是基于实践,以从...
两条线索,一条线索是以Linux平台为载体全面深入地介绍C语言的语法和程序的工作原理,另一条线索是...本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一,也适合作为高等院校程
将Linux内核的修炼之道总结为四个层次:第一层次目的是对Linux以及内核有个全面的认识和了解,掌握Linux内核源代码的分析方法。第二个层次讨论了内核中系统初始化、系统调用、中断处理、进程管理及调度、内存管理、...
本书可能也代表着同类图书的顶尖水平,是一本真正能引导我们较为容易地、极为透彻地理解Linux内核的经典之作,也可能是当前唯一能从本质上指引我们去设计和开发拥有自主知识产权的操作系统的著作。它的出版也许会...
本书最初是为北京亚嵌教育研究中心的嵌入式linux系统工程师就业班课程量身定做的教材之一,也适合作为高等院校程序设计基础课程的教材。本书对于c语言的语法介绍得非常全面,对c99标准做了很多解读,因此也可以作为...
《深度探索Linux操作系统:系统构建和原理解析》是探索Linux操作系统原理的里程碑之作,在众多的同类书中独树一帜。它颠覆和摒弃了传统的从阅读Linux内核源代码着手学习Linux操作系统原理的方式,而是基于实践,以从...
本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课量身定做的教材之一,也适合作为高等院校程序设计基础课程的教材。本书对于C语言的语法介绍得非常全面,对C99标准做了很多解读,因此也可以作为一...