计算机操作系统:内存篇

关于内存部分的个人总结

操作系统的内存管理方式
1、操作系统给每个进程都分配一套独立的地址空间,我们叫虚拟内存。然后虚拟内存又映射到物理内存,使得每个进程只需要关心自己的虚拟内存即可。而且虚拟内存通过交换技术可以使用比物理内存更大的空间,让我们感觉内存好像变大了一样(注意:new/malloc是不可以超过物理内存大小的)。
2、操作系统会把虚拟内存分段和分页来进行管理,分别通过段表或页表进行物理内存的映射。分页就是把虚拟内存和物理内存都切成一个个固定大小的快,一般是4k,通过页表进行映射。内存的分配也是页面为单位,所以分页的好处是没有外部碎片,置换方便,但会有内部碎片。分段就是根据程序的逻辑把内存分为栈区、文件映射区、堆区等,是为了更好的内存管理,我们平时经常注意就是栈堆。
3、页表记录着物理地址和虚拟地址的映射。若页表没查到即缺页,会产生缺页中断,若内存还够,直接把缺页加载进内存,若不够,就根据页面置换算法把空闲页置换出去,加载缺页。
4、页面置换算法:先进先出、LRU(最长时间未访问的)、LFU(置换访问次数最少)

页面置换算法
先进先出FIFO:置换在内存时间最长的页面。
LRU**:置换最长时间没被访问的,即假设他未来很长时间也不会被访问。哈希链表实现,开销大(每次访问页面都要调整链表)。
时钟页面置换:兼顾lru和FIFO,把所有页面保存在类似钟面的环形链表,表针指向时间最长的页面,每个页面都有一个访问位(加载进内存设为0表示页面尚未被访问,为1表示被访问过),需要置换时,检查表针指向的页面,若访问位为0就置换它,把新页面插入到该位置,表针前移一个页面,若是1就改为0,继续前移直到找到访问位为0的页面。
最不常用算法LFU:置换访问次数最少的页面。只考虑效率没考虑时间,很容易误伤最近频繁访问的。

linux虚拟地址空间 即内存分区
在这里插入图片描述
高地址->低地址:
栈:由编译器自动分配回收,存放局部变量,形参。
文件映射区,如mmap系统调用。
堆:由程序员手动申请释放。
全局区:存放全局/静态变量,可细分为三个:
1 bss段:存储未初始化的全局变量和静态变量。
2 data段:存已初始化的全局/静态变量
3 只读段(虚函数表就存在这)。
代码区:存代码,如所有的函数代码。

内存满了会发生什么:先后台异步回收内存,若跟不上进程申请速度,就直接回收(同步,会阻塞进程)。若直接回收后还不够,触发OOM机制根据算法选择一个杀死,直到内存足够。哪些内存可以被回收:内核缓存的数据、不常用的先置换出去,然后回收内存。
空闲空间管理策略:空闲表记录、空闲链表连起来、位图:2进制的每一位表示一个盘块是否使用。
操作系统进行内存管理要做什么:内存的分配、回收、逻辑扩充、地址转换、内存保护
内存分配方式:连续分配、非连续分配。连续分配有单一连续分配(一道程序占整个用户空间)、多分区分配、动态分区分配(不预先划分分区)。非连续分配:分页(等大分区,常见的页面置换,会有内部碎片)、分段(按需分配,会有外部碎片)、段页结合。
内存动态分区分配算法:也是连续分配。4大算法:
首次适应:空闲分区按地址递增的顺序排列,每次顺序查找找到第一个满足大小的分区,最简单,综合性能最好
最佳适应
:空闲分区按容量递增的顺序排列,每次顺序查找找到第一个满足的分区,这种可以保留大分区,但会产生很多小的内部碎片,且回收分区空闲链表重新排序。
最坏适应:按递减排序,先用最大的,他会把大内存用完,也有缺点。
邻近适应:每次从上次查找结束的位置开找,拍成循环队列,他也会使大分区被用掉。

地址转换过程:当分配虚拟内存后,会把他和物理内存映射到页表上。就是计算:每页为1KB。假定用户程序的页表如下所示。请计算逻辑地址0A5CH所对应的物理地址。
页内地址位数:1kb=2^10,即10位
逻辑地址= 页号 页内地址(就是拼接),即0000 10 10 0110 1100,得到页号,查页表,若越界触发缺点中断,查表得到内存块号,物理地址= 块号 页内地址,再化为16进制。
快表:之前进行地址转换差的的内存的页表也叫慢表,快表是速度比内存快很多的寄存器,存放最近使用过的页表项,以加速地址转换。所以若有快表,先查快表,命中就结束,未命中就查页表,然后把页表项拷贝到快表。
内部碎片:分配给进程的内存有一部分没用上
外部碎片:某些空闲区很小难以利用。
如何消除外部碎片:紧凑技术,对内存整理;或者内存交换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值