并发编程系列【操作系统底层工作原理】(一)

本文深入探讨冯诺依曼计算机模型,包括控制器、运算器、存储器、输入输出设备的工作原理。讲解了CPU的内部结构,如控制单元、运算单元和存储单元,以及CPU高速缓存的作用。同时,介绍了CPU运行安全等级,如Ring0和Ring3,以及操作系统内存管理和线程模型。最后,讨论了进程与线程的区别,以及虚拟机指令集架构的类型。
摘要由CSDN通过智能技术生成

冯诺依曼计算机模型

  • 冯·诺依曼,美籍匈牙利数学家,1945年提出该计算机模型
  • 流程1:控制器从内存中取出第一条指令,通过控制器进行译码,按指令要求,从存储器取出数据
  • 流程2:进行指令的运算和逻辑操作等,然后将运算结果送到内存,
  • 流程3:接下来取第二条指令,以此类推,直到停止指令
  • 模型图:

计算机五大核心组成

  1. 控制器,中枢神经,负责调度程序、数据、地址,协调各部分工作
  2. 运算器:对数据进行算术运算和逻辑处理
  3. 存储器:存储程序、数据和命令等,并在需要时提供这些数据
  4. 输入:简称外设,主要负责采集数据到计算机,键盘、鼠标等最为常见
  5. 输出:负责展示中间或最后计算结果或各种控制信号,显示器,打印机等最为常见

硬件结构模型

  • 配件很多,日常编程,重点学习的即为CPU、内存两个部分

CPU与内存内部结构

  • 控制单元:指挥中心,协调电脑有序工作,负责读取预先编译好的程序指令,放在指令寄存器中,通过译码器确定该执行什么操作
  • 运算单元:运算器核心,负责算术运算(加减乘及其附属运算)和逻辑运算(移位、逻辑测试、两值比较等),受控制单元进行调度
  • 存储单元:分CPU片内缓存和寄存器组,属于临时存放数据区,一般是存储待处理数据或已处理数据结果,访问速度相比内存快很多

CPU缓存结构

  • 现代CPU为提升执行效率,减少与内存交互,一般在CPU上集成了多级缓存单元,常见为三级缓存
  • L1:分数据缓存和指令缓存,逻辑核独占
  • L2:物理核独占,逻辑核共享
  • L3:所有物理核共享

  • 逻辑结构:

  • 存储器空间:内存 > L3 > L2 > L1 > 寄存器

  • 访问速度:与空间大小相反

  • 思考: CPU为何要有高速缓存?

CPU运算速度遵循摩尔定律,每18个月翻一番,而内存和硬盘访问速度远不及CPU。直白点说,就是为了解决CPU的运算速度和IO速度不匹配问题

带高速缓存CPU计算流程

  • 加载程序及数据到主内存
  • 加载指令和部分数据到高速缓存
  • 执行指令,回写结果到高速缓存
  • 回写高速缓存数据到主内存

CPU运行安全等级

  • intel 的CPU 将运行特权等级分为4个,Ring0到 Ring3,windows只用到0和3个级别,linux未查到相关资料,课程中介绍也是
  • ring0级别最高,ring3最低,ring0上可以使用诸多高级特权指令,如:可以控制中断、修改页表、访问设备等等
  • 操作系统内核代码运行在ring0,一般应用程序运行在ring3,
  • 例如应用程序要访问磁盘写文件,就必须调用系统级函数,执行时CPU将需要从RING3切换到RING0,完成后还需切回RING3
  • RING3切换到RING0过程即为我们熟知的,线程从用户态切换至内核态
  • 思考,为什么要这么设计?

主要目的:让系统权限与应用权限分离,让操作系统可更好的管理系统资源,也是为了让系统更稳定、安全。联想我们日常使用中,应用程序出现问题导致无响应时,可通过任务管理器将程序终止。

  • 现在应该可以理解,为嘛JVM创建线程,以及线程阻塞与唤醒都属于重型操作了吧?因为其实该切换过程细节很复杂。

操作系统的内存管理

  • 操作系统将内存分为:内核空间和用户空间,配合上面CPU的2个重要运行安全级别
  • 两个不同空间,其使用的堆栈不一样,用户空间使用的是一般堆栈,内核空间使用的是固定大小堆栈

内核线程模型

  • CPU调度的基本单位为线程,其模型根据内存的两个空间分为KLT内核线程模型和ULT用户线程模型
  • KLT:内核保存了线程的状态和上下文数据,线程的阻塞不会导致进程阻塞,线程的创建和调度等管理都由内核完成,效率比ULT低
  • ULT:应用程序自行实现线程的创建、sync、调度等函数,不需要在用户态和内核态切换,速度快,且对内核无感知,线程阻塞会导致整个进程阻塞
  • 思考:JVM虚拟机是采用哪种线程模型?

答案是:KLT,如何证明?写一个循环,创建1000个线程,都睡上10s,看下操作系统是否可以感知到?

进程与线程

  1. 操作系统运行一个程序时,会为其创建一个进程,进程是OS给应用程序分配资源的最小单位
  2. 线程是CPU调用的最小单位,也可称为轻量级进程,一个进程下课创建多个线程,各线程拥有各自的计数器、堆栈和局部变量等,且能访问共享的内存变量
  3. CPU可以在多个线程上高速切换,让使用者感知不到,认为是线程在同时执行
  4. CPU切换线程执行过程

扩展了解【虚拟机指令集架构知识】

  • 主要分两种:栈指令集架构和寄存器指令集架构
  • 栈指令集架构:设计实现简单,避开了寄存器分配难题,使用零地址指令分配方式,不需要硬件支持,可移植性好,跨平台实现容易;
  • 寄存器指令集架构:依赖硬件,移植性差,性能优秀,典型应用是x86的二进制指令集,如传统PC以及Android的Davlik虚拟机
  • 思考:JVM虚拟机是哪种?
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值