进程是操作系统中很重要和基础的,而且也是面试中的常考题。关于进程可以延申出很多问题。定义进程是程序的一次执行过程,是资源分配,接受调度的基本单位。进程由程序段,数据段,PCB三部分组成。所谓创建进程,实质上是创建进程中的PCB进程控制块PCB记录了操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统的记录型数据结构作用:1)进程的唯一标识2)能实现间断性运行方式3)提供进程管理所需要的信息4)提供进程调度所需要的信息5)实现与其他进程的同步与通信进程的五种状态创建状态,就绪状态,运行状态,阻塞状态,结束状态其中就绪状态和运行状态能相互转化,当进程为就绪态时,等待CPU分配时间片,得到时间片后就进入运行态。使用完时间片后,就进入就绪态阻塞状态是进程在运行状态时,需要等待某个资源而处于等待进程互斥在操作系统中,当某一进程正在访问某一存储区域时,就不允许其他进程进行读写或者修改该储存区的内容,进程之间的这种相互制约的关系称为进程互斥进程同步并发进程在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通信息称为进程同步也就是保证多个进程能有条不紊的运行进程同步的方式1)临界区对临界资源进程访问的那段代码叫做临界区为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查2)同步与互斥3)信号量信号量是一个整型变量,可以进行PV操作4)管程把控制的代码独立出来进程通信注意:进程通信和进程同步容易混淆,他们确实有一定的因果关系。进程同步:控制多个进程按一定顺序执行进程通信:进程间传输信息为了能够达到进程同步的目的,需要让进程进行通信,传输一些进程同步所需要的信息。通信方式:1)管道只支持半双工通信2)消息队列3)信号量4)共享存储5)套接字还有六种进程调度算法,也非常重要,这里我就不细讲了,和进程同步耦合性不是很强,笔者主要想讲解关于信号量的问题信号量机制信号量其实就是个计数器,简单一点的例子就是a进程访问临界资源,把信号量设置为0,然后b进程也想访问,发现信号量为0,无法访问。用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥,进程同步信号量机制实现进程互斥步骤:1)分析并发进程的关键活动,划定临界区2)设置互斥信号量mutex,初值为13)在临界区之前执行P4)在临界区之后执行Vmutex=1,标识两个进程皆未进入需要互斥的临界区mutex=0,标识有一个进程进入临界区运行,另外一个必须等待,挂入阻塞队列mutex=-1,表示有一个进程正在临界区运行,另外一个进程因等待而阻塞在信号量队列中,需要被当前已在临界区运行的进程退出时唤醒信号量机制实现进程同步步骤:1)分析什么地方需要实现同步关系2)设置同步信号量S,初始为03)在“前操作”之后执行V(S)4)在“后操作”之前执行P(S)下面的代码中,S就是同步信号量,若先执行到了V(S),则s++,正常执行P(S),保证了代码4在代码2之后执行若先执行P(S),s–之后表示没有可用资源,P操作会执行block原语,主动请求阻塞P(1) {    代码1;    代码2;     V(S);    代码3;}P(2) {     P(S)    代码4;    代码5;    代码6;}生产者-消费者问题系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品使用需求:生产者每生产一个产品,就消耗一个缓冲区,只有当缓冲区不满的时候才能放入消费者每消费一个产品,就消耗一个产品,只有当缓冲区不空的时候才能消费做法:因为缓冲区是临界资源,所以在访问的时候需要一个互斥信号量,实现互斥访问为了同步生产者和消费者的操作,需要记录缓冲区的剩余大小empty和产品的个数full。当缓冲区大小不为0时,生产者才能放入产品;当产品个数不为0时,消费者才能拿走产品。注:同步在前,互斥在后,防止死锁producer() {    while(1) {        生产一个产品;        P(empty);    //消耗一个空闲缓冲区        P(mutex);        把产品放入缓冲区;    //临界区        V(mutex);        V(full);     //增加一个产品    }}consumer() {     while(1) {         P(full);    //消耗一个产品         P(mutex);         从缓冲区取出一个产品;         V(mutex);         V(empty);    //增加一个空闲缓冲区         使用产品;    }}
点赞 0
评论 0
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务