线程进程区别
- 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位。
- 线程是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
- 一个进程可以有多个线程,一个线程可以创建和撤销另一个线程,多个线程也可以并发执行
进程的通信方式
主要分为:管道、系统IPC(包括消息队列、信号量、共享存储)、SOCKET
线程同步的方式有哪些?
- 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
- 信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
- 事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。
作业调度的算法
先来先服务算法(FSFS)
最简单的调度算法,既可用于作业调度也可用于进程调度,系统按照作业到达的先后顺序进行调度,或者是优先考虑在系统中等待时间最长的作业
短作业优先调度算法(SJF)
实际情况短作业占有比例很大,为了使他们比长作业优先执行,而产生了短作业优先的调度算法 ,作业越短优先级越高,
缺点:是必须知道作业的运行时间,对长作业不利,人机无法实现交互,未完全考虑作业的紧迫程度
优先级调度算法(PSA)
优先级:对于先来先服务算法,作业的等待时间就是他的优先级,等待时间越长优先级越高,对于短作业优先级作业的长短就是他的优先级。在优先级算法中,基于作业的紧迫程度。
高响应比优先调度算法(HRRN)
在FSFS中只是考虑作业的等待时间而忽略作业的运行时间,SJF算法正好相反,高响应比算法既考虑作业的等待时间有考虑作业的运行时间,
优先权 = (等待时间+要求服务时间)/要求服务时间
由于等待时间与服务时间之和就是作业的相应时间,顾优先级相当于响应比:Rp
Rp = (等待时间+要求服务时间)/要求服务时间 = 响应时间/要求服务时间
死锁
什么是死锁
死锁定义: 在两个或多个并发进程中,如果每个进程持有某种资源而又都等待别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗地讲,就是两个或多个进程被无限期地阻塞、相互等待的一种状态。
死锁产生的条件
- 互斥条件 – 一个资源一次只能被一个进程使用
- 请求保持条件 – 一个进程因请求资源而阻塞时,对已经获得资源保持不放
- 不可抢占条件 – 进程已获得的资源在未使用完之前不能强行剥夺
- 循环等待条件 – 若干进程之间形成一种头尾相接的循环等待资源的关系
怎样避免死锁
- 破坏“请求和保持”条件:规定所有进程在开始运行之前,都必须一次性的申请其在整个运行过程所需要的全部资源。
- 优点:简单,安全。
- 缺点:资源严重浪费,恶化了系统的利用率;
- 破坏“不可抢占”条件:进程逐个的提出资源请求,当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源,待以后需要时再重新申请。
缺点:实现复杂,代价大,反复地申请和释放资源,而使进程的执行无限的推迟、延长了进程的周转时间增加系统开销、降低系统吞吐量。 - 破坏“循环等待”条件:将所有的资源按类型进行线性排队,并赋予不同的序号。所有进程请求资源必须按照资源递增的次序提出,防止出现环路。
缺点:
- 序号必须相对稳定,限制了新设备类型的增加
- 作业(进程)使用资源顺序和系统规定的顺序不同而造成资源的浪费
- 限制了用户编程