本文将讲解操作系统内存分配与回收策略、段页式存储管理、虚拟内存技术、Linux内存管理算法、交换空间、文件管理、linux文件操作命令行、文件系统、设备管理等内容
- 早期计算机编程并不需要过多的存储管理
- 随着计算机和程序越来越复杂,存储管理成为必要
内存动态分区分配相关算法
标题 | 描述 | 优点 | 缺点 |
---|---|---|---|
FF首次适应算法 | 分配内存时从开始顺序查找适合内存区 若没有合适的空闲区,则该次分配失败 | - | 每次从头部开始,使得头部地址空间不断被划分,效率降低 |
循环适应算法 | 对首次适应算法进行优化,从上一次结束位置查找内存 | 解决了FF算法效率降低的问题 | 内存碎片化 |
BF最佳适应算法 | 最佳适应算法要求空闲区链表按照容量大小排序 遍历空闲区链表找到最佳合适空闲区 | 避免大才小用的情况 | - |
QF快速适应算法 | 快速适应算法要求有多个空闲区链表 每个空闲区链表存储一种容量的空闲区 | 比BF算法更快找到适合的内存区 | 空间换时间 |
使用链表记录空闲区信息, 回收时会合并相邻的空闲区
操作系统是如何管理进程的空间呢?
如何知道 进程的某一个页面分配到具体的哪一个字块里呢?
多级页表
现代计算机系统中,可以支持非常大的逻辑地址空间(2^32~2^64),这样,页表就变得非常大,要占用非常大的内存空间,如,具有32位逻辑地址空间的分页系统,规定页 面大小为4KB,则在每个进程页表中的页表项可达1M(2^20)个,如果每个页表项占用1Byte,故每个进程仅仅页表就要占用1MB的内存空间。
- 32位系统进程的寻址空间为4G
4G/4KB=2^20
页式存储管理总结
缺点: 有一段连续的逻辑分布在多个页面中,将大大降低执行效率
段式存储和页式存储异同
思路
具体实现
思考
一个游戏几十G,物理内存只有4G,那么这个游戏是怎样运行的?
背景:
不可能无限增加物理内存,物理内存总有不够的时候
虚拟内存是操作系统内存管理的关键技术
局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
虚拟内存实际是对物理内存的补充,速度接近于内存,成本接近于辅存
提示
这里与前一篇文章《计算机组成原理》中高速缓存的替换算法一致
学习buddy算法前,先来了解一下内存碎片
top
命令可以查看系统交换空间信息
应避免系统使用操作空间,因为磁盘的存取速度远低于内存的存取速度
交换空间的作用
顺序文件
索引文件
空闲表
空闲链表
位示图
目录树
文件的描述信息
linux中一切皆是文件
使用ls -l
可以查看当前文件夹下的文件类型
文件类型
注意
ls
的时候无需加载文件的Inodedf -T
列出挂在的磁盘dumpe2fs /dev/sda2
查看文件系统的Inode信息stat [文件名]
查看文件的具体信息按照使用特性分类
与高速缓存的作用一样,也是为了解决CPU与IO设备的速率不匹配问题
IO设备的缓冲池
本文作者:郭敬文
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!