[JavaEE] 计算机是如何工作的

目录

文章目录

一.CPU基础知识

1.CPU的基本情况

2.CPU是如何构成的

3.CPU计算数据相关结论

二.操作系统

1.操作系统是什么

2.操作系统的主要职责

三.进程(任务)

1.什么是进程/任务(Process/Task)

2.操作系统的进程管理

3.PCB(进程控制块)中的核心属性

1.pid是什么

2.内存指针是什么

3.文件描述符表

四.进程是系统分配资源的基本单位

1.CPU的分配

2.分时复用(并发性)

3.PCB中支持系统调度的属性

1.状态

2.优先级

3.记账信息

4.上下文

总结


一.CPU基础知识

1.CPU的基本情况

x86 架构: intel amd 家用 pc,服务器

arm 架构: 苹果, 高通苹果电脑,智能手机

2.CPU是如何构成的

门电路 =>半加器 =>全加器 =>加法器 =>ALU 运算器 =>差不多构成 CPU

3.CPU计算数据相关结论

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

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

3.取指令雲要从内存中读取指令到 cpu 的寄存器中 (这里没有体现出 存储指令的寄存器,就只体现了 AB 用来计算数据的寄存器取指令的操作,其实是非常耗时的 (读取内存操作相对于 cpu 执行计算, 要开销大很多)因此 cpu 中通过缓存,流水线等技术,来优化这里的效率

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

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

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

二.操作系统

1.操作系统是什么

操作系统是一个软件

2.操作系统的主要职责

1.管理各种硬件设备

2.给其他软件提供稳定的运行环境(抽象封装)

(类似JVM,JVM 又是对系统的抽象封装,于是最终的结果,咱们 Java 程序猿就只需要使用 JM 提供的api 就可以起到控制各种不同的系统,完成编程效果了,操作系统给程序猿提供了许多管理硬件软件的api)

三.进程(任务)

1.什么是进程/任务(Process/Task)

进程就是操作系统提供的一种软件资源,进程是操作系统对⼀个正在运⾏的程序的⼀种抽象,换⾔之,可以把进程看做程序的⼀次运⾏过程; 同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。每个任务在执行的过程中都需要消耗一定的硬件资源.

目前使用的的系统都是"多任务操作系统",同一时刻可以运行多个程序,与之对应的就是"单任务操作系统",同一时刻只能运行一个程序.

2.操作系统的进程管理

1.先描述 (使用类/结构体这样的方式,把实体属性给列出来)

操作系统,一般是用 C/C++ 实现的.(没有 Java 写的操作系统)因此,就可以使用结构体
表示进程信息的结构体,起了个名字,PCB(进程控制块,Process Control Block)具体在 Linux 上,PCB 是一个 叫做 struct task struct {..}这样的结构体.在 Linux 中,使用链表这样的数据结构来把若干个 task struct 给串起来.

2.再组织(使用一定的数据结构,把这些结构体/对象, 串到一起)

当我们看到任务管理器中的这些进程的时候,意味着系统内部就在遍历链表,并且打印每个节点的相关信息;

如果运行一个新的程序,于是系统中就会多一个进程,多的这个进程就需要构造出-个新的 pcb, 并且添加到链表上.

如果某个运行中的程序,退出了,就需要把对应进程的 pcb 从链表中删除掉, 并且销毁对应的 pcb 资源

3.PCB(进程控制块)中的核心属性

1.pid是什么

pid是进程的身份标识,系统会保证,同一个机器,同一时刻,每个进程的pid都是唯一的

2.内存指针是什么

内存指针描述了进程使用内存资源的详细情况,进程运行过程中,需要消耗一些系统资源的,其中内存就是一种重要的资源,可以把内存想象成一个小旅馆,申请内存就是跟老板开一间房,只有申请到了才能使用,每个进程都必须使用自己申请到的内存,内存指针,就是用来描述说你这个进程,都能使用哪些内存,一个进程跑起来的时候,需要有"指令"也需要有"数据"(指令和数据,都是要加载到内存中的),进程也需要知道,哪里是存的指令,哪里是存的数据.

3.文件描述符表

描述了这个进程,所涉及的硬盘相关的资源,我们的进程经常要访问硬盘操作系统, 对于硬盘这样的硬件设备, 进行了封装=>文件,操作系统不管你是哪种盘, 都是统一进行的抽象,都是按照"文件"的方式来操作的.(Java 标准库封装的 api本质上都是调用系统 api )

四.进程是系统分配资源的基本单位

1.CPU的分配

如何理解进程消耗CPU资源?我们可以把CPU想象成一个舞台,要执行的指令就是演员,进程要执行指令就相当于演员登台表演,同一时刻,一个舞台上只能有一个演员,多核cpu相当于有多个"舞台",但是僧多肉少,cpu的数量小于进程数量,这是关键在于"让多个演员轮流登台",这就涉及到一个重要的概念:"分时复用"(并发性)

2.分时复用(并发性)

cpu 核心只有一个,先执行进程1 的代码(进程1,登台演出),执行一会之后,让进程1 下来,进程2 上;进程2上了执行一段时间之后,进程3 上 ,以此类推,只要切换速度足够快,人是感知不到这个切换的过程的在人眼看起来,多个任务/进程,就是"同时执行"的

后来,随着多核cpu 诞生,同时执行进程, 变的更复杂了,同时就可以有四个不同的进程,在各自的舞台上进行执行,此时此刻,微观上,这几个进程也是"同时执行的”,而不是靠快速切换模拟的“同时执行”称为“并行执行”,与之对应的,前面的并发执行,仍然存在,每个核心仍然要分时复用,仍然要快速切换,当前现代的计算机 执行过程,往往是并行+并发同时存在的.两个进程是并行执行还是并发执行都是看系统的调度的.因此,往往就把“并行”和“并发”统称为“并发”,对应的编程方式就统称为"并发编程".进程的调度,分时复用,并发执行,PCB中就需要提供一些属性来支持系统完成对这些进程的调度

3.PCB中支持系统调度的属性

1.状态

状态是描述某个进程是否能够去CPU执行的

1.就绪状态:随时准备好去CPU上执行,操作系统一打招呼就可以上cpu,拥有除了cpu以外所有的必备资源;

2.阻塞状态:这个进程当前不方便去cpu上执行,此时不应该去调度他,比如进程在等待io,来自控制台的输入输出,硬盘的输入输出,网卡的输入输出等等.

void main(){
    Scanner scanner=new Scanner(System.in);
    int num=scanner.next();
}

根据上面的代码我们可以看出,若用户一直不输入时,程序无法继续执行,此时进程处于阻塞状态,这就是因为等待IO引起的阻塞.

2.优先级

多个进程等待系统调度,多个进程之间的调度先后关系并不是平均的,先调度谁,后调度谁,调度实际谁长谁短等都是可以进行调配的.

3.记账信息

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

4.上下文


总结

操作系统的主要职责是:管理各种硬件设备,给其他软件提供稳定的运行环境

进程就是操作系统提供的一种软件资源,进程又是操作系统进行资源分配的基本单位。

进程的调度,分时复用,并发执行

PCB中的核心属性:pid,内存指针,文件描述符表

PCB中支持系统调度的属性:状态,优先级,记账信息,上下文

  • 35
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值