|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 nichkhun 于 2012-3-27 03:27 编辑
刚看了篇小甲鱼的日志,真让我触景生情
http://bbs.fishc.com/forum.php?mod=viewthread&tid=15275
回忆起了儿时的歌曲,水手
关于我的手记 :我手记的流程是按照orange's 一个操作系统的实现 的课本流程顺序,
和自己稍微修改来进行描述系统的流程实现的,由于代码十分长,我不
想去和别人一样啦出一段代码就来分析,我觉得在自己没有能力写出和
对于初学来认识操作系统的朋友,在研读我的手记的时候,代码根本不
能代表什么,如果你有心,在我手记的第一篇,有下载地址,如果过期
请联系QQ 342300830就让和我一样对系统原理有兴趣的朋友,现从感性
来认识这个世界把
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
心情很低落
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
今天推荐
刚才自己在学习逆向的时候发现了个问题,自己的汇编还很不够,希望大家能把汇编语言在多看进去一点
歌曲水手
风雨中这点痛算什么,擦干泪不要怕,至少我们还有梦
接着记录下我学习的过程,就算在第5篇手记,只有自己还在支持自己,我也不会放弃自己的脚步。。。。
******************************************************************
I like the dreams of the future better than the history of the past.
我不缅怀过去的历史,而致力于未来的梦想。—— T. Jefferson 杰弗逊(美国第3任总统)
***********************************************************
前5个手记我已经基本把保护模式的基础概念记录了下来,如果你对操作系统的原理同样感兴趣的话,你可以在论坛继续搜索,或者加我的QQ,在我的空间里有。如果有不明白的地方可以一起交流,当然也可以谷歌
在第一篇手记中,我们看到的是一篇和我们之前看到的汇编语言不同的代码,但是完全不会影响我们去理解它的意思,
我记得我说过那段代码就是从实模式跳向保护模式的最简陋的代码。神奇的jmp>
保护模式的几本概念,我们也大概知道了,那么开机的过程是引导,加载内核到内存, 跳入保护模式, 开始执行内核。
虽然我并不能研究到多少内核,那完全是天谈
但是我对自己的要求不高,起码知道那么一套流程,有了框架,在未来的以后,
我也绝对好深入明白,在添加内容
Loader.
载入。 实现用写代码载入内存
利用引导扇区,在保护模式下,我们加载,肯定是会有权限机制的影响的然后通过GDT, LDT, 8259A,然后我们就可以利用jmp跳入内核了。
(虽然很简单,没有丰富的代码,但是原理的流程还是比较清晰能得到大家认可的。)
如果还觉得自己对保护模式下的机制和描述符没有个感性的认识的话,那基本我的手记,接下来,你很难去理解了。。
到了内核,就可以开始用C语言来写了。
由于我对内核的了解很少很少,所以很可能,在我完成了整本手记后,我会不断添加和修改
ELF(Executable and Linkable Format):
可执行和可链接格式
ELF是支持8~32位不同的架构处理器的,被加载入内存后 Program header描述的是一个段在文件中的位置
,大小, 以及它被放进内存后所在的位置大小,。
结构如下
ELFheader | | | Program header0 | / | | Program header1 | / | program header table | ************** | / | | section 0 | | | section 1 | | | ************* | | | section header 0 | / | | section header 1 | / | sectionheader table | *************** | / | |
简单的可以看出ELF的结构是由4个部分组成的, 分别是ELF头部, 程序表头, 节, 节表头。但他不并非是包含了全部的内容的
除了ELF的头是一定有的外, 其他的都按照ELF的头来确认个个值。
ELFheader
名称 | 大小 | 对齐 | 用途 | Elf32_Addr | 4 | 4 | 无符号程序地址 | Elf32_Half | 2 | 2 | 无符号中等大小整数 | Elf32_off | 4 | 4 | 无符号文件偏移 | Elf32_Sword | 4 | 4 | 有符号大整数 | Elf32_Word | 4 | 4 | 无符号大整数 | unsigned char | 1 | 1 | 无符号小整数 |
在这里要记住1个关键,在进入了保护模式的内核后,所有的地址都加上了Loader 的基地址。
转进内核的时候,Loader会将控制权再次的给内核,然后内核会切换推栈和GDT。如果在之前保护模式的概念已经明白点话
在这里基本很容易理解为什么,计算机会进行如此操作。又是怎么操作的。
举个很简单的说法
推栈是代码和能在进行扩展的一个实现, GDT是全局的描述符(让我们的内核操作变为C++中的父类), 在进入内核后,可以更好的用人性化的C语言来描述
和扩充,在保护模式下,内核的权限是最内层,那么可以更灵活的体现内核的灵魂体现。
最后我们在立马我们的中断和异常机制,利用IDT局部描述符,来对进程开始了操作!实现1个系统的呈现过程,其实我也很
想把过程在细节化,如果有可能,我很愿意把我学习到的理解,分享给大家。
在下次的手机中,我会来慢慢的介绍进程, 我知道很多人都懂进程,可以基于自己在以后平台操作系统实现关系,希望能给我点事件,毕竟这是我第一次看这几本书,而且我也没读完的在记录,但是在未来绝对不是仅仅读1次
进程
进程是我们大家平常在操作计算机,无论是干什么时候触发平率也相当高的功能。
把进程比喻成1个人, 轮换着做不同的事情。同时他可能受控制或者受限制于各种因素。
代码 | 代码 | 数据 | 数据 | 推栈 | 推栈 | 进程A | 进程B | /*进程调度 | 进程调度*/ |
进程之所以很麻烦,就是因为在一个平台上,我们不可能只有1个进程,那么好比1个人,不可能1天就仅仅只做1件事情一样,
但是每个事情友不一样,考虑的方式也不一样,可能你现在在睡觉,那一定要在床上,有可能你等下去游泳,那是绝对不可能在床上的
*****这里涉及到了进程的调度,推栈机制, 调用门, 中断和异常机制, 并且在不做这个事情的时候,我们的CPU肯定会把进程挂起状态
当然少不鸟的就是权限的控制, 还有就是怎么从1个进程返回另外1个进程在继续操作,而且相互不干扰。等等。有了这些起初
的想法后,那么我们可以开始先从有1个小的进程,然后不考虑特权的情况下来操作了。
待续。。。
2012/03/27 凌晨
|
评分
-
查看全部评分
|