2.20 操作系统笔记

时钟置换算法

是FIFO和LRU的一个折中算法,FIFO是在链表中没有做任何处理,直接找到第一个,开销较小,缺页次数最大,时钟置换算法是开销中等,缺页次数中等,LRU是少的,但是实现起来开销比较大

工作机制:FIFO  顺序遍历,找到按时间呆在最久的那个

     LRU    链表排的是按上一次访问时间的排序,头是最近访问的,尾是离得最久的,然后找去插入进去,缺页的话找到最后一个被置换,然后放入表头

     Clock   一个循环链表,直接遍历,链表上打了标记,一个访问位,在缺页的时候如果当前访问位是1打0,然后到下一个找,找到0即为置换,标记1

在最坏的情况 三种算法效率一样,即每次都是没见过的

FIFO有delady现象,就是改大了内存存储页的空间,但是缺页次数还更多了

最不常用算法:使用访问次数做比较,缺点,如果一个访问次数很大了,后期就算不访问也不会被置换

全面置换算法

因为局部性置换算法不能很好的控制访存的差异,可能你这一段你加一页,你的中断会大幅度减少,有些段就弄几页就够了,是动态的

工作集和常驻集

工作集 是理想情况内存中存在的页

常驻集 是现实情况内存中存在的页

常驻集>=工作集  这个时候的中断较少

否则就是抖动问题,会发生很多中断,也就是进程里面分配的物理页不够,原因是因为运行进程越来越多,然后物理页减少

工作集置换算法:首先定窗口的大小,然后如果一个页过了窗口大小还没被访问就置换出去

缺页率置换算法:两个缺页中断中,内存中在这中间的没被访问就置换出去

进程

进程其实就是一个程序去对数据的一次动态执行,(进程由PCB   程序    数据三部分组成),进程空间内包含有自己的堆,代码区,数据,栈等,进程控制块是在内核中负责操作的

进程状态有 创建   就绪    运行    等待     结束五种状态

创建就是还没分配完资源时处于的状态

就绪就是分配完了资源,只要等待运行就可以了

运行就是正在运行的进程

等待就是IO设备的申请,系统的一些服务之类,这个时候进程是不能运行的,只能处于等待状态

结束就是销毁进程

其中有指向的有      创建->就绪         就绪->运行           运行到->就绪(时间片用完)      运行->等待(IO事件)        等待->就绪(等待的事件发生了)

为了节省内存空间,开了挂起状态,有就绪挂起和等待挂起,和就绪和等待的区别也就是位置是处于外存中,腾出空间给其他进程,普通到挂起的条件有可能是普通的优先级更高之类的

挂起到普通就是优先级比当前的低

线程

因为进程之间有隔离性,而且共享消息起来开销太大,所以又提出了线程的概念,线程就是为了实现并发执行

线程是在进程内部的,进程中含有多个线程,同一个进程的线程可以互相共享空间,也就是他们互相共享代码区,数据,堆这些资源,然后还有自身的栈和寄存器资源

线程提出之后,进程成了分配CPU资源的单位,线程成了调度的单位

线程的优点:

一个进程可以同时存在多个线程

各个线程之间可以并发执行

y各个线程可以共享资源

线程缺点:

一个线程崩溃可能导致进程内所有线程崩溃,原因线程之间共享资源

线程和进程的区别:

进程是资源分配单位,线程是CPU调度单位

进程含有完整的资源,线程只有寄存器和栈

线程的时间开销和空间开销比进程少(因为线程资源要求少,因为线程间资源共享,切换不需要内核通信)

用户线程:用户线程也就是在进程内用户自己进行了一些操作,在进程内存储线程TCB,但是内核是完全不知晓的

好处:不依赖内核,在用户空间实现线程由线程库函数维护,进程内的线程切换速度快(因为不牵扯内核,用户态)

坏处:如果线程堵塞,进程就堵塞      不支持抢占      线程分配的时间片太小

总结:坏处主要都基于内核不知道,好处页式基于内核不知道

内核线程:把TCB放入内核中控制,然后和进程产生映射关系,这样的话线程就和内核是一对一的关系,时间片   抢占什么的都不是问题

缺点:牵扯内核,开销较大

猜你喜欢

转载自www.cnblogs.com/Lis-/p/12334451.html