目录
计算机是如何工作的
有人曾经这么评价CPU,它是迄今人类历史上科技巅峰的存在,除了需要复杂的技术之外,更需要精良的制作工艺,综合考虑制造顶尖性能的CPU难度堪比造核弹。
这个专题中并不会出现非常抽象的cpu核心概念,而是以一种科普的方式带大家了解计算机是如何工作的,我的主要目的就是希望大家在进行编程时能理解计算机是如何将逻辑代码进行实现的,帮助大家打破计算机的神秘感。
1.冯诺依曼体系
- CPU 中央处理器: 进行算术运算和逻辑判断.计算机的核心。
- 存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
- 输入设备: 用户给计算机发号施令的设备.如:鼠标,键盘
- 输出设备: 计算机个用户汇报结果的设备.如:显示屏,音响设备
2.CPU的基本工作流程
CPU是电脑中最重要的硬件,操作系统是电脑中最重要的软件。
目前市面是主流的CPU有两种架构X86架构和ARM架构:
- 不同架构的cpu,支持的指令集(机器汇编)不同,对应的汇编语言不同。
- 现在的X86cpu也都是64位的。
CPU32位与64位的区别是什么呢?
比如在C语言代码中
int*p=NULL;
printf("%d",sizeof(p));
cpu是16,32,64位分别会得到不同的结果2,4,8。
CPU的位数和代码中内存地址用几个字节表示密切相关。
CPU的组成:
主要有四部分,计算单元ALU,控制单元CU,存储单元寄存器,时钟。
CPU的内部有很多小的计算单元(ALU运算器),它的数量多少决定了CPU的算力。
门电路=》半加器=》全加器=》加法器=》ALU运算器=》CPU的主要部分。
全加器的组成如下:
其中门电路是由与门,或门,非门,异或门组成的,CPU的构成非常抽象和复杂,上面只是帮助大家了解,并不严谨。
除了计算之外,CPU内部还有负责存储的部门(寄存器),寄存器也是由门电路构成的,它的存储必须在通电情况下才能完成。下图所示是1比特位的存储单元:
CPU的控制单元CU:
- CPU要执行的指令是先在内存中的(冯诺依曼体系结构基本设定--让执行单元与存储单元解耦合)。
- CPU执行指令的顺序:取到指令=》解析指令=》执行指令。
- 取指令需要从内存中读取指令到CPU寄存器中,取指令很耗时,通过引入缓存,流水线技术优化。
- CPU解析指令需要指令表,不同架构CPU支持指令表不同。
- 指令在执行过程中,可能会有一些操作数,不同指令,操作数个数含义不同。
现在的硬件厂家为了提高CPU的性能一般采用两种方法, 一个是把门电路做的足够小,(但是以现在的水平当门电路过小时即达到微粒水平,平时我门所熟知的物理规律便失效了,进入量子力学范畴,目前不可控) 二是把CPU做的足够大(但是这与工艺水平有很大关系,CPU做的越大制作过程中间出现错误的可能性就越高,CPU的废品率就越高,会提高成本)。所以厂家们想出来了 多核心的CPU,即一个CPU板上放多个CPU。这也就导致了并发编程的由来。后来又演化出 超线程技术,即把一个CPU当成两个也就是逻辑处理器,我们俗称大小核。现在的CPU都是多核加超线程技术加持下的产物。
3.Java语言怎么被计算机执行
Java语言首先先被Java编译器编译成class文件(字节码文件),进入Java虚拟机中,通过jvm进行装载字节码,校验字节码,解释字节码把class文件语言变成机器语言,最后由操作系统进行执行。
而C语言是先进行编译链接,形成汇编语言,在进行汇编形成机器语言,最后由操作系统调配CPU进行执行。
4.操作系统存在的意义
- 防止硬件被应用程序滥用;
- 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。
操作系统通过抽象封装来管理各种硬件,并给其他软件提供稳定的运行环境。
操作系统中常见的一些概念及解释:
进程/任务:操作系统提供的一种软件资源,正在运行的程序会被操作系统封装为进程,进程是系统分配资源的基本单位——内存,硬盘。
进程在系统中的管理:1.先描述:先利用类或结构体把进程中的实体属性列出来,即PCB。
2.再组织:通过一定的数据结构(链表)把这些结构、对象串在一起。
看到任务管理器进程时,表示系统内部在遍历链表并打印每个阶段的相关信息。
运行一个新程序,系统多一个进程,即需要构造一个新的PCB并添加到链表上。
若运行中的程序退出,需要把对应进程的PCB从链表中删掉并销毁对应PCB资源。
PCB进程控制板块:操作系统利用类/结构体的方式对进程的抽象表示,即名称为PCB的类/结构体。它非常庞大,有上百个属性。
- pid--进程的身份标识符,通过简单的不重复整数区分,是唯一的,pid一般来说是32位整数;用pid可对进程操作区分。
- 内存指针--表述进程能使用那些内存,表述进程使用内存资源详细情况。
- 文件描述表--操作系统对硬盘设备进行封装,操作系统统一进行抽象都是按照文件方式操作的。
- 状态--表示某个进程是否能去CPU执行,有就绪状态,阻塞状态等。
- 优先级--进程调度时的依据
- 记账信息--针对每个进程占据多少CPU时间进行统计,会根据这个统计结果进行调整调度的策略;确保每个进程都可以使用到CPU。
- 上下文--支撑进程调度的重要属性,相当于游戏中的存档和读档。
内存管理:每个进程的内存彼此独立,互不干扰,通常情况下,进程A不能直接访问进程B的内存(系统稳定性)。
进程间通信:进程之间很多时候也需要相互配合完成某项工作,进程间通信和进程的独立性并不冲突,系统提供公共空间(多个进程都能访问到),让两个进程借助这种公共空间来交互数据;通信方式有:管道,共享内存,文件,网络,信号量,信号等。
❤️😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍
🍔我是小皮侠,谢谢大家都能看到这里!!
🦚主页已更新完Java基础内容,数据结构基础,
🚕未来会更新Java项目,SpringBoot,Redis以及各种Java路线会用到的技术。
🎃求点赞!求收藏!求评论!求关注!
🤷♀️谢谢大家!!!!!!!!!