目录
进程的定义
进程就是执行(进行中)的程序,先来说一下程序。
程序:程序就是一段实现了某些功能的指令序列,其实就是代码。它是静止地存放在磁盘上。
进程:将程序run(运行)起来就是进程了,一个进程就是一个程序的一次执行过程。
进程是是操作系统进行资源分配的最小单位。每启动一个进程,操作系统就会为它分配一块独立的内存空间,用于存储PCB、数据段、程序段等资源。每个进程占有一块独立的内存空间。
PCB、数据段、程序段一起构成了进程实体,我们把进程实体就称之为“进程”。所谓创建进程就是创建好进程实体中的PCB,而销毁进程也是先销毁PCB。
概念解释:
数据段:是进程在内存中的一部分。用来存储程序执行中所需要的数据。
程序段:是进程在内存中的一部分。用来存储进程实际执行的代码(机器指令)以及常量数据。程序段通常是只读的,为了防止程序指令或者常量数据被篡改。
PCB:是(Process Control Block)的缩写,翻译为进程控制块。每个进程都有自己唯一的PCB,用于操作系统来控制和管理进程。保存在内核中。
PCB中包含的信息包括但不限于以下内容:
-
进程标识符(Process ID):唯一标识一个进程的数字或字符串。
-
进程状态(Process State):表示进程当前的状态,如运行、就绪、阻塞等。
-
程序计数器(Program Counter):指向进程下一条将要执行的指令的地址。
-
寄存器(Registers):保存进程的寄存器状态,包括通用寄存器、指令指针寄存器等。
-
进程优先级(Priority):用于确定进程在多任务系统中的执行顺序。
-
进程拥有的资源(Resources):包括打开的文件、分配的内存、I/O设备等。
-
进程的父进程(Parent Process):标识该进程的创建者或父进程。
-
进程的子进程(Child Processes):标识由该进程创建的子进程。
进程结构体长这样:
进程与程序(面试题):
区别:
程序只是静止放置的代码,只占用磁盘空间。
进程虽然就是程序运行起来了,但是程序一旦运行以来就由操作系统管理,参与资源(cpu、内存等)的竞争,同时也要与其他进程通信协作。
联系:
进程不能脱离程序而虚设;
程序规定了进程要完成的动作。
进程的特征
-
动态性:进程是动态的产生、变化和销毁的。是进程最基本的特征。
-
并发性:基于CPU的提升,操作系统也支持了并发操作。内存中有多个进程实体,各个进程之间可以并发执行。
-
独立性:进程可以独立的运行,独立的获取资源,独立的接受调度的基本单位(进程是操作系统资源分配和调度的基本单位)。
-
异步性:在多个进程并发执行时,这些进程互不干扰。
-
结构性:进程是有PCB、数据段和程序段组成。
进程的状态
进程有五种状态:创建、就绪、运行、阻塞、终止。
当程序运行时,操作系统会创建这个进程,这时进程刚被创建处于创建状态;当该进程分配到资源具有可以运行的基本条件时,进程处于就绪状态;处于就绪状态的进程一旦分配到cpu的执行权,就开始运行处于运行态;进程运行时肯呢个会发生I/O等不需要cpu执行时,为了提高cpu利用率,操作系统会将进程分配为阻塞状态,让cpu去执行其他进程(并发)。进程的使命全部完成后,操作系统销毁进程,进程就处于终止态。
例外,在进程的就绪态和阻塞态中,操作系统为了观察和分析进程会将进程挂起,此时进程的状态称为对应的静止就绪和静止阻塞。
PS:进程状态的改变是通过原语实现的。
进程通信
共享存储
在共享存储系统中,相互通信的进程共享某些数据或者存储区,进程之间能通过这些空间进行通信。这块共享存储区由操作系统提供,并且映射到进程的虚拟地址空间中(内存管理的内容)。为了保证共享存储区的安全,需要进程互斥的访问,并且这个互斥是由通信进程自己实现的。
基于数据结构的共享:操作系统提供了一个特定的数据结构,该数据结构的内存比较小,进程使用该数据结构时,需要按定特定的格式进行存储和读取。这种方式传递的信息有限,比较慢,效率低,是一种低级通信方式。
基于存储区的共享:操作系统为进程分配了一块公共内存区域,用于进程通信,其数据的形式以及存放的位置是由进程控制的。这块存储区比较大,可以传递大量的数据,并且有进程控制,速度快,属于高级通信方式。
消息传递
消息传递是指进程之间不需要通过其他共享存储区和数据结构,而是以消息格式化的形式,将通信数据封装在消息中,通过原语来发送和接收。
直接通信:进程将消息发送至指定的接收进程。这是通过消息头中存储了消息的发送进程ID和接收进程ID。
间接通信:进程发送消息时,并没有指定接收进程,而是通过邮箱作为中间传播介质实现的。在这种方式中,进程发送的消息头中保存的是发送的邮箱编号,并且邮箱可以接受多个进程的消息,同时也允许多个进程在邮箱中获取信息。
如果说直接通信是私聊的话,那么间接通信就是群聊。 直接通信和间接通信都是高级通信方式。
管道通信
管道:是用于连接一个读进程和一个写进程以实现他们之间通信的一种文件,又名pipe文件。其实就是内存中的一块固定大小的缓冲区。该管道是一种单向管道,在同一时刻,一个进程写入数据,另一个进程可以读取数据,但不能反向读写。
-
由于管道是单向的,一条管道只能实现半双工通信,要想实现双工通信,则需要再申请一条管道作为反向读写的通道。
-
各进程要互斥访问管道(由操作系统实现)。
-
管道是一块固定大小的内存缓冲区,当管道被写满时,写进程会被阻塞,只有当读进程将管道中的数据取走后,写进程才会被唤醒。
-
同样的,当管道为空时,读进程会被阻塞,当写进程写入数据时,读进程被唤醒。
-
管道的数据一旦被读走,就会彻底消失。当多个进程同时读取数据时,可能会错乱。
两种解决方案: ①一个管道允许多个写进程,一个读进程.(2014年408真题高教社官方答案,适合考试) ②一个管道允许多个写进程和读进程,但度进程需要轮流读取.(Linux方案)