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

news2024/12/28 20:23:09

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

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

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

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

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

在这里插入图片描述

一段小诗送给小伙伴

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

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

前言

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

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

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

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

目录

  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.coloradmin.cn/o/1907501.html

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

相关文章

C++·栈和队列

栈和队列是什么看这里&#xff1a; 数据结构栈和队列-CSDN博客文章浏览阅读948次&#xff0c;点赞25次&#xff0c;收藏26次。本节讲解了栈和队列的内容&#xff0c;其核心就是栈的特点是后进先出&#xff0c;队列的特点是先进先出。并用C语言实现了栈和队列的结构以及它们的各…

ABAP注释快捷键修改(留着备用)

ABAP注释快捷键修改(留着备用) 在使用ABAP编辑器的时候&#xff0c;原有的添加代码注释和取消代码注释的快捷键未生效&#xff0c;这时我们可以考虑对注释快捷键进行修改 在事务码SE38(ABAP编辑器)屏幕右下角&#xff0c;点击【Options选项】图标 在【键盘】|【命令】输入栏中…

实战Qt开发WordBN笔记软件#01 搭建开发环境:VS2019+Qt6.5+CMake+Git

01 背景 【WordBN字远笔记】是天恩软件工作室开发的一款免费笔记软件&#xff1b;WordBN基于VS2019、Qt6.5开发&#xff0c;使用Qt Quick&#xff08;QML&#xff09;开发语言。 本课程将以【WordBN字远笔记】的界面为实战基础&#xff0c;详细介绍如何基于Qt/QML开发语言&am…

YOLOV8花朵实例分割实战

原文:YOLOV8花朵实例分割实战 - 知乎 (zhihu.com) 一、代码: https://github.com/ultralytics/ultralytics​github.com/ultralytics/ultralytics 与先前几个版本相比,YOLOv8 模型更快、更准确,同时为训练模型提供统一框架,以执行以下基本任务: 目标检测;实例分割;图…

pygame 音乐粒子特效

代码 import pygame import numpy as np import pymunk from pymunk import Vec2d import random import librosa import pydub# 初始化pygame pygame.init()# 创建屏幕 screen pygame.display.set_mode((1920*2-10, 1080*2-10)) clock pygame.time.Clock()# 加载音乐文件 a…

【微服务网关——https与http2代理实现】

1.https与http2代理 1.1 重新认识https与http2 https是http安全版本http2是一种传输协议两者并没有本质联系 1.1.1 https与http的区别 HTTP&#xff08;超文本传输协议&#xff09;和 HTTPS&#xff08;安全超文本传输协议&#xff09;是用于在网络上交换数据的两种协议。H…

基于DPU的云原生计算资源共池管理解决方案

1. 方案背景和挑战 在传统的云环境中&#xff0c;通常存在着不同的技术栈&#xff0c;支撑多样化的计算服务&#xff0c;具体如下&#xff1a; ① OpenStack环境与虚拟化云主机及裸金属服务 OpenStack是一个开源的云计算管理平台项目&#xff0c;它提供了部署和管理大规模计…

JAVA 代码块介绍

一、基本介绍 代码化块又称为初始化块&#xff0c;属于类中的成员[即 是类的一部分]&#xff0c;类似于方法&#xff0c;将逻辑语句封装在方法体中&#xff0c;通过包围起来。 但和方法不同&#xff0c;没有方法名&#xff0c;没有返回&#xff0c;没有参数&#xff0c;只有方…

人工智能的新时代:从模型到应用的转变

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

NLP 面试八股:“Transformers / LLM 的词表应该选多大?“ 学姐这么告诉我答案

NLP 面试八股&#xff1a;“Transformers / LLM 的词表应该选多大?" 学姐这么告诉我答案 原创 看图学 看图学 2024年07月03日 07:55 北京 题目&#xff1a; Transformers/大模型的 token vocabulary 应该选多大&#xff1f; 答案 先说一下结论&#xff1a; 数据量够大…

南航秋招指南,线上测评和线下考试

南航秋招简介 南航作为国内一流的航空公司&#xff0c;对人才的需求量非常旺盛&#xff0c;每年也有很多专业对口的工作提供给应届毕业生&#xff0c;对于应届毕业生而言&#xff0c;一定要抓住任何一个应聘机会&#xff0c;并且在规定的范围内进行简历的提交&#xff0c;以便…

为什么需要重写equals和如何重写equals

首先先看Java中的 &#xff0c;比较的两个对象的地址值。 如果是基本数据类型&#xff0c;那么就是比较的是值。 如果是引用数据类型&#xff0c;比较的就是地址. object类中的equals方法也是用的&#xff1b; 所以要比较两个对象的大小&#xff0c;去调用默认的equals方法…

鼠标宏怎么设置?6款鼠标自动点击器强推,游戏玩家专用!(2024全)

随着电子游戏和日常应用的不断发展&#xff0c;我们经常会遇到一些重复性的任务或操作。而在这种情况下&#xff0c;鼠标宏以其自动化的特点成为了许多玩家和使用者的利器之一。如果你正在寻找如何设置鼠标宏来简化操作并提高效率&#xff0c;那么你来对地方了。在本文中&#…

2024最新版若依-RuoYi-Vue3-PostgreSQL前后端分离项目部署手册教程

项目简介: RuoYi-Vue3-PostgreSQL 是一个基于 RuoYi-Vue3 框架并集成 PostgreSQL 数据库的项目。该项目提供了一套高效的前后端分离的开发解决方案&#xff0c;适用于中小型企业快速构建现代化的企业级应用。此项目结合了 RuoYi-Vue-Postgresql 和 RuoYi-Vue3 的优点&#xff0…

WEB06JavaScriptAjax

基础语法 引入方式 引入方式 内部脚本&#xff1a;将JS代码定义在HTML页面中 JavaScript代码必须位于<script></script>标签之间 在HTML文档中&#xff0c;可以在任意地方&#xff0c;放置任意数量的<script> 一般会把脚本置于<body>元素的底部&a…

matlab:对带参数a关于x的方程求解

题目 讲解 简洁对各个式子的内部含义用浅显易懂的话语总结出来了&#xff0c;耐心体会 f(a) (x)exp(x)x^ax^(sqrt(x))-100;%因为下面的fzero的第一个数需要一个fun&#xff0c;所以这里有两个句柄&#xff0c;第一个a是输入的&#xff0c;第二个x是需要被解出的 A0:0.1:2;%创…

提高生产效率和质量的六西格玛方法(优思学院)

想象一下&#xff0c;你被公司指派了一个重要项目&#xff0c;这家公司生产豪华汽车。当前&#xff0c;公司的生产数量正在下降&#xff0c;每天生产的汽车数量明显减少。此外&#xff0c;还存在安装在这些汽车上的雨刮器质量问题。你面临的挑战是找到解决方案&#xff0c;将生…

【CW32F030CxTx StartKit开发板】利用超声波传感器实现智能灯控

目录 1、超声波传感器 2、硬件连线 3. 程序开发 3.1 超声波测距 3.2 LED控制 4. 演示视频 本文首发于21ic。 感谢21ic和武汉芯源提供的测试机会。 在上一篇帖子中介绍了CW32F030CxTxStartKit 评估板的环境构建。本次介绍如何利用超声波传感器实现人来灯亮&#xff0c;人…

前端开发过程中经常遇到的问题以及对应解决方法 (持续更新)

我的朋友已经工作了 3 年&#xff0c;他过去一直担任前端工程师。 不幸的是&#xff0c;他被老板批评了&#xff0c;因为他在工作中犯了一个错误&#xff0c;这是一个非常简单但容易忽视的问题&#xff0c;我想也是很多朋友容易忽视的一个问题。 今天我把它分享出来&#xff…

【PCIe】P2P DMA

PCIe P2P (peer-to-peer communication)是PCIe的一种特性&#xff0c;它使两个PCIe设备之间可以直接传输数据&#xff0c;而不需要使用主机RAM作为临时存储。如下图3的走向 比如EP1要发送和数据给EP2,操作流程如下&#xff1a; 1. 打开EP1的dma控制器&#xff1b;--client侧 …