The Long Walk2.0

保护模式Protected mode
It has been for almost a whole month that I do not update my blog, since I was extremely busy about my IBDP course. And I also started to take a scientific research with a Doctor, the content is about CNN and facial detection. Thus, I did not totally focus on the study about OS. In recent, I found a book which seemingly quite helpful to my work, it is called “X86From real mode to protected mode”, it’s precise and detailed narration shed me light to my next step.

我似乎已经一整个月没有更新我的博客了,因为我一直忙于我的IBDP课程。同时我在T大一位博士的指导下,开始了一项关于卷积神经网络在人脸识别领域的科研项目。因此,我并没有能专注于对操作系统的学习和研究。最近,我找到一本似乎很有帮助的书,《X86从实模式到保护模式》,其中清晰且细节的讲述为我下一步的学习指明了方向。

I have summed up the notes I took during I studied two chapters among it. My plan would be: First, finish the protected mode knowledge in the book, meanwhile study OS concept; second, start to read: Organe: a realization of operating system meanwhile write it by myself.

全局描述符
在保护模式下,对内存的访问仍然使用段地址和偏移地址,但每个段在访问前要进行登记
段要用8个字节来进行描述(segment descriptor)
为了存放这些描述符,需要在内存中开辟一段空间——描述符表(Global Descriptor Table) GDT
为了跟踪全局描述符表,处理器中有一个48位寄存器,成为全局描述表寄存器(GDTR)
该寄存器分两部分32位线性地址(全局描述符表起始线性地址)和16位边界(其界限 等于表大小减一==表内最后一个字节的偏移量)
在进入保护模式后,处理器会立刻以新的内存访问方式工作,所以必须爱进入保护模式前定义GDT

存储器的段描述符
看懂啦!

每个描述符在GDT中占8字节,64位
G位是粒度(Granularity)位,用于解释段界限的含义;当G0,段界限以字节为单位,此时段的扩展范围是1B-1MB;当G1,段界限以4KB为单位,界限为4KB-4GB
S为指定描述符的类型(Descriptor Type)当该位是0时,表示一个系统段;为1时,是一个代码或数据段
DPL是描述符特权级(Descriptor Privilege Level)指定段的特权级;不同特权级别的程序是相互隔离的,其互访严格限制
P是段存在位,用于指示描述符所对应的段是否存在;当内存紧张时,只建立描述符,对应的内存空间却不存在,此时P位为0;换页时,将段换入硬盘时也要清零,P位是由处理器负责监测的,每当通过描述符访问内存中的段时,如果P是0,处理器产生异常终端(由OS提供)处理过程的任务是将磁盘中的该段换回来
D/B位是默认的操作数大小,默认的栈指针大小,或上部边界标志
L是64位代码段标志,保留此位给64位处理器使用
TYPE字段共4位 指示标识符的子类型

安装存储器的段描述符并加载GDTR

第21条地址线A20问题
处理器有A20M引脚,意为A20屏蔽,低电平下有效
存在一个端口0X92,其中7-2位保持未使用,0位为INIT_NOW(现在初始化),用于初始化处理器。当这个端口被写入1时,处理器复位,计算机重新启动
端口0x92的位1用于控制A20,称为Alternate A20 Gate ALT_A20_GATE
这个端口是可读写的,将其中的数据读出,在将第二位置1,在重新写入断口

保护模式下的内存访问
两种模式的切换开关在于一个CR0的32位寄存器(Control Register,CR)
其位1是保护模式允许位(Protection Enable,PE),如果该位为1,则进入保护模式
但保护模式下原有的中断机制都不再适用,必须在重新设置保护模式下的中断环境前,必须关闭中断(cli;)

段选择器和描述符高速缓存器
32位处理器的6个段寄存器分为2部分,前16位与8086相同,这是为何8086程序可以继续在32位处理器上继续运行的原因。每个段寄存器还包括一个不可见的部分,成为描述符高速缓存器,用来存放段界限、线性基地址、段属性

保护模式的内存访问,也需要指定一个段,但传送到段选择器的内容不是逻辑段地址,而是段描述符在描述符表中的索引号
分为三部分,
第一部分是描述符的索引号
第二部分是TI,描述符表指示器(Table Indicator)TI = 0,表示描述符爱GDT中
TI = 1,描述符在LDT中
第三部分是RPL请求特权级,表示给出当前选择子的那个程序的特权级别(访问该内存段的程序)

当处理器在执行任何改变段选择器的指令时,就将指令中提供的索引号乘以8作为偏移地址,同GDTR里的线性基地址相加,以访问GDT
此后,每当有访问内存的指令时,就不再有访问GDT中的描述符,直接用当前段寄存器描述符高速缓存器提供线基地址。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值