固定分区:用户内存空间划分为固定大小的分区,每个分区装入一道作业,问题:程序太大装不进去任何一个分区,程序小于固定分区大小时会造成内部碎片
可变分区:装入内存时,根据实际需要,动态为之分配内存,并使分区大小刚好适合进程需要
程序员希望用段,物理内存希望用页
最佳算法OPT:选择淘汰以后永不使用的页面,,或者最长时间内不再被访问的页面,理论上的算法,无法实现,用来评价其他算法
先进先出FIFO:淘汰最早进入内存的页面,会产生抖动现象,即分配的页数越多,缺页率越高
最近最久未使用算法LRU:淘汰最近长时间未使用的页面
时钟置换算法CLOCK
PCB通过链表的方式组织再一起,组成就绪队列和阻塞队列
除了链表的组织方式,还有索引的方式,将同一状态的进程组织再一个索引表中,索引表项指向相应的PCB,不同状态对应不同索引表
1.为什么使用线程
进程间通信并不方便
维护进程的开销较大,如创建进程时分配资源、建立PCB;终止进程时,回收资源、销毁PCB、进程切换时,保存当前进程的状态信息
2.什么时线程:CPU独立调度的最小单位
同一个进程内多个线程之间可以共享代码段、数据段、文件资源等等,但每个线程各自有有一套独立的寄存器和栈,这样确保线程的控制流是相对独立的
3.进程和线程的区别
1.进程是分配资源的最基本单位,线程是CPU独立调度的最小单位
2.进程拥有完整的资源,线程只独享寄存器和栈空间
3.线程和进程都具有三种状态(就绪、阻塞、执行)
4.线程能减少并发执行的时间和空间开销
线程的上下文切换
1.死锁产生的条件
资源互斥 + 持有并等待 + 不可剥夺 + 循环等待
2.死锁处理策略
死锁预防:
(1)破坏资源互斥条件:允许资源共享
(2)破坏不可剥夺条件:释放已经保持的所有资源,待以后需要再重新申请
(3)破坏持有并保持条件:允许进程只获得初期所需要的资源后,便可允许,运行过程中再逐步释放已分配给自己且已使用完毕的全部资源,才能请求新的资源
(4)破坏循环等待条件:采用顺序分配法,一个进程只有已经占有小编号的资源,才有资格申请更大的编号资源
死锁避免
每次分配资源的过程中,都要分析此次分配是否会带来死锁风险(银行家算法)
死锁检测
某时刻采用资源分配图检测死锁
死锁解除
挂起进程,撤销进程,回退进程