下面的内存管理模式中,会产生外零头的是(B)
A 页式
B 段式
C 请求页式
D 请求段式
操作系统在分配内存时,有时候会产生一些空闲但是无法被正常使用的内存区域,这些就是内存碎片,或者称为内存零头,这些内存零头一共分为两类:内零头和外零头。 内零头是指进程在向操作系统请求内存分配时,系统满足了进程所需要的内存需求后,还额外还多分了一些内存给该进程, 也就是说额外多出来的这部分内存归该进程所有,其他进程是无法访问的。 外零头是指内存中存在着一些空闲的内存区域, 这些内存区域虽然不归任何进程所有,但是因为内存区域太小,无法满足其他进程所申请的内存大小而形成的内存零头。 页式存储管理是以页为单位(页面的大小由系统确定,且大小是固定的)向进程分配内存的,例如:假设内存总共有100K,分为10页,每页大小为10K。现在进程A提出申请56K内存, 因为页式存储管理是以页为单位进程内存分配的,所以系统会向进程A提供6个页面,也就是60K的内存空间,那么在最后一页中进程只使用了6K,从而多出了4K的内存碎片,但是这4K的内存碎片系统已经分配给进程A了,其他进程是无法再访问这些内存区域的,这种内存碎片就是内零头。 段式存储管理是段(段的大小是程序逻辑确定,且大小不是固定的)为单位向进程进行内存分配的,进程申请多少内存,系统就给进程分配多少内存,这样就不会产生内零头,但是段式分配会产生外零头。 例如:假设内存总的大小为100K,现在进程A向系统申请60K的内存,系统在满足了进程A的内存申请要求后,还剩下40K的空闲内存区域;这时如果进程B向系统申请50K的内存区域,而系统只剩下了40K的内存区域,虽然这40K的内存区域不归任何进程所有,但是因为大小无法满足进程B的要求,所以也无法分配给进程B,这样就产生了外零头。请求段式存储管理是在段式存储管理的基础上增加了请求调段功能和段置换功能。
请求分页存储管理中,页面置换算法很多,但只有最佳置换算法能完全避免进程的抖动,因此目前应用最广。其他(如改进型CLOCK)算法虽然也能避免进程的抖动,但其效率一般很低。(B)
A 对 B错
在页面置换过程中的最糟糕的一种情形是,刚刚换出的页面马上又要换入主存,刚刚换入的页面马上就要换出主存,这种频繁的页面调度行为称为 抖动, 或 颠簸。
最佳置换算法所选择的淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证最低的缺页率。但是人们目前无法预知进程在内存的若干页面中哪个是未来最长时间不再被访问的,因而该算法无法实现。这样说其完全避免抖动就无从谈起了。
几种常用的页面置换算法: 1、先进先出置换算法(FIFO) 2、 最近最久未使用(LRU)算法 3、 Clock置换算法(LRU算法的近似实现) 4、 最少使用(LFU)置换算法 5、 工作集算法 6、 工作集时钟算法
7、老化算法(非常类似LRU的有效算法)
8、NRU(最近未使用)算法
9、第二次机会算法