现在,内核已经被我们加载进内存了,该是跳入保护模式的时候了。 首先是GDT以及对应的选择子,我们只定义三个描述符,分别是一个0~4GB的可执行段、一个0~4GB的可读写段和一个指向显存开始地址的段: 在之前学习保护模式时,大部分描述符的段基址都是运行时计算后填入相应位置的,因为那时我们的程序是由BI ...
分类:
系统相关 时间:
2016-04-17 15:55:48
阅读次数:
247
Loader要做两项工作,我们先来做第一项,把内核加载到内存: 1.加载内核到内存。 2.跳入保护模式。 首先编译无内核时: nasm boot.asm -o boot.bin nasm loader.asm -o loader.bin dd if=boot.bin of=a.img bs=512 ...
分类:
系统相关 时间:
2016-04-17 13:17:50
阅读次数:
322
在上一篇中我们虽然成功进入了保护模式,但是并没有体验到保护模式带给我们的便利。其实在保护模式下寻址空间可以达到4GB,实模式下1MB的寻址能力差得太远了。那么下面,我们就把程序稍作修改,体验一下它对超过1MB内存的访问能力。 我们来试验一下读写大地址内存。在前面程序的基础上,新建一个段,这个段以5M ...
分类:
系统相关 时间:
2016-04-09 15:16:36
阅读次数:
188
X86保护模式下使用分段管理机制,将内存划分成以起始地址和长度限制这两个二维参数表示的内存块,这些内存块就称之为段(Segment)。 关键字:段描述符:描述段的属性。 段描述表:包含多个段描述符的数组。 段选择子:用于定位段描述表中表项的索引。 段描述符有三个参数:段基地址(Base Addres ...
分类:
其他好文 时间:
2016-04-04 22:33:00
阅读次数:
147
源码如下: 运行结果如下,在屏幕最右边有一个红色的P: 源码解析: 1.首先程序跳转至LABEL_BEGIN处,jmp LABEL_BEGIN。将ds、es、ss段寄存器全部初始化为当前代码段。 2.初始化32位代码段描述符 在实模式下,也就是8086的16位的CPU的寻址方式是段x16+偏移,而在 ...
分类:
系统相关 时间:
2016-04-02 14:50:21
阅读次数:
518
程序的加载和执行(三)——读书笔记23接着上次的内容说。
关于过程load_relocate_program的讲解还没有完,还差创建栈段描述符和重定位符号表。分配栈空间与创建栈段描述符462 ;建立程序堆栈段描述符
463 mov ecx,[edi+0x0c] ;4KB的倍率
464 mov ebx,0x000fff...
分类:
编程语言 时间:
2016-03-27 01:49:21
阅读次数:
324
工作模式Arm有7种工作模式:名称简称简介UserUsr正常用户程序执行的模式(linux下用户程序就是在这一模式执行的。)FIQFiq快速中断模式IRQIrq普通中断模式SupervisorSvc给操作系统准备的保护模式,权限很高的一种模式,linux的内核就是运行在此模式AbortAbt比如访问...
分类:
其他好文 时间:
2016-03-08 23:28:02
阅读次数:
225
首先,这个概念的由来,我认为跟CPU的发展有很大关系,在目前CPU的保护模式下,系统需要对其赖以运行的资料进行保护,为了保证操作系统内核资料,我们把内存空间进行划分,一部分为操作系统内核运行的空间,另一部分是应用程序运行的空间,所谓空间就是内存的地址。因此内核空间和用户空间的概念就出现了。在386以
分类:
其他好文 时间:
2016-03-02 21:31:13
阅读次数:
155
本文是原书第12章的学习笔记。 说句题外话,这篇博文是补写的,因为让我误删了,可恶的是CSDN的回收站里找不到! 好吧,那就再写一遍,我有坚强的意志。司马迁曰:“文王拘而演《周易》;仲尼厄而作《春秋》;屈原放逐,乃赋《离骚》;左丘失明,厥有《国语》;孙子膑脚,《兵法》修列;不韦迁蜀,世传《吕览》……
分类:
编程语言 时间:
2016-02-28 13:54:19
阅读次数:
392
12章其实是11章的拓展,代码基本不变,就是在保护模式下展开讨论。 ★PART1:存储器的保护机制 1. 修改段寄存器的保护 当执行把段选择子传到段寄存器的选择器部分的时候,处理器固件在完成传送之前,要检查和确认选择子是正确的,并且该选择子选择的描述符也是正确的。假如索引号是正确的,也就是说明索引号
分类:
编程语言 时间:
2016-02-25 21:19:29
阅读次数:
342