内容会持续更新,有错误的地方欢迎指正,谢谢!
内存管理
问题
1、什么是局部性原理?
- 时间上的局部性:最近被访问的页在不久的将来还会被访问,例如:循环语句;
- 空间上的局部性:内存中被访问的页周围的页也很可能被访问,例如:使用数组。
2、什么是虚拟内存?
1).内存的发展历程(了解)
- 没有内存抽象(单进程,除去操作系统所用的内存之外,全部给用户的一个程序使用)
- 有内存抽象(多进程,进程独立的地址空间,交换技术(内存大小不可能容纳下所有并发执行的进程))
- 连续内存分配(固定大小分区,可变分区(首次适应(空闲区表按地址递增排),最佳适应(空闲区表按大小递增排),最差适应(空闲区表按大小递减排)),碎片)
- 不连续内存分配(分页、分段、段页式)
2).虚拟内存——内存管理的核心
虚拟内存是将硬盘的一部分作为内存(又叫主存)来使用。在程序装入时,可将程序的一部分装入内存,就可启动程序执行;在程序执行过程中,当所访需要的信息不在内存时,就将这部分从虚拟内存调入内存,然后继续执行程序;最后,将内存中暂时不用的信息换出到虚拟内存。
3、内存管理有哪几种方式
页式管理、段式和段页式管理。
4、说说页式存储管理实现虚拟内存的原理?
是实现虚拟内存的一种常用方式(还有段式、段页式)。需要页表、地址映射、缺页中断机制。
先来了解一些名词:
1.页(又叫页面):将进程分为等大的小片,这些小片就是页。一个页的大小一般为4KB。
2.页框(又叫物理块号):将内存分为等大的小片,这些小片就是页框。
3.页号:页的编号;页框号:页框的编号。
4.页表:一个进程就对应一个页表(如下表),用于记录页号和页框号等对应的信息 以 显示一个页和一个页框的对应的关系。页表放在Cache(快速缓冲区Cache位于主存和CPU之间,作用是解决主存和CPU速率匹配问题)中就叫快表;放在内存中就叫慢表。
页号 | 页框号 | 中断位 | 辅存地址 |
---|---|---|---|
1 | |||
0 |
5.地址映射:地址映射时优先访问快表。若在快表中找到所需数据的页号,则“命中”,也就是所需的页在内存里的;若没有在快表中找到,则访问慢表同时更新快表。
6.缺页中断:经常发生,缺页中断就是要访问的页不在内存,需要操作系统将其调入内存后再进行访问,并更新页表中该页对应的页框号以及修改中断位为0。
页式存储管理的基本思想:在进程执行前,仅装入当前执行所需的页;在执行时,调入要访问但又不在内存的页(即缺页中断);当内存空间已满,而又需要装入新的页时,则根据合理的页面调度策略适当调出某个页,以便腾出空间而装入新的页。
5、介绍下常见的页面调度策略(又叫淘汰策略,又叫Cache替换算法)?
- FIFO先进先出算法:淘汰最先进来的;
- LRU最久未使用算法:淘汰距离上次使用时间最长的;
- LFU(Least frequently use)最不经常使用算法:淘汰使用次数最少的(用计数器对每页进行计数);
- OPT最优置换算法:淘汰将来不再需要或在最遥远的将来才会使用的页。
6、什么是页面颠簸(又叫页面抖动)?
颠簸本质上是指频繁的页调度行为。页面在内存和辅存间频繁交换的现象。会导致整个系统的效率急剧下降,这种现象称为颠簸(抖动)。
内存颠簸的解决策略包括:
- 如果是因为页面替换策略失误,可以修改替换算法来解决这个问题;
- 如果是因为进程太多,无法同时将所有频繁访问的页面调入内存,则要降低进程的数量;
- 否则,增加物理内存容量。
7、分页和分段有什么区别?
两者的区别:
- 目的不同:分页是信息的物理单位,由于系统管理的需要而不是用户的需要;分段(如下图)是信息的逻辑单位,目的是为了能更好地满足用户的需要;
- 大小不同:页的大小固定且由系统决定,而段的长度可变,由其所完成的功能来决定长度;
- 地址空间不同: 段向用户提供二维地址空间(段号+偏移);页向用户提供一维地址空间;
- 信息共享:段便于存储保护和信息的共享,页的存储保护和信息的共享受到限制;
内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段可以改变段大小来消除内碎片),但段会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。
8、Windows内存管理的方式(页式、段式、段页式)
页式能有效地提高内存的利用率,而段式系统能反映程序的逻辑结构,便于段的共享与保护。将分页与分段两种存储方式结合起来,就形成了段页式存储管理方式。
在段页式存储管理系统中,作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,每个进程设置一个段表;再将每段分成若干个大小相等的页,每个段有自己的页表。段页式调度综合了段式和页式的优点,大型通用计算机系统多数采用段页式调度。
PS:Linux只用了页式虚拟存储管理的方式。
9、段页式管理每取一数据,要访问()次内存。
3次
在段页式存储管理方式中,取一次数据:首先要从内存中查找段表;再查找该段对应的页表;最后通过得到的物理地址访问内存获得数据。
参考
【1】操作系统面试问题集锦
http://blog.csdn.net/justloveyou_/article/details/78304294
【2】操作系统基础知识梳理
https://www.nowcoder.com/discuss/62723