进程管理

1. 进程间通信(InterProcess Communication,IPC)

P,V操作实现的是进程之间的低级通讯,是低级通讯原语,它只能传递简单的信息,不能传递交换大量信息。
因此,引入进程之间的高级通讯方式:

进程通信的类型:

a.共享存储区(Shared Memory)

相互通信的进程间设有公共的内存区,每个进程可以向公共区进行读写操作,以此来实现进程间的信息交换。

b.消息传递(Message passing)

源进程发送消息,目的进程接收消息(消息:一组数据)。
*消息队列(message Queue)或消息缓冲
----发送者发消息到一个消息队列中;接收者从相应的消息队列取消息。消息队列存储在系统的公用缓冲区中。
----消息的发送/接收原句(Send/Receive):
Send(QID qid,MSG msg) //qid是队列ID,msg是消息
**阻塞:若消息队列满,等待。
**非阻塞:若消息队列满,立即返回。
Receive(QID qid,msg msg)
**阻塞:若消息队列满,等待。即程序必须接收到消息才能继续执行。
**非阻塞:若消息队列满,立即返回—程序异步处理。

Send/Receive的实现:
设置信号量:
mutex:互斥对消息队列的访问,初始值为1
sm:消息队列中的消息个数,初始值为0
//非阻塞的Send
void Send(QID qid,MSG msg){
	向系统申请一个缓冲区b;
	将pMsg中的消息复制到b中;
	p(&mutex);
	将消息缓冲区b挂到qid对应的消息队列中;
	V(&mutex);
	V(&sm);	//消息个数加一

}
//阻塞的Receive
void Receive(QID qid,msg msg){
	p(&sm);	//消息个数减一
	p(&mutex);
	从qid对应的消息队列中摘下第一个消息;
	V(&mutex);
	将消息复制到pMsg中;
	释放消息缓冲区;	
	}
	
**P、V操作也可以不在同一原语中出现**

*邮箱(mail)
----发送者发消息到邮箱;接收者从邮箱取消息。

c.管道(pipe)

首创于Unix。用于连接一个读进程、一个写进程,以实现它们之间通信的共享文件,称为pipe文件。
管道分为:
有名管道(有名字的管道,管道实际上是文件,知道了管道名就都可访问);
无名管道(没有名字的管道,只有在同一地址空间才可以通过IP使用)。

2.线程(Thread)

a.线程是什么 && 引入线程的理由

进程: 程序的一次执行(程序执行的1个实例),每个进程都有自己的地址空间。
引入进程的理由:多任务的需要。在内存中同时有多个可执行的进程,以提高效率(特别是CPU的利用率)
因此,需要对进程进行管理,以避免冲突:借助于PCB(Process Control Block,进程控制块),记录进程的描述和控制信息、上下文状态。
线程: 进程的1条执行路径,1个进程可以有多个线程,但其中至少一个主线程。
一个进程内的多个线程在同一地址空间内(资源共享)。每个线程都有自己的线程控制块TCB(Tread Control Block),包含自己的堆栈和状态信息。TCB比PCB小得多。
引进线程的理由:性能: 将一个多任务应用实现为单进程、多线程可能比实现为多进程的效率更高,因为创建进程比创建线程慢。
程序设计资源共享更容易处理。因为一个进程内的多个线程可以共享进程的资源,便于任务之间的通信。

b.线程的实现机制

两种方式:用户级线程(User Level Thread)、核心级线程(Kernel Level Thread)
用户级线程: 由在用户空间执行的线程库来实现,OS对此一无所知。
资源分配的实体是进程。OS分配cpu时间(调度)的基本单位也是进程
线程的调度只进行线程上下文的切换,而且是在用户态下。
----线程库:提供线程的创建、撤销、上下文切换、通信、调度等功能。
核心级线程:
OS内核提供对线程的支持:系统调用API(程序接口)进行线程创建、撤销等
资源分配的实体是进程。OS分配CPU时间(调度)的基本单位是线程
线程的调度在核心态下。
比较:
*同一进程内的多个线程是否可以在多个处理机上并行执行?用户级线程:不能;核心级线程:可以
*同一进程内的线程切换性能?用户级线程:性能高,无需陷入内核;核心级线程:性能低,需要陷入内核
----内核:是一个操作系统的核心
*用户级线程只要有线程库的支持,即可运行在任何OS上。

c.一个多任务问题的实现方式

单进程、单线程:实现复杂,需要自己实现多个任务的调度
多进程、单线程:多个任务在不同的地址空间,不会相互干扰,不能共享全局变量。
单进程、多线程:多个任务处在同一地址空间,可共享全局变量,但容易互相干扰
多进程、多线程:结合多进程和多线程的优点,关系密切的任务作为同一进程的多个线程,否则作为不同的进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值