这样,内存的空间管理 MMU 就可以更加灵活地进⾏内存管理。
母亲节送啥礼物好那么,段和进程关系是怎么表⽰的呢?
进程中内存地址会⽤前两个字节表⽰对应的段。⽐如 00 表⽰代码段,01 标识堆。
段⾥的进程⼜是如何管理内存的呢?
音响世界网每个段⼤⼩增长的⽅向 Grows Positive 也需要记录,是否可读写也要记录,为的是能够更有效地管理段增长。
内存碎⽚
每个段的⼤⼩不⼀样,在申请的内存被释放后,容易产⽣碎⽚,这样在申请新内存时,很可能就会出现所剩内存空间够⽤,但是却不连续,于是造成⽆法申请的情况。这时,就需要暂停运⾏进程,对段进⾏修改,然后再将内存拷贝到连续的地址空间中。但是,连续拷贝会耗费较多时间。解决内存碎⽚的⽅法之⼀的是定时进⾏碎⽚整理,另⼀个解决⽅法就是页式内存管理。
拟人句大全三年级分页(Page)学车流程
页式内存管理的思路,是将虚拟内存和物理内存都划分为多个固定⼤⼩的区域。这些区域我们称之为 页(Page)。分页就是把地址空间切分成固定⼤⼩的单元,这样我们就不⽤去考虑堆和栈会具体申请多少空间,⽽只要考虑需要多少页就可以了。这对于操作系统管理来说也会简单很多,只需要维护⼀份页表(Page Table)来记录虚拟页(Virtual Page)和物理页(Physical Page)的关系即可。
虚拟页的前两位是 VPN(Virtual Page Number),根据页表,翻译为物理地址 PFN(Physical Frame Number)。虚拟页与物理页之间的映射关系,就是虚拟内存和物理内存的关系,如下图所⽰:
管理能反映程序的逻辑结构并有利于段的共享。如果将这两种存储管理⽅法结合起来,就形成了段页式存储管理⽅式。
段页式管理就是将程序分为多个逻辑段,在每个段⾥⾯⼜进⾏分页,即将分段和分页组合起来使⽤。这样做的⽬的就是想同时获得分段和分页的好处,但⼜避免了单独分段或单独分页的缺陷。
iOS 操作系统是怎么管理内存的
OS X 和 iOS 都包含⼀个⽆法关闭的完全集成的虚拟内存系统;它始终处于开启状态。虚拟内存允许操作系统摆脱物理 RAM 的限制。虚拟内存管理器创建⼀个逻辑地址空间(或“每个进程的虚拟地址空间)并将其划分为⼤⼩⼀致的内存块,称为页。处理器及其内存管理单元 (MMU)超级跳
维护⼀个页表将程序逻辑地址空间中的页⾯映射到计算机 RAM 中的硬件地址。当程序代码访问内存中的地址时,MMU 使⽤页表将指定的逻辑地址转换为实际的硬件内存地址。这种转换是⾃动发⽣的,并且对正在运⾏的应⽤程序是透明的。
App 在运⾏时,⼤多数的时间只会使⽤很⼩部分的内存,所以使⽤⽐段粒度更⼩的空间管理技术,也就是分页。iOS 的 XNU Mach 微内核中有很多分页器提供分页操作,⽐如 Freezer 分页器、VNode 分页器。还有⼀点需要注意的是,这些分页器不负责调度,调度都是由 Pageout 守护线程执⾏。
虎皮凤爪做法就程序⽽⾔,其逻辑地址空间中的地址始终可⽤。但是,如果应⽤程序访问当前不在物理 RAM 中的内存页上的地址,则发⽣页⾯错误。当这种情况发⽣时,虚拟内存系统会调⽤⼀个特殊的页⾯错误处理程序来⽴即响应该错误。页⾯错误处理程序停⽌当前执⾏的代码,定位物理内存的空闲页⾯,从磁盘加载包含所需数据的页⾯,更新页表,然后将控制权返回给程序代码,然后程序代码可以访问内存地址⼀般。这个过程被称为分页。
如果物理内存中没有可⽤页⾯,则处理程序必须⾸先释放现有页⾯以为新页⾯腾出空间。系统发布页⾯的⽅式取决于平台。在 OS X 中,虚拟内存系统经常将页⾯写⼊后备存储。这后备存储是基于磁盘的存储库,其中包含给定进程使⽤的内存页⾯的副本。将数据从物理内存移动到后备存储称为分页(或“换出”);将数据从后备存储移回物理内存称为分页(或“换⼊”)。在 iOS 中,没有后备存储,因此页⾯永远不会调出到磁盘,但只读页⾯仍会根据需要从磁盘调⼊。
操作系统永远不会从内存中删除可写数据。相反,如果可⽤内存量下降到某个阈值以下,系统会要求正在运⾏的应⽤程序⾃愿释放内存以为新数据腾出空间。未能释放⾜够内存的应⽤程序将被终⽌。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论