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+等待时间/处理时间
多级反馈队列调度算法:设置多个就绪队列1、2、3...,优先级递减,时间片递增。只有等到优先级更高的队列为空时才会调度当前队列中的进程。如果进程用完了当前队列的时间片还未执行完,则会被移到下一队列。
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.死锁定理
如果资源分配图能够完全简化,则没有死锁,否则,死锁