学习javaEE前要了解的基本功

一、CPU如何执行指令

1、读指令

把内存中的指令数据读取到cpu的寄存器。这个地方要注意寄存器与存储器的区别:

寄存器是cpu上的一个模块,存储器是内存与硬盘的统称,存储空间:硬盘大于内存大于寄存器,速度:寄存器大于内存大于硬盘,价格:寄存器大于内存大于硬盘;由于寄存器与内存之间速度差异较大,现代的cpu提供了缓存模块,将使用频率高的数据存放在缓存中,操作系统在读指令时优先看缓存中有没有,有则直接读取,没有则去内存中读取,可以提高开发效率。

2、解析指令

指令通常包括操作数和操作码组成,每个cpu被设计出都会自带一个指令表,上面明确的解释了每个操作码负责的工作。

3、执行指令

cpu通过操作数对应的指令表做出动作,cpu在执行完一条指令后,默认把pc数加一,执行下一条指令。pc为程序计数器

栗子:

第一步读指令,假设从下标为0的地址开始执行,该指令的操作码为0010,操作数为1110,根据指令表可以得到0010对应的操作为LOAD_A(红色线)

第二步解析指令,由指令表可以知道当前指令需要将1110位置的数据放到寄存器A

第三步执行指令,如图。

二、进程

一个程序运行时,操作系统中就会出现一个对应的进程,要想进程运行就要给进程分配资源,进程可以视为资源分配的基本单位。

1、PCB

操作系统对于多个进程需要进行管理,通用的做法是:先描述,再组织

描述:通过结构体或类将一个进程的核心信息抽象提取并表示出来。此处的结构体称为PCB

组织:通过一定的数据结构将多个PCB串联起来,操作系统通常使用链表

2、PCB包含的信息

(1)Pid:进程的id,同一机器 同一时刻进程的id一定不同。可以通过任务管理器查看

(2)内存指针

一组指针分别指向了该进程的指令与数据在内存中存储的地址。

当双击一个exe文件执行时,此时操作系统会产生一个进程,先创建一个PCB与内核中的PCB链表连接,exe包含的指令数据保存到内存之中。此处重点理解PCB的指针与内存、硬盘之间的关系,以及创建一个进程时都发生了什么。可以根据下图帮助理解

(3)文件描述符表:记录下当前进程打开了哪些文件,使用顺序表这样的数据结构存储。

3、PCB的属性

(1)状态:包含就绪状态与阻塞状态,往往在这个进程等待IO时会进入阻塞状态

(2)优先级:分配的资源会不同

(3)上下文:进程在cpu执行过程中会产生很多的中间结果,在进程切换出cpu之前将中间结果保存到PCB的上下文(寄存器的数据保存到内存),下次这个进程回到cpu执行时就需把之前的中间结果恢复(内存的数据保存到寄存器)。此处的中间结果大多是cpu中各种寄存器的值。

(4)记账信息:记录分配的资源

在了解完本篇文章后能帮助学习后面的多线程,下一篇文章更新多线程,请多多期待(●'◡'●)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值