上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 15 下一页

2013年2月21日

《自己动手写操作系统》本书脉络

摘要: 书的脉络其实一个操作系统逐渐完成的过程1. boot 从软盘启动,机器会读软盘的第一个扇区即引导扇区,512字节,所以这个程序会很简单,boot就完成两件事,第一把loader读入内存,第二把控制权交给loader2. loader 中完成了三件事,第一把kernel读入内存,第二跳到保护模式,第三把控制权交给kernel(这一步需要注意一下,程序把kernel的位置从新放置了,这里类似于装载下篇博文会讲到)3. kernel 进入到kernel,其余的就是实现中断4. 进程及进程的切换,注意进程是怎么实现的,以及进程之间的堆栈切换5. 系统调用,说白了也是一种中断,软中断。 阅读全文

posted @ 2013-02-21 14:53 追寻前人的脚步 阅读(137) 评论(0) 推荐(0) 编辑

2013年2月20日

寒假结束

摘要: 再过两天就要回学校了,在家花了差不多半个月时间(边玩边看)终于把《自己动手写操作系统》的前六章看完了,感觉还不错,因为之前一段时间看了linux0.12内核不少时间,基础知识差不多已经打好了。看了《自己动手》有点心得,这本书其实是很简单的,怎么说呢,它实现的是一个很小的系统,只把重要的大致框架搭起来了,内容其实不是很饱满,对于想亲手实践下的比较好,但是本书不适合新手入门,有些地方没有讲清楚就直接用了,建议大家看第二版。看过之后和linux0.12对比起来,这本书简直是简单的不能再简单了,但本书的保护模式讲的不错,只要懂保护模式,其他就都懂了 阅读全文

posted @ 2013-02-20 18:23 追寻前人的脚步 阅读(150) 评论(0) 推荐(0) 编辑

2013年2月18日

任务的调度

摘要: 软件或处理器可以用以下方式中的任何一种来调度任务执行:􀁺 用 CALL 指令显式地调用任务。􀁺 用 JMP 指令显式地跳转到任务。􀁺 (由处理器)隐式地调用中断处理程序任务。􀁺 隐式地调用异常处理程序任务。􀁺 EFLAGS 寄存器的NT 标志置位时的任务返回(由IRET 指令发出)。所有这些调度方法都是用指向任务门或任务TSS 的段选择子来识别被调度的任务的。当用CALL 或JMP 指令调度任务时,指令中的选择子可以直接指向TSS,也可以指向包含TSS 选择子的任务门。通过调度任务来处理中断或异常时,相应中断或异常对应的IDT 项必须包含一个任务门,门中含有指向中断或异常处理程序任务 阅读全文

posted @ 2013-02-18 18:52 追寻前人的脚步 阅读(270) 评论(0) 推荐(0) 编辑

中断异常的处理

摘要: 当处理器执行一个对异常或中断处理例程的调用时:如果将要执行的处理例程特权级数值较小,就进行栈切换。当栈切换发生时:a.处理程序使用的栈的段选择子和栈指针是从当前运行任务的TSS 中获取的。处理器把被中断例程的栈段选择子和栈指针压入新的栈中。b.处理器随后把EFLAGS 寄存器、CS 寄存器、EIP 寄存器的当前值保存进新栈中c.如果异常同时产生了一个错误码,则把它压入栈中,位于EIP 之后。如果将要执行的处理例程与被中断的例程特权级相同:a.处理器在当前栈中保存当前EFLAGS 寄存器、CS 寄存器和EIP 寄存器的值 b.如果异常的错误码也保存在那里,则把它保存在当前栈的EIP 值之后。 阅读全文

posted @ 2013-02-18 18:02 追寻前人的脚步 阅读(180) 评论(0) 推荐(0) 编辑

2013年2月17日

自己动手写操作系统之进程

摘要: 程序的运行从boot-->loader-->kernel这整个过程中代码都运行在特权级0(最高特权级),进程工作的特权级1(即低特权级),当然这是出于安全性的考虑,如果不考虑安全性,进程完全可以工作在特权级0.1. 第一个问题,要从高特权级向低特权级转变,怎么转变呢?这里用到一个人工模拟的中断返回(iretd),这里有个小疑问根据我的了解,iret和iretd都可以表示中断返回,书中是用的iretd,不知道为什么,当然这并不影响我们对全局的了解,嗯,继续,首先我们要把将要运行在特权级1上的进程所需的寄存器准备好,这个准备好怎么理解呢,具体来说,cs中保存的是将要从ring0跳转到r 阅读全文

posted @ 2013-02-17 22:42 追寻前人的脚步 阅读(603) 评论(0) 推荐(0) 编辑

2013年2月16日

一些联想

摘要: 很短,但是感觉有必要把它记下来今天无意中看到一篇日志,http://www.ruanyifeng.com/blog/2013/02/booting.html,上面有句话让我有点感悟,“计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!……必须想尽各种办法,把一小段程序装进内存……”在<<自己动手写操作系统>>中是有那么一段程序,需要把程序的入口地址处的一段代码直接复制到内存的某一位置,然后让程序从该位置开始执行,但不是这篇文章所说的boot,而是loader,我想这应该是某种习惯吧,也不知道对不对,望大家指正 阅读全文

posted @ 2013-02-16 21:49 追寻前人的脚步 阅读(181) 评论(0) 推荐(0) 编辑

InitKernel 自己动手写操作系统

摘要: 转自:http://www.cnblogs.com/wanghj-dz/archive/2011/05/14/2046210.html分析的很好; InitKernel ---------------------------------------------------------------------------------bochs断点:0x000905ba; 将 KERNEL.BIN 的内容经过整理对齐后放到新的位置; 遍历每一个 Program Header,根据 Program Header 中的信息来确定把什么放进内存,放到什么位置,以及放多少。; -------------- 阅读全文

posted @ 2013-02-16 18:45 追寻前人的脚步 阅读(269) 评论(0) 推荐(0) 编辑

写软盘

摘要: 自己动手写操作系统中免不了要写软盘镜像,刚开始就知道一个dd命令,但是不好用啊找了半天资料,终于算是知道怎么回事了首先,可以使用本书自带的工具(汗,一直没有注意)还可以下一个winimage,这是个好使的东西,首先你要新建一个软盘,一般是1.44M,然后写引导扇区,即把自己的boot.bin写进去(有一个引导扇区属性),然后才是添加文件,把loader.bin 和kernel.bin都添加进去,你会发现,当查看软盘镜像文件的时候你找不到boot.bin 阅读全文

posted @ 2013-02-16 17:27 追寻前人的脚步 阅读(167) 评论(0) 推荐(0) 编辑

2013年2月15日

安装insight

摘要: 甚是蛋疼参考:1首先从这里下载源码(这东西可是有20+MB,慢慢下载喔) 下面详细说一下操作方法: 1 解压insight-6-8-1 sudo tar jvxf insight-6-8-1.tar.bz2 2 修改源代码,然后进入insight-6-8-1/gdb cd insight-6-8-1/gdb sudo gedit i386-linux-nat.c 在头文件部分加上: #include "i387-tdep.h" 保存,退出 3.从新回到 insight 目录,生成Makefile cd .. sudo ./configure() 4 开始编译 sud... 阅读全文

posted @ 2013-02-15 20:10 追寻前人的脚步 阅读(388) 评论(0) 推荐(0) 编辑

第四章boot.asm

摘要: 跟上篇日志中间又隔了好几天,懒惰啊 1 寻找LOADER.BIN文件的大体思路为: 2 LOADER.BIN文件存储在A盘中,我们知道A盘的格式是FAT12格式,具体格式见书本P103,其主要是有引导扇区 3 、FAT1区、FAT2区、根目录区(长度不固定,需要计算)和 数据区组成。引导扇区放的就是我们写的引导代码 4 boot.bin文件,我们的LOADER.BIN文件是放在数据区中的,而文件的文件名是放在根目录中,因此,如果我 5 们想查看该盘是否含有我们想要的文件时,我们应该先到根目录中查看是否含有该文件名,如果有,说明该盘存 6 在该文件,那么下面可以从盘中读取该文件了。 7 文件在盘 阅读全文

posted @ 2013-02-15 16:41 追寻前人的脚步 阅读(452) 评论(0) 推荐(0) 编辑

上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 15 下一页

导航