关于进程的几个问题

作者:~小明学编程 

文章专栏:JavaEE

格言:热爱编程的,终将被编程所厚爱。
在这里插入图片描述

今天给大家分享几个关于进程的小问题

1.什么是进程?

2.进程是怎么管理的?

3.进程里面的PCB里都有啥?

4.进程的调度是怎么进行的?

5.什么是进程的独立性?

6.进程之间如何通信?

目录

什么是进程

进程是如何管理的

PCB里面都有些啥

PID

文件描述符表

内存指针

什么是进程的调度

进程的优先级

进程的状态

进程的上下文

进程的记账信息

进程的独立性

进程之间如何通信


下面我们就来谈谈我对这些问题的理解:

什么是进程

所谓的进程就是一个跑起来的程序,一个exe的可执行文件我们点开它就相当于开了一个进程然后进行执行。

 在我们的任务管理器中可以查看我们的进程,这里的腾讯视频,微信都属于一个进程。

进程是如何管理的

我们操作系统是通过描述+组织的方式对进程进行管理的。

所谓的描述就是描述一个进程中含有哪些属性。通过类/结构体来进行描述。这里的结构体我们也成为PCB,即(process control block)——代码控制块,在linux中每个进程都用task_struct数据结构来进行定义,每一个进程都有一个PCB。

所谓的组织就是通过一些数据结构将这些进程给组织起来,比如我们的Linux是通过双向链表的方式将若干个进程给组织到一起的,然后进行一系列增删查改的操作。

PCB里面都有些啥

前面我们说到描述一个进程是通过类似结构体的模型进行描述的,这个结构体叫做PCB,那么具体的PCB里面都有些啥呢?

PID

相当于我们每个人的身份证,是用来标识我们进程的身份的,我们每个进程都有一个PID。

文件描述符表

文件描述表是用来记录我们打开了哪些文件的,一般情况我们操作系统会默认打开三个文件分别是:标准输入,标准输出,标准错误。其底层是一个数组。

内存指针

内存指针主要是用来记录.exe文件加载到内存对应的二进制指令和重要的数据在内存的哪个位置

pcb里面还有进程的优先级,进程的状态,进程的上下文,进程的记账信息这七个。

什么是进程的调度

我们前面说到我们的进程会有很多个但是我们的cpu的内核数量是有限的,我们cpu的核数一般就双核,四核,八核 等等,不会太多,但是我们的进程数量却是上百了,就算我们啥也不打开光打开电脑就有几十个进程了,远远多于我们的cpu内核数量,那我们我们怎么能让这么多的进程一起工作呢?

这就需要我们的进程调度了,就拿我们单核的cpu举例,虽然我们的进程有很多,我们可以让他们排队来执行,让a进程执行一会,然后再去让b进程执行一会。

进程的优先级

既然大家排队那么肯定就有插队的人,哪些人排在前面哪些人排在后面,每个进程都有相应的优先级。优先级高的优先执行。只有高优先级的进程不运行时,才调度低优先级进程运行

进程的状态

就绪状态: 即线程可以随时到CPU上面去执行。
阻塞状态:进程暂时不能到CPU上面去执行。

进程的上下文

当一个进程被调出CPU的时候,CPU会将当前的数据写回内存当中。当这个进程重新到CPU执行的时候,会将内存中的数据读到CPU的寄存器当中,类似于我们的存档和读档。

进程的记账信息

前面说到进程的优先级优先级低的排在后面,那就有可能一直等,前面一直有大哥,那么这个进程一直就执行不到,这个时候我们的操作系统会记录时间,有的进程长时间没有被执行就会通过调度让其反插队,然后执行它。

进程的独立性

我们知道我们一个cpu(单核)可以通过进程的调度来执行多个进程,这个时候万一我们的其中一个进程发生了故障该怎么办,是不是我们其它所有的进程都要跟着一起故障呢?

当然不是,我们的内存是分割成多个区域的我们每个区域相当于放一个进程,一个进程坏了不影响其它的进程。

进程之间如何通信

如上所述,进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备隔离性。

但是我们不同的进程之间可能需要一定的交互,也就是进程之间的通信,一般的处理方式有下面几种:

1. 管道
2. 共享内存
3. 文件
4. 网络
5. 信号量
6. 信号
像linux是利用共享内存来处理的,我们划分一块公共的区域,然后需要交互我们就到公共的区域进行交流。

猜你喜欢

转载自blog.csdn.net/m0_56911284/article/details/128314877