计算机速成课Crash Course - 07. 中央处理器

今天开始计算机速成课Crash Course的系列讲解。

更多技术文章,全网首发公众号 “摸鱼IT” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

计算机速成课Crash Course - 07. 中央处理器

07. 中央处理器

提示下,这集可能是最难的一集,所以一旦你理解了,就会变得超厉害!

我们已经做了一个算术逻辑单元(ALU),输入二进制,它会执行计算。

图片

我们还做了两种内存:寄存器,很小的一块内存,能存一个值;之后我们增大做出了 RAM,RAM 是一大块内存,能在不同地址存大量数字。

现在是时候把这些放在一起,组建计算机的 "心脏" 了,但这个 "心脏" 不会有任何包袱,比如人类情感。

计算机的心脏是"中央处理单元",简称 "CPU",CPU 负责执行程序,比如 Office,Safari 浏览器,你最爱的 《半条命2》。

程序由一个个操作组成,这些操作叫"指令"(Instruction),因为它们"指示"计算机要做什么,如果是数学指令,比如加/减。

图片

CPU 会让 ALU 进行数学运算,也可能是内存指令,CPU 会和内存通信,然后读/写值,也可能是内存指令,CPU 会和内存通信,然后读/写值。

CPU 里有很多组件,所以我们一边说一边建,我们把重点放在功能,而不是一根根线具体怎么连。当我们用一条线连接两个组件时,这条线只是所有必须线路的一个抽象,这种高层次视角叫"微体系架构"。

我们首先要一些内存,把上集做的 RAM 拿来就行,为了保持简单,假设它只有 16 个位置,每个位置存 8 位,再来四个 8 位寄存器,叫 A,B,C,D。

图片

寄存器用来临时存数据和操作数据,我们已经知道数据是以二进制值存在内存里,程序也可以存在内存里。

我们可以给 CPU 支持的所有指令,分配一个 ID。

图片

在这个假设的例子,我们用前四位存 "操作代码" (operation code),简称 "操作码" (opcode),后四位代表数据来自哪里,可以是寄存器或内存地址。

(也就是说,每个操作都是8位的,前四位表示操作,后四位是操作的数据)

我们还需要两个寄存器,来完成 CPU。

1. 一个寄存器追踪程序运行到哪里了,我们叫它  "指令地址寄存器",顾名思义,存当前指令的内存地址。

2. 另一个寄存器存当前指令,叫  "指令寄存器",当启动计算机时,所有寄存器从 0 开始。

图片

为了举例,我们在 RAM 里放了一个程序,我们今天会过一遍。

CPU 的第一个阶段叫 "取指令阶段",负责拿到指令。

首先,将 "指令地址寄存器" 连到 RAM,寄存器的值为 0,因此 RAM 返回地址 0 的值。

0010 1110 会复制到 "指令寄存器" 里,现在指令拿到了。

图片

要弄清是什么指令,才能执行(execute),而不是杀死(kill)它,(execute在英文中有两种含义,一个是执行,一个是处死)这是 "解码阶段"。

图片

前 4 位 0010 是 LOAD A 指令,意思是,把 RAM 的值放入寄存器 A,后 4 位 1110 是 RAM 的地址, 转成十进制是 14。

图片

接下来,指令由 "控制单元" 进行解码,就像之前的所有东西,"控制单元" 也是逻辑门组成的。

比如,为了识别 "LOAD A" 指令,需要一个电路,检查操作码是不是 0010,我们可以用很少的逻辑门来实现。

图片

现在知道了是什么指令,就可以开始执行了,开始 "执行阶段",用 "检查是否 LOAD_A 指令的电路",可以打开 RAM 的 "允许读取线", 把地址 14 传过去,RAM 拿到值,0000 0011,十进制的 3。

图片

因为是 LOAD_A 指令,我们想把这个值只放到寄存器 A,其他寄存器不受影响,所以需要一根线,把 RAM 连到 4 个寄存器,用 "检查是否 LOAD_A 指令的电路" ,启用寄存器 A 的 "允许写入线"。

图片

这就成功了,把 RAM 地址 14 的值,放到了寄存器 A。

既然指令完成了,我们可以关掉所有线路,去拿下一条指令,我们把 "指令地址寄存器"+1,"执行阶段"就此结束。

LOAD_A 只是 CPU 可以执行的各种指令之一,不同指令由不同逻辑电路解码,这些逻辑电路会配置 CPU 内的组件来执行对应操作,具体分析这些解码电路太繁琐了。

既然已经看了 1 个例子,干脆把 "控制单元 "包成一个整体,简洁一些。

图片

没错,一层新抽象。

控制单元就像管弦乐队的指挥,"指挥" CPU 的所有组件,"取指令→解码→执行" 完成后,现在可以再来一次,从 "取指令" 开始,"指令地址寄存器" 现在的值是 1,所以 RAM 返回地址 1 里的值:0001 1111。

图片

到 "解码" 阶段!0001 是 LOAD B 指令,从 RAM 里把一个值复制到寄存器 B,这次内存地址是 1111,十进制的 15。

图片

现在到 "执行阶段","控制单元" 让RAM 读地址 15,并配置寄存器 B 接收数据。

图片

成功,我们把值 0000 1110,也就是十进制的 14 存到了寄存器 B。

最后一件事是 "指令地址寄存器" +1,我们又完成了一个循环,下一条指令有点不同,来取它吧。

1000 0100,1000 是 ADD 指令,后面的 4 位不是 RAM 地址,而是分别代表 2 个寄存器,2 位可以表示 4 个值,所以足够表示 4 个寄存器。

第一个地址是 01, 代表寄存器B;第二个地址是 00, 代表寄存器A。因此,1000 0100,代表把寄存器 B 的值,加到寄存器 A 里,为了执行这个指令,我们要整合第 5 集的 ALU。

图片

"控制单元" 负责选择正确的寄存器作为输入,并配置 ALU 执行正确的操作,对于 "ADD" 指令, "控制单元" 会启用寄存器 B,作为 ALU 的第一个输入,还启用寄存器 A,作为 ALU 的第二个输入。

图片

之前说过,ALU 可以执行不同操作,所以控制单元必须传递 ADD 操作码告诉它要做什么。最后,结果应该存到寄存器 A,但不能直接写入寄存器 A。

这样新值会进入 ALU ,不断和自己相加,因此,控制单元用一个自己的寄存器暂时保存结果,关闭 ALU,然后把值写入正确的寄存器。

这里 3+14=17,二进制是 0001 0001,现在存到了寄存器 A,和之前一样,最后一件事是把指令地址 + 1,这个循环就完成了。

好,来看最后一个指令:0100 1101,解码得知是 STORE A 指令(把寄存器 A 的值放入内存),RAM 地址 13。

图片

接下来,把地址传给 RAM,但这次不是 "允许读取" ,而是 "允许写入",同时,打开寄存器 A 的 "允许读取",这样就可以把寄存器 A 里的值,传给 RAM。

图片

恭喜,我们刚运行了第一个电脑程序!它从内存中加载两个值,相加,然后把结果放回内存。

刚刚是我一步步来讲的,我们人工切换 CPU 的状态 "取指令→解码→执行",但不是每台电脑里都有一个迷你 Carrie Anne,其实是 "时钟" 来负责管理 CPU 的节奏,时钟以精确的间隔触发电信号。

控制单元会根据时钟的信号,推进 CPU 的内部操作,确保一切按步骤进行,就像罗马帆船的船头,有一个人负责按节奏的击鼓,让所有划船的人同步,就像节拍器一样,节奏不能太快。

因为就算是电也要一定时间来传输,CPU "取指令→解码→执行" 的速度叫 "时钟速度",单位是赫兹,赫兹是用来表示频率的单位,1 赫兹代表一秒 1 个周期。

因为我花了大概 6 分钟,给你讲了 4 条指令,读取→读取→相加→存储,所以我的时钟速度大概是 0.03 赫兹,我承认我算数不快,但哪怕有人算数很快,最多也就是一秒一次,或 1 赫兹。

第一个单芯片 CPU 是 "英特尔 4004",1971 年发布的 4 位CPU,它的微架构很像我们之前说的 CPU,虽然是第一个单芯片的处理器,但它的时钟速度达到了 740 千赫兹 - 每秒 74 万次,你可能觉得很快。

图片

但和如今的处理器相比不值一提,一兆赫兹是 1 秒 1 百万个时钟周期,现在看视频的电脑或手机,肯定有几千兆赫兹,1 秒 10 亿次时钟周期。

你可能听过有人会把计算机超频,意思是修改时钟速度,加快 CPU 的速度,就像罗马帆船要撞另一艘船时,鼓手会加快敲鼓速度。芯片制造商经常给 CPU 留一点余地,可以接受一点超频,但超频太多会让 CPU 过热,或产生乱码,因为信号跟不上时钟。

你可能很少听说降频,但降频其实很有用,有时没必要让处理器全速运行,可能用户走开了,或者在跑一个性能要求较低的程序,把 CPU 的速度降下来,可以省很多电,省电对用电池的设备很重要,比如笔记本和手机,为了尽可能省电,很多现代处理器可以按需求加快或减慢时钟速度,这叫 "动态调整频率"。

加上时钟后,CPU 才是完整的,现在可以放到盒子里,变成一个独立组件。

图片

一层新的抽象!

RAM,上集说过,是在 CPU 外面的独立组件,CPU 和 RAM 之间,用 "地址线"、"数据线" 和 "允许读/写线" 进行通信。

虽然今天我们设计的 CPU 是简化版的,但我们提到的很多机制,依然存在于现代处理器里。

下一集,我们要加强 CPU,给它扩展更多指令,同时开始讲软件。


以上内容就是 07. 中央处理器 的内容,感兴趣的同学记得点赞、关注、转发、收藏哦!

我会不定期发布课程的讲解!

图片

我们还做了两种内存:寄存器,很小的一块内存,能存一个值;之后我们增大做出了 RAM,RAM 是一大块内存,能在不同地址存大量数字。

现在是时候把这些放在一起,组建计算机的 "心脏" 了,但这个 "心脏" 不会有任何包袱,比如人类情感。

计算机的心脏是"中央处理单元",简称 "CPU",CPU 负责执行程序,比如 Office,Safari 浏览器,你最爱的 《半条命2》。

程序由一个个操作组成,这些操作叫"指令"(Instruction),因为它们"指示"计算机要做什么,如果是数学指令,比如加/减。

图片

CPU 会让 ALU 进行数学运算,也可能是内存指令,CPU 会和内存通信,然后读/写值,也可能是内存指令,CPU 会和内存通信,然后读/写值。

CPU 里有很多组件,所以我们一边说一边建,我们把重点放在功能,而不是一根根线具体怎么连。当我们用一条线连接两个组件时,这条线只是所有必须线路的一个抽象,这种高层次视角叫"微体系架构"。

我们首先要一些内存,把上集做的 RAM 拿来就行,为了保持简单,假设它只有 16 个位置,每个位置存 8 位,再来四个 8 位寄存器,叫 A,B,C,D。

图片

寄存器用来临时存数据和操作数据,我们已经知道数据是以二进制值存在内存里,程序也可以存在内存里。

我们可以给 CPU 支持的所有指令,分配一个 ID。

图片

在这个假设的例子,我们用前四位存 "操作代码" (operation code),简称 "操作码" (opcode),后四位代表数据来自哪里,可以是寄存器或内存地址。

(也就是说,每个操作都是8位的,前四位表示操作,后四位是操作的数据)

我们还需要两个寄存器,来完成 CPU。

1. 一个寄存器追踪程序运行到哪里了,我们叫它  "指令地址寄存器",顾名思义,存当前指令的内存地址。

2. 另一个寄存器存当前指令,叫  "指令寄存器",当启动计算机时,所有寄存器从 0 开始。

图片

为了举例,我们在 RAM 里放了一个程序,我们今天会过一遍。

CPU 的第一个阶段叫 "取指令阶段",负责拿到指令。

首先,将 "指令地址寄存器" 连到 RAM,寄存器的值为 0,因此 RAM 返回地址 0 的值。

0010 1110 会复制到 "指令寄存器" 里,现在指令拿到了。

图片

要弄清是什么指令,才能执行(execute),而不是杀死(kill)它,(execute在英文中有两种含义,一个是执行,一个是处死)这是 "解码阶段"。

图片

前 4 位 0010 是 LOAD A 指令,意思是,把 RAM 的值放入寄存器 A,后 4 位 1110 是 RAM 的地址, 转成十进制是 14。

图片

接下来,指令由 "控制单元" 进行解码,就像之前的所有东西,"控制单元" 也是逻辑门组成的。

比如,为了识别 "LOAD A" 指令,需要一个电路,检查操作码是不是 0010,我们可以用很少的逻辑门来实现。

图片

现在知道了是什么指令,就可以开始执行了,开始 "执行阶段",用 "检查是否 LOAD_A 指令的电路",可以打开 RAM 的 "允许读取线", 把地址 14 传过去,RAM 拿到值,0000 0011,十进制的 3。

图片

因为是 LOAD_A 指令,我们想把这个值只放到寄存器 A,其他寄存器不受影响,所以需要一根线,把 RAM 连到 4 个寄存器,用 "检查是否 LOAD_A 指令的电路" ,启用寄存器 A 的 "允许写入线"。

图片

这就成功了,把 RAM 地址 14 的值,放到了寄存器 A。

既然指令完成了,我们可以关掉所有线路,去拿下一条指令,我们把 "指令地址寄存器"+1,"执行阶段"就此结束。

LOAD_A 只是 CPU 可以执行的各种指令之一,不同指令由不同逻辑电路解码,这些逻辑电路会配置 CPU 内的组件来执行对应操作,具体分析这些解码电路太繁琐了。

既然已经看了 1 个例子,干脆把 "控制单元 "包成一个整体,简洁一些。

图片

没错,一层新抽象。

控制单元就像管弦乐队的指挥,"指挥" CPU 的所有组件,"取指令→解码→执行" 完成后,现在可以再来一次,从 "取指令" 开始,"指令地址寄存器" 现在的值是 1,所以 RAM 返回地址 1 里的值:0001 1111。

图片

到 "解码" 阶段!0001 是 LOAD B 指令,从 RAM 里把一个值复制到寄存器 B,这次内存地址是 1111,十进制的 15。

图片

现在到 "执行阶段","控制单元" 让RAM 读地址 15,并配置寄存器 B 接收数据。

图片

成功,我们把值 0000 1110,也就是十进制的 14 存到了寄存器 B。

最后一件事是 "指令地址寄存器" +1,我们又完成了一个循环,下一条指令有点不同,来取它吧。

1000 0100,1000 是 ADD 指令,后面的 4 位不是 RAM 地址,而是分别代表 2 个寄存器,2 位可以表示 4 个值,所以足够表示 4 个寄存器。

第一个地址是 01, 代表寄存器B;第二个地址是 00, 代表寄存器A。因此,1000 0100,代表把寄存器 B 的值,加到寄存器 A 里,为了执行这个指令,我们要整合第 5 集的 ALU。

图片

"控制单元" 负责选择正确的寄存器作为输入,并配置 ALU 执行正确的操作,对于 "ADD" 指令, "控制单元" 会启用寄存器 B,作为 ALU 的第一个输入,还启用寄存器 A,作为 ALU 的第二个输入。

图片

之前说过,ALU 可以执行不同操作,所以控制单元必须传递 ADD 操作码告诉它要做什么。最后,结果应该存到寄存器 A,但不能直接写入寄存器 A。

这样新值会进入 ALU ,不断和自己相加,因此,控制单元用一个自己的寄存器暂时保存结果,关闭 ALU,然后把值写入正确的寄存器。

这里 3+14=17,二进制是 0001 0001,现在存到了寄存器 A,和之前一样,最后一件事是把指令地址 + 1,这个循环就完成了。

好,来看最后一个指令:0100 1101,解码得知是 STORE A 指令(把寄存器 A 的值放入内存),RAM 地址 13。

图片

接下来,把地址传给 RAM,但这次不是 "允许读取" ,而是 "允许写入",同时,打开寄存器 A 的 "允许读取",这样就可以把寄存器 A 里的值,传给 RAM。

图片

恭喜,我们刚运行了第一个电脑程序!它从内存中加载两个值,相加,然后把结果放回内存。

刚刚是我一步步来讲的,我们人工切换 CPU 的状态 "取指令→解码→执行",但不是每台电脑里都有一个迷你 Carrie Anne,其实是 "时钟" 来负责管理 CPU 的节奏,时钟以精确的间隔触发电信号。

控制单元会根据时钟的信号,推进 CPU 的内部操作,确保一切按步骤进行,就像罗马帆船的船头,有一个人负责按节奏的击鼓,让所有划船的人同步,就像节拍器一样,节奏不能太快。

因为就算是电也要一定时间来传输,CPU "取指令→解码→执行" 的速度叫 "时钟速度",单位是赫兹,赫兹是用来表示频率的单位,1 赫兹代表一秒 1 个周期。

因为我花了大概 6 分钟,给你讲了 4 条指令,读取→读取→相加→存储,所以我的时钟速度大概是 0.03 赫兹,我承认我算数不快,但哪怕有人算数很快,最多也就是一秒一次,或 1 赫兹。

第一个单芯片 CPU 是 "英特尔 4004",1971 年发布的 4 位CPU,它的微架构很像我们之前说的 CPU,虽然是第一个单芯片的处理器,但它的时钟速度达到了 740 千赫兹 - 每秒 74 万次,你可能觉得很快。

图片

但和如今的处理器相比不值一提,一兆赫兹是 1 秒 1 百万个时钟周期,现在看视频的电脑或手机,肯定有几千兆赫兹,1 秒 10 亿次时钟周期。

你可能听过有人会把计算机超频,意思是修改时钟速度,加快 CPU 的速度,就像罗马帆船要撞另一艘船时,鼓手会加快敲鼓速度。芯片制造商经常给 CPU 留一点余地,可以接受一点超频,但超频太多会让 CPU 过热,或产生乱码,因为信号跟不上时钟。

你可能很少听说降频,但降频其实很有用,有时没必要让处理器全速运行,可能用户走开了,或者在跑一个性能要求较低的程序,把 CPU 的速度降下来,可以省很多电,省电对用电池的设备很重要,比如笔记本和手机,为了尽可能省电,很多现代处理器可以按需求加快或减慢时钟速度,这叫 "动态调整频率"。

加上时钟后,CPU 才是完整的,现在可以放到盒子里,变成一个独立组件。

图片

一层新的抽象!

RAM,上集说过,是在 CPU 外面的独立组件,CPU 和 RAM 之间,用 "地址线"、"数据线" 和 "允许读/写线" 进行通信。

虽然今天我们设计的 CPU 是简化版的,但我们提到的很多机制,依然存在于现代处理器里。

下一集,我们要加强 CPU,给它扩展更多指令,同时开始讲软件。


以上内容就是 07. 中央处理器 的内容,感兴趣的同学记得点赞、关注、转发、收藏哦!

我会不定期发布课程的讲解!

更多技术文章,全网首发公众号 “摸鱼IT” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python-图片去重

直接上代码 # 修改一下第34行文件夹路径以及13行图片后缀名即可使用 import os from hashlib import md5def remove_duplicate_images(folder_path):image_files []duplicate_images set()# 遍历文件夹,找到所有 JPG 图片文件for root, dirs, files in os.walk(f…

LeetCode | 110. 平衡二叉树

LeetCode | 110. 平衡二叉树 OJ链接 首先计算出二叉树的高度然后计算当前节点的左右子树的高度,然后判断当前节点的左右子树高度差是否超过 1,最后递归地检查左右子树是否也是平衡的。 //计算二叉树的高度 int height(struct TreeNode* root) {if(root…

SOLIDWORKS弯曲特征在泵阀行业中的应用

弯曲特征-折弯 此类弯曲特征以绕三重轴的折弯轴折弯一个或多个实体。 定位三重轴和剪裁基准面,控制折弯的角度、位置和界限。 此弯曲类型可用于多种应用,包括工业设计、机械设计、解决金属冲压中的回弹条件以及从复杂的曲面形状中删除底切等。 本篇文章…

【每日易题】Leetcode上Hard难度的动态规划题目——地下城游戏的实现

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,博主最近一直在钻研动态规划算法,最近在Leetcode上刷题的时候遇到一个Hard难度的动态规划题,今天就借此机会来给大家分享…

CopyOnWriteArrayList怎么用

什么是CopyOnWriteArrayListCopyOnWriteArrayList常用方法CopyOnWriteArrayList源码详解CopyOnWriteArrayList使用注意点CopyOnWriteArrayList存在的性能问题CopyOnWriteArrayList 使用实例基本应用实例并发应用实例 拓展写时复制 什么是CopyOnWriteArrayList CopyOnWriteArra…

Uber Go 语言编码规范

uber-go/guide 的中文翻译 English 文档链接 Uber Go 语言编码规范 Uber 是一家美国硅谷的科技公司,也是 Go 语言的早期 adopter。其开源了很多 golang 项目,诸如被 Gopher 圈熟知的 zap、jaeger 等。2018 年年末 Uber 将内部的 Go 风格规范 开源到 G…

每天一点python——day85

#每天一点Python——85 #python常见的异常类型: #如图: #①数学运算异常【由于会报错,我直接全部注释掉了】 print(10/0) 输出:ZeroDivisionError: division by zero#②索引错误list1[1,2,3,4] print(list1[5])#找索引为4的元素 输…

谈一谈内存池

文章目录 一,什么是内存池二,进程地址空间中是如何解决内存碎片问题的三,malloc的实现原理四,STL中空间配置器的实现原理五,高并发内存池该内存池的优势在哪里内存池的设计框架内存申请流程ThreadCache层CentreCache层…

优酷新国风动漫《师兄啊师兄 第二季》强势定档 看李长寿稳健归来!

看新国风,上优酷动漫!由优酷出品,玄机科技制作,改编自阅文集团旗下起点读书小说《我师兄实在太稳健了》(作者:言归正传)的修仙喜剧动画《师兄啊师兄》第二季《海神扬名篇》今日正式官宣定档&…

【Docker】从零开始:13.Docker安装tomcat

Docker】从零开始:13.Docker安装Tomcat 下载Tomcat镜像启动Tomcat镜像新版本Tomcat修改访问Tomact首页 下载Tomcat镜像 [rootdocker ~]# docker pull tomcat Using default tag: latest latest: Pulling from library/tomcat 0e29546d541c: Pull complete 9b829c7…

培训机构一定要做好网络安全措施,确保学员信息安全!

生活中大家对于培训机构一定很熟悉,因为从小到大都可以参加各种培训机构。参加培训机构时候,往往会登记各种信息,培训机构会记录存储。所以为了确保学员个人隐私安全,保障学员信息安全,培训机构一定要做好网络安全措施…

【设计模式】单例模式代码设计

目录 单例模式简介饿汉单例模式懒汉单例模式线程安全的懒汉单例模式 橙色 详细可参考该篇文章:C设计模式 - 单例模式 单例模式简介 单例模式指的是,无论怎么获取,永远只能得到该类类型的唯一一个实例对象,那么设计一个单例就必须…

RH850P1X芯片学习笔记-Pin Functions

文章目录 Pin Connection Diagrams术语定义 Pin ListPort OverviewIntroductionFunctional OverviewPort CategoryOperation Mode运行模式 Port Function寄存器地址映射 Port寄存器描述Pn/JP0 — Port RegisterPPRn/JPPR0 — Port Pin Read RegisterPMn/JPM0 — Port Mode Regi…

采集伪原创洗稿,实现文章创作的方法

各位写手小伙伴们,今天要和大家分享一些关于伪原创的方法和经验,希望这些建议能够在你们的写作之旅中派上用场。 首先我们需要明确一下,伪原创并不是鼓励抄袭,而是一种在保留原文核心思想的同时,通过巧妙的方式改写&a…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A 目录 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A 需要环境或者解析可以私信 (二)A 模块基础设施设置/安全加固(200 分&…

Footprint Analytics x Future3 万字研报:AI 与 Web3 数据行业融合的现状、竞争格局与未来机遇探析(上)

GPT的横空出世将全球的目光吸引至大语言模型,各行各业都尝试着利用这个“黑科技”提高工作效率,加速行业发展。Future3 Campus携手Footprint Analytics共同深入研究AI与Web3结合的无限可能,联合发布了《AI与Web3数据行业融合现状、竞争格局与…

操作系统原理-作业二-进程调度与死锁

1.设某系统中有四个进程 P1 、 P2 、 P3 和 P4 ,它们的到达时刻依次为 0ms 、 1ms 、 2ms 、 3ms ,估计运行时间分别为 6ms 、 1ms 、 8ms 、 4ms ,若系统采用基于时间片轮转的三 级反馈队列调度算法进行调度,其中第一级队…

深度解析大模型背后的知识储存与提取:背诵不等于理解/MongoDB发布生成式AI新功能,大幅提高开发者工作效率和体验|魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件🔥,更新AIGC的最新动态,生成相应的魔法简报,节省阅读时间👻 🔥资讯预览 Mistral AI发布开源语言模型Mistral 7B,性能超越规模更大的Llama…

机器学习实验四:贝叶斯分类器

系列文章目录 机器学习实验一:线性回归机器学习实验二:决策树模型机器学习实验三:支持向量机模型机器学习实验四:贝叶斯分类器机器学习实验五:集成学习机器学习实验六:聚类 文章目录 系列文章目录一、实验…

计算机网络之IP篇

目录 一、IP 的基本认识 二、DNS 三、ARP 四、DHCP 五、NAT 六、ICMP 七、IGMP 七、ping 的工作原理 ping-----查询报文的使用 traceroute —— 差错报文类型的使用 八、断网了还能 ping 通 127.0.0.1 吗? 8.1、什么是 127.0.0.1 ? 8.2、为…