【JavaEE】计算机的工作原理
计算机系统的组成
一台完整的计算机包含硬件和软件两部分,另外还有一部分固化的软件称为固件(兼具软件和硬件的特性),硬件和软件结合才能使计算机正常运行并发挥作用,所以对计算机的理解应该把它看作一个包含软件系统和硬件系统的完整系统。
1.计算机硬件系统
冯诺依曼的核心思想就是提出采用二进制存储程序和程序控制;存储程序就是将解题的步骤编制成程序,然后将程序和运行程序所需要的数据以二进制的形式存放到存储器中,方便执行;程序控制则是指计算机中的控制器逐条去除存储器中的指令并按顺序执行,控制各功能部件进行相应的操作,完成数据的加工处理。
计算机的硬件系统包含运算器、控制器、存储器、输入设备、输出设备五大部件。运算器和控制器合称位CPU(又称中央处理器);CPU和存储器通常称为主机;输入设备和输出设备统称为输入输出设备,又因为它们位于主机外部,所以有时也称为外部设备。下面这张图就是冯诺依曼体系结构。
-
存储器(内存+外存)
存储器主要功能就是存放程序和数据,程序是计算机操作的依据,数据是计算机操作的对象,它们在存储器中都是以二进制存储的(它们统称为信息),为了实现自动计算,这些信息必须要预先放在主存储器中才能被CPU读取。外存就是硬盘、软盘、U盘等
-
运算器
运算器是一种用于信息加工处理的部件,他对数据进行算术运算和逻辑运算。算术运算是算术规则进行的加减乘除等运算,逻辑运算就非算术运算,像比较、移位、逻辑加、逻辑乘、逻辑取反等。运算器通常由算术逻辑单元(ALU)和一系列寄存器组成。ALU是具体完成算术与逻辑运算的部件,寄存器用于存放运算操作数。
-
控制器
控制器是整个计算机的指挥中心,它可使计算机各部件协调的工作,控制器工作的实质就是解释程序,它每次从存储器读取一条指令,经过分析译码产生一串操作命令,再发给各功能不见控制各部件动作,是整个机器连续地、有条不紊的运行,以实现指令和程序的功能。
计算机中有两股信息在流动:一股是控制流信息,即操作命令,它分散流向各个功能部件;另一股是数据流信息,它受控制流信息的控制,从一个部件流向另一个部件,在流动的过程中被相应的部件加工处理。
-
输入设备
输入设备就是将信息输入计算机的外部设备,它将人们熟悉的信息形式转成计算机能接受并是别的信息形式。
-
输出设备
输出设备就是将计算机运算结果转成人们和其他设备能接收和识别的信息形式的设备。
指令
指令:指导CPU进行工作的命令,由操作码和被操作码组成。其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址也可能是寄存器编号等。
指令表
下面是演示指令运行的一个周期:
总结:
1.CPU要执行的指令是在内存中(存储器中),冯诺依曼体系结构基本设定让执行单元和存储单元解耦合;
2.CPU要想执行指令,就需要先取指令,然后才能执行;
3.取指令需要从内存中读取指令到CPU的寄存器中,取指令的操作非常耗时(读取内存、CPU计算等);
4.CPU解析指令的时候,需要用到“指令表”,不同架构的CPU指令表不同,但是指令表细节已经写死在CPU中,CPU可以快速识别;
5.指令在执行的过程中,可能会带一些操作数,不同的指令操作个数含义不同;
6.CPU重要的参数:主频,主频表示的含义近似看成一秒钟内CPU执行的个数;
2.计算机软件系统
计算机软件将解决问题的思想、方法和过程进行描述,所以程序是软件的核心组成部分。计算机软件按其功能分成应用软件和系统软件两大类。应用软件是用户为解决某种应用问题而编制的一些程序;系统软件用于对计算机系统进行管理、调度、监视和服务等,其目的是方便用户、提高计算机使用效率、扩充系统的功能。通常系统软件分:操作系统、程序设计语言及语言处理程序、数据库管理系统。接下来我们详细将操作系统:
核心数:多个核心的运算能力,也可以说是并发编程;
主频(基准频率、睿频):单个核心运算能力;
操作系统
操作系统是管理计算机中各种资源、自动调度用户作业、处理各种中断的软件。操作系统管理的资源通常有硬件、软件、数据信息。常见操作系统有Windows、Linux、Mac、Android、iOS等。操作系统的核心概念就是进程,每个跑起来的程序都称为进程。
1.进程
进程就是操作系统提供的一种“软件资源”,比如:多任务操作系统(多个后台同时执行),单任务操作系统(没有后台执行的任务)。可以把进程看作程序的一次运行过程;同时,在操作系统内部,进程是操作系统进行资源分配的基本单位。
2.操作系统的进程管理
- 1.先描述(使用类/结构体这样的方式,把实体属性给列出来)
操作系统一般是用c/c++实现的(没有Java写的操作系统),因此就可以使用结构体表示进程信息的结构体PCB(进程控制块);
- 2.再组织(使用一定的数据结构,把这些结构体/对象串在一起)在Linux中,使用链表这样的数据结构把若干个task_struct串起来
当我们看到任务管理其中的这些进程时,意味着系统内部在遍历链表和打印每个节点的相关信息;如果运行一个新的程序,系统就会多一个进程,多的这个进程就要构出一个新的PCB,并添加到链表中;如果运行程序退出了,就需要把对应的PCB从链表中删除并销毁对应的PCB资源。
2.1 PCB重要属性
- 1. PID(进程的标识符)
通过一个简单的不重复的整数来进行区分,系统保证PID唯一;比如,选中某个进程并且点击结束任务,任务管理器获取到选中的PID,然后调用系统API,把PID作为参数传进去从而完成杀死进程的操作。
-
2.内存指针(描述了进程使用内存的详细情况)
进程运行过程中需要消耗一些系统资源,内存就是一种重要的资源。内存指针就是用来描述这个进程可以使用哪些内存。一个进程跑起来的时候,需要指令也需要数据(都是要加载到内存中的),所以进程必须要知道哪里存放的位置是指针、哪里存放的位置是数据。
- 3. 文件描述符表(描述了进程所涉及的硬盘相关资源)
由于进程经常要访问硬盘,操作系统对硬盘遮掩的硬件设备进行封装,封装成文件。操作系统都是按照“文件”的方式来操作的,一个进程想要操作文件就需要“打开文件”。
1.分时复用(并发执行)
CPU核心只有一个,先执行进程1,执行一会后,进程1下来,进程2执行,再执行一会,进程2下来,进程3执行……就是并发执行(只要速度足够快,我们就感知不到切换,所以肉眼看来就是“同时进行的”);
2.并行执行
多核CPU有多个不同的进程,这几个进程也是同时执行的,就是并行执行;
这两种执行肉眼是观察不到的。并行执行+并发执行统称为“并发”,这个就是我们称为的并发编程。
2.2CPU分配--进程调度
- 1.状态
- 就绪状态:随时准备好去CPU执行,操作系统一打招呼就上
- 阻塞状态:这个进程当前不方便去CPU执行,不应该调度它(像进程等待IO,来自控制台的输入输出等)
- 2.优先级
多个进程等待系统调度,多个进程之间调度的先后关系不是那么平均时
- 3.记账信息
记录当前进程持有CPU的情况(比如CPU执行多久),作为操作系统的调度参考依据
- 4.上下文 (存档和读档)
支撑进程调度的重要性。每个进程在执行运行的过程中,就会有很多的中间结果,在CPU的寄存器中(像前面的指令例题3+14),操作系统调度进程可以认为时“随机”的任何一个进程,代码执行到任何一条指令的时候都可能被调度出CPU;
保存上下文(存档):在进程中调度出CPU之前,把当前寄存器中的信息单独存放到一个地方
加载上下文(读档):在该进程下次再去CPU上执行的时候,再把这些寄存器的信息恢复回来
2.3内存分配--内存管理(“进程独立性”)
每个进程的内存时彼此独立的、互不干扰的,通常情况下,进程A不能直接访问进程B的内存(为了系统的稳定性)
2.4进程间通信
虽然进程具有独立性,但是有时候也需要多个进程之间相互配合完成某个工作,进程间通信和进程的独立性并不冲突,系统提供一些公共的空间(多个进程都能访问到),让两个进程借助这种公共空间来交互数据。通信方式有文件、网络。
以上就是操作系统进程的所有知识点, 欢迎小伙伴们访问我的博客呀~