![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
自制操作系统
Java蜗牛
这个作者很懒,什么都没留下…
展开
-
自己写操作系统--(12)
快找工作了,一直没更新,放假一周的时间抽了点工夫做了LAB4的PART B,总体来说还是感觉比较难的,尤其是一段汇编代码和异常栈那乱七八糟的堆栈。一、概述本部分实验主要是实现一个copy on write的fork函数,第一步是实现一个用户态的page fault处理机制:首先用户态使用一个系统调用传递给内核态一个函数指针作为page fault的回调函数,接着当发生p原创 2014-10-06 11:04:00 · 673 阅读 · 1 评论 -
使用eclipse构建Jos学习环境--(0)
本文是 全方位打造 Eclipse 自定义开发环境 的延续,请先阅读这篇文章。笔者非vim爱好者,也非emacs 拥趸,奈何记性不好,对文本开发环境一直感到怯懦,虽转战Linux阵营,依然对Visual Studio的开发环境念念不忘。幸而Eclipse的存在,经过简单的配置,倒也可以满足以往在Windows下的开发体验,是为记。有了上篇文章的基础,再来配置 jos 的开发环境已经原创 2014-10-06 10:53:35 · 617 阅读 · 0 评论 -
自制操作系统--(3)
过了个年,好久没碰专业内的东西了,之前做的JOS相关的东西都快忘了,还是看了前面两篇日志才想起来。当进入内核后基本都是比较简单的代码了,我也并没有全部分析,根据讲义要求只分析了一下printf函数和堆栈的backtrace,所以这篇日志也就写这两个方面吧。1、printf函数。进入kernel后从i386_init函数开始,首先做一些初始化工作,包括部分内存的清零,初始化显原创 2014-10-06 10:48:26 · 603 阅读 · 0 评论 -
自制os(1)-bootloader
起初 神创造天地。 地是空虚混沌.渊面黑暗. BIOS运行在水面上。 神说、要有mbr、就加载了mbr。 神看mbr是好的、就用mbr加载了kernel。 神称mbr为引导程序、称kernel为内核.有晚上、有早晨、这是头一日。用课余时间重新拾起JOS,作为一个码农通过了解不同技术层面的机制对自己的技术水平提高非常大,而JOS作为一个MIT的开放课程原创 2014-10-06 10:47:31 · 654 阅读 · 0 评论 -
自己写操作系统--(10)
神说、进程要有多个、可以分片、切换、互不影响. 并要支持多任务、多处理器并行.事就这样成了。 于是 神造了多个内核栈,又开辟多个寄存器。 就把这些摆列在内存里、内核空间里、 管理多核,分别任务. 神看着是好的. 有晚上、有早晨、是第四日。 博主写完论文,又写了个简单的编译器,然后回来再拾起来差点烂尾的JOS发现代码已经完全看不懂了,花了一整天时间原创 2014-10-06 11:02:18 · 581 阅读 · 0 评论 -
自制操作系统--(8)内核
神说、内核要有自己的数据、使用户不可访问.事就这样成了。 神称高地址为内核空间、称低地址为用户空间. 神看着是好的。 神说、用户要有自己的进程、和自己的页表、并可以进行系统调用.事就这样成了。 有晚上、有早晨、是第三日。 1、lab3概述lab3大体分为两部分,第一部分包括执行环境(可以简单的理解为进程,下文也用进程代替执行环境)的建立和运行第一个进程,第原创 2014-10-06 10:59:56 · 1381 阅读 · 1 评论 -
自制操作系统--(7)内存(3)
接前一篇。上篇日志主要是完成了一些分页相关机制的工作,但还没有真正的去使用这个分页系统。Lab2的part3部分主要就是让我们使用part2中完成的映射机制来初始化内核的页目录和页表,并将此页目录加载到cr3里,让os真正去使用我们初始化之后的页目录以取代kernpgdir.c里面简单的页目录。在开始之前让我们看一下JOS的虚拟内存分布图,在part3里的所有工作就是照着此图实现其原创 2014-10-06 10:59:08 · 616 阅读 · 0 评论 -
自制操作系统--(6)内存(2)
接下来做part2,先上一张开启分页后的地址变换图:(完整的图在http://pdos.csail.mit.edu/6.828/2011/lec/x86_translation_and_registers.pdf)然后再放一张具体的地址变换的图:好当我们把这两张图也牢记于心的时候就可以开始实验的part2了。1、实验要求完成以原创 2014-10-06 10:54:57 · 693 阅读 · 0 评论 -
自制操作系统--(2)
接上篇,文件跳转到了entry.S里面,这是kernel的入口。首先面临这么一个问题,kernel被加载到了什么地方?回想上篇elf文件的加载机制,以及objdump里打印出的kernel信息,可以看到,kernel的代码段(text段)被加载到了0x100000的位置,也就是1m的位置,所以内存布局如下:+------------------+ <- 0xFFFFFFFF (4GB原创 2014-10-06 10:48:52 · 683 阅读 · 0 评论 -
自制操作系统--(5)内存
神说、内存之间要有映射、将地址空间分为虚实。 神就造出两级页表、将变换前的地址、变换后的地址分开了.事就这样成了。 有晚上、有早晨、是第二日。来到了lab2,内存管理,该实验分为两部分,第一部分为物理内存管理,第二部分为虚拟内存管理,本篇先描述lab1。做本章实验一定头脑中要时刻清晰的记住两个内存分布图:物理内存分布图以及虚拟内存分布图。物理内存的分布在原创 2014-10-06 10:51:24 · 643 阅读 · 0 评论 -
自制操作系统--(4)
Lab1还差最后一部分,就是给出具体的调试信息,如下面所示:[html] view plaincopyK> backtrace Stack backtrace: ebp f010ff78 eip f01008ae args 00000001 f010ff8c 00000000 f0110580 00000000原创 2014-10-06 10:50:32 · 717 阅读 · 0 评论 -
自制操作系统--(9)
LAB3代码已经上传。LAB3第二部分主要是处理系统调用。第一部分我们已经让第一个env运行了起来,接着这个env执行一个cprintf,这个cprintf是一个系统调用,因为os暂时没有实现系统调用,所以系统崩溃。在lab2我们就要完成各种系统调用以及exception和trap等的实现。handout地址:http://pdos.csail.mit.原创 2014-10-06 11:01:09 · 833 阅读 · 0 评论