操作系统——进程的描述与控制

一:进程的描述

1、进程的定义

在这里插入图片描述
引入进程实体的概念后,可以把进程定义为:
进程是进程实体的运行过程,是系统进行资源分配调度的一个独立单位。

注:严格来说,进程实体和进程并不一样,进程实体是静态的,进程则是动态的。不过,除非题目专门考察二者区别,否则可以认为进程实体就是进程。因此我们也可以说"进程由程序段、数据段、PCB三部分组成"

2、进程控制块PCB

系统为了管理进程设置的一个专门的数据结构,存放了用于描述该进程情况和控制进程运行所需的全部信息

进程控制块PCB ( Process Control Block)是进程组成中最关键的部分,是系统对进程进行控制和管理的依据,是进程存在的唯一标志。当系统创建一个新进程就要为它创建一个PCB;当进程终止后,系统收回其PCB,该进程在系统中就不存在了。
进程与PCB是一一对应的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、进程的状态

在这里插入图片描述

二:进程控制

进程控制的主要任务是对进程生命周期进程控制,即要负责进程的创建、撤消以及实现进程的状态转换和进程通信等功能。这是系统的基本功能,由内核中相应的原语完成。

原语的特点:原子性、中断屏蔽性
在这里插入图片描述
在这里插入图片描述

三:进程同步

进程同步机制的主要任务,是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源,并能很好地相互合作,从而使程序的执行具有可再现性。

同步和互斥的区别
1、互斥:亦称间接制约关系。是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

2、同步:亦称直接制约关系。是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
在这里插入图片描述

1、信号量机制

信号量其实就是一个变量 (可以是一个整数,也可以是更复杂的记录型变量) ,可以用一个信号量来表示系统中某种资源的剩余数量(信号量的值如果小于0,说明此时有进程在等待这种资源),比如:系统中只有一台打印机,就可以设置一个初值为 1 的信号量。
在这里插入图片描述
在这里插入图片描述

2、信号量机制的应用

1、利用信号量实现进程互斥
假如两个进程 A 和 B 都需要某种临界资源,如何实现进程的互斥呢?

为使多个进程能互斥地访问某临界资源,只需为该资源设置一互斥信号量 mutex,并设其初值为1,然后将各进程访问该资源的临界区 CS 置于 wait(mutex) 和 signal(mutex) 操作之间即可。
在这里插入图片描述
2、利用信号量实现进程同步(前趋关系)
假如有两个并发执行的进程 P1 和 P2 。P1 中有语句 S1 ;P2中有语句S2。我们希望在S1执行后再执行S2。为实现这种前趋关系,只需使进程 P1 和 P2 共享一个公用信号量S,并赋予其初值为0,将 signal(S)操作放在语句 S1 后面,而在S2语句前面插入wait(S)操作,即

在进程P1中,用S1;signal(S);
在进程P2中,用wait(S);S2;

四:经典进程的同步问题

1、生产者-消费者问题

生产者、消费者共享一个初始为空、大小为n的缓冲区。

● 只有缓冲区没满时,生产者才能把产品放入缓冲区,缓冲区满时,生产者必须等待。
● 只有缓冲区不空时,消费者才能从中取出产品,缓冲区为空时,消费者必须等待。
在这里插入图片描述
在这里插入图片描述
操作系统总结–进程同步,互斥,信号量机制,生产者消费者:
https://blog.csdn.net/qq_42147969/article/details/117037918

五:进程通信

1、共享存储

在这里插入图片描述

2、管道通信

在这里插入图片描述

3、消息传递

在这里插入图片描述

六:线程的概念和多线程模型

在这里插入图片描述
可以把线程理解为"轻量级进程"。
线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)
引入线程后,进程只作为除CPU之外的系统资源的分配单元如打印机、内存地址空间等都是分配给进程的)。

进程和线程的关系:
(1) 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
(2) 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3) CPU分给线程,即真正在CPU上运行的是线程
在这里插入图片描述

在这里插入图片描述

### 操作系统进程线程的概念 #### 进程 (Process) 进程操作系统结构的基础,表示程序的一次执行过程。每个进程都有独立的代码和数据空间(指令、栈、堆),具有分配资源的功能单位。进程由文本区(即代码)、数据区以及用户堆栈组成,并且拥有自己的地址空间[^1]。 ```c // 创建新进程的例子 pid_t pid; pid = fork(); // Unix/Linux创建子进程的方式 if (pid < 0){ printf("error in fork!"); } else if(pid == 0){ printf("I am child process"); } else { wait(NULL); // 父进程等待子进程结束 } ``` #### 线程 (Thread) 线程有时被称为轻量级进程(Lightweight Process),同一进程内的多个线程共享该进程中大部分的数据和状态信息,如文件描述符、信号处理设置等;但是它们各自有自己的调用栈(call stack) 和寄存器集合(registers set)[^2]。 ```java class MyThread extends Thread{ public void run(){ System.out.println("This is a thread."); } } public class Main { public static void main(String[] args) { new MyThread().start(); } } ``` ### 进程线程的主要区别 - **定义不同** - 进程是一个具有一定独立功能的程序关于某个数据集上的一次运行活动,而线程则是进程的一个实体,是CPU调度和分派的基本单位[^3]。 - **开销方面** - 启动一个新的进程所需的时间较长,因为这涉及到加载新的环境并初始化所有的上下文。相比之下,启动一个新线程则要快得多,因为它只需要复制父线程的一些属性即可完成创建工作[^4]。 - **资源共享** - 不同进程之间无法直接访问对方的内存区域,如果需要交换数据,则必须通过特定机制实现跨进程通讯(IPC) 。然而,在同一个进程下的各个线程间可以直接读写彼此所在的全局变量或静态方法中的局部变量,因此更容易进行协作工作。 - **通信方式** - 对于多进程而言,通常采用消息队列(message queue), 套接字(socket pair) 或者管道(pipe)等方式来进行相互通信;而对于属于同一进程的不同线程来说,由于它们都处于相同的地址空间内,故可通过共享存储器(shared memory segment)来高效传递信息。 - **调度粒度** - 在现代操作系统里,实际被调度的对象往往是线程而非整个进程——尽管后者确实包含了前者所需的全部资源和支持条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小本科生debug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值