进程

为什么要引入进程:

程序并发执行的时候有以下特征:

.间断性

程序在并发执行时,由于它们共享资源或为完成同一项任务而互相合作,使在并发程序之间形成了相互制约的关系.相互制约将导致并发程序具有"执行-暂停-执行"这种间断性活动规律.

.失去封闭性

程序在并发执行时,多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,导致程序的运行已失去了封闭性.

.不可再现性

程序在并发执行时,由于失去了封闭性,也将导致失去结果的可再现性.即程序经过多次运行,虽然各次的环境和初始条件相同,但得到的结果却不同.

 

由于程序在并发执行时,可能会造成执行结果的不可再现,所以用"程序"这个概念已经无法描述程序的并发执行,所以必须引入新的概念--------进程来描述程序的并发执行,并要对进程进行必要的管理,以确保进程在并发执行时结果可以再现.

 

进程定义:可并发执行的程序在一个数据集合上的运行过程.

 

 

进程和程序的差别

1.进程是一个动态的概念

进程是程序的一次执行过程,是动态概念.

程序是一组有序的指令集合,是静态概念.

2.不同的进程可以执行同一个程序

区别进程的条件:所执行的程序的数据集合

两个进程即使执行在相同的程序上,只要他们运行在不同的数据集合上,他们也是两个进程.例如多个用户同时调用同一个编译程序编译他们编写的C语言源程序,由于编译程序运行在不同数据集合,于是产生了一个个不同的进程

3.每个进程都有自己的生命周期

当操作系统要完成某任务时,它会创建一个进程.当进程完成任务之后,系统会撤销这个进程.回收它所占用的资源.从创建到撤销的时间就是进程的生命期.

 

4.进程之间存在并发性:在一个系统中.会存在多个进程,他们轮流占用CPU各种资源.

 

5.进程之前会相互制约:进程湿系统中资源分配和运行调度的单位,在对资源的 共享和竞争中,必然相互制约,影响各自向前推进的速度

 

6.进程可以创建子进程,而程序不能创建子程序

 

7.从结构上将,每个进程都有程序,数据和一个进程控制块(PCB)组成.

 

 

 

 

进程具有如下特征:

动态性 : 是进程的最基本特征,它时程序执行过程,它时有一定的生命期.它由创建而产生 由调度而执行 因得不到资源而暂停,并由撤销而死亡.而程序是静态的,它时存放在介质上有自足有序指令的集合,无运动的含义.

 

并发性:并发性是进程的重要特征.并发性指多个进程实体存于内存中,能在一段时间内同时运行.而程序是不能并发执行.

 

独立性:进程是一个能独立运行的基本单位,即是一个独立获得资源和独立调度的单位,而程序不作为独立单位参加运行.

 

异步性:进程按照各自独立的不可预知的速度向前推进,即进程按异步方式进行,正是这一特征,导致程序执行的不可再现性

 

结构特征:从结果上,进程实体,由程序段,数据段和进程控制块三部分组成.

进程的三种基本状态:

 

进程的三个基本状态

 

 

 

 

 

运行态/执行态(Running):当一个进程在处理机上运行时,则称该进程处于运行状态。

就绪态(Ready):一个进程获得了除处理机外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。

阻塞态(Blocked):(又称挂起状态、等待状态):一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时仃止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。

三个基本状态之间可能转换和转换原因如下:

 

就绪态–>运行态:当处理机空闲时,进程调度程序必将处理机分配给一个处于就绪态的进程 ,该进程便由就绪态转换为运行态。

运行态–>阻塞态:处于运行态的进程在运行过程中需要等待某一事件发生后(例如因I/O请求等待I/O完成后),才能继续运行,则该进程放弃处理机,从运行态转换为阻塞态。

阻塞态–>就绪态:处于阻塞态的进程,若其等待的事件已经发生,于是进程由阻塞态转换为就绪态。

运行态–>就绪态:处于运行状态的进程在其运行过程中,因分给它的处理机时间片已用完,而不得不让出(被抢占)处理机,于是进程由运行态转换为就绪态。

而阻塞态–>运行态和就绪态–>阻塞态这二种状态转换不可能发生。

处于运行态进程:如系统有一个处理机,则在任何一时刻,最多只有一个进程处于运行态。

处于就绪态进程:一般处于就绪态的进程按照一定的算法(如先来的进程排在前面,或采用优先权高的进程排在前面)排成一个就绪队列RL。

处于阻塞态进程:处于阻塞态的进程排在阻塞队列中。由于等待事件原因不同,阻塞队列也按事件分成几个队列WLi。

 

 

 

进程的生命周期

 

创建状态:系统已为其分配了PCB,但进程所主存,即需资源尚未分配,进程还未进入主存,即创建工作尚未完成,进程还不能被调度运行.

 

就绪状态:进程已分配到CPU以外所有的必要资源,等待获得CPU.

 

执行状态:进程已获得CPU,程序正在执行

 

阻塞状态:正在执行的进程由于某时间而暂时无法继续执行,放弃处理机而自行阻塞.

 

终止状态:进程到达自然结束点或者因为意外而被终结,进入中止状态的进程不能再执行,但在操作系统中仍保存着一个记录,其中保存状态码和一些计时统计数据,供其他进程收集.

 

进程控制模块(PCB)

进程控制块的作用

由于进程控制块中记录进程存在和特性信息;PCB与进程同生死,创建一个进程就是为其建立一个PCB,当进程被撤消时,系统就回收它的PCB;OS对进程的控制要是根据PCB来进行,对进程管理也通过对PCB管理来实现,所以进程控制块是进程存在的唯一实体。

PCB的信息

进程标识符:它用于唯一地标识一个进程。它有外部标识符(由字母组成,供用户使用)和内部标识符(由整数组成,为方便系统管理而设置)二种。

进程调度信息:它包括进程状态(running、ready、blacked)、队列(就绪、阻塞队列)、队列指针,调度参数:进程优先级、进程已执行时间和已等待时间等。

处理机状态信息:它由处理机各种寄存器(通用寄存器、指令计数器、程序状态字PSW、用户栈指针等)的内容所组成,该类信息使进程被中断后重新执行时能恢复现场从断点处继续运行。

进程控制信息:它包括程序和数据的地址、I/O资源清单,保证进程正常运行的同步和通信机制等。

家族信息:它包括该进程的父、子进程标识符、进程的用户主等。

UNIX的PCB由Proc和user两个结构组成,proc常驻主存的系统区,是PCB中最基本和常用信息,而user可根据需要换进换出。

 

 

 

进程VS线程

如果说,在操作系统中引入进程的目的,是为了使多个程序能并发执行,以提高资源利用率和系统吞吐量

那么,在操作系统中再引入线程,则是为了减少程序在并发执行时所付出的时空开销,使得OS具有更好的并发性.

 

总结:

线程的运行状态与进程的相同

 

进程同步

 

1.进程同步的概念

在多道程序环境下,系统中各进程以不可预测的速度向前推进,进程的异步性会造成了结果的不可再现性.为防止这种现象,异步的进程间推进收到两种限制

 

.资源共享关系

想打印机这类资源只允许一个进程使用的资源称为临街资源.属于临界资源有打印机 磁带机等 ,软件在消息缓冲队列 变量 数组 缓冲区等.当然还有一类像磁盘等资源,它允许进程间贡献,即可交替使用,称之为共享资源.

.相互合作关系

在某些进程之间存在合作关系,例如程序的输入 计算 打印三个程序段作为三个进程并发执行,由于这三个进程间存在着相互合作的关系,即先输入再计算 最后再打印的关系 ,所以这三个进程并发执行时推进序列收到限制,要保证其合作关系正确,进程间这种关系成为同步关系

 

进程之间竞争资源也面临三个控制问题:

互斥:多个进程是能使用同一个资源

死锁:指多个进程互不相让,都得不到足够的资源.

饥饿:指一个进程一直得不到资源.

 

 

进程在并发执行时为了保证结果的可再现性,各进程执行序列必须加以限制以保证互斥地使用临界资源,相互合作完成任务.多个相关进程在执行次序上的协调称为进程同步.用于宝恒多个进程在执行功能次序上的协调关系的相应机制称为进程同步机制.所有进程同步机制应遵循下述四条准则:

.空闲让进

当无进程进入临界区时,相应的临界资源处于空闲状态,因而允许一个请求进入临界区的进程立即进入自己的临界区

.忙则等待

当已有进程进入自己的临界区时,即相应的临界资源正被访问,因而其他失去进入临界区的进程必须等待,以保证进程互斥地访问临界资源

.有限等待

对要求访问临界资源进程,应保证进程能在有限时间进入临界区,以免陷入"饥饿状态".

.让权等待

当进程不能进入自己的临界区,应立即释放处理机,以免进程陷入忙等

进程同步有以下几种方法:

    

进程同步的四种方法

1、临界区(Critical Section):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。

优点:保证在某一时刻只有一个线程能访问数据的简便办法

缺点:虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。

 

2、互斥量(Mutex):为协调共同对一个共享资源的单独访问而设计的。

互斥量跟临界区很相似,比临界区复杂,互斥对象只有一个,只有拥有互斥对象的线程才具有访问资源的权限。

优点:使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

缺点:①互斥量是可以命名的,也就是说它可以跨越进程使用,所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。

②通过互斥量可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,可以根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号量对象可以说是一种资源计数器。

 

3、信号量(Semaphore):为控制一个具有有限数量用户资源而设计。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。互斥量是信号量的一种特殊情况,当信号量的最大资源数=1就是互斥量了。

优点:适用于对Socket(套接字)程序中线程的同步。(例如,网络上的HTTP服务器要对同一时间内访问同一页面的用户数加以限制,只有不大于设定的最大用户数目的线程能够进行访问,而其他的访问企图则被挂起,只有在有用户退出对此页面的访问后才有可能进入。)

缺点:①信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点;

②信号量机制功能强大,但使用时对信号量的操作分散, 而且难以控制,读写和维护都很困难,加重了程序员的编码负担;

③核心操作P-V分散在各用户程序的代码中,不易控制和管理,一旦错误,后果严重,且不易发现和纠正。

 

4、事件(Event): 用来通知线程有一些事件已发生,从而启动后继任务的开始。

优点:事件对象通过通知操作的方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。

缺点:

 

总结:

①临界区不是内核对象,只能用于进程内部的线程同步,是用户方式的同步。互斥、信号量是内核对象可以用于不同进程之间的线程同步(跨进程同步)。
②互斥其实是信号量的一种特殊形式。互斥可以保证在某一时刻只有一个线程可以拥有临界资源。信号量可以保证在某一时刻有指定数目的线程可以拥有临界资源。
--------------------- 

原文:https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/78591330 

 

2.硬件技术实现进程同步

.提高临界区代码执行中断优先级:

用提高临界区中断优先级方法就可以屏蔽其他中断,保证了临界段的执行不被打断,从而实现了互斥.

 

.检测和设置(TS)硬件指令:

用来表示该临界区是否被使用使用的指令.

 

.自旋锁

有该临界区的锁才能执行,否则一直等待

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值