进程管理

 

 

1.进程和线程区别

1资源:进程是操作系统分配和管理资源的单位,线程是CPU调度和管理的单位,是CPU调度的最小单元。它们拥有的资源也不相同

2地址空间:进程拥有独立的地址空间,而线程间共享地址空间

3开销:进程创建的开销比较大,线程创建的开销小

4包含:一个进程拥有多个线程,线程可以创建线程

 

2.进程的通信方式

1)无名管道( pipe ): 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

2)有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

3)信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

4)消息队列( messagequeue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5)信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

6)共享内存(shared memory ) : 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

7)套接字(socket ) : 套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同设备及其间的进程通信。

 

 3.线程间的通信方式

1)锁机制,互斥锁(排他,防止并发修改)、条件变量(以原子方式阻塞进程,直到满足条件为止,与互斥锁共用)、读写锁(多个线程同时读共享数据,写操作互斥);

2)信号量机制semaphore,无名信号量和命名信号量;

3)信号机制signal,计数器,控制共享资源的同步。

 

4.进程的5种状态及转换过程

新建,就绪,运行,阻塞,终止

 

5.进程的调度算法

先来先服务

最短作业优先

优先级调度

时间片

最高相应比优先:相应比=1+等待时间/处理时间

多级反馈队列调度算法:设置多个就绪队列123...,优先级递减,时间片递增。只有等到优先级更高的队列为空时才会调度当前队列中的进程。如果进程用完了当前队列的时间片还未执行完,则会被移到下一队列。

 

6.同步和互斥

同步是指说进程按照一定的先后顺序去执行。而互斥是指多个进程在同一时刻只能有一个进程进入临界区。

 同步机制的4个准则

1)空闲则进

2)忙则等待

3)有限等待:等待的时间有限制

4)让权等待:当进程不能进入临界区时,应释放处理机

 

7.进程同步

1)为什么需要进程同步?因为进程有时候会和其他进程共享一些资源,比如内存,数据库等。当多个进程同时读写一份共享资源的时候,可能会产生冲突,因此需要进程的同步,多个进程按顺序访问资源。

2)实现进程同步的方式

①软件实现:分单标志法(违反空闲让进),双标志法先检查(违反忙则等待),双标执法后检查(会产生饥饿),皮特森算法

②硬件实现:中断屏蔽法(进关,出开,可能一直关,就没办法更换进程,系统终止)和硬件指令法(testandset指令和swap指令)

③信号量:pv操作

④管程:解决信号量变成麻烦而提出来的,其组成部分是共享数据部分,对共享数据初始化,和对共享数据操作的函数。

 

8.死锁

1)概念:是指两个或者两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象。比如说a的获取资源顺序是1和2,而b的顺序是2和1。然后a先获取到1,b获取到2,a和b都在等待对方正在持有的资源,导致死循环。

2)死锁原因:有两个,一个是系统资源不足,一个是进程的推进顺序不当

3)产生死锁的必要条件

①互斥条件:资源互斥

②请求和保持条件

③不剥夺条件

④环路等待条件

4)处理死锁的基本方法

①预防死锁:破坏死锁的四个必要条件之一

②避免死锁:使用银行家算法

③检测死锁并且解除:检测死锁是采用资源分配法来确定是否死锁,而解除的方法有抢夺资源,撤进程等。

 

9.银行家算法

1)其有四种数据,分别为available(剩余可用资源),Max(最多需要多少),Allocation(已经分配),need(最大还需多少)

2)银行家算法步骤:

①检测need

②检测available

③试着分配,更改数额结构

④用安全性算法来检查此次分配是否会导致系统进入不安全状态。即检查当前剩余可用资源是否能满足某个进程的最大需求,如果可以,则把该进程加入安全序列,并且把该进程持有的资源全部回收。

 

 

10.什么是饥饿,与死锁的区别

饥饿是指长时间得不到运行,但其是在理论上还是有机会运行的

而死锁的产生是指进程间已经陷入死循环,如不进行死锁处理,就会无限等待

 

11.死锁定理

如果资源分配图能够完全简化,则没有死锁,否则,死锁

posted @ 2020-06-01 23:42  鹏达君  阅读(182)  评论(0编辑  收藏  举报