四、保护模式之内存分段管理机制
以我的理解,内存的分段管理机制,就是人为的把内存分成几个小段(Segment),各段独立使用。 为什么要把内存分成很多小段使用呢?原因一是要多个程序同时运行:开QQ勾搭妹子,开网易云音乐听歌,开浏览器看网页。。。。。。好几个程序一起开着呢!如果几个程序都用同一块内存,那就乱了!所以,把内存分成几段:QQ用一段,别的程序不能访问; 网易云音乐用另一段,其他程序也不能访问。。。。。。原因二是不同程序的权力不一样:操作系统可以启动、关闭应用程序,应用程序可不能对操作系统指手画脚,也就是各段内存的被访问权限是不同的。 很明显,要准确定义一个段要三个参数:该段从物理内存的哪个位置开始(段开始的实际内存地址)、该段占用多大的内存空间(段的长度)、该段能被哪些程序访问(段的属性),用专业术语说就是段基址(Segment Base)、段界限(Segment Limit)、段属性(Segment Attritbute)。 用一个数据结构来描述段的三个属性,这个数据结构就叫 段 描述符(Descriptor)。由于历史的原因( 为了和80286兼容 ),这个数据结构看起来相当纠结: 三个参数竟然不各自独立连续存放,而是被拆开混存的! ; 段描述符图示 ; ; ------ ┏━━┳ ━ ━ ━┓内存高地址 ; ┃ 7 ┃ 段 ┃ ; ┣━━┫ 基 ┃ ; ┆ ┆ 址 ┆ ; 字节 ┆ ┆ 高 ┆ ;