OS_03 内存管理

内存管理涉及内存分配、回收和地址转换,包括分页、分段、段页式等管理方式。分页和分段的主要区别在于页面大小固定,而段大小不固定。快表(TLB)用于加速地址转换,多级页表解决页表占用空间大的问题。虚拟地址提供了一种抽象,使得程序可以使用超出物理内存的地址空间。虚拟内存利用局部性原理,将不常用的数据交换到磁盘,确保内存高效利用。页面置换算法如OPT、FIFO、LRU等用于决定何时替换内存中的页面。

内存管理

内存分配、内存回收、地址转换、内存保护

内存管理机制

分块管理:把内存分为大小相等且固定的几个块,每个进程占用一个块。
分页管理:把内存分为若干相同大小的页面,通过页表对应页的逻辑地址和物理地址。
分段管理:把内存分为大小不等的有逻辑意义的段,比如代码段、局部变量段,通过段表对应段的逻辑地址和物理地址。
段页式管理:先把主存分为若干个段,再把段分为若干个页,先通过段表找对应的页表,再通过页表找对应的逻辑地址和物理地址。

分段分页异同

相同点:都是离散式存储,提高内存利用率。
不同点:分页页面大小固定,由操作系统分页。分段段大小不固定,由应用程序分段。段具有逻辑意义。

快表(TLB)

处理器引入MMU(内存管理单元)后,读取指令、数据需要访问两次内存:首先通过查询页表得到物理地址,然后访问该物理地址读取指令、数据。为了减少因为MMU导致的处理器性能下降,引入了TLB。
快表可以认为是一个 Cache,内容是页表的一部分或者全部内容。
根据局部性原理,被访问后的内存块儿很可能在短时间内再次被访问,可能程序在一段时间内会多次访问同一个页表项。

多级页表

解决了页表在内存中占用空间太大的问题的。

虚拟地址

如果没有虚拟地址,用户可以直接访问底层物理地址,很容易破坏操作系统。
运行个程序时,可能会对同一块地址进行操作。
通过虚拟地址,程序可以使用离散的物理地址表示相邻的虚拟地址。
通过虚拟地址,程序可以访问大于内存物理地址空间大小的虚拟地址。

虚拟内存

传统内存管理会一次性将进程所需的资源全部装载到内存中,浪费内存资源。
基于局部性原理,把很快就会用到的部分放入内存中,暂时用不到的部分留在磁盘上。在程序执行的过程中,当信息不在内存时,再从外存把信息加载到内存里。当内存不够的时候,根据一些策略把用不到的内存换出到外存中,从而腾出空间给要调入内存的信息。而在 os 的管理下,让应用程序认为自己拥有一连续可用的内存,产生独享主存的错觉,这就是虚拟内存。

虚拟内存的实现

请求分页式存储管理
请求分段式存储管理
请求段页式存储管理

页面置换算法

OPT 最佳页面置换算法:不可实现,不可预测哪个是不用的。
FIFO 先到先出算法:把在内存中停留时间最长的页面置换出去
LRU 最近最久未使用算法:LRU 算法赋予每一个页面一个访问字段,来记录一个页面最近一次访问到现在所经历的时间 T,需要淘汰一个页面时,把最久没有使用的页面淘汰掉就可以了。
LFU 最少使用算法:把使用最少的页面淘汰掉。

### 回答1: LiteOS是一个嵌入式操作系统,其内存管理算法通常是基于内存池的。这意味着系统在启动时会分配一个固定大小的内存池,并在运行过程中使用这个内存池来分配内存给不同的应用程序和系统进程。 在内存分配方面,LiteOS使用的是链表动态分配算法。这意味着系统会维护一个链表,其中包含可用内存块的信息。当应用程序需要分配内存时,系统会在链表中查找第一个足够大的内存块,然后将其分配给应用程序。这种方法的优点在于可以有效地利用内存,避免内存碎片的产生。 LiteOS还提供了垃圾回收功能,可以回收应用程序不再使用的内存。这通常是通过一种称为“标记-清除”的算法来实现的。首先,系统会找出所有正在使用的内存块,然后将它们标记为“可用”。接下来,系统会扫描整个内存池,并清除所有未被标记的内存块,使其成为可用内存。这样,就可以有效地回收应用程序不再使用的内存。 总的来说 ### 回答2: liteos_m是一款轻量级的操作系统,其内存管理算法采用了基于链表的动态分配和释放的方法。 liteos_m的内存管理主要包括两个方面:内存分配和内存释放。其中,内存分配使用了链表数据结构,通过维护一个空闲链表和一个已分配链表来管理可用的内存块。当需要分配内存时,liteos_m会从空闲链表中找到一个合适大小的内存块,并将其从空闲链表中移除,然后将其加入到已分配链表中。如果空闲链表中没有合适大小的内存块,则需要进行内存碎片整理或者向操作系统申请更多内存。 对于内存释放,liteos_m会将需要释放的内存块从已分配链表中移除,并将其重新加入到空闲链表中,以便下次分配时使用。此外,为了提高内存的利用率和管理效率,liteos_m还会对连续的空闲内存块进行合并,以减少内存碎片。 总的来说,liteos_m的内存管理算法主要是通过链表数据结构来管理内存块的分配和释放,通过动态维护空闲链表和已分配链表,实现了对内存的高效管理。这种方式既能够灵活地满足多种内存需求,又能够提高内存的利用率和系统的性能。 ### 回答3: liteos_m的内存管理算法原理是基于分段算法和垃圾回收算法。 在liteos_m中,内存分为多个段,每个段大小相等且固定。每个段可以分配给不同的任务或对象使用。分段算法的优势是可以避免内存碎片的产生,提高内存的利用率。 在liteos_m中,还引入了垃圾回收算法,这是为了解决内存中已经不再使用的对象或任务所占用的内存无法被释放的问题。垃圾回收算法通过定期检查内存中的对象和任务的引用计数,当引用计数为0时,表示该对象或任务已经不再需要,可以释放其占用的内存。通过垃圾回收算法,可以更好地管理和释放内存,避免内存泄露的问题。 总结来说,liteos_m的内存管理算法原理是通过分段算法来管理内存的分配和释放,同时结合垃圾回收算法来管理内存中不再使用的对象和任务的释放,以提高内存的利用率和避免内存泄露的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值