• 认识计算机


    目录

    冯诺依曼体系

    认识计算机 

    数据在内存的存储问题

    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这个软件进行处理

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

  • 相关阅读:
    开启更高效之路,美创科技暗数据发现和数据分类分级系统全新升级
    小测试:HashSet可以插入重复的元素吗?
    SpringBoot整合Minio文件存储
    AI人工智能入门—知识地图
    【一起来学C++】————(8)模板
    Redis之zset类型
    迅为RK3568开发板驱动指南第六篇-平台总线
    微信小程序设置动态变量设值
    谷歌浏览器HttpOnly跨域请求
    对map根据key值排序
  • 原文地址:https://blog.csdn.net/m0_58672924/article/details/125336959