title:计算机组成原理
1.死锁产生的四个条件
1.互斥条件:一个资源同一时刻只能被一个进程拥有,别的线程只能等待
2.请求和保持连接:一个进程已经请求另一个资源,但又对新的资源发出请求,而该资源已经被占有,此时请求进程被阻塞,对自己的资源又保持不放
3.不可抢占:进程已经获得的资源在未使用完之前不能被抢占
4.循环等待:发生死锁时,必然存在一个进程-资源的循环连
1-1.产生死锁的原因
1.竞争资源
2.进程顺序推进不当
进程A和B互相等待对方的数据
1-2.避免死锁的算法
1.银行家算法
当进程首次申请资源时,需要测试该进程对资源的最大需求量,如果系统现有的资源可以满足它的最大需求量,就按当前的申请量分配,如果不能满足他的最大需求量,就推迟分配
2.安全序列
系统按某种进程推进顺序,为每个进程分配其所需要的资源,直至满足每个进程对资源的最大需求
1-3.解除死锁
1.资源剥夺
挂起某些西索的进程,并抢占他的资源,将进程资源分配给其他死锁进程
2.撤销进程
强制撤销部分进程,甚至全部死锁的进程并剥夺这些进程的资源
3.进程回退
让一个进程或多个进程回退到足以避免死锁的地步,进程回退时自愿释放资源而不是剥夺,要求系统保持进程的历史信息,设置还原点
1-4.缓冲区溢出以及危害
缓冲区移除是指当计算机向缓冲区内填充数据时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上
2.进程间通信方式
1.管道通信
管道是单向传输的,想实现双向传输,可以考虑两个管道拼接,管道属于一股脑的输入,两个进程,一个进程在写的时候另一个进程要等待,不适合频繁通信(以字节流的方式通信)(消息队列解决)
2.共享内存
在内存中申请一个独立的虚拟内存空间,不同进程通过这块虚拟的内存地址,多个线程可以进行读和写,可能会发生覆盖问题(信号量解决p,v操作)
3.消息传递
间接通信:发送方和接收方可以通过共享中间实体(邮箱)来实现
4.客户机服务器
套接字:非对称的通信方式,通信双方的进程运行在不同的主机环境下,被分配了一套套接字,一个属于接收进程,一个属于发送进程
3.为什么有了进程还要有线程
1.进程在同一时间只能做一件事
2.进程如果在执行的过程中被阻塞,那这个进程将被挂起,这时进程中的有些等待资源得不到执行
3.基于以上的缺点,操作系统引入了比进程粒度更小的线程,线程作为并发执行的基本单位,减少程序在并发执行时所付出的时间和空间开销
4.并发和并行
1.并发:不同进程在同一时间段内启动在同一个CPU中
2.并行:不同进程,被不同的CPU管理执行,两个进程不抢占CPU,可以在同意时间运行,这是并行
5.进程和线程相关问题
1.进程是资源分配的最小单位,线程是CPU调度的最小单位
2.线程是进程的一个实体,也叫做轻量级进程,也是CPU调度和分配的基本单位
3.创建或者撤销进程,系统都要为其分配或回收资源
4.不同进程的地址空间不同,同一个进程中的线程共享同一地址空间,一个进程中的线程在其他进程中是不可用的
5.进程间不会相互影响,而一个线程挂掉后可能会导致整个进程挂掉
6.多线程和多进程
1.多线程的优点
1.更加高效的共享内存。
2.较轻的上下文切换,因为不用切换地址空间
2.多进程的优点
1.各个进程有自己的内存空间,有更强的容错性
3.提升多线程的效率
1.多使用线程池
2.减少线程之间的同步和通信
3.避免频繁共享写的数据
7.进程的调度算法
1.先来先服务
2.时间片轮转
3.短作业优先
4.最短剩余时间优先
加了一个抢占机制,当新进程具有更短剩余时间,只要新线程一就绪,调度程序就可能抢占当前正在运行的进程
5.高响应比优先
综合了短作业优先,先来先服务和长作业
等的时间越长优先级越高,不会产生饿死的情况
6.优先级调度
每次从后备作业队列中选择优先级最高的一个或几个作业,将他们调入内存,分配必要的资源,创建进程并放入就绪队列