进程基础知识

本文介绍了进程的基本概念,包括进程控制块(PCB)的关键要素如PID、内存指针和文件描述符表,以及进程调度、虚拟地址空间和进程间通信的重要性。通过草原上的约会比喻,生动地阐述了进程状态、优先级和上下文的概念。
摘要由CSDN通过智能技术生成

一、什么是进程

先来了解何为进程。进程也叫做任务,可以理解为一个跑起来的程序。

上图中steam.exe叫做可执行文件(静态的),是一个存储在硬盘上的文件。当你双击这个.exe文件时,操作系统就会把这个文件中的核心数据加载到内存中。同时在系统中生成一个进程。进程就是操作系统分配资源的基本单位。

二、进程控制块(PCB Process Control Block)

在日常使用计算机时,同一时刻系统中的进程有很多。所以操作系统需要管理这些进程。管理涉及到两方面:描述和组织。

1、描述:详细的表示清楚,一个进程有哪些属性、信息。这些属性和信息是通过结构体来描述的。这个结构体就是进程控制块。

2、组织:通过一定的数据结构,把若干个用来描述的实体,给放到一起,进行增删查改。系统通常用双向链表把这些PCB给组织在一起。

PCB里的关键要素

1.pid 进程的身份标识

通过pid可以区分一个进程。

2.内存指针 描述进程持有的内存资源

一个可执行文件,双击后开始运行,操作系统把文件中的核心数据加载到内存中。其中核心数据主要包括要执行的指令和指令依赖的数据。这就意味着要创建进程,势必要给进程分配内存空间。而这个内存空间上有很多区域:指令,数据,运行状态...。所以内存指针就是告诉你那块内存是干啥用的。

3.文件描述符表 描述进程持有的文件资源

每执行一个进程,都会打开一些文件(存储在硬盘上的数据)。文件描述符就是记录当前进程都打开了哪些文件(打开之后就能对这些文件进行读写操作了)。

4-7的属性都与进程调度有关。这里先引入一些概念

进程调度:就是通过并行和并发的方式让计算机可以同时执行多个进程。

并行执行:多个cpu核心上独立运行多个进程

并发执行:一个cpu核心先运行进程1,再运行进程2,再运行进程3......。只要微观上切换的够快,宏观上就像三个进程同时运行一样。

为了解释下述属性,举个栗子先;

草原上,美羊~的追求者有三个:

A:喜羊~(帅羊)

B:懒羊~(富羊(吃那么多肯定很有米吧(´・ω・`)?))                                    

C:沸羊~(舔羊)

但这些追求羊中,没有羊同时符合三个条件。

所以,美羊~想了个办法,就是同时谈三个!

当然,这是个技术活,不能让他们三个知道对方的存在。所以同一时刻只能和一个羊约会。

这是美羊~安排的约会时间表--

4.进程状态

虽然美羊~做了时间表,但并不是每只羊都是随叫随到。因此,时间表会有所变化。

假设这一周A要外出拍电影,空出的两天就可以分给BC。

所以在这一周BC就能随叫随到(也就是就绪状态),而A不能随叫随到(也就是阻塞状态

回到cpu中:就绪状态的进程才能在cpu上执行,阻塞状态无法被调度。

5.进程优先级

从时间表可以看出,美羊~更喜欢B一点(毕竟有米)所以陪B的时间最多。

回到cpu中:系统调度的时候,会根据优先级给进程安排时间。

6.进程上下文

约会的时候总会有些约定好未来完成的事,但一周要同时约三个羊,所以美羊~结束一天的约会后要详细记录这些约定好的事,以防穿帮。

回到cpu中:

       进程在 CPU 上执行了一会之后,如果要切换给别的进程,就需要保存当前运行的中间结果(存档),下次再轮到他执行的时候,就恢复之前的中间结果(读档),继续往下执行。
       对于进程来说,上下文 就是 CPU 中的寄存器的值(寄存器的值就包含了运行的中间结果,需要把这些结果保存到 PCB的上下文信息中(内存))

7.进程记账信息

在三只羊中,最不喜欢的应该就是C了,但也不能完全不给C排时间,不然不舔了咋整

/(ㄒoㄒ)/~~

在cpu中同理。虽然有优先级,但还是不希望有进程完全进不了cpu。所以,进程记账信息的作用就是:每个进程在cpu上执行了多久,统计信息,起到辅助调度的效果,让进程调度的更加均衡,避免有进程完全捞不着cpu来运行。

有了上述几个属性的基础,就可以完成进程的调度了。

三、虚拟地址

操作系统会给每一个进程安排一些内存资源,如下图所示:

但这种方法会存在一个问题。如果出现极端情况,进程1中,出现了访问越界这种操作,也就是解引用(” * “,返回指针所指的对象的值)一个野指针(指向了无效的内存地址)。好比说你打着歪歪语音和兄弟们甜蜜双排,打团的时候莫名其妙游戏崩了,闪退,这种情况就很难受。所以,我们不能让进程1的指针越界操作影响到进程2。

解决此问题的办法就是让每一个进程都由各自的内存空间,也就是活动范围,不要让这些进程的活动范围重叠。这种操作就是设置虚拟地址空间,通过专门的设备MMU来完成虚拟地址到物理地址之间的映射。

此处MMU就可以正对地址来进行效验。在这两个进程中,只能访问0x0-0xFFFF这一段地址。如果是非法地址(进程访问了更大的内存空间),MMU映射的时候,就及时停止进程避免影响到其他进程。

四、进程间的通信

上面讲了进程间的隔离性。进程确实互不干扰了,但又引发了个新的问题-在一些需求场景,需要多个进程互相配合,但你又隔离了,咋整啊(;´д`)ゞ

这时候操作系统又引入了个机制:进程间的通信。就是找一个多个进程都能访问到的公共资源(可能是内存,文件,网卡(socket)......)基于这个公共资源来交换数据。


进程就讲到这里啦ヾ(•ω•`)o如果对你有帮助的话麻烦点赞关注一下吧啊(❤ ω ❤)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值