操作系统(四)

操作系统引入进程的目的是为了描述和实现多个程序的并发执行,以改善资源利用率及提高系统的吞吐量


引入线程是为了减少程序并发执行时系统所付出的额外开销,使操作系统具有很好的并发性。


进程的两个基本属性:

进程是拥有资源的独立单位

进程同时是一个可以独立调度的基本单位。


既能提高进程并发度,又能降低系统的额外开销。实现:将进程的资源申请和调度属性分开。把进程作为资源的申请和拥有这,但是不作为调度的基本单位。

线程是进程中的一个实体,是独立调度和分派的基本单位。

线程自身基本上不拥有系统资源,只拥有少许运行中比不可少的私有资源。线程有】可以与同属一个进程的其他线程共享进程的全部资源。

进程中所有的线程共享该进程的状态。

线程具有三种基本状态:就绪、执行、阻塞。

一般不具有挂起状态。


一个进程可以创建和撤销多个线程,统一进程中的多线程可以并发执行。

对线程的操作包括:

派生:当系统创建一个进程时,同时也为该进程派生一个线程,同一进程中的线程可以派生其他线程。

阻塞:当线程需要等待某件事时,它将被阻塞。释放处理机执行线程。

解除阻塞:当线程的阻塞时间发生,其状态转换为就绪,并插入到就绪队列。等待调度执行。

结束:当线程执行完毕,释放其私有资源。

线程的类型

用户线程:

内核级线程


多个进程常常需要共同修改某些共享资源、表格文件数据等,协同完成一些功能。

必须确保他们对共享变量的修改是正确的,保证数据的完整性。

共享协作同样涉及到互斥、死锁和饥饿问题。但更强调对数据的写操作必须互斥地进行。


并发控制——通信协作:当进程进行合作时,各个进程之间需要建立连接,进程同行需要同步和协调,进程通信的方式很多,包括消息传递,管道,共享存储区等。

通过消息传递实现进程通信时,由于没有共享资源,故无需互斥,但仍可能出现死锁和饥饿。


互斥与同步的解决策略

软件方法:由进程自己通过执行相应的程序指令,实现与别的进程的同步与互斥


硬件方法:通过屏蔽中断或采用专门的机器指令控制同步方法。

屏蔽中断:系统将无法响应任何外部请求,仅仅对单处理机有效,对多处理机无效。

专用机器指令:机器指令在一个指令周期执行,不会受到其他指令的中断。


信号量方法;

信号量方法能实现进程的互斥与同步,而不必忙等。

两个或多个进程可以通过传递信号进行合作,可以迫使进程在某个位置暂时停止执行,直到它收到UI个可以“向前推进”的信号,(被唤醒)。将实现信号灯作用的变量称为信号量,常定义为记录型变量s,其中一个域为整型,另一个域为队列,其元素为等待该信号量的阻塞进程(FIFO)

定义对信号量的两个原子操作:

wait(s)和signal(s)

信号量分为:互斥信号量和资源信号量。

互斥信号量用于申请或释放资源的使用权,常初始化为1.资源信号量用于申请或规范资源,可以初始化为大于1的正整数,标识系统中某类资源的可用个数。

wait操作用于申请资源(使用权),进程执行wait原语时,可能会阻塞自己。signal操作作用于释放资源(归还资源),进程执行signal原语时,有责任唤醒某个阻塞进程。


生产者与消费者模式

代表一类具有相同属性的进程,共享一个大小固定的缓冲区,其中,一个或多个生产者生产数据,并将生产的数据存入缓冲区,并有一个消费者从缓冲区中取数据,

生产者和消费者互斥进入缓冲区,某时刻只允许一个实体访问缓冲区。生产者必须互斥消费者和其他生产者。生产者不能向满缓冲区写数据,消费者不能向空缓冲取数据。

即生产者和消费者必须同步。


读者与写者模式

允许多个读者可以同时读数据,不允许多个写着进程同时写数据,即只能互斥写数据。若有写着进程正在写数据,则不允许读者进程度数据。

该方法称为“读者优先”,一旦有读者正在读数据,允许多个读者同时进入读数据,只有当全部读者退出,才允许写着进入写数据。

管程方法

管程是一种在程序设计级控制进程互斥与同步的机制,具有信号量的功能,且更容易使用和控制。利用管程可以锁定任何对象,尤其是链表型数据结构,可以锁定整个链表,或链表中的某个元素。


消息传递方法

进程之间的通信内容通常包含两种内型:控制信息和大批量信息。

低级通信:进程之间交换控制信息的过程

高级信息:进程之间交换批量数据的过程。

进程之间的同步与互斥是一种低级通信。用来控制进程执行速度。

常用的线程通信机制

基于共享存储区的方式:生产者、消费者通过共享缓冲区实现数据传递。属于基于共享存储区通信。不需要数据移动,一般用于本地通信。

通过程序设计来实现。

由操作系统在内存中划分出一块区域作为共享存储区,进程在通信前向系统分出一块区域作为共享存储区。进程在通信前向系统申请共享存储区中的一个分区。

消息传递模式

阻塞发送,阻塞接受:进程间的紧密同步;

不阻塞发送,阻塞接受:常用于服务进程为其他进程提供服务。

不阻塞发送,不阻塞接受。


邮箱机制

当第一个希望进入临界区的进程执行receive语句时,进入临界区执行,这时邮箱变为空,即没有消息,其后执行receive语句希望进入临界区的进程被阻塞。

当进入临界区的进程执行完临界区的代码,退出临界区时,执行send语句,将这条空消息归还给邮箱,并唤醒一个阻塞进程,使其取走这条消息,进入临界区执行。


死锁:

进程的并发控制不仅要控制若干线程的同步与互斥,确保进程之间正常通信,还需要解决进程之间的死锁。

多个进程因为竞争资源,或自行时推荐的顺序不当,或相互通信而永久阻塞时,如果没有外力,这种现象将永久保存下去。

系统中的资源大体可分为:可重用资源(某一时刻仅允许被一个进程使用的。不能被进程消耗的,释放以后还可以被其他进程使用的资源,如处理机,I/O通道)和可消耗资源(可消耗资源,指可以创造(生产)和撤销(消耗)的资源,其数量不限,如中断,洗好,消息)。两种都可能产生死锁


死锁产生的原因;

1、互斥:竞争的资源一次只能被一个进程使用

2、占用且等待:当一个进程占有一些资源,同时又申请新的资源。如果新资源申请失败。进程将占有资源且阻塞等待。

3、非剥夺:进程已占有资源不能被其他资源强行剥夺

4、循环等待:在系统中存在一个由若干个进程形成的环形请求链。

系统的两个状态:安全状态和不安全状态。是指系统能按照某种进程顺序,分别为这n个进程分配其所需要的资源,直至最大需求。使得每个进程都能顺利完成。

若系统不存在这样的一个安全序列,则程系统处理不安全状态。


银行间算法:

银行家算法用于银行发放一笔贷款前,预测该笔贷款是否会引起银行资金周转问题。

可用资源向量Avalilable,是一个具有m个元素的数组,其中每个元素代表一类可利用的资源的数目,其初始值为系统中该类资源的最大可用数目,其值将随着该类资源的分配和回收而动态改


哲学家进餐问题


猜你喜欢

转载自blog.csdn.net/xhjj520/article/details/79784787
今日推荐