珍藏多年的计算机内核结构大全笔记,掌握计算机工作原理真不难

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言

而是理解过并总结出来通俗易懂的大白话,

小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.

🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

在这里插入图片描述

一段小诗送给小伙伴

晨光破晓露微凉,
轻风拂面带花香。
远山如黛映天际,
新日初升照四方。

心怀希望踏征途,
梦想翱翔展翅扬。
岁月悠悠情不老,
开篇诗语寄华章。

前言

计算机在普通人眼中可能就是大家俗称的计算器,但这不完全对的。

实际上我们的计算机不仅有 计算器的算术 功能,而且还有 逻辑运算 功能。

在本专栏中,小编将开始带着小伙伴们学习重要的 计算机基础 的, 内核的 体系结构架构运行原理工作机制等等…

本篇的内容的大体上掌握基本的计算机的总体的框架。

目录

  1. 冯诺依曼体系

  2. CPU的重点知识

  3. CPU执行指令的流程

  4. 操作系统的核心概念

  5. 进程的概念

  6. 进程的调度

一. 冯诺依曼体系

1. 冯诺依曼

在这里插入图片描述

冯诺依曼大佬是一名数学家,物理学家,化学家,哲学家。

话说, 冯大佬在一次做火车的过程中,偶然听了几位年轻人正在讨论能够用来算术运算和逻辑运算的的一种机器, 后来得知这几位年轻人是普林斯顿大学的研究员, 冯大佬就对这种机器产生了兴趣, 就答应他们过几日去普林斯顿去研究

于是过几日大佬来到了普林斯顿,和研究员一起研究了好几日,在此期间就提出了冯诺依曼的计算机体系结构

即:== 控制器->计算器->输入设备->存储设备 ->输出设备 ==

而我们当下谈的最多的 CPU 其实就是 控制器和计算器 的集成。

自此冯诺依曼体系成为了当前计算机最主流的计算机体系,并且冯诺依曼成为了计算机创始人之一

和图灵在理论上创建的计算机模型的贡献,共同称为计算机的开山鼻祖。

2. 冯诺依曼体系

我们知道冯诺依曼体系的核心就是

在这里插入图片描述

  1. 输入设备

  2. 输出设备

  3. 存储器

  4. CPU

<1>. 输入设备

输入设备一般是外部用户对计算机内部进行 数据的传入 ,和 计算机进行交互

像我们常见的输入设备一般就是: 键盘,鼠标等…

<2>. 输出设备

输出设备一般是计算机内部 对外进行输出 ,把用户需要的信息提供给 用户和计算机 进行交互

<3>. 存储器

存储器一般分为两种,而且特别各不相同

  1. 内存: 存储空间小, 运行速度快,成本高,掉电时数据丢失

  2. 外存: 存储空间大,运行速度慢,成本低, 掉电时数据不丢失

常见的外存有: 硬盘,光盘, 软盘,U盘

鱼式疯言

我们常用的32GB大小的 “内存” 等… 其实是我们的 外存 ,小伙伴们可千万不要喊错了

我们常见的内存: 5GB8GB 等… 很小的空间。

<4>. CPU

CPU称为计算机中央处理器,相当于计算机的 “大脑” ,是一个计算机最核心的部分,用于算术运算和逻辑运算。

可以那么说:CPU和氢弹是人类科技的巅峰之作

能制作氢弹(五常)

能制作CPU(不多于五个国家)

如今市面上CPU做的很精密的厂商

  1. 英特尔: 桌面端: 酷睿,服务器:志强
  2. AMD:桌面端:锐龙,服务器: 霄龙
  3. 高通(手机版的晓龙)

3. CPU 的架构

主要的架构有:

  1. x86/x64 架构:用于桌面端和服务器使用

像 80286,80386,80486都为x86架构

像 amd64 就是x64架构。

  1. arm架构: 用于移动端和嵌入式

  2. RISC-V架构: 一套开源的CPU指令集合。

二. CPU的重点知识

1. CPU的核心数

最开始的CPU的只有一个核心,相当于CPU中只有一个人在干活

后来人们想CPU越来越快,单核心上的技术已经很难再提升,

那么横向不行,我们就 纵向发展 ,于是我们就利用了 多核心 ,利用超 线程的技术 加快CPU 的速度

为了更好的加快CPU的速度,人们又让 一个核心干两个人 的,比如八核心就是十六线程,三十二核心就是六十四线程,从而开启了 并发编程

鱼式疯言

对于我们程序猿来说, CPU的多核心,每个核心的双线程,这些对于多线程编程是至关重要的,也是影响重大的。

程序猿需要把 任务拆解成多个,使用不同的核心分别执行

所以小伙伴们一定要对这部分知识有个基本都认知。

2.CPU的频率

CPU的频率决定着CPU的速度

例如: 2.90 HZ 就意味着一秒执行 29亿次~~

所以 CPU的速度 可以用 频率 来判断,CPU会根据 任务量多少 来对 频率 进行 动态调整

任务量越多CPU 就会自动 加快频率耗电量加快产热增加

CPU 有一个 能耗墙 ,当温度达到 105度 时,就会达到一个峰值,CPU就会自动 降低频率降低耗电量

鱼式疯言

  1. 如果小伙伴要加快CPU的频率 ,就需要加强散热效果,可以让CPU的频率达到更高的水平=》超频

  2. 衡量一个CPU的是否牛逼:主要就看 核心数和频率

三. CPU执行指令的流程

1. 指令

指令是什么?

当我们敲下C / java / C++ 的编程语言,就会转化成 CPU的二进制指令

指令就是让 CPU干活, 给 计算机完成任务 的基本单位。

并且CPU中有两个东西:寄存器和缓存

寄存器是CPU中一种 内存极小 ,运行 速度极快成本很高 掉电后数据丢失存储数据的部分

当CPU中进行运算时,就需要不断和 寄存器读取数据 ,就会 影响速度

这时我们就借助 缓存 这种东西

在这里插入图片描述

利用缓存就可以让CPU从高效的从缓存中读取数据

当数据量很少时,就用上面的L1缓存

数据量很多 时,就用上面的L3缓存

鱼式疯言

缓存的利用 空间更大 ,CPU的工作 效率越高

当作为普通的Java程序员, 我们就需要 缓存和寄存器 是一个 整体 ,都可以叫做寄存器。

2. 工作原理

在这里插入图片描述

计算机指令工作过程中,取指令,解析指令,执行指令 三个步骤

其中解析指令就需要用上面的指令表,具体执行过程小编 一 一分解哦

<1>. 获取指令

取指令: CPU从内存中 读取数据 到CPU的内部(有专门的 寄存器 读取指令,不是说上面的 a,b寄存器 )

<2>. 解析指令

识别出这个指令 是干啥的,以及对应的 功能和操作数

下面小编会 一 一 分析

<3>. 执行指令

根据对应的功能和指令 进行执行

3. 实际运用

CPU中存在一种特殊的 寄存器“程序计数器” , 保存着从 哪个内存位置 开始进行读取指令。

我们 C/java/C++ 写出的程序会生成 .exe 可执行程序文件

这个 可执行程序文件 包含这个程序的所需要 依赖的数据和二进制指令

当我们双击 . exe 文件,操作系统就会加载到 内存中 。 程序计算器会被 操作系统 的 自动设置好初始值为 0

随着程序的 不断执行 ,程序计算器就会 不断的 更新 , 默认情况下 程序计算器 就会 +1 自增, 除非程序中遇到 goto , break ,if , while 的语句就会有可能进行跳跃 自增或自减 , 设置为其他值。

程序计算器 默认从0 开始,所以小编在这里举例

第一步: 读取指令

在这里插入图片描述

读取指令00101110

第二步: 解析指令

在这里插入图片描述

0010 是操作码, 1110 操作数。

去指令表中查看,看这个操作码是啥意思

这个指令是 LOAD A 指令,并且后面的1110 表示了一个 内存地址

这个指令的工作,就是把 1110(14) 这个 地址的数据 ,读取到 寄存器 A

第三步: 执行指令

14 的地址的内存数据 读出来,放到 寄存器A

第一条指令执行完毕,系统会自动把 程序计数器的值++

0 -> 1

鱼式疯言

像上面这样读取指令,解析指令,执行指令 进行 循环往复 ,最终执行完我们需要执行的 程序的结果

四. 操作系统的核心概念

操作系统核心的两个重要的内核就是:

  1. 管理外部的 硬件设备
    比如给计算机外部接入 很多设备 例如: 扫码枪,医疗设备, 声波监测枪。
  1. 给软件提供良好的运行环境:
    一个应用程序执行时 , 他会 独立运行 , 即使一个 应用程序出现BUG ,也 不会影响 其他的 应用程序的运行

在这里插入图片描述

故: 操作系统 = 内核 + 应用程序

那么问题来了, 操作系统该怎么 控制硬件设备

本质上 操作系统 不是直接 控制硬件设备 的,而是通过 硬件厂商 提供的 驱动程序 来间接的控制 硬件设备

鱼式疯言

小伙伴们可以从学校的角度这样理解

校长(操作系统)-> 辅导员(驱动程序) -> 学生(硬件设备)

一. 常见的操作系统

  1. linux操作系统

linux官方正确发言: 里那克斯

  1. window操作系统

桌面端 最主流的操作系统生态好

  1. Mac OS (富哥专属)

苹果电脑内置的操作系统系统:

优势:

  • 续航时间长

  • 装X

  • 不能打游戏

  1. Android

手机移动端 内置的操作系统, 是基于 linux演化 出来的一款操作系统,因为年代久远, 所以 差别很大 了。

  1. IOS

OS 操作系统 是苹果手机和平板的操作系统,和 Mac OS 是两套不同的操作系统。

五. 进程的概念

在这里插入图片描述

1. 进程的认识

进程是什么?

进程换言之就是 任务 ,操作系统的应用程序有两种状态:

  1. 应用程序 没有运行 时, 就在的硬盘上 躺着
  1. 运行时,就会加载到 内存中CPU 就会执行 应用程序上的指令

所以进程就是本质上就是: 正在运行的应用程序

鱼式疯言

进程的执行同时也是需要利用硬件资源的, 故我们常称为

进程就是操作系统 分配资源基本单元

2. 进程的描述

通过 结构体/ 类 把进程各种属性进行表示, 主流的系统是通过C/ C++ 中的结构体进行表示

linux 操作系统, 是通过 “PCB(进程控制块)” 这样的 结构体来描述进程的信息

PCB都有啥属性呢?其实本质上 PCB 有 很多复杂的属性,这里小编主要讲解常见重要的属性

1. PID:进程的标识符

同一个进程的 标识符是相同的 ,不同的进程 标识符是不同的 , 所以 PID 是作为 进程命名的唯一的标识

2. 内存指针

描述 进程 依赖数据和内存 存放在哪个区域,操作系统 就在执行 .exe 文件 ,就会读取 .exe文件中的指令和数据 , 从而加载到 内存中(内存地址)

3. 文件描述符表 (数组 / 顺序表)

描述进程打开了 哪个文件

鱼式疯言

从而进一步显示了:

进程中的内存指针是在 内存上执行的 ,需要消耗内存资源。

文件描述符表是在 硬盘中执行的 , 需要消耗硬盘资源。

3. 进程的组织

在这里插入图片描述

进程的组织,必然是要用到我们前期学过的数据结构来进行增删改查

所以我们可以简单的认为 PCB 是通过 链表 对多个 结构体进行连接

所以我们的进行进程的操作

创建新的进程() -> 在链表中添加该节点

销毁进程 -> 在链表中删除该节点

显示进程信息 -> 在链表中遍历这个进程,显示对应信息。

六. 进程的调度

1. 进程的调度理解

进程的调度和我们日常的开发 是息息相关的

在以前的CPU中,只是 单核心不能进行多进程

而现在的CPU中,是 多核心 , 能 允许多进程

无论是单核心还是多核心 ,都能进行多个进程的运行

这是为什么呢?

因为 CPU在进行进程时 ,采用的分时调用的的方式,一会执行 这个进程 , 一会执行 另外一个进程 ,由于 CPU的运行速度非常快 ,所以我们 肉眼是无法看出的 ,我们称为 并发执行

并且不同的核心之间也能只能 执行不同的进程并行执行

而我们把 并发和并行 执行的方式成为 并发编程

2. 进程的状态

在进程中主要分为两种状态

进程中将要 执行任务 的状态, 为 就绪状态
进程中 暂停任务 的状态, 为 堵塞状态

鱼式疯言

栗子理解 :

我们 平常运行的程序 一般都是 就绪状态

而像我们 C / Java 中的 scanf 或 Scanner 中,需要用户从 控制台输入数据 ,程序就会暂停,只有用户输入结束后,就会继续执行程序, 这就是 堵塞状态

3. 进程的优先级

进程的优先级主要考虑的任务的重要程度,就好比现在让小伙伴有两件时 看电影和去面试,必然是先去面试,那么我们的进程的优先级也是同样的结果,会优先考虑重要的任务优先执行。

4. 进程的上下文

由于我们的进程的 分时复用 , 当 一个进程接连这另外一个进程执行 时,当下次再次执行到 同一个进程 ,会继续执行上次没有执行完的任务 ,不会发生 错乱执行的问题 ,实现 进程上下文的联系

5. 进程的记账信息

进程的不同任务所分配的 运行时间不同 ,当一个任务分配的 时间很短 不够执行时, 操作系统就会 手动调整进程的运行时间 ,根据 记账执行的信息 来进行 动态调整

总结

  • 冯诺依曼体系: 介绍了冯大佬创建计算机的偶遇, 和冯诺依曼体系的4种结,

  • CPU的重点知识: 了解了CPU的最要两个参数: 核心数和频率, 这也是衡量CPU质量的重要指标。

  • CPU执行指令的流程: 主要依靠指令表和获取指令, 解析指令和执行指令三个步骤。

  • 操作系统的核心概念: 核心的两个作用: 管理外部硬件设备并给应用程序提供稳定的运行环境。

  • 进程的概念:熟悉进程本质上用结构体表示和用链表来描述, 以 进程的标识符,内存指针,文件描述符表来引用 。

  • 进程的调度: 熟悉进程的分时调用和熟悉进程的优先级,上下文和记账信息的属性。

总结

  • 堆的初识: 我们认识到了堆本质上一中有着优先级的, 并且融合了完全二叉树和队列的特性,用顺序存储, 一种特殊的树状结构。

  • 堆的调整: 向上调整和向下调整各种细节和调整顺序

  • 堆的数据插入和删除: 对于插入的场景我们一般用向上调整,对于删除场景, 我们一般向下调整。

  • 堆实现优先级队列 : 从大局中我们用堆实现了优先级队列, 并且从时间复杂度的角度来看,建堆比堆中插入元素更高效。

如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/868511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

江洲的《家书》,岂止抵万金

题记 今晨6点钟&#xff0c;像往日一样的背上鱼具包&#xff0c;欲驾乘清凉舒适的晨风&#xff0c;前往味江河堤享受钓翁乐趣。孰料开门一看&#xff0c;朦胧的天空竟下着淅淅沥沥的小雨。 今年的天气异常&#xff0c;是笔者寄居“西川第一天”古镇5年来所未见&#xff1a;再…

顺序表实现

size属于结构体的作用域 如果要访问一个结构体的指针用-> 如果要访问一个结构体的变量用. 点操作 #include<stdio.h> #include<stdlib.h> #include<string.h> #include"seqlist.h" //typedef struct seqList{ // SLDataType* _data; //需…

CSS技巧 - 一日一例 (1):会讨好的热情按钮

题外话: 从今天开始,我准备开设一个新的专栏,专门写 使用CSS实现各种酷炫按钮的方法,本专栏目前准备写40篇左右,大概会完成如下按钮效果: 今天,我来介绍第一个按钮的实现方法:会讨好的热情按钮。为什么我给它起这样的名字呢?你看它像不像一个不停摇尾巴的小黄?当你鼠…

29 H3C SecPath F1000 系统(概述)

29 H3C SecPath F1000 系统 系统全局功能&#xff08;高可靠性 日志设置 报表设置 会话设置 升级中心 Lcense配置 高级虚拟化 管理员 维护 诊断中心 配置指导&#xff09; 高可靠性 1 vrrp VRRP将局域网内的可以承担网关功能的一组设备划分在一起&#xff0c;组成一个备份组…

【Spring Boot】Spring AOP动态代理,以及静态代理

目录 Spring AOP代理一. 代理的概念二. 静态代理三. JDK代理3.1 重写 invoke 方法进⾏功能增强3.2 通过Proxy类随机生成代理对象 四. CGLIB代理4.1 自定义类来重写intercept方法4.2 通过Enhancer类的create方法来创建代理类 五. AOP源码剖析 总结(重中之重&#xff0c;精华) Sp…

git使用总结

git介绍 Git是一款免费、开源的分布式版本控制系统 &#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 git安装 下载地址 # 推荐使用国内镜像下载 http://npm.taobao.org/mirro…

解决win10报“无法加载文件……profile.ps1,因为在此系统上禁止运行脚本”的问题

打开命令行报错 解决方法 使用管理员权限打开PowerShell&#xff1a;WinX, 选择“Windows PowerShell&#xff08;管理员&#xff09;” 输入&#xff1a;Set-ExecutionPolicy -ExecutionPolicy RemoteSigned 输入&#xff1a;y确认修改安全策略 &#xff1a;y确认修改安全策略…

前端学习(三)CSS介绍及选择符

##最近在忙期末考试&#xff0c;因此前端笔记的梳理并未及时更新。在学习语言过程中&#xff0c;笔记的梳理对于知识的加深very vital.因此坚持在明天学习新知识前将笔记梳理完整。 主要内容&#xff1a;CSS介绍及选择符 最后更新时间&#xff1a;2024/7/4 目录 内容&#x…

强化学习的数学原理:值函数近似

在上次课介绍了 TD Learning&#xff0c;实际上这次课依然是介绍 TD &#xff0c;但是上次是用的表格形式介绍的&#xff0c;这次课我们将会介绍基于函数的方式。 算法其实不太难&#xff0c;难的是思路和想法&#xff0c;另外这一节将引入神经网络。 另外最经典的 Deep Q-le…

AutoDL部署半自动大模型标注工具踩坑实录

效果演示 克隆代码 git clone http://github.com/yoletPig/Annotation-with-SAM.git安装SAM cd segment-anything pip install -e .安装SAM-Tool依赖包 pip install -r requirements.txt下载权重 wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_

论文新思路!双通道卷积神经网络!最新成果准确率近100%

双通道CNN是一种创新的卷积神经网络架构&#xff0c;它能捕捉到比单通道CNN更丰富的信息&#xff0c;从而提高模型的性能和鲁棒性。 具体点讲&#xff0c;传统CNN采用单个卷积层提取特征&#xff0c;形成特征映射&#xff1b;而双通道CNN则通过两个并行卷积层同时处理输入数据…

越来越多用户和商家选择小程序商城的原因是什么?小程序商城怎么搭建?

得益于小程序的便捷性&#xff0c;越来越多的用户选择在小程序商城购物&#xff0c;越来越多的商家也开始搭建自己的小程序商城。背后原因是什么呢&#xff1f;小程序商城怎么搭建&#xff1f; 用户为何青睐小程序商城&#xff1f; 1、便捷性 小程序商城无需下载安装&#xff…

数据结构——二叉树之c语言实现堆与堆排序

目录 前言&#xff1a; 1.二叉树的概念及结构 1.1 特殊的二叉树 1.2 二叉树的存储结构 1.顺序存储 2.链式存储 2. 二叉树的顺序结构及实现 2.1 堆的概念 ​编辑 2.2 堆的创建 3.堆的实现 3.1 堆的初始化和销毁 初始化&#xff1a; 销毁&#xff1a; 插入&…

开源屏幕分享项目:轻量好用无延迟!!【送源码】

想必大家在日常的工作中&#xff0c;会经常需要分享代码、演示项目或者进行在线教学&#xff0c;这就需要一个既高效又便捷的屏幕共享工具。然而&#xff0c;现有的一些解决方案往往存在延迟高、画质差等问题。 今天就分享一个开源的屏幕共享项目 - screego&#xff0c;不但免…

PHP灵活用工任务小灵通微信小程序系统源码

&#x1f4bc;灵活赚钱新风尚&#xff01;灵活用工任务小灵通微信小程序&#xff0c;兼职自由两不误&#x1f680; &#x1f50d; 一、海量任务&#xff0c;随时随地接单赚外快 还在为找不到合适的兼职而烦恼吗&#xff1f;&#x1f914; 灵活用工任务小灵通微信小程序&#…

Java-Sql注入以及如何解决

sql脚本注入: 如果sql语句使用字符串拼接&#xff0c;可能会出现字符串的拼接&#xff0c;导致sql注入。 #是会先进行预编译&#xff0c;传进来的参数通过占位符填入到已经完成编译的语句中去。

paddleocr运行报错?谈谈解决思路。

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

代码随想录算法训练营第四十七天|1143.最长公共子序列、 1035.不相交的线、53. 最大子序和、392.判断子序列

1143.最长公共子序列 题目链接&#xff1a;1143.最长公共子序列 文档讲解&#xff1a;代码随想录 状态&#xff1a;一开始没想明白为啥要 max(dp[i - 1][j], dp[i][j - 1]) 思路&#xff1a; 如果text1[i - 1] 与 text2[j - 1]相同&#xff0c;那么找到了一个公共元素&#xff…

亚马逊个人卖家掌控物流,教你在单个ERP端口上实现全自动发货

亚马逊个人卖家可对接20多家国际物流&#xff0c;个人如何发货打单&#xff1f; 大家好&#xff0c;今天介绍这款erp有了订单后怎么发货。个人ERP在选择发货的时候只能选择中转仓&#xff0c;这是要把货发给ERP的商家&#xff0c;由商家代打包&#xff0c;打包费。这块开发了自…

协议转换网关的工作原理-天拓四方

在当今数字化和网络化的社会中&#xff0c;不同系统和设备之间的通信至关重要。然而&#xff0c;由于技术多样性、厂商差异以及应用需求的复杂性&#xff0c;不同的系统和设备常常采用不同的通信协议&#xff0c;这使得它们之间的直接通信变得困难。为了解决这一问题&#xff0…