一个操作系统的实现
文章平均质量分 85
chuanwang66
软件工程专业
展开
-
(第一、二章)安装nasm,bochs并运行helloworld
1、安装nasm和vgabios:[hadoop@sam1 /]$ su rootPassword: [root@sam1 /]# yum install nasm...[root@sam1 /]# yum install vgabios...注意:bochs需要依赖vgabios安装的东西/usr/share/vgabios/VGABIOS-lgpl-latest.bin...原创 2011-05-27 17:57:45 · 518 阅读 · 0 评论 -
(第三章 11)根据自己内存情况 使用分页机制
一、查看内存分布情况 设置“页目录表”和“页表”之前,最好先查看下内存分布情况,根据“OS可用内存的大小”来设置她们;否则可能设置了太大的“页目录表”和“页表”而浪费了宝贵的内存。 如果傻乎乎地设置“页目录表”和“页表”,我们来看看后果: 假设内存的一个物理块是4KB(=4096B)。我们知道,“页目录表”占用一个内存物理块,而“页目录表”中的每项PD...原创 2011-06-11 15:51:16 · 304 阅读 · 0 评论 -
(第一、二章)nasm的汇编和反汇编
nasm的汇编和反汇编步骤:1. 汇编(boot.asm为boot.bin)nasm boot.asm -o boot.bin2. 反汇编(boot.bin为disboot.asm)ndisasm -o 0x7C00 boot.bin >> disboot.asm 注:nasm和ndisasm工具都是nasm的组件:)*************...原创 2012-02-27 13:36:41 · 2722 阅读 · 0 评论 -
(第三章 8 )特权级——CPL、DPL、RPL
很久以后,等我大量翻阅关于“保护模式的特权级检查(DPL,RPL,CPL, 一致代码段,非一致代码段)”的资料后,我才发现这篇博客理解得太肤浅了,而且有错(但后面的实验步骤和代码还是可以凑合看一下的),因此特意写了另一篇(主要是转载),名为“(第三章 8 )特权级——保护模式的特权级检查(DPL,RPL,CPL, 一致代码段,非一致代码段)”。 本节见书P48~...原创 2012-07-11 10:02:13 · 551 阅读 · 0 评论 -
(第三章 0)保护模式如何“保护”
IA32中“保护模式”的“保护”二字理解:(P48)(1)禁止越界:在描述符中段基址和段界限定义了一个段的范围,对超越段界限之外的地址的访问是被禁止的,这无疑是对段的一种保护。(2)规定段的行为和性质:复杂的段属性作为对一个段各个方面的定义规定和限制了段的行为和性质,从功能上讲这也是一种保护。...原创 2012-03-14 07:59:20 · 100 阅读 · 0 评论 -
(第三章 8 )特权级——保护模式的特权级检查(DPL,RPL,CPL, 一致代码段,非一致代码段)...
特权级是保护模式下一个重要的概念,CPL,RPL和DPL是其中的核心概念,查阅资料无数,总结如下。 一、CPL、RPL、DPL简单解释 CPL是当前进程的权限级别(Current Privilege Level),是当前正在执行的代码所在的段的特权级,存在于cs寄存器的低两位。 RPL说明的是进程对段访问的请求权限(Request Privilege Level),是对...原创 2013-03-20 11:14:54 · 294 阅读 · 0 评论 -
(第三章 12)中断
一、中断和8259A中断控制器 1. 中断的基本概念 中断 :在计算机科学中,中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序...原创 2012-09-11 20:20:05 · 745 阅读 · 0 评论 -
(第4章 1)软盘结构及其数据读取
参考资料:http://blog.csdn.net/smallmuou/article/details/6796867 由于后面的汇编中要读取软盘扇区,这里抽空学习一下软盘结构和软盘读取。 1. 软盘结构 1.44MB软盘容量计算: 1.44MB=2(面) * 80(磁道/面) * 18(扇区/磁道) * 512(byte/扇区)2. 相...原创 2012-09-14 21:59:01 · 387 阅读 · 0 评论 -
(第4章 2)突破512字节的限制
一、代码 启动的过程中,引导扇区boot sector(boot.asm,07c00h开始,最多512bytes)负责把加载器Loader(loader.asm,长度不受限制)载入内存并且把控制权交给她。Loader再加载操作系统内核之前,还要作准备保护模式等一系列工作,就很可能超过512bytes了。 loader.asm代码在这里只是虚晃一枪,其具体...原创 2012-09-15 11:40:30 · 698 阅读 · 0 评论 -
参考博客-还有哪些人也在看这本书
这位很详细:http://www.cnblogs.com/wanghj-dz/archive/2011/04/23/2025840.html原创 2011-06-10 22:46:21 · 88 阅读 · 0 评论 -
(第三章 10)“代码段间跳转” 和 “访问数据段”
下面说明代码段和数据段的访问:一、代码段间跳转1、普通(直接)跳转: JMP Selector:0 或 CALL Selector:01)一致代码段(JMP&CALL) 要求:CPL>=DPL,RPL不作检查 特权变化:跳转后程序CPL=跳转前程序CPL2)非一致代码段(JMP&CALL) 要求:CPL=DPL & RPL...原创 2011-06-10 15:40:19 · 257 阅读 · 0 评论 -
(第三章 1)保护模式运行环境配置
保护模式运行环境配置(第三章)注意: 1)保证已将freedos.img(将附件中freedos-img.tar.gz解压后,将其中a.img改名为freedos.img)放到Desktop/OSImpl/bochs-2.4.6/中了 2)这里以第三章chapter3/a/pmtest1b.asm为例——“实模式跳转到保护模式,写显存显示字符” (chapter3/a/pmtest1b.a...原创 2011-05-28 12:32:35 · 361 阅读 · 0 评论 -
(第三章 2)段选择子
在实模式下,逻辑地址空间中存储单元的地址由段值和段内偏移两部分组成。在保护模式下,虚拟地址空间(相当于逻辑地址空间)中存储单元的地址由段选择子和段内偏移两部分组成。与实模式相比,段选择子取代了段值。 段选择子长16位。其高13位是描述符索引(Index)。所谓描述符索引是指描述符在描述符表中的序号。段选择子的第2位是引用描述符指示位,标记为TI,TI=0指示从全局描述符表GDT中读取该...原创 2011-05-29 17:39:46 · 476 阅读 · 0 评论 -
(第三章 4)A20地址线
A20地址线困惑我了很久,这篇文章终于揭开了这个谜团。详细阐述之前,我先来总结一把—— 8086/8088和80286地址转换方式一样,寻址范围不一样 。 8086/8088和80286中“逻辑地址-->线性地址”的转换方式是一样的:segment:offset-->segment<<4+offset,而且segment和offset均只有16bit. ...原创 2011-06-03 20:43:58 · 542 阅读 · 0 评论 -
(第三章 3)数据段/代码段描述符
一、宏定义和属性常量(代码段/数据段描述符见P32;门描述符见P51)下面是对代码段/数据段描述符的宏定义,目的是为了方便编写描述符。 ; 描述符; usage: Descriptor Base, Limit, Attr; Base: dd -->段基址4字节; Limit: dd (low 20 bits available) ...原创 2011-06-05 11:53:13 · 431 阅读 · 0 评论 -
(第三章 5)保护模式下,读写大地址内存 & 从32位保护模式跳回16位实模式(一)...
一、主要功能 在本章最基本代码(P25、chapter3/a/)的基础上实现大地址(超过1M)的读写。在前面程序的基础上新建一个段,这个段以5MB为基址,远远超过1MB的界限。先读出开始处8字节的内容,然后写入一个字符串,再从中读出8字节。 如果读写成功的话,两次读出的内容应该不同,而且第二次读出的内容应该就是我们写进的字符串。字符串是保存在数据段中的,也是新增加的...原创 2011-06-05 13:53:34 · 226 阅读 · 0 评论 -
(第三章 6)保护模式下,读写大地址内存 & 从32位保护模式跳回16位实模式(二)...
三、关于保护模式和实模式的跳转和段描述符高速缓冲寄存器(转载) 其实从实模式跳转到保护模式还是很好懂得,主要注意就是跳转指令 jmp dword SelectorCode32:0 //而不能是 jmp SelectorCode32:0 因为这时编译出来的是16位代码。如果目标地址的偏移不是0,而是一个较大的值,比如 jmp Select...原创 2011-06-06 09:15:20 · 138 阅读 · 0 评论 -
(第三章 7)LDT
先展示一下效果图: 直接看代码: 注意到这段代码是在P38 “3.2.1海阔凭鱼跃”那段代码基础上加上LDT得到的,新添加的代码会着重标注出来的^_^ ; ==========================================; pmtest3.asm; 编译方法:nasm pmtest3.asm -o pmtest3.com...原创 2011-06-06 09:49:27 · 207 阅读 · 0 评论 -
(第三章 9)“调用门” 和 “利用调用门在高低特权级的转移”
在此之前,先要熟悉汇编指令“长/短jmp”、“长/短call”、ret、retf. 一、调用门“纯粹”作为入口地址 调用门本质上就是个入口地址,只是增加若干属性而已。例子pmtest5a.asm完全将其作为一个地址使用。 二、使用调用门,在不同特权级间转移 使用调用门分为以下两个阶段,难点无非就是“TSS”和“堆栈的变化”。本质上,TSS就是记录了不同特...原创 2011-06-08 10:34:22 · 283 阅读 · 0 评论 -
(第6章 1)最简单的进程
第一步——ring0 --> ring1(汇编和C的相互调用,见P121. ) r/kernel/kernel.asm ==>...extern p_proc_ready ; 这里是怎么在调用的啊??? restart: mov esp, [p_proc_ready] ; r/include/global.h...原创 2012-10-11 10:56:26 · 100 阅读 · 0 评论