操作系统段和保护模式浅谈

段的由来

intel开发出的16位的处理器叫8086,标志着Intel X86王朝的开始,同时引入了“段 ”概念。

段描述了一块有限的内存区域,区域的起始位置存在专门的寄存器(段寄存器)中。

8086处理器地址线扩展到了20位,寻址空间到了1M
也就是把1M大的空间分成数个64k的段来管理(化整为零了)。1M/64k=16个
把16位的段地址左移动4位后,再与16位的偏移量相加便可获得一个20位的内存地址。

逻辑概念,是虚拟地址空间的基本单位,大小不固定,取决于我们当前运行的程序,把虚拟地址转换为线性地址
段的三个方面来描述:基地址,界限,保护属性
在这里插入图片描述
段管理:把主存分为有实际意义的一段段,每个段定义了一组逻辑信息,通过段表对应逻辑地址和物理地址

在这里插入图片描述

保护模式的引入

于1982年问世 的 intel的80286处理器
从此开始引进了一个全新理念—保护模式 ,后由32位且寻址地址达到4GB的80386处理器完善
访问内存时不能直接从段寄存器中获得段的起始地址了,而需要经过额外转换和检查 。段寄存器中存放段号,而不是基地址

值得注意的是“分页机制也是在保护模式下开启

段寄存器

8086中有4个16位的段寄存器:CS、DS、SS、ES,分别用于存放可执行代码的代码段、数据段、堆栈段和其他段的基地址。
这些段寄存器中存放的不再是某个段的基地址,而是某个段的选择符(Selector)
段基地址存放在段描述符表(Descriptor )中,表的索引就是选择符
在这里插入图片描述
RPL表示请求者的特权级(Requestor Privilege Level)
TI 是表的索引,说明这个表是在全局描述符表还是在局部描述符表里

段描述符表

也叫做段表,描述转换关系
段号描述的是虚拟地址空间段的编号
基地址是线性地址空间段的起始地址
段描述符表中的每一个表项叫做段描述符
(具体对应的数据结构还是需要查阅资料。很明显这张图少了粒度位,没有确定段的单位是以字节,还是以4KB页为单位)
在这里插入图片描述

实模式与保护模式下CPU的寄存器的差异

在这里插入图片描述

保护模式下的特权级

保护模式提供了四个特权级,用0~3四个数字表示
很多操作系统(包括Linux,Windwos)只使用了其中的最低和最高两个,即0表示最高特权级,对应内核态3表示最低特权级,对应用户态
保护模式规定,高特权级可以访问低特权级,而低特权级不能随便访问高特权级。

Linux中的段

为了可移植性,将段机制和分页机制合并,设定段的基地址为0,段的界限设为4GB,段内偏移地址等于线性地址
由于IA32段机制规定,必须为代码段和数据段创建不同的段,Linux只有内核态和用户态两个特权级,所以Linux必须创建的4个段描述符。

一些思考题

1、Linux操作系统为什么要引入保护模式?
实模式下从段寄存器中可以获得段的起始地址,不能保护保护对物理内存的访问,因此需要保护模式。
2、保护模式到底保护了什么?
保护模式:保护物理内存的访问。
3、为什么能达到保护这些对象的目的?
访问内存时不能直接从段寄存器中获得段的起始地址,而需要经过额外的转换和检查。
保护模式的实现:通过分页机制及CR0~CR3控制寄存器的设置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值