认识计算机

目录

冯诺依曼体系

认识计算机 

数据在内存的存储问题

CPU的基本工作原理 

电路门

算术逻辑单元ALU(Arithmetic & Logic Unit)

算术单元 

逻辑单元

ALU 符号

寄存器(Register)

控制单元 CU(Control Unit)

CPU的中断模式(Interrupt Mode)

操作系统OS(Operating System) 

操作系统的定位 

什么是程序(program),什么是进程(Process)

CPU 分配 —— 进程调度/进程管理

进程控制块抽象(PCB Process Control Block)


冯诺依曼体系

CPU中央处理器:进行算术运算和逻辑判断

存储空间:硬盘 > 内存 >> CPU

数据访问速度:CPU >> 内存 > 硬盘

认识计算机 

例一

首先我们要理解指令和数据的概念,假设有一个人,他的计算能力很强,但他交流能力很差,别人需要计算时,就将计算的每个步骤都告诉他,让他计算。

这个例子中的1,2,3,4步骤就是指令,要知道,不是传递给计算机的都是指令,只有让计算机行动的命令才算,也就是说,指令一定是明确的,而不是模糊的。像例子中的“计算两数之和”就不是指令。而小明放在箱子里的就是数据

因此,我们可以粗略的认为:

程序 = 指令 + 数据

通常也可以表示为:

程序 = 算法(有特定意义的指令)+ 数据结构(有组织的数据)

在冯诺依曼系统中,把指令数据和待处理的数据用统一的存储去看待,认为指令只是一种特殊一些的数据,所以程序就完全由数据组成了。

注意:

  • 小明需要先把自己要小计做的事情按照一定的格式,提前写好——开发阶段
  • 小明把写好程序的纸+箱子交给小计,小计开始按照指令行动——运行阶段
  • 一次开发阶段产生的程序,可以有多次运行阶段。
  • 小明在北京做的开发,小计可以在西安进行的运行。——开发阶段的工作地点,不一定就是运行阶段的工作地点。
  • 小明可以是一个人, 小计可以是多个人。

例二

现在遇到了一个问题,小明只会英语, 小计只会汉语。 导致小明没法直接和小计通话了,因此,我们找来一个翻译叫小译(编译器)来翻译,同时因为小明很啰嗦,所以他还会顺便优化小明的指令。
此时,我们明白了编译器的职责就是:1.编译(compile),2.优化(optimize)

例三

慢慢的任务越来越重了,小明可能下达了很多指令,小译翻译之后,再通过小链(链接器)将这些指令的程序片段合并

处理器(CPU) =运算器+控制器

存储器(Memory) =内存 storage (二级存储)、memory (内存)

外部数据(物理数据)通过输入设备(Input Device)进入到存储器

存储器内的数据通过输出设备 (Output Device)出来到外部世界

所以冯诺依曼体系分为五个部分:

运算器+控制器+存储器+输入设备+输出设备

现在一般将运算器和控制器很少拆开来讲,于是它分用以下四个部分

处理器+存储器+输入设备+输出设备

在硬件体系下分为:

CPU +内存+ I/O

注意:CPU和内存要有数据交换,内存和I/0直接数据交换,它们之间的内部的数据交换通过总线(BUS)来交换

数据在内存的存储问题

内存是电子原件组装而成,以二进制的形式存数,也就是说,要把指令变成数才能存储

指令是一组预规定的动作,它需要存储在内存中,表现为一种特殊的数据。也就是说指令必须变成数才能存储。所以指令利用编码表规定,只要给CPU支持的所有动作都编码一个唯一的数字,这样指令就能变成upcode(操作码)。这样就解决了基本指令如何存储在内存中的问题了。

广义数据在内存的存储:

  1. 非数的数据,如字符串、声音、图片等等通过编码表转换成数类型的数据
  2. 数类型的,如整数,小数等等,在计算机内通常表示有限范围的数,表示为正码、反码、补码.....

CPU的基本工作原理 

CPU(央处理器)由逻辑运算器 + 控制器 + 寄存器(register)+ 缓存

电路门

 

 

算术逻辑单元ALU(Arithmetic & Logic Unit)

ALU 是计算机中进行算数、逻辑运算的核心部件,是计算机的数学大脑。接下来,我们用上一节构建的逻辑门来完成自己的一个 ALU,去学习理解它的工作模式,以便作为我们进一步理解现代计算机工作原理的基石。

算术单元 

负责计算机里的所有数字操作,下面我们演示一个 8 位(bits)的加法器:

半加器有两个输入,全加器因为有进位,所以它有三个输入,它们的输出都是当前位+进位。所以8位数的加法器 = 7个全加器 + 1个半加器。
半加器的实现:

可以看到,进位就是与门实现的,只有两个都为true,结果才是 true。和就是使用异或门来做到的,相同取0,不同取1。所以与门和异或门就能实现两位的半加器了。

 全加器的实现:

可以看到通过两个半加器和一个或门就实现了全加器。

最终我们通过一个半加器和七个全加器就实现了8位数的加法器。

逻辑单元

逻辑单元主要用来进行逻辑操作,最基本的操作就是 与、或、非操作,但不只是一位(bit)数的比较,下面是判断一个数是否为0的判断器

使用或门,只要遇到一个1,就会被保存下来,看最终结果是否是0就能知道这个数是不是0了。

ALU 符号

三个输入:

  • A:要参与计算的第一个数
  • B:要参与计算的第二个数
  • C:本次的运算是什么(opcode)

CPU是计算机的核心,ALU 是CPU的核心。所有程序的执行,本质上都是计算

也就是说,每个程序都可看做:

ALU的输入:A、B以及计算的结果都需要寄存器来保存,而本次要计算的opcode是控制单元告诉ALU的

寄存器(Register)

是临时存储数据的存储单元

控制单元 CU(Control Unit)

我们现在有 ALU、存储了,但这还是不足以让我们的计算机工作起来,我们需要有一个部件来指挥 ALU 进行何种的运算,而这个部件就是控制单元(CU)。CU就是控制寄存器,驱使ALU计算的。

PC(Program Counter)程序计数器:保存要执行的下一条指令在内存中的地址

IR(Instruction Register)指令寄存器:保存要执行的下一条指令

下面我们演示指令运行的一个周期:首先人为的让PC的初始值是0 (现实中不是必然的)


第一步,CU会根据PC中的值,去内存的相应位置,把对应的数据读取到IR中,读取之后,PC的值会自动加一——取码阶段

第二步,CU按照预先设定的指令集解读指令数据(opcode +操作数)——解码阶段

第三步,根据指令去执行指令——执行阶段

假设周期的频率恒定,可以知道CPU的运算速度,就是看CPU执行指令周期的频率。CPU主频可以粗略地看作每秒钟CPU能执行多少个指令周期。

CPU中往往会提供一些指令, 这些指令可以去修改PC的值。此时,我们就能明白if else语句、while语句等是如何来的:通过CPU中预先规定的指令,可以修改PC中的值(带条件修改),进而影响执行流(execution flow)

只要有个起始位置填充到PC里,执行流就可以正常地运行起来了,这个起始位置就是我们平时的main方法。我们的程序启动就是程序翻译出来的指令的第一条的地址放到 PC中,我们的程序就正常跑起来了。

至此,我们就明白了CPU的正常工作流程:取码-->编码-->执行周期。

CPU的中断模式(Interrupt Mode)

正常模式下,CPU可以顺序执行,可以分支执行。但总归只能按照既定顺序去执行。
但现实中,很多时候,需要暂时中断CPU的当前执行流,先让CPU去做点其他工作,再回过头来继续原来的执行流。

CPU硬件中提供了一种机制(中断),让CPU停下

  1. 保存当前的PC的值到内存的某个位置
  2. 修改PC的值,让执行其他执行流
  3. 其他执行流执行结束之后,通过将刚才保存的PC值恢复到PC寄存器
  4. 继续原来的执行流

中断的作用:

  1. I0设备的处理:当有外部数据到达Input设备时,触发某个中断让当前正在执行的执行流暂停,切换到Input驱动对应的执行流,把Input设备中读取到的数据,放到内存的某个位置,然后恢复之前的执行流
  2. 操作系统中用来作进程调度(线程调度)

操作系统OS(Operating System) 

操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、 Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等

操作系统的定位 

在多用户、多任务场景下,OS的主要职责就是协调。
硬件(资源)会被多个任务“同时”访问,OS协调不同任务对硬件资源的访问,也就是说OS管理着硬件、软件资源,分配给不同的任务去使用。
OS是一个分配者,分配的主体就是任务。站在任务的角度,就是一切硬件资源都需要找OS申请后才能被授权使用。

在Java程序的视角下,OS的地位如下图:


硬件就是房子,OS就是房东,将房子组给了JVM,JVM再转租给java程序。也就是操作系统管理硬件,JVM管理它从操作系统申请到的资源,java程序再去使用JVM分配给我们的资源。

在实践中,当前执行的是A进程,想要切换成B进程,OS需要负责把进程A从CPU上拿下来,把进程B放到CPU上,这个过程是修改PC寄存器的值实现的。就是说OS主持不同进程在CPU运行的时间划分。

什么是程序(program),什么是进程(Process)

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程。 同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位

程序:上面我们提到过程序 = 指令 + 数据,这是一个静态的步骤,类似于一张菜谱+做菜的材料

进程:又称任务,是程序的一次执行过程,类似于按照菜谱做了一次菜,是动态的过程。一个程序可以有多个进程。

同一个进程中的资源是共享的,但不同进程之间的资源,是隔离的。
A进程只能访问A进程自己的资源,无法访问B进程的资源,更无法访问被OS直接管理的资源。

CPU 分配 —— 进程调度/进程管理

操作系统对CPU资源的分配,采用的是时间模式 —— 不同的进程在不同的时间段去使用

进程控制块抽象(PCB Process Control Block)

要做好进程调度,需要把进程(程序执行的过程)这个抽象的概念,用数据表示处理(面向对象的思想)变成数据,才能被计算机进行处理 / 才能被OS这个软件进行处理

class PCB {
// 进程的唯一标识 —— pid;
// 进程关联的程序信息,例如哪个程序,加载到内存中的区域等
// 分配给该资源使用的各个资源
// 进度调度信息
}

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值