计算机是如何工作的(简单介绍)

目录

一、冯诺依曼体系

二、CPU的基本工作流程

总结:

三、操作系统

四、进程 / 任务(Process / Task)

操作系统的进程管理

PCB的一些核心属性

pid

内存指针

文件描述符表

CPU在pcb中的体现

并发和并行:

状态

优先级:

记账信息:

上下文:

进程的内存分配:

进程间的通信:


一、冯诺依曼体系

现代的计算机,大多是遵守冯诺依曼体系结构

如图:

各个部分的分工:

• CPU中央处理器:进⾏算术运算和逻辑判断。
• 存储器:分为外存和内存,⽤于存储数据(使⽤⼆进制⽅式存储)。
• 输⼊设备:⽤⼾给计算机发号施令的设备。
• 输出设备:计算机个⽤⼾汇报结果的设备。


针对存储空间进行比较:

硬盘 > 内存 >> CPU

针对数据访问速度进行比较:

CPU >> 内存 > 硬盘


二、CPU的基本工作流程

上面这一段的指令,其实就是内存中的一段数据

第一步:

第二步:

第三步:

第四部:

再往下就是0地址了,说明指令已经执行完了。

总结:

1、CPU要执行的指令,是在内存中的(冯诺依曼体系结构,基本设定,执行单元(CPU)和存储单元(内存)是分开的,让执行单元和存储单元解耦合)

2、CPU要想执行指令,就需要先取指令,再解析指令,然后才能执行指令。

3、取指令需要从内存中读取指令到CPU的寄存器中,取指令的操作,其实是非常耗时的(读取内存操作相对于CPU执行计算,开销要大很多)。因此CPU中通过“缓存”、“流水线”等技术,来优化这里的效率。

4、CPU解析指令的时候,需要用到“指令表”,不同架构的CPU支持的指令表不同(x86和arm等都是不同的),指令表细节,已经写死到CPU中了,CPU是可以很容易识别的。

5、指令在执行过程中,可能会带有一些操作数,不同指令、操作数的个数含义都有所不同。

6、CPU重要的参数,主频:主频表示的含义,近似看成是一秒钟以内,CPU能够执行的指令个数。


三、操作系统

操作系统是一个软件,有代码构成的程序

主要职责:

1、管理各种硬件设备

2、给其他软件提供稳定的运行环境

上面这两种职责类似抽象、封装。我们的电脑有很多硬件,如显示器、鼠标、内存、硬盘等等,

这些硬件的生产厂商都不同,所提供的的API也会不同,那么一个电脑是怎么兼容那么多不同的硬件设备呢?很显然,是Windows操作系统,统一管理这么多硬件设备,给软件统一API。


四、进程 / 任务(Process / Task)

进程就是操作系统提供的一种软件资源,我们现在的电脑所用的就是多任务操作系统,可以同时运行多个任务,如:edge,QQ,IDEA等等,而单任务操作系统一次只能运行一个任务,如:老年机。

操作系统的进程管理

1、先描述,用类 / 结构体这样的的方式,把实体属性表示出来,我们给表示进程的结构体统称为PCB。

2、再组织,用一定的数据结构,把这些结构体给组织起来,在Linux中,使用链表的这种数据结构将这些结构体给组织起来。

PCB的一些核心属性

pid

PCB是一个非常庞大的结构体(上百个属性),我们要怎么怎么区分这么多的属性呢?

引用pid,进行身份标识,用不同的整数,代表不同的进程,这些整数都是不重复的,用来区分电脑上那么多不同的进程,系统也会保证,每个进程的pid时唯一的。

比如我们在任务管理器结束一个任务,就要在任务管理器中选取到这个pid,然后调用系统api,把pid参数传进去,就能把这个后台杀死。

内存指针

整个系统中,有些人的电脑的内存是16G的或者其他大小的内存,那么我们内存这么多,16G都可以给我们随便调用的吗?显然不是,就好比去旅馆开房,我们要先订房,交钱才能进到指定的房间,但是如果我们直接强行进入某个房间呢,显然是不合法的。内存的调用也是如此,每个进程,都必须自己申请一块内存,申请了这块内存,进程才能使用。

而内存指针,就是用来描述:某些进程能使用哪些内存。内存指针,也是描述某些进程的使用情况。

文件描述符表

文件描述符表,描述了这个进程,所涉及的硬盘相关资源。一个进程想要操作文件,需要先“打开文件”,而打开文件,就是让进程在文件描述符表中分配一个表项(构造一个结构体),表示这个文件的相关信息。

CPU在pcb中的体现

上面的都是内存、硬盘在pcb中的体现,那么在CPU中的体现如何呢?

一个进程消耗CPU资源是啥意思?比如CPU是一个舞台,要执行的指令就是演员,但是同一时刻,一个舞台只能给一个演员表演,CPU可能是单核的,也可能是多核的,这时就涉及到分时复用(并发)。

并发和并行:

单核的cpu:是先处理进程1完,再处理进程2....,依次往后推的,但是处理这些进程的过程是很快的,我们人脑的反应没那么快,只要电脑切换的足够快,我们人感知不到,我们就可以认为同一时刻,在人眼看来就是多个任务 / 进程 “同时进行”。这个就是并发

多核CPU,也就意味着有多个舞台,多个演员可以在舞台上表演,也就是多个进程可以同时执行,只不过是在不同的核心上,这个就是并行,同时也在发送着并发,因为每个核心都在快速的切换不同的进程。

当代计算机执行的过程,是并行和并发同时在发生的,对此,往往就把“并行和并发”统称为并发。

状态

描述某个进程,是否能够在CPU上执行,有的时候会不能执行,比如说Scanner,这个要等用户输入完内容,才能执行下一个指令,而状态分又可以细分,如下。

        就绪状态:

                随时准备好去CPU上执行,操作系统,一打招呼,就立马执行这个指令。

        阻塞状态:

                这个进程,当前不方便去CPU上执行,不应该去调度它,(比如,进程在等待IO,来自控制台的输入/输出)

优先级:

多个进程在等待系统调度,多个进程的调度会有先后关系,不那么平均,比如你在玩cf,打开了cf,同时qq在后台挂着,这时cf的优先级就比qq高,先玩游戏,玩完后才看qq是否有消息。

记账信息:

针对每个进程,占据多少CPU的时间,进行一个统计,会根据这个统计结果来进一步调整调度策略,因此就需要在下一个轮次进行调整,确保每个进程都不至于出现完全捞不着CPU的情况。

上下文:

上下文其实就是一种记录数据和恢复数据的形式,是支撑进程调度的重要属性。

类似游戏中的存档和读档。

存档:就是进程中得出的某些中间结果,把这个中间结果放在内存的某一个地方上。

读档:等进程需要某个中间结果数据的时候,就从内存中调用这个数据,恢复到进程中。

保存上下文:就是把cpu关键寄存器上的数据,保存到内存中。

恢复上下文:就是把保存在内存中的一些关键数据,加载到CPU上的对应寄存器中

进程的内存分配:

核心结论:每个进程都是相互独立的,互不干扰的。具有“独立性”

如果一个进程崩溃了,也影响到了其他进程崩溃,这种情况,用户的体验是很差的。所以一般情况下,A进程是不能直接访问B进程的内存。

进程间的通信:

虽然进程具有“独立性”,但是进程间的通信和“独立性”是不矛盾的。

当一个任务需要多个进程来协同配合完成,系统就会提供一个公共空间,让不同的进程在这个公共空间进行数据交互。


都看到这了,点个赞再走吧,谢谢谢谢谢!!!

评论 86
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tao滔不绝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值