目录

操作系统

操作系统是一个搞管理的软件

1.管理各种硬件设备

2.给各种应用程序,提供一个稳定的运行环境

操作系统中的重要概念:进程

管理进程:多了就需要管理

1.先描述出一个进程是啥样的

2.再把多个进程组织起来

PCB中的一些关键要点

1.PID(进程ID)

2.内存指针

3.文件描述符表

PCB的进一步属性:进程调度

并发执行

并行执行

4.进程状态

5.进程优先级

6.进程的上下文

7.进程的记账信息


闲聊:关于算法学习方面的问题

当下的就业环境非常卷=>好公司会收到大量的简历

所以为了从几万人中筛选出100~200人(筛掉90%左右的人),要考算法(考的这个算法,对于实际工作,没有任何帮助)

目的就是筛选出两类人:

1.特别聪明

2.特别勤奋

如果不是特别聪明,也不是专门训练过,想通过笔试,概率非常低

而且算法能力无法速成!

有一些企业算法的难度是拿往年的国际算法大赛的题目来作为对标

我们作为一个程序员,另外一个很重要的事情:秋招之后,找到工作了,不应该着急去实习,而是玩~

因为10月到明年7月是人生中最后一段最轻松、最没有压力的时间了~

操作系统

继续上一节说:Java EE:1.计算机是如何工作的(第二弹)

闲聊:操作系统和CPU之间的联系

是一种你控制我,我控制你的关系~

操作系统本身也是一个软件,也是由一系列指令构成的,CPU就会依次执行操作系统上的这些指令,操作系统才跑起来

此时运行某个进程,操作系统就会进行加载指令数组到内存,并让CPU来执行这里的指令~

操作系统是一个搞管理的软件

1.管理各种硬件设备

驱动:和硬件配套的软件,操作系统通过驱动程序间接管理硬件设备

所有的硬件设备,都是这样的,系统通常会内置一些通用的驱动程序~

举个例子:罗技G502,按钮特别多,十几个按钮,比普通鼠标多好多~

当把鼠标插在电脑上,发现其他按钮都不好使,电脑只是把这个鼠标当成普通鼠标处理~

此时就需要去罗技官网找罗技鼠标的驱动程序:G-HUB软件

再举个例子:买了个新的显卡,插到电脑上了,必须给显卡安装对应的驱动,才能发挥全部功力~

2.给各种应用程序,提供一个稳定的运行环境

稳定的运行环境:这些应用程序,工作过程中是互不干扰的~

操作系统中的重要概念:进程

进程:一个运行起来的程序

现代计算机同时跑百十来个进程很常见

管理进程:多了就需要管理

站在操作系统的视角,如何管理进程?

1.先描述出一个进程是啥样的

由于主流的操作系统都是C语言写的,因此使用结构体,来描述出进程的核心属性~

这个结构体称为:进程控制块(PCB)

这是个非常大的结构体,有很多很多属性~

2.再把多个进程组织起来

比如Linux这样的操作系统,使用链表的形式把多个PCB串到一起~

注意形式不局限于链表

具体操作过程:

①创建一个新的进程

创建一个PCB,初始化PCB中的各个属性,然后把PCB加到链表上~

②销毁一个进程

在链表中找到这个PCB,并且在链表上删除掉~

③查看进程列表

遍历链表,取出链表上每个元素,把里面的一些关键信息显示到界面上~

PCB中的一些关键要点

1.PID(进程ID)

PID:进程身份的标识符

2.内存指针

内存指针:本质是一组指针,能够找到进程需要执行的指令在哪里,指令依赖的数据又在哪里~

进程运行的过程中,需要依赖内存资源~

当我们双击.exe文件去运行一个程序,就会创建一个进程

这就涉及到操作系统加载的过程:

拿CSDN举例,CSDN.exe是一种可执行文件(保存在硬盘上的一段数据),保存以下内容

①CSDN这个程序运行过程中,都要执行那些二进制指令

.exe是程序员写的代码生成的,代码最终被编译成二进制指令,就包含在.exe文件中了~

②这些指令运行过程中,依赖的数据~

操作系统会把.exe中的指令和数据读取出来加载到内存中,后续进程在运行中,就会从指令内存区域里一条一条的读取指令并执行~

3.文件描述符表

进程运行过程中,很多时候需要和硬盘这个硬盘设备去进行交互,硬盘上的数据就是以文件的形式来组织的~

进程在读写文件的时候,需要先“打开文件”(类似C语言上打开文件用的是“fopen”)

每次打开一个文件,就会把这个文件的信息保存在文件描述符表中~

表里的每个项,就对应着一个打开了的文件~

操作系统中,会把很多资源都抽象成文件来表示,不一定是硬盘上的资源~

比如网卡,操作系统管理网卡的时候,就是当作“文件”一样来管理~

进程的运行,也会依赖到硬盘、网卡等相关的资源设备

进程运行、执行指令,都是靠CPU的,进程也需要消耗CPU资源

进程是操作系统中资源分配的基本单位

PCB的进一步属性:进程调度

进程调度:操作系统进行进程管理的过程中,需要完成的重要工作

包括以下4点:

4.进程状态

5.进程优先级

6.进程的上下文

7.进程的记账信息

当一个电脑上进程由百八十个,但是电脑CPU核心数20个

我们知道,一个CPU逻辑核心,同一时刻,只能执行一个进程的指令

20个干活的牛马,如何同时进行一百多个任务的工作??

早期的计算机的操作系统是“单任务”操作系统

同一时刻,只能运行一个进程,要想运行下一个进程,就必须结束上一个进程~

于是后来出现了“多任务”操作系统(在有多核处理器之前,多任务系统就已经有了):即使CPU只有一个核心,也能同时运行多个进程

关键在于“分时复用”:把一个单位时间分成和很多份

第一份,运行进程1的指令

第二份,运行进程2的指令

……

CPU运行速度足够快,上述的切换过程也会非常快,快到超出人类的反应时间,使人看起来感觉好像这些进程在“同时执行”一样~

当然,如果运行的任务实在太多了,人也是有可能感知到这个卡顿的过程的~

并发执行

在一个CPU核心上,按照分时复用,执行多个进程这样的方式,称为“并发执行”

与并行执行区别:人看起来是同时执行,微观上,其实是一个CPU在串行执行,切换速度极快

并行执行

在多个CPU核心上,同时执行多个进程这样的方式,称为“并行执行”

与并发执行区别:雀食就是“同时执行”

现代CPU在运行进程的时候,并发和并行是同时存在的

程序员写代码的时候,无法区分当前这些进程是并行执行还是并发执行~

所以也会把并行和并发统称为“并发”

因为需要并发执行,所以操作系统需要进行进程的快速切换,也就是“进程调度”

类比:假设一个美女叫小美,同时谈了三个男朋友:A很有钱、B很帅、C很会舔(舔🐶),默认情况下这三个小哥哥都是“随叫随到”~

小美就要合理规划时间,使这三个人彼此不能感知到对方存在~

规划时间表:

周一周二:和A约会

周三周四:和B约会

周五周六:和C约会

周日:休息

这个状态就是:分时复用,并发执行~

定制时间表,并且按照时间表来执行,就是进程调度的过程~

4.进程状态

进程有很多状态,其中两个最典型的

①就绪状态=>随叫随到

进程可以随时到CPU上进行执行

②阻塞状态

进程当前不适合到CPU上执行

约会的时候提前规划好周一和A约会,就不适合和B约会~

5.进程优先级

这么多进程,它们到CPU上运行的机会是均等的嘛?

不是,有些进程就是要优先级更高一些,吃到CPU更多的资源

好比你在玩黑马喽的同时电脑上也运行QQ

那么我们就需要黑马喽的进程优先级更高一点,因为卡了一下,可能就被虎先锋拍死了~

而QQ哪怕吃CPU资源少,延迟几秒收到消息也无妨~

6.进程的上下文

进程调度:一个进程执行一会儿,失去CPU,过了一段时间后,进程还是会回到CPU上执行

那么是沿着上次执行到的状态继续执行还是重头执行??

是继续执行,进程在CPU中运行的过程中

CPU上的各种寄存器,就表示了当前进程运行的“中间状态”

保存上下文:把CPU中的这些寄存器的值,保存到内存中(PCB的对应属性中)

恢复上下文:把PCB中刚才保存的属性,填写回对应的寄存器中

这个过程类似于游戏中的存档、读档

答疑:寄存器不是存储数据嘛?

寄存器不只是存储中间结果,也会存储当前这个进程执行到第几条指令了、以及当前进程中的“函数调用关系”……

这些内容是KB级别的存储空间,所以完全存的下

7.进程的记账信息

统计功能,统计每个进程在CPU上运行了多久,如果发现某个进程好久没有吃到CPU资源了,就会给这个进程倾斜一些资源~

比如小美去跟A和B约会,分配了比较多的时间,为了防止C去舔别的女人,就适当的给C一些甜头,比如把不用的发圈送给他,让C继续舔~

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐