分段机制
分段机制以段的形式管理/分配物理内存。
1、段表的作用 ?地址翻译如何实现?
分段管理通过段表映射虚拟地址和物理地址。
分段机制下的虚拟内存由两部分组成:
- 段号:标识该虚拟地址属于整个虚拟地址空间中的哪一个段。
- 段内偏移量:相对于该段起始地址的偏移量
地址翻译过程:
- MMU解析得到虚拟地址段号
- 通过段号从段表中取出对应的段信息(段表项)
- 从段信息中获得段的起始位置,加上虚拟地址中的偏移量即为最终的物理地址
2、分段机制为何导致外部碎片?
多个进程关闭后,由于多个进程开始分配时的内存可能并不连续,所以无法将这些进程释放的内存分配给一个内存需求等于这些进程释放的内存总和的进程。
分页机制
分页机制将主存分为连续等长的物理页,应用程序的虚拟地址空间也被划分为连续等长的虚拟页。
可以实现虚拟页与物理页的映射,按照固定页大小分配物理地址,易于管理内存资源,有效避免分段机制中的外部碎片问题。
1、页表的作用及地址翻译过程?
分页管理通过页表映射虚拟地址和物理地址。
分页机制下的虚拟地址由两部分组成:
- 页号:通过虚拟页号从页表中取出对应的物理页号
- 页内偏移量:物理内存地址=物理页号起始地址+页内偏移量
地址翻译过程如下:
- MMU解析获得虚拟地址的虚拟页号
- 通过虚拟页号从应用程序的页表中读取物理页号
- 物理页号起始地址加上虚拟地址中的页内偏移量即为最终的物理地址
2、单级页表的缺陷?为何需要多级页表?
当OS同时运行多个进程时,每个进程都会有自己的页表,因此页表就会非常庞大,需要较大的内存来存储页表。
多级页表对应多个页表,每个页表也与前一个页表相关联,属于时间换空间,利用增加页表查询的次数来减少页表占用的空间。
3、换页机制的作用?
当物理内存不够时,OS将一些物理页的内容放到磁盘上,等需要使用是再将其读到物理内存中。使用较低廉的存储设备扩展物理内存。
用时间换空间,页的调入调出换取一个更大的虚拟物理内存空间。
4、常见的页面置换算法?
页面置换算法:当出现缺页异常时,需要调入新的页面但是内存已满时,选择被置换的物理页面的规则。
- 最佳页面置换(OPT):置换在未来最长时间不访问的页面。理论最优,无法实现。
- 先进先出页面置换(FIFO):置换最先进入内存的页面。
- 最近最久未使用页面置换(LRU):置换最长时间未被访问的页面
- 最少使用页面置换(LFU):置换访问次数最少的页面
- 时钟页面置换(CLock):置换 最近未使用的页面
FIFO存在的问题:
- 经常访问或需要长期存在的页面会被频繁调入调出
- 存在Belady现象:即随着分配给进程的空闲页面数增加,缺页次数也会增加。FIFO只考虑了页面进入内存的顺序,但未考虑访问页面的频率和紧迫性。
分页机制与分段机制的异同?
共同点:
- 都是非连续内存管理的方式
- 都采用了将虚拟地址映射到物理地址的地址映射方法,来实现对内存的管理和保护
不同点:
- 分页机制以页为单位,分段机制以段位单位。页大小固定,而段大小不固定。
- 页是物理单位,OS将物理内存划分为固定大小的页面,而段是逻辑单位,根据程序中的数据和代码逻辑结构划分。
- 分段机制存在外部碎片,分页机制解决了外部碎片问题,但仍可能存在内部碎片。
- 分页机制使用页表完成地址映射,页表通过一级页表和二级页表实现多级映射,分段机制使用段表完成地址映射,每个段表项记录段起始位置和长度信息。
文件系统
1、文件系统的功能?
文件系统主要负责管理和组织计算机存储设备上的文件和目录,功能包括:
- 存储管理
- 文件管理
- 目录管理
- 文件访问控制
2、软链接和硬链接的区别?
- 硬链接
- 在Linux系统中,每个文件和目录都有一个唯一的标识-索引节点(inode)号。硬链接通过inode节点号创建链接,硬连接和源文件的节点号相同,两者完全平等,删除任意一个对另一个都没影响,可以对文件设置硬链接来防止文件误删。
- 删除源文件和所有对应的硬链接,该文件才会被真正删除。
- 硬链接无法对目录和不存在的文件创建,也无法跨越文件系统。
ln
命令用于创建硬链接。
- 软链接
- 软连接指向一个文件路径。
- 源文件删除后,软链接仍然存在,但是指向一个无效的文件路径
- 类似于Windows中的快捷方式
- 可以对目录或不存在的文件创建软链接,也可以跨越文件系统
ln-s
用于创建软链接
3、硬链接为何不能跨域文件系统?
硬链接与源文件共享相同的inode节点号,而每个文件系统都会有自己独立的inode表,每个inode表只维护该文件系统内的inode。在不同文件系统之间创建硬链接可能导致inode节点冲突的问题,即目标节点的inode节点号已经在该文件系统中被使用。
4、提高文件系统性能的方式?
- 优化硬件:使用高速硬件设备代替传统机械硬盘,使用RAID等技术提高磁盘性能
- 选择合适的文件系统
- 运用缓存
- 避免磁盘过度使用
- 对磁盘进行合理分区
5、常见磁盘调度算法有哪些?
磁盘调度算法式OS对磁盘访问请求进行排序和调度的算法,目的是提高磁盘的访问率。
- 先来先服务(FCFS):按照请求到达磁盘调度器的顺序处理,先来的请求先被处理
- 最短寻道时间优先(SSTF):优先选择距离当前磁头位置最近的请求服务。能够最小化磁头的寻道时间,但容易出现饥饿问题。
- 扫描算法(SCAN):思想与电梯类似。磁头沿着一个方向扫描磁盘,如果经过的磁道有请求就处理,直到磁道的边界,然后改变移动方向,依次往复。
- 循环扫描(C-SCAN):只在磁盘一侧进行扫描,并且只按照一个方向扫描,直到到达磁盘边界,然后回到磁盘起点,重新开始循环。
- 边扫描边观察(LOOK):对SCAN算法的改进,如果磁头的移动方向上已经没有请求了,就改变移动方向。边扫描边观察指定方向上是否还有请求。
- 均衡循环扫描算法(C-LOOK):对C-SCAN算法的该进,如果磁头移动的方向上已经没有请求了,立即让磁头返回,并且磁头只需要返回到有请求的位置即可而非磁盘起点。
整理自JavaGuide