• 内存管理中的分段和分页


    分段(Segmentation)

    分段的思想很简单,之前不是一大块都是连在一起的么,现在要把你们都分开,code / stack / heap 各自成为一段,段内的空间是连续的,段与段之间不必连续,这样空间利用率上就更高了。

    接下来问题就来了,一个进程会有多个段,如何知道一个内存地址对应的是哪个段呢?一个方法是用地址的前两个字节来表示:

    比如 00 表示 code, 01 表示 heap

    分页(Paging)

    Paging 的思想是把地址空间切分成固定大小的单元。比如下面一个只有 64 字节的地址空间,每个 Page 16 个字节.

    地址空间是连续的,但物理地址并不是。这样的好处是,不用去考虑 heap / stack 会被申请多少 size,比如要申请 64 字节地址空间,只要给 4 个 free 的 page 即可,这样 OS 管理起来也很简单,比如只要维护一份 free pages list,然后给出前 4 个。为了记录虚拟页(Virtual Page)跟物理地址之间的关系,OS 需要维护给每个进程维护一份 Page Table,它的作用就是地址翻译

    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    JAVA类与对象(一)----基础概念理解
    JAVA数组
    JAVA算术运算符、关系运算符和位运算符
    JAVA数据类型
    JAVA配置环境变量
    C#中怎么生成36位的GUID
    jqAjax
    二进制1的个数
    成绩转换
    对决
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/11821857.html
Copyright © 2020-2023  润新知