保护模式

《自己动手写操作系统》读书笔记——初识保护模式

邮差的信 提交于 2020-03-29 00:49:07
《自己动手写操作系统》读书笔记——初识保护模式 http://www.cnblogs.com/pang123hui/archive/2010/11/27/2309930.html 书本第三章第一节是《认识保护模式》,初步讲解了保护模式下全局描述符表GDT、段描述符、段选择子、从实模式进入保护模式等内容。去年看这个的时候,如果不是有以前学习保护模式时做的笔记,还真不好懂呢,因为作者提供的材料不够系统,对仅学习过8086汇编语言的人来说,是不太好理解的。下面的内容大体以我以前做的笔记为纲,较为简略,只说明要点。(本来还可以参考下以前学习保护模式时收集的资料的,很可惜,移动硬盘坏了,资料都没有了,早就该注意信息安全了的。) 描述符与描述符表 8086是16位处理器,有16位的寄存器和数据总线,20位的地址总线,寻址能力为1MB。地址由段基址和段偏移两部分组成,段基址和偏移地址都是16 位的,物理地址的计算方式为:物理地址=段基址×16+段偏移。从80386开始,Intel处理器进入了32位时代,地址总线为32位,寻址能力为 4GB。此时,通用寄存器变成从16位变成了32位,但段寄存器仍然是16位的,原来的基地址加偏移值的物理地址计算方法已经不适用了,需要新的计算方法。 386以上CPU运行于保护模式时,虽然段寄存器仍然是16位的,但是其意义已经发生了变化:不再是表示段基地址了

进入保护模式

与世无争的帅哥 提交于 2020-03-26 15:04:05
全局描述符   和一个段有关的信息需要 8 个字节来描述,所以称为 段描述符(Segment Descriptor) ,每个段都需要一个描述符。为了存放这些描述符,需要在内存中开辟出一段空间。在这段空间里,所有的描述符都是挨在一起,集中存放的,这就构成一个 描述符表 ,最主要的描述符表是 全局描述符表(Global Descriptor Table,GDT) 。   为了跟踪全局描述符表,处理器内部有一个 48 位的寄存器,称为 全局描述符表寄存器(GDTR) 。该寄存器分为两部分,分别是 32 位的线性地址和 16 位的边界。32 位的处理器具有 32 根地址线,可以访问的地址范围是 0x00000000 到0xFFFFFFFF,共 232字节的内存,即 4GB 内存。所以,GDTR的 32 位线性基地址部分保存的是全局描述符表在内存中的起始线性地址,16 位边界部分保存的是全局描述符表的边界(界限),其在数值上等于表的大小(总字节数)减一。   因为 GDT 的界限是 16 位的,所以,该表最大是 2 16 字节,也就是 65536 字节(64KB)。又因为一个描述符占 8 字节,故最多可以定义 8192 个描述符。   由于在实模式下只能访问 1MB 的内存,故 GDT 通常都定义在 1MB 以下的内存范围中。当然,允许在进入保护模式之后换个位置重新定义 GDT。

自己动手写操作系统(三)

一个人想着一个人 提交于 2020-03-06 06:43:16
自己动手写操作系统(三) 作者:伊梅 本文选自:开放系统世界——赛迪网 2002年12月04日 http://developer.ccidnet.com/pub/disp/Article?columnID=322&articleID=32660&pageNO=1 在上两期中( 自己动手写操作系统1 , 2 ),我向大家讲述了如何使用Linux提供的开发工具在软盘的启动扇区写一些代码,以及如何调用BIOS的问题。现在,这个操作系统已经越来越接近当年Linus Torvalds的那个具有“历史意义”的Linux内核了。因此,要马上把这个系统切换到保护模式之下。 什么是保护模式 自从1969年推出第一个微处理器以来,Intel处理器就在不断地更新换代,从8086、8088、80286,到80386、80486、奔腾、奔腾Ⅱ、奔腾4等,其体系结构也在不断变化。80386以后,提供了一些新的功能,弥补了8086的一些缺陷。这其中包括内存保护、多任务及使用640KB以上的内存等,并仍然保持和8086家族的兼容性。也就是说80386仍然具备了8086和80286的所有功能,但是在功能上有了很大的增强。早期的处理器是工作在实模式之下的,80286以后引入了保护模式,而在80386以后保护模式又进行了很大的改进。在80386中,保护模式为程序员提供了更好的保护,提供了更多的内存。事实上

DATAGUARD 三种保护模式

余生长醉 提交于 2020-01-31 10:34:07
对应的参数配置如下表: dataguard保护模式切换 1、首先查看当前的保护模式 ---primary数据库操作 SQL> select protection_mode,protection_level from v$database; PROTECTION_MODE PROTECTION_LEVEL -------------------- -------------------- MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE 2、修改初始化参数 --primary数据库操作 SQL> alter system set log_archive_dest_2='SERVICE=standby 2 OPTIONAL LGWR SYNC AFFIRMVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) 3 DB_UNIQUE_NAME=standby'; 系统已更改。 3、重启数据库并设置新的数据保护模式 --primary数据库操作 语句非常简单,如下: SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount ORACLE 例程已经启动。 Total System Global Area 167772160 bytes

保护模式 x86 TLB

大兔子大兔子 提交于 2020-01-26 08:34:43
TLB 文章目录 TLB TLB结构 TLB种类 实验 思考: 通过一个线性地址0x12345678访问一个物理页,我们想要读取0x12345678地指处一个字节的数据时, 操作系统是真的只读了一个字节吗? 答:线性地址首先会被拆分,然后读取PDE(4字节),再读取PTE(4字节),最后读取物理页上的1字节,总共读取了8+1字节. 补充提问: 会不会有这种情况,DWORD 大小数据,前两个字节在一个物理页,后两个字节在另一个物理页, 这样当我要读取这DWORD字节大小的数据时,总共读取了多少字节? 答:这种情况肯定存在,并且也存在1个字节在单独物理页,其他三个在一个这种情况,但是不存在连续三个字节存储在分离的物理页的情况.上面说的那种情况,读取4字节PDE,4字节PTE,2字节数据,重复一遍,总共20个字节, 如果是2-9-9-12分页模式, 就会多读8+8+8 = 24字节 这样的效率是非常低的! 为此CPU在内部做了一个表,来记录这些东西 这个表格是CPU内部的,和寄存器一样快 这个表格: TLB (Translation Lookaside Buffer) 思考: 任何一个进程都有4G大小的独立空间,那其中的线性地址最大能有4G个,但是TLB是存储在CPU内部的,大小受限,最多存储几百条记录, 那这几百条相对与4G少之又少,请思考这几百条的意义? TLB结构 LA(线性地址)

实模式,保护模式

柔情痞子 提交于 2020-01-24 08:18:02
一下引自 http://www.cnblogs.com/jnet/archive/2008/05/12/1193675.html 一直以来,都搞不清楚这几个概念。在网上搜了一下,把它晒上,不会再忘记! 有其它的内容,请看到的朋友请补充。 从80386开始,cpu有三种工作方式:实模式,保护模式和虚拟8086模式。只有在刚刚启动的时候是real-mode,等到linux操作系统运行起来以后就运行在保护模式。实模式只能访问地址在1M以下的内存称为常规内存,我们把地址在1M 以上的内存称为扩展内存。在保护模式下,全部32条地址线有效,可寻址高达4G字节的物理地址空间; 扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持; 支持多任务,能够快速地进行任务切换和保护任务环境; 4个特权级和完善的特权检查机制,既能实现资源共享又能保证代码和数据的安全和保密及任务的隔离; 支持虚拟8086方式,便于执行8086程序。 虚拟8086模式是运行在保护模式中的实模式,为了在32位保护模式下执行纯16位程序。它不是一个真正的CPU模式,还属于保护模式。 保护模式同实模式的根本区别是进程内存受保护与否。可寻址空间的区别只是这一原因的果。实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,系统程序和用户程序没有区别对待

实模式与保护模式

 ̄綄美尐妖づ 提交于 2020-01-23 02:29:54
1. 实模式,又叫实地址模式, CPU 完全按照 8086 的实际寻址方法访问从 00000h--FFFFFh ( 1MB 大小)的地址范围的内存,在这种模式下, CPU 只能做单任务运行;寻址公式为:物理地址 = 左移 4 位的段地址 + 偏移地址,即:物理地址是由 16 位的段地址和 16 位的段内偏移地址组成的。 2. 保护模式,又叫内存保护模式,寻址采用 32 位段和偏移量,最大寻址空间 4GB ,在这种模式下,系统运行于多任务,设计这种模式的原因和好处是:保护模式增加了寻址空间,增加了对多任务的支持,增加了段页式寻址机制的内存管理(分段机制使得段具有访问权限和特权级,各应用程序和操作系统的代码和核心是被保护的,这也是多任务支持的实现关键和保护这个名字的由来)。寻址过程为:物理地址 = 由段地址查询全局描述符表中给出的段基址 + 偏移地址,即:物理地址由影像寄存器中的基址加上 16 位或者 32 位的偏移组成。 ============================================== 1: 实模式 是 CPU 启动的时候的模式 这时候就相当于一个速度超快的 8086 不能使用多线程 不能实现权限分级 还不能访问 20 位以上地址线 , 也就是说只能访问 1M 内存 (!!!) 2: 保护模式 操作系统接管 CPU 后 . 会使 CPU 进入保护模式 .

保护模式 x86 控制寄存器

有些话、适合烂在心里 提交于 2020-01-23 02:01:41
控制寄存器 目录 文章目录 目录 Cr0寄存器 PE 位 [0] PG 位 [31] WP 位 [16] Cr2 寄存器 Cr4 寄存器 PAE 位 [5] PSE 位 [4] 控制寄存器用户控制和确定CPU的操作模式. Cr0 Cr1 Cr2 Cr3 Cr4 (注意跟DR0-DR7分开) Cr1 保留 Cr3 页目录表基址 Cr0寄存器 PE 位 [0] PE = Protection Enable(启用保护) PE = 1 保护模式 PE = 0 实地址模式 该标志位仅开启段级保护,而并没有启用分页机制.若要启用分页机制,那么PE和PG标志都要置位. PG 位 [31] 当设置该位时即开启了分页机制.在开启这个标志之前必须已经或者同时开启PE标志. PG = 0 且 PE = 0 处理器工作在实地址模式下. PG = 0 且PE = 1 处理器工作在没有开启分页机制的保护模式下 PG = 1 且PE = 0 该情况不存在,PE = 0 无法开启 PG PG = 1 且PE = 1 处理器工作在开启分页机制的保护模式下 WP 位 [16] 对于Intel 80486或以上的CPU,CR0的位16是写保护(Write Proctect) 标志 当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向用户级只读页面执行写操作; 当CPL<3的时候: 如果 WP = 0 可以

实模式与保护模式

一世执手 提交于 2020-01-18 12:06:20
1. 实模式,又叫实地址模式, CPU 完全按照 8086 的实际寻址方法访问从 00000h--FFFFFh ( 1MB 大小)的地址范围的内存,在这种模式下, CPU 只能做单任务运行;寻址公式为:物理地址 = 左移 4 位的段地址 + 偏移地址,即:物理地址是由 16 位的段地址和 16 位的段内偏移地址组成的。 2. 保护模式,又叫内存保护模式,寻址采用 32 位段和偏移量,最大寻址空间 4GB ,在这种模式下,系统运行于多任务,设计这种模式的原因和好处是:保护模式增加了寻址空间,增加了对多任务的支持,增加了段页式寻址机制的内存管理(分段机制使得段具有访问权限和特权级,各应用程序和操作系统的代码和核心是被保护的,这也是多任务支持的实现关键和保护这个名字的由来)。寻址过程为:物理地址 = 由段地址查询全局描述符表中给出的段基址 + 偏移地址,即:物理地址由影像寄存器中的基址加上 16 位或者 32 位的偏移组成。 ============================================== 1: 实模式 是 CPU 启动的时候的模式 这时候就相当于一个速度超快的 8086 不能使用多线程 不能实现权限分级 还不能访问 20 位以上地址线 , 也就是说只能访问 1M 内存 (!!!) 2: 保护模式 操作系统接管 CPU 后 . 会使 CPU 进入保护模式 .

实模式与保护模式

て烟熏妆下的殇ゞ 提交于 2020-01-17 04:54:28
1. 实模式,又叫实地址模式, CPU 完全按照 8086 的实际寻址方法访问从 00000h--FFFFFh ( 1MB 大小)的地址范围的内存,在这种模式下, CPU 只能做单任务运行;寻址公式为:物理地址 = 左移 4 位的段地址 + 偏移地址,即:物理地址是由 16 位的段地址和 16 位的段内偏移地址组成的。 2. 保护模式,又叫内存保护模式,寻址采用 32 位段和偏移量,最大寻址空间 4GB ,在这种模式下,系统运行于多任务,设计这种模式的原因和好处是:保护模式增加了寻址空间,增加了对多任务的支持,增加了段页式寻址机制的内存管理(分段机制使得段具有访问权限和特权级,各应用程序和操作系统的代码和核心是被保护的,这也是多任务支持的实现关键和保护这个名字的由来)。寻址过程为:物理地址 = 由段地址查询全局描述符表中给出的段基址 + 偏移地址,即:物理地址由影像寄存器中的基址加上 16 位或者 32 位的偏移组成。 ============================================== 1: 实模式 是 CPU 启动的时候的模式 这时候就相当于一个速度超快的 8086 不能使用多线程 不能实现权限分级 还不能访问 20 位以上地址线 , 也就是说只能访问 1M 内存 (!!!) 2: 保护模式 操作系统接管 CPU 后 . 会使 CPU 进入保护模式 .