进程基本知识分享

什么是进程

在这里插入图片描述
通俗点说:像我电脑上这些跑起来的程序就是进程,一般情况他是静静的躺在硬盘上的,在你双击他运行起来之前,他是不会对系统有任何影响的.

进程控制块

进程控制块(PCB Process Control Block) ,我们可以把进程控制块看作 一个类 或 C语言的结构体.
一个PCB对象就对应一个进程

PCB中有哪些属性?

pid : 一个进程的身份标识.一个机器同一个时刻不会存在2个pid相同的进程.
内存指针 : 描述了这个进程使用的内存空间是哪个范围(虚拟地址空间)
文件描述符表 : 描述了这个进程都打开了哪些文件.
进程调度信息(进程的状态,进程的优先级,进程的上下文,进程的记账信息)

操作系统是如何管理进程的

描述+组织
描述 : 进程控制块(PCB)
组织: 使用一定的数据结构来组织.常使用双向链表实现.

查看进程列表: 本质上就是遍历操作系统内核中的这个链表,并显示其中的属性.
创建一个进程: 本质上就是创建一个PCB对象,后加入到内核的链表中
销毁一个进程: 本质上就是删除内核链表中的这个PCB对象.

进程调度是什么

现在的操作系统一般都是多任务的操作系统,所谓的“进程调度”:就是让有限的核心,能够同时执行很多很多的任务。
举一个有趣的例子:
进程调度就是"时间管理"(虚构故事)
传说有一个妹纸长得灰常好看,身材好,口才好.有很多的追求者.然后,重原则上讲,她是只能谈一个男朋友的,但是,这里就不一样了.
她有三个男朋友(A:有钱的 B:长得帅的 C:小舔舔~~)
但是在他们男朋友看来,他们就是她唯一的男友,为了避免他们碰面,这里就谈到了时间管理.

我们可以排一个时间表:
周一:和A逛街
周二:和B看电影
周三:和C上课(宏观上谈了三个,微观上只有一个)
状态
正常情况下:A B C三人随叫随到(就绪状态)
假设A出彩一个月 ,认为A是阻塞状态/睡眠状态~~,因此这样状态的进程就不进行调度.(就绪状态:随时可以去cpu上执行 阻塞状态/睡眠状态:暂时不去cpu上执行 Linux中的进程还有很多其他的…)
优先级
女神最喜欢B > A > C
这种时候就给B多安排一点时间,其次A,在C
例如:周一 到 周三:和B在一起 ----- 周四到周五: 和A在一起 ----- 周六:和C在一起 ------ 周天放假(休息一天).(先给谁分配时间,后给谁分配时间,以及给谁分得多,给谁分得少)
记账信息
长此以往,和C在一起的时间太少了,C的好感度下降了舔的不卖力了~
这个时候根据之前小本本上的几率信息,就发现了给C排的时间太少了.
接下来那就给他一点甜头吧~~(统计了每个进程,都分别被执行了多久,分别执行了那些指令,分别都排队等了多久…给进程调度提供指导依据~)
上下文
某一天,A说他下个月要去三亚度假~~让女神早点做准备~
下一天,B又跟女神说,下一周他外婆要过生日了,希望她能准备一点礼物~
过了几天,A就跟我提起准备的怎么样了,女神说礼物已经准备好了…A"礼物?什么礼物?"哈?这不就穿帮了吗…所以该怎么区分好呢?那就记到小本子上>>记录日记的好习惯就把每次约会的重要信息都记录下来,下次在和他们见面的时候都能够对上号,哪怕时间长一点也无所谓…(就表示上次进程被调出cpu的时候,当时程序的执行状态,下次进程上cpu的时候,就可以恢复之前的状态,然后继续执行…进程被调出cpu之前,要把cpu中的所有的寄存器中的数据给保存到类存中(PCB的上下文字段中),相当于存档了,下次再被调度上cpu的时候,就可以从刚才的类存中恢复这些数据到寄存器中.相当于读档了…存档+读档~ 存档存储的游戏信息,就成为"上下文")

总结来说:进程的调度,其实就是操作系统再考虑cpu资源如何给各个进程分配.
进程独立性
内存资源优势如何分配的呢? ---->虚拟的地址空间
操作系统上,在同时运行着很多的进程,如果某个进程发生了bug,崩溃了,是否影响其他进程?(现代的操作系统(windows,linux,mac…))
能做到这一点,就是"进程独立性"来保证,就依仗了"虚拟地址空间".

进程之间现在通过虚拟的地址空间,已经各自隔离开了…
但在实际工作中,进程之间还是会相互交互的~~

当然,咱们的两个进程之间,是隔开的,那怎么进行交互?---->操作系统提供了类似的’公共空间’进程A把数据放在上面,进程B就可以在上面取走~~

进程间通信
操作系统中,提供的"公共空间"有很多种,并且各有特点~~
有的存储空间大,有的小,有的速度快,有的慢…
操作系统中提供了多种这样的进程间通信机制~
现代最主要使用的通信方式,有两种:
1、文件操作
2、网络操作(socket)

linux 系统 还另外提供了 :管道、消息队列、共享内存这些东西。
这些东西也是 进程间通信 机制,但是也是属于不常用的机制.

一些常见问题总结

进程是啥

跑起来的程序(.exe)

进程是怎么管理的

描述+组织

进程的PCB里有啥

只有包含一些成员变量/属性
1、pid(进程id) - 进程的身份标识
2、内存指针
3、文件描述符表
4、状态
5、优先级
6、记账信息
7、上下文

进程的调度是咋进行的

时间管理大师

进程间的独立性咋回事

虚拟地址空间

进程间如何通信

通过“公共空间”进行交互。(进程A 先将数据放入公共空间,进程B随后再去取,这样就完成了进程之间的交互)不管是那种 进程间通信的机制,其本质都是一样的。

猜你喜欢

转载自blog.csdn.net/chenbaifan/article/details/123855677