1. 计算机是如何进行工作的[主讲CPU和操作系统]

发布于:2025-02-11 ⋅ 阅读:(59) ⋅ 点赞:(0)


前言

哈喽,各位老铁,新的一个专题—JavaEE开始启动了,在这个博客中,我们会面向企业级开发,知识点会更多,并且会有一些项目实践等等,对此,我们可以拭目以待了,而这次博客的主要内容就是一点,简单聊聊计算机是如何工作的


1. 为什么Java程序员需要了解

通过大家看我的博客专栏可以发现,我主要走的是Java方向,以后的工作跟软件相关,为什么还要写这个博客呢?
主要有两个原因:
往大的来说,我们从软件工程师的角度来解释计算机是如何工作的,目的既不是期待我们可以造出属于自己的计算机,也不是介绍编程,而是希望让大家了解完计算机的核心工作机制后,打破计算机的神秘感。
上面的描述好高大上呀,
往小的说,咱们讲完这个博客之后,会讲解多线程网络编程,这些基础的实现计算机交互的功能,有些细节需要站在CPU的视角下来进行,那就需要对计算机的工作原理,一些底层知识有一定的了解,因此我们或多或少都需要了解计算机是如何工作的


2. 冯诺依曼体系 (Von Neumann Architecture)

现代计算机大多数都遵守冯诺依曼体系
在这里插入图片描述
CPU中央处理器:进行算术运算和逻辑判断
存储器:分为外存和内存,用于存储数据(使用二进制存储)
输入设备:用户给计算机发号命令的设备
输出设备:计算机给用户汇报结果的设备


3.一台电脑构成有哪些部分

上述的冯诺依曼体系只是设计计算机的模版,现在的计算机主要分为这几部分:
CPU,主板,内存,硬盘,电源,散热器,机箱,显卡(GPU)等…
上面这些东西都是很常见计算机的配件,下面我们来主要说说内存和硬盘,以及CPU


4. 内存 VS 硬盘

两个主要有下面四种较大的区别:

  1. 读写速度:
    硬盘读写速度慢,机械硬盘的读写速度大约在100~150MB/s,即使是性能较好的固态硬盘(SSD),其读取速度也大约在2000MB/s
    而内存读写速度快,在上面的基础上,可以达到几千倍,例如,DDR4内存的连续读取速度大约是60GB/s

  2. 存储空间:
    内存存储空间比较小,一般是16GB,32GB,64GB
    而硬盘存储空间比较大,一般是512GB,1T,2T
    按住Ctrl + Shift + Esc ,打开任务管理器,可以查看内存的大小

  3. 生产成本:
    内存成本高,硬盘成本低。

  4. 存储数据是否持久:
    硬盘存储数据是持久的,断电也不会丢失
    内存存储数据不是持久的,断电就无了


5.CPU

这一篇博客主要讲解 CPU我们从以下方面进行讲解

5.1. 主要的指标(和日常开发密切相关)

第一个是 CPU 的 频率
CPU 的频率分为两种一个是默频/基频,第二个是睿频/加速频率
以我的电脑为例:
在这里插入图片描述
G相当于 10的9次方,2.6GHz的意思是 CPU 一秒可以进行 26亿计算
现代 CPU 的一个特性,动态的根据当前的任务量,频率变更,类似于变频空调,
而 最大频率就是说 CPU 一秒计算的最大次数

第二个是 CPU 的 核数
最开始的 CPU (2008年之前),之前的 CPU 都是单个核心的,当时研发新的CPU,就是努力提高 CPU 的频率。但是提升到一定程度,就提高不上去了。
既然单个核心既然已经达到了瓶颈,干脆引入两个核心来进行工作,叫做多核心技术。
现在做CPU比较出名的两个厂商 Intel 和 AMD,
Intel 认为上面的 提供两个核心还不够,研发出了 “超线程技术”,让一个 CPU 核心,顶两个,这样 一个 CPU 上有4个核心,分为 物理核心 (真实干活的人) 和 逻辑核心 (实际上这些人能同时干几个活)

但是目前,Intel 自废武功,从 12 代开始,提出 "大小核技术体系’,大核,一个顶两个,小核,一个顶一个,而 AMD 全是大核 。
以我的电脑为例:

在这里插入图片描述
大核:4个大核,8个小核。
当前CPU 往多核心 角度发展,也对程序员提出了新的要求。需要我们把任务,拆分成多个部分,交给线程使用。

5.2. CPU执行指令的过程

5.2.1.指令

首先,我们先介绍我们需要的指令。
所谓指令,即指导 CPU 进行工作的指令,主要是由操作码 + 被操作数组成的。
其中操作码用来表示要做什么动作,被操作数是本来指令要操作的数据,可能是内存地址,也可能是寄存器编号等。
指令本身也是一个数字,用二进制形式保存在内存的某个区域中。
在这里插入图片描述
注:上面的指令表是我们自己编写的,实际会比这个更加复杂。
在这里插入图片描述
这个是我们等会要用到的数据集

5.2.2. 运行流程

在这里插入图片描述
上面便是对指令集的说明,以及对 CPU 的补充,下面我们来解释一下 CPU 是如何工作的。
CPU 执行指令的过程:

  1. 读取指令
  2. 解析指令(对照指令集,理解指令的含义)
  3. 执行指令

假设 CPU 从 0 号地址开始执行
第一步:从 0 号地址开始执行
(1) 读取指令:00101110
(2) 解析指令:
opcode:0010 , 操作数:1110
意思就是:把1110地址上的数据,读取到寄存器A中
(3) 执行指令
此时寄存器A存储的是 00000011 ,转化成十进制就是 3
默认 CPU 是 顺序执行下一条指令
第二步:从 1 号地址读取指令
(1) 读取指令:00011111
(2) 解析指令:
opcode:0001 操作数:1111
意思就是:把1111地址上的数据存储到寄存器B中
(3) 执行指令:
寄存器A:00000011 —3
寄存器B:00001110 —14
第三步:从3号地址读取指令
(1)读取指令:10000100
(2)解析指令:
opcode:1000 操作数:0100
01和00分别是 寄存器B和A的编号
意思就是把01和00两个寄存器的数据相加结果放到00里
(3) 执行指令:
寄存器A:00010001 14+3 = 17
寄存器B:00001110 14
第四步:CPU 读取 3 号地址的指令
(1)读取指令:01001101
(2)解析指令:
opcode:0100 操作数:1101
意思就是把寄存器中A的值写入到1101地址中
(3)执行指令:
寄存器A:00010001 14+3 = 17
寄存器B:00001110 14
第五步:CPU读取 4号地址的指令
发现是 00000000
程序结束。

上述便是站在CPU的角度计算 14 + 3 的过程

通过上面的过程,我们会发现,这个add加法操作不是原子的,在以后讲解多线程的时候,还会在用到。

6.操作系统

6.1. 操作系统的分类

主要分为三大类:
1.PC端:Windows,MacOS,以及鸿蒙 (三足鼎立)
2.服务器端:Linux (一家独大)
3.手机端:IOS,Android,以及鸿蒙
Windows,Android系列,都是大家耳熟能详的
MacOS,IOS系列,用的人也不少,但是比较贵
鸿蒙系列,属于后起之秀,发展如何,我们拭目以待。
而Linux一般我们不太了解,我们在这讲一下。
Linux,主要用于嵌入式,以及物联网专业,
例如:路由器,门禁,洗衣机等这些设备,上面也搭载了标准的计算机,符合冯诺依曼体系,硬件设备配置比较低,功能也单一,此时就需要在 Linux上进行编写。
Linux和Windows的主要区别:

  1. api的不同:
    例如同样是让操作系统sleep
    Windows是 Sleep(ms) 包含的头文件:<Windows.h>
    Linux是 sleep(s) 或者是 usleep(ms) 包含的头文件:<unistd.h>
  2. 主要的操作方式不同:
    Windows一般是使用图形化页面
    Linux一般是命令行操作

6.2. 操作系统的功能

  1. 管理各种硬件设备
  2. 给各种应用程序,提供一个稳定的运行环境
    这些应用程序,在工作过程中,是互不干扰的
    即使某个应用程序,出现了bug
    也不会影响其他应用程序的正常执行

下一篇,我们就要讲解线程和进程,我们不见不散


网站公告

今日签到

点亮在社区的每一天
去签到