随笔分类 -  自己动手写操作系统

操作系统
img文件的制作
摘要:看了一本书,《自己动手写操作系统》(Downloadhttp://www.verycd.com/topics/251695/)。At the beginning,就要写一个很小的“Hello OS world!”小系统,然后用虚拟机跑起来。想要玩玩的可以去下载然后看,根据书中提示,我制作好了boot.asm,然后用nasm编译成boot.bin.但是,书中去没有讲如何制作虚拟软盘镜像IMG,去百度谷歌了一下,也没有教这东东的。奋斗了半天,终于成功搞定,在喜悦的同时不忘告知有同样困扰的Cfan~1、环境系统:Windows 7所用软件:UltraISO,FloppyWritter(下载包中含有此 阅读全文

posted @ 2011-05-03 16:26 wanghj_dz 阅读(1679) 评论(0) 推荐(0)

pmtest7的调试,从dos返回到bochs
摘要:转载与看雪学院:http://bbs.pediy.com/showthread.php?t=116110Xiilin:我在看于渊的《Orange'S...》这本书,我调试一个程序时却出现了问题,程序做的事情是首先从实模式切换到保护模式,然后在保护模式下读取0x00500000地址的内存,然后显示出来。我在Bochs虚拟机下的FreeDos系统上用debug32调试的这个程序,可只能调试到这里:mov eax,cr0or eax,1mov cr0,eax ;调试到这一句时,FreeDos会重启麻烦大家给我指点一下,我要怎么样才能继续调试下去?我想跟到保护模式的代码里。---------- 阅读全文

posted @ 2011-05-03 15:48 wanghj_dz 阅读(583) 评论(0) 推荐(0)

利用bochs调试内核(转载)
摘要:利用bochs调试内核(主要是在windows下调试)Bochs具有非常强大的操作系统内核调试功能。这也是本文选择Bochs作为首选实验环境的主要原因之一。有关Bochs调试功能的说明参见前面14.2节,这里基于Linux 0.11内核来说明Windows环境下Bochs系统调试操作的基本方法。14.8.1 运行Bochs调试程序我们假设Bochs系统已被安装在目录“C:\Program Files\Bochs-2.1.1\”中,并且Linux 0.11系统的Bochs配置文件名称是bochsrc-hd.bxrc。现在在包含内核Image文件的目录下建立一个简单的批处理文件run.bat,其内 阅读全文

posted @ 2011-05-03 12:11 wanghj_dz 阅读(1157) 评论(0) 推荐(0)

bochs环境的搭建
摘要:经过两天的努力终于搭建好bochs的环境。先装好vmware,在虚拟机中先后装了YLMF OS,和Ubuntu10.4但是在安装过程中都出现了我无法解决的问题,果断舍弃之。然后果断参照在linuxdeepin10.12下源码安装bochs-2.4.6 这篇文章,搭建linuxdeepin10.12环境,并按照文章中的步骤成功安装好bochs。bochs源文件下载与bochs网站。终于搭建好了,OK!! 阅读全文

posted @ 2011-05-03 11:57 wanghj_dz 阅读(294) 评论(0) 推荐(1)

利用0E820h int 15h 中断获取内存信息********
摘要:利用0E820h int 15h 中断获取内存信息; 得到内存数 //这段代码是在实模式下写的。movebx, 0movdi, _MemChkBuf.loop:moveax, 0E820hmovecx, 20movedx, 0534D4150hint15hjcLABEL_MEM_CHK_FAIL//如果产生进位,则跳转。产生进位表示没有成功。adddi, 20incdword [_dwMCRNumber]cmpebx, 0//ebx存放的是下一个ARDS的偏移量,第一个是0,如果ebx重新变为0,说明已经到最后一个ARDS了,遍历结束了。jne.loop //这样[_dwMCRNumber]就 阅读全文

posted @ 2011-04-26 22:33 wanghj_dz 阅读(938) 评论(0) 推荐(0)

pmtest6.asm代码详细解释,对分页的形成过程有详细的解释
摘要:; ==========================================; pmtest6.asm; 编译方法:nasm pmtest6.asm -o pmtest6.com; ==========================================%include"pm.inc"; 常量, 宏, 以及一些说明PageDirBaseequ200000h; 页目录开始地址:2MPageTblBaseequ201000h; 页表开始地址:2M + 4Korg0100hjmpLABEL_BEGIN[SECTION .gdt]; GDT; 段基址, 段界 阅读全文

posted @ 2011-04-26 13:51 wanghj_dz 阅读(1048) 评论(0) 推荐(0)

自己对分页机制的认识
摘要:终于有点搞明白分页机制:其实32位组成的线性地址是虚拟地址,范围是从00000000H~FFFFFFFFH一共4Gcr3决定了页目录基址,线性地址的高十位是页目录项索引值,然后读取页目录项的高20位,得到页表的基址。在与线性地址的中10位形成的偏移值,找到页表项,然后读取页表项的高20位形成页基址,再加上线性地址的低12位形成物理地址。启动分页时,先要建立含有PDE,PTE的表格。这个表格含有1024个PDE,1024*1024个PTE。cr3寄存器的低12位都是0,不起作用,高20位是页目录基址。它保存的是当前活动进程的页目录地址。这张图片结合http://www.cnblogs.com/w 阅读全文

posted @ 2011-04-26 08:52 wanghj_dz 阅读(652) 评论(0) 推荐(0)

WinDbg演示IA-32 CPU下的Windows 分页机制下的地址转换过程(转载)
摘要:转载于飞天舞者 http://www.cnblogs.com/winston/archive/2009/04/12/1434225.html我们知道,从386开始,IA-32 CPU开始支持Paging。在启用Paging之后,OS将线性地址空间划分为固定大小的Page(通常为4KB或4MB)。本文演示了如何通过WinDbg展示windows paging中的virtual address向physical address转换过程。在现代OS中,涉及到Paging的几个概念如下(以32-bit IA CPU&Microsoft Windows OS为例):Page Directory 阅读全文

posted @ 2011-04-25 23:37 wanghj_dz 阅读(1013) 评论(0) 推荐(0)

物理地址和虚拟地址1 (MMU)(转载)
摘要:转载与海天的博客 http://www.cnblogs.com/leaven/archive/2011/04/18/2019696.html原文:http://blogold.chinaunix.net/u3/94700/showart_2434792.htmlMMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。(它具有虚拟地址和物理地址转换,内存访问权限保护等功能,这使得Linux操作系统能单独为系统的每个用户进程分配独立的内存空 阅读全文

posted @ 2011-04-25 23:05 wanghj_dz 阅读(1713) 评论(0) 推荐(0)

windows内存管理(转载)
摘要:转载与Kratos的博文:http://www.cnblogs.com/kratos/archive/2009/09/09/1563624.html<<这不是原创,是老文,Pankaj Garg写的,看后翻译了一下,原文可以在http://www.intellectualheaven.com/找到。>>1 介绍Windows 32位 x86 操作系统最多能访问4GB的物理内存。这是因为处理器的寻址总线是32条(我们常说32位),能够访问的存储单位的范围是从0x00000000到0xFFFFFFFF,即4GB。Windows同样允许每个进程拥有自己的4GB逻辑地址空间。4 阅读全文

posted @ 2011-04-25 22:44 wanghj_dz 阅读(897) 评论(0) 推荐(0)

分页机制
摘要:分页机制使用两级转换表,第一级叫做页目录(Page Directory),存储在一个物理页中.大小为4KB,每个表项4字节,共有1024个表项(Page Directory Entry).每个表项对应第二级的一个页表(Page Table),每个页表也有1024项(Page Table Entry),每个表项对应一个物理页。页目录 顾名思义就是页目录项的组合(1024个页目录项PDE),一个页目录项PDE是4Bety。 整个页目录占据一个4k物理页。 项可以理解为Entry页表 顾名思义就是页表项组合(1024个页表项PTE),一个页表项PTE是4字节,一个PTE对应一个真实物理页,一页是4K 阅读全文

posted @ 2011-04-24 20:31 wanghj_dz 阅读(1787) 评论(0) 推荐(0)

自己动手写操作系统pmtest1.asm 详细解释
摘要:段机制轻松体验 内存寻址: 实模式下的内存寻址: 让我们首先来回顾实模式下的寻址方式 段首地址×16+偏移量 = 物理地址 为什么要×16?因为在8086CPU中,地址线是20位,但寄存器是16位的,最高寻址64KB,它无法寻址到1M内存。于是,Intel设计了这种寻址方式,先缩小4位成16位放入到段寄存器,用到时候,再将其扩大到20位,这也造成了段的首地址必须是16的倍数的限制。 公式:xxxx:yyyy 保护模式下分段机制的内存寻址: 分段机制是利用一个称作段选择符的偏移量,从而到描述符表找到需要的段描述符,而这个段描述符中就存放着真正的段的物理首地址,再加上偏移量 一 阅读全文

posted @ 2011-04-24 19:32 wanghj_dz 阅读(1085) 评论(0) 推荐(0)

retf,call 指令运行的详细情况
摘要:retf,call 指令运行的详细情况call指令的运行情况:(代码段只能从低到高如:ring3到ring0(这时特权级转换了,在不同级之间跳转,这是一致代码段情况)) //call也可以实现同级跳转,这是非一致代码段情况。1、根据目标代码段的DPL,从Tss中选择应该切换至哪个ss和esp //上例中目标代码段为ring0级的LABEL_SEG_CODE_DEST:2、从Tss中读取新的ss和esp,在这过程中如果发现ss,esp或者Tss界限错误都会导致Tss异常(#TS)3、对ss描述符进行校验,如果发生错误,同样产生#TS异常4、暂时性地保存当前ss和esp的值//系统自动完成把rin 阅读全文

posted @ 2011-04-24 13:05 wanghj_dz 阅读(1921) 评论(0) 推荐(0)

从ring0到ring3再到ring0(pmtest5.asm)
摘要:; ==========================================; pmtest5.asm; 编译方法:nasm pmtest5.asm -o pmtest5.com; ==========================================%include"pm... 阅读全文

posted @ 2011-04-23 20:01 wanghj_dz 阅读(2559) 评论(0) 推荐(0)

3.2.3节:特权级(转载)
摘要:转载与晨星的博客 http://blog.sina.com.cn/s/blog_56dee71a01009z3i.html原来看第3.2.3节的时候,感觉很难的。为什么会感觉难呢? 因为这一节谈到的特权级别关系比较复杂,不容易弄清楚。这次重看一次这一节后,进行了一点小结,这才感觉比较清楚了。这一节的主要内容可以用下面这个表格来描述。目标代码段Jmp指令Call指令直接调用通过调用门一致码段CPL>=DPL,不检查RPL可以跳转到相同或者更高特权级别执行CPL<=DPL_G,RPL<=DPL_GCPL>=DPL访问调用门的规则同访问数据段,即调用门只能被特权级别不低于其D 阅读全文

posted @ 2011-04-22 22:25 wanghj_dz 阅读(539) 评论(0) 推荐(0)

对pmtest2中两段代码的理解(转载)
摘要:转载于:http://wenku.baidu.com/view/57a589d249649b6648d74727.html注意一.在由保护模式切换到实模式之前,用normal选择子对段寄存器进行填充。原因: 在切换到实模式之前,把一个指向似乎没有用的数据段的描述符Normal的选择子装载到DS和ES。这是为什么呢?实模式下段描述符高速缓冲寄存器的内容 段寄存器 段基地址 段界限(固定) 段属性(固定) 存在性 特权级 已存取 粒度 扩展方向 可读性 可写性 可执行 堆栈大小 一致特权 CS 当前CS*16 0000FFFFHY 0 Y B U Y Y Y - N SS 当前SS*16 0000 阅读全文

posted @ 2011-04-21 23:31 wanghj_dz 阅读(978) 评论(1) 推荐(0)

pmtest2.asm (转载)
摘要:转载于 http://blog.sina.com.cn/s/blog_6af1a64d0100kmg0.html骑驴容易下驴难,从保护模式返回实模式就不这么容易了。因为什么呢,先把代码拉出来看看吧。;==========================================;pmtest2... 阅读全文

posted @ 2011-04-21 23:11 wanghj_dz 阅读(1729) 评论(0) 推荐(1)

导航