
一个操作系统的实现
leileicaocao
这个作者很懒,什么都没留下…
展开
-
《Orange’s 一个操作系统的实现》1.搭建操作系统开发环境
书中给出了两种环境:windows和linux,平台选择根据自己喜好.本人这里选择ubuntu10.04+virtualbox作为开发平台. 1.下载、安装VirtualBox http://download.virtualbox.org/virtualbox/4.0.0/VirtualBox-4.0.0-69151-Win.exe 2.转载 2013-05-21 09:08:58 · 642 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-进入ring3)
在上一节的代码中稍作修改,通过转移进入ring3:; ========================================== ; pmtest5a.asm ; 编译方法:nasm pmtest5a.asm -o pmtest5a.com ; ==========================================%include "pm.in转载 2013-05-25 12:38:02 · 748 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式2----认识保护模式B
一、详解GDT(转载http://blog.youkuaiyun.com/zdwzzu2006/archive/2009/03/27/4030882.aspx)在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table)。 为什么要有GDT?我们首先考虑一下在Real Mode下的编程模型: 在Real Mode下,我们对一个内存地转载 2013-05-25 12:37:15 · 808 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-实践篇)
完成有效的特权级的转移及使用局部任务返回实模式:; ========================================== ; pmtest5.asm ; 编译方法:nasm pmtest5.asm -o pmtest5.com ; ==========================================%include "pm.inc"转载 2013-05-26 11:42:22 · 842 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式6-特权级转移(门描述符概述)
A.门描述符结构 0、1字节( 0~15):偏移1 2、3字节(16~31):选择子 4字节(32~39):5、6、7位为0,0~4位为Param Count 5字节(40~47):0~3位为TYPE,4位为S(=0表示门描述符),5~6位为DPL,7位为P 6、7字节(48~63):偏移2转载 2013-05-26 11:42:04 · 998 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-理论)
A.关于堆栈 jmp指令:不影响堆栈 call指令:影响堆栈,对于短调用来说,call指令执行时会将下一条指令的eip压栈,到ret指令时,这个eip会被从堆栈中弹出。 对于长转移;还会将cs压栈B.call指令堆栈示意图 假设函数foo(param1,param2,param3) 1转载 2013-05-25 12:38:08 · 820 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式2----认识保护模式A
1.前言还是先来分析下保护模式的代码pmtest1.asm,要硬这头皮看这段代码,而且的搞明白了,后面的代码都是在此基础上扩展的,此代码是大致轮廓2.代码分析?12345678; ========================================转载 2013-05-25 12:37:23 · 662 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式3----保护模式进阶
在前面的代码上进行修改后,测试读写大地址内存(实模式下的1MB限制),而且从保护模式再调回实模式.上代码分析(省略前面重复的代码部分):?1234567891011121314151617181920转载 2013-05-25 12:36:40 · 619 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-进入ring3-b)
我们在进入ring3后,实现了高特权级到低特权级的转移,我们在原有代码上稍作修改,实现低特权级到高特权级的转移:修改的代码如下:1.修改调用门描述符和选择的特权级; 门 目标选择子,偏移,DCount, 属性 LABEL_CALL_GATE_TEST: Gate SelectorCodeDest, 0,转载 2013-05-26 11:43:03 · 880 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-无特权级转换)
在上次的代码基础上,添加一个代码段作为通过调用门转移的目标段。了解一下调用的工作方法,代码分析如下:>; ========================================== ; pmtest4.asm ; 编译方法:nasm pmtest4.asm -o pmtest4.com ; ===================================转载 2013-05-26 11:42:38 · 818 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式8-页式存储
A.分页机制概述(如图) Segmentation部分为分段机制,逻辑地址通过段选择子,从GDT中对应的段描述符中确定段基址,然后在加上偏移确定线性地址 Paging部分为分页机制:物理地址=f(线性地址) 分页机制使用两级转换表,第一级叫做页目录(Page Directory),存储在一个物理页中.大小为4KB,每个表项4字节,转载 2013-05-26 11:41:27 · 618 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式3----DOS加载.EXE过程
在《《Orange’s 一个操作系统的实现》》一书中有时使用了org 0100h,为何是0100h?因为书中的例子是为了突破引导扇区512字节的限制,而将asm文件编译为.com文件以便在freedos中执行(bochs中),有必要了解一下DOS加载.EXE的过程. 以下就引用《汇编语言》第二版 王爽中的内容来说明一下:转载 2013-05-25 12:37:06 · 730 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式4----LDT(Local Descriptor Table)
还是在原有代码基础上进行修改,加入LDT的使用,代码分析如下(红色部分为新增代码):本程序是在原有完成大内存读写测试完成后,调用局部任务显示字符L; ========================================== ; pmtest3.asm ; 编译方法:nasm pmtest3.asm -o pmtest3.com ; =============转载 2013-05-25 12:36:33 · 688 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式1----pm.inc分析
1.pm.inc定义了描述符、选择子及相关位数的取值; 描述符图示; 图示一 ; ; ------ ┏━━┳━━┓高地址 ; ┃ 7 ┃ 段 ┃ ; ┣━━┫ ┃ ; 基 ; 字节 7 ┆ ┆ ┆ ; 址 ; ┣━━转载 2013-05-21 09:10:19 · 843 阅读 · 0 评论 -
NASM中文手册
NASM中文手册 第一章: 简介 1.1 什么是NASM NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多 的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16 位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简 洁易懂,和Intel语法相似但更简单。它转载 2013-05-21 09:09:21 · 908 阅读 · 0 评论 -
《Orange’s 一个操作系统的实现》3.保护模式5----特权级概述(转)
学习过程中遇到一个对保护模式总结很好的Blog,转来分享一下。先说下特权级的概念,在保护模式下,系统依靠特权级来实施代码和数据的保护,相当于权限啦。特权级共有4个级别,0,1,2,3,数字越小表示权限越高。如图: 较为核心的代码和数据放在较高(靠内)的层级中,处理器用此来防止较低特权的任务在不被允许的情况下访问处于高特权级的段。为了防止概念混淆,我们不用特权级大小转载 2013-05-26 11:40:04 · 1975 阅读 · 0 评论