
操作系统
文章平均质量分 85
B06030927
这个作者很懒,什么都没留下…
展开
-
D_D系统构建-简述及环境准备
当前自己学习了一些操作系统原理方面的书籍,想通过自己构建一个简单的系统来巩固一下环境:系统:ubuntu 16.04 64位 虚拟机工具:bochs 编译工具:nasm原创 2017-06-11 15:31:27 · 507 阅读 · 0 评论 -
D_D系统构建-loader保护模式修改
前面在loader进入保护模式时,使用了指令修改的方法,主要原因是虚拟地址从0开始,而跳转的地址是相对段内而言的,通过修改指令的方式来加上基地址。这种方法过于粗暴,这里重新修改了进入保护模式的方法,避免使用修改指令的方法(本文地址: http://pan.baidu.com/s/1i53Tm5Z)。loader.asm%include "base_phy.inc" secti原创 2017-10-08 22:38:17 · 396 阅读 · 0 评论 -
D_D系统构建-篇外话
好长时间没有更新了,最近二个月天天加班搞项目,头疼。。。决定 调整下计划了,后面会把整个都写完再一次性传上来。包括中断,进程 调度,程序动态加载运行功能。希望能坚持 下去。原创 2017-09-20 22:55:34 · 292 阅读 · 0 评论 -
D_D系统构建-Loader的保护模式尝试
前面我们完成了boot(mbr)读取Loader的任务,但我们一直都 在实模式下验证的。本章我们将尝试保护模式下运行下loader.首先我们要改造下我们的Loader,最简单的肯定要包含保护模式需要的内容。实模式下,地址访问实际是按照段寄存器:偏移进行的, 实际的物理地址=段寄存器*16+偏移,比如段寄存器为0x2000, 偏移为0x1000, 实际对就的物理地址:0x2000*16+原创 2017-08-06 23:12:35 · 372 阅读 · 0 评论 -
D_D系统构建-MBR(8)filesystem.inc代码整改适配32位(附提供当前整个开发目录文件)
上几篇我们已经可以通过mbr加载loader文件,并能成功执行loader指令。下面计划是要扩展我们的loader文件,来进入保护模式的,在保护模式中加载kernel文件,自然想复用我们已经有的filesystem.inc文件。但检查过这个文件后,发现里面的函数寄存器基本使用的是16位的。且存在修改ds/es的操作。这在实模式下没有关系。但 在进入保护模式就会有问题了。保护模式下,我们原创 2017-07-28 22:50:39 · 517 阅读 · 0 评论 -
D_D系统构建-MBR(7)加载loader文件代码filesystem.inc解析
上一章节解析了boot.asm文件,这个文件包含了两个Inc文件,base_phy.inc及filesystem.inc,均在我们的include文件夹下。同时这两个 文件在前面 已经提供了代码,大家可以到http://blog.youkuaiyun.com/b06030927/article/details/75269497处取代码( DD系统构建-MBR(5)加载loader文件)。原创 2017-07-21 23:23:37 · 385 阅读 · 0 评论 -
D_D系统构建-MBR(6)加载loader文件代码MBR解析
上一章节,我们把当前完成的代码都列出来,包括主体代码boot.asm, loader.asm , 还有两个 include文件: base_phy.inc, filesystem.inc; base_phy.inc之前已经介绍过,且都是定义了一些地址宏,不再重复介绍;loader.asm只是简单的显示 一句话,也比较简单。相比之下 , boot.asm, filesystem.inc文件比较复杂,原创 2017-07-19 23:13:21 · 431 阅读 · 0 评论 -
DD系统构建-MBR(5)加载loader文件
在上一章节,我们验证了在mbr超过512字节时,如何能正确将超出512字节内容加载到内存处,并能正确运行;理解了这点,对于我们下面的加载loader大有帮助。本章节我们来尝试mbr加载loader.bin文件,并能跳转到loader.bin处执行。首先,我们得先有个能生成loader.bin的文件才行,我们可以写一个简单的Loader.asm,代码如下:loader.asm原创 2017-07-17 23:34:58 · 769 阅读 · 0 评论 -
D_D系统构建-MBR(1)
MBR,英文含义:Main Boot Record),主引导纪录,是位于磁盘最前边的一段引导(Loader)代码,一般写于磁盘第一个扇区处。它是我们的系统上电后第一个运行的磁盘程序(在它前面实际还有很多固件程序,bios等,主要完成硬件自检工作,这阶段发生任何异常,比如内存异常,显卡异常,磁盘异常等均会中止,当然这一块我们不关注,也无法干预),最简单的理解就看成是由我们的pc把它加载到内存地址0:原创 2017-06-24 22:57:13 · 535 阅读 · 0 评论 -
D_D系统构建-文件写入方法
按照上一篇的文件系统描述方法,当需要写入一个新文件到虚拟磁盘中时,遵循下面的要求:1. 读取文件文件系统块(扇区1),取出可用扇区数目,可用inode数目;读取扇区使用位图(扇区2), inode信息使用位图(扇区3) 。2.如果可用inode数目为0,失败,退出;否则根据inode使用位图,取一个可用的inode,暂时叫inode_x; 3.计算文件所需要的扇区数目((文件大小+51原创 2017-06-11 17:31:39 · 601 阅读 · 0 评论 -
D_D系统构建-MBR(4)代码剖析
上一章节我们将代码都罗列出来 ,实际上这还是一个测试代码,不会真正的加载 loader; 在后面Loader实现后,会对此代码再进行充实完善,当前我们只用来验证下分段mbr是否能正常运行。boot.asm如下:这一行表示引用头文件的意思,与C中的include一样,编译时会在此展开。section表示 这是一个段,align表示 编译时按照16bit对齐, vstart原创 2017-07-11 23:22:02 · 375 阅读 · 0 评论 -
D_D系统构建-MBR(3)代码
MBR代码boot.asm%include "base_phy.inc"section mbr align=16 vstart=MACRO_BOOT_ADDR jmp start;数据区bootmsg: db "MBR running..", 0ah,0dh;bootmsglen: equ $-bootmsgmbr_left_len dw mbr_end-原创 2017-07-09 23:31:21 · 443 阅读 · 0 评论 -
D_D系统构建-文件分布及说明
整体上文件系统 分为MBR, LOADER, KERNEL, USER_APP.MBR:系统上电后第一个加载 的程序, 存放在磁盘0.一般前446字节保存代码,后64字节为分区表信息,最后两个字节标明MBR(0xaa55),它的主要任务是加载 Loader到内存,并将运行权利交由loader.LOADER:由于MBR的限制,它会第一个把loader加载到内存中,然后运行权交由Loader运原创 2017-06-11 15:42:57 · 375 阅读 · 0 评论 -
中断测试
链接:https://pan.baidu.com/s/1p09pZVeHTUl0SDPR9IC_6Q 密码:g51u原创 2018-05-23 22:48:05 · 1708 阅读 · 0 评论