原文地址:网络和操作系统面试相关内容~(五)
1、分页和分段有什么区别?
-
分页对程序是透明的,分段就得程序显式划分每个段。
-
分页的地址空间是一维的,分段是二维的。
-
页的大小不可变,段的大小可动态改变。
-
分页主要用于实现虚拟内存,从而获得更大的地址空间,分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间且有助于共享和保护。
2、什么是交换空间?
操作系统将物理内存(physical RAM)分为一块一块的小内存,每块内存被称为页(page),当内存资源不足时,Linux将某些页的内容转移到硬盘上的一段空间中来释放内存空间,硬盘上的这段空间就叫做交换空间(swap space),此过程称为交换。
物理内存和交换空间的总容量就是虚拟内存的可用容量。
3、哪些页可被交换?
-
物理内存不足时,一些不常用的页可交换出去,给系统腾出空间。
-
程序启动时很多内存页被用来初始化,之后便不再需要,这些页可交换出去。
4、页面替换的算法?
在程序运行过程中,如果要访问的页面不在内存中,就会发生缺页中断,从而将该页调入内存中,此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘交换区来腾出空间,用到的算法如下:
-
最佳算法:所选的将被换出的页面将是最长时间内不被访问的,通常可保证获得最低的缺页率,这是理论上的算法,因为无法知道一个页面多长时间不再被访问。
-
先进先出:选择换出的页面是最先进入的页面,该算法可能会将经常被访问的页面交换出去,从而会提高缺页率。
-
LRU:虽无法知道将要使用的页面的情况,但可知道过去使用的页面的情况,LRU将最近最久未使用的页面换出,当第一个页面被访问的时候,将此页面移动到链表表头,如此就可保证链表表尾的页面是最近最久未访问的,每次访问都需更新链表,所以以此方式实现LRU的代价很高。
-
时钟算法:使用环形链表将页面连接起来,再使用一个指针指向最老的页面,它将整个环形链表的每一个页面做一个标记,如标记为0,则暂时不进行替换,之后时钟算法遍历整个环,遇到标记为1的就替换,否则就将标记为0的标记为1。
5、缓冲区溢出的危害?
缓冲区溢出指的是计算机向缓冲区填充数据时,超出了缓冲区本身的容量,溢出的数据覆盖到了合法的数据上的情况,造成此情况发生的最主要的原因还是在程序中没有仔细的去检查用户输入,缓存区溢出的危害如下:
-
程序崩溃,导致拒绝额外服务。
-
跳转并执行一段恶意代码。
至此,本次分享就结束了,后期会慢慢补充的。
以上仅为个人观点,不一定准确,能帮到各位那是最好的。
好啦,到这里本文就结束了,喜欢的话就来个三连击吧。
扫码关注公众号,获取更多优质内容。