一个操作系统的实现
文章平均质量分 92
Honcy Ye
EE&&CS
展开
-
六、内存管理
几个调试心得,一个小的不起眼的bug(完全由自己的不细心造成),导致自己饶了弯路,调了2天。好在也积累了一些经验,吃一堑长一智嘛!尽快记录一下,免得下次再犯。GP exception(General Protection):出现这个处理器异常的,显然就要考虑是特权级错误,因为在保护模式下,有可能是段描述符初始化的时候特权级设置错误。要特别注意循环语句中修改代码的时候,一些特殊的continu...原创 2020-03-31 16:00:00 · 204 阅读 · 0 评论 -
六、文件系统
这一章实现一个简单的文件系统。文件系统其实比较难以理解,所以先给出它的含义:用于存储和组织计算机文件数据的一套方法(怎么存,怎么增删改查):此时文件系统其实是一套机制,包括静态的存储方法和动态的管理方法存在于某介质上的具备某种格式的数据:通常说硬盘分区是某种文件系统时指的是这种。静态的,表明这个分区由某种策略和机制来管理。第一个的含义其实包含了第二种,只不过第一个含义的是以第二种为基础,...原创 2020-03-31 15:59:11 · 1979 阅读 · 0 评论 -
五、进程间通信
进程间通信(进程间消息传递)一、微内核 or 宏内核1.1 为什么进程间通信要先讨论微内核和宏内核?经过多年灌输式的应试教育,我们读书学习的时候,往往只是被动地接受作者或者是老师所传达的知识和方法,但是并不会先问为什么。为什么书的作者要这样编排,为什么解决这个问题要用这种方法,为什么这个系统要这样设计,为什么不那样设计…除了少部分真理,这世间万事万物的出现和兴衰都有着它背后的道理。我们学习的...原创 2020-03-31 15:58:20 · 385 阅读 · 0 评论 -
4. 输入输出系统(键盘和显示器交互)
输入/输出系统(包含键盘和显示器与用户交互)经过这一章,操作系统才拥有和用户交互的接口,用户才能通过键盘操作它,并在显示器获取结果。先是键盘键盘中断对应的是8259A的IRQ1,外部硬件中断处理的框架已经搭好,现在需要做的只是写好中断处理程序并把它的地址填进函数指针数组即可。键盘初体验先写键盘中断处理函数(新建keyboard.c)PUBLIC void keyboard_handle...原创 2019-12-09 17:15:11 · 2250 阅读 · 0 评论 -
3. 进程实现及其调度
进程、系统调用和进程调度进程是操作系统最重要的概念之一,实际上,实现进程之前的部分都不能被称为操作系统。进程的切换和调度等内容是和保护模式的相关技术紧密相连的,而这也是本书作者要花大量篇幅先介绍保护模式的原因,但是,对于一个只学过微机原理和C语言的小白(比如我)来说,理解起来还是太难了。为此,我特意先学习了保护模式相关的知识,具体书籍和路径前面已经介绍过。“对于进程的概念,只有在有了基于具体平...原创 2019-12-09 17:12:27 · 520 阅读 · 0 评论 -
2.BootLoader到内核雏形
内核雏形本章主要是研究一下内核的可执行文件格式ELF并实现一个内核的雏形,值得庆祝的是,这一章终于可以使用C语言进行编程了。首先,提出一个必须明确的问题——Loader应该走多远?完成了实模式到保护模式的跳转后。其他的一些工作,比如GDT、IDT、8259A的初始化等是交给内核做还是也由Loader完成?实际上,从逻辑上将,Loader不是OS的一部分,所以不该越俎代庖。因此,还是...原创 2019-12-01 11:29:22 · 329 阅读 · 0 评论 -
1.从主引导扇区到BootLoader
本笔记主要目的是记录整个过程和思路,并记下一些关键点和需要注意的不容易理解的点,很多细节就略过了,需要的读者可以自行google或者参考原书《Orange’S一个操作系统的实现》.整个实现过程代码参见github为什么要有BootLoader?前面我们知道了,BIOS会加载MBR然后执行它,MBR需要做的事情主要有加载内核、做好进入保护模式的准备工作(设置GDT等),然后跳入保护模式,最后...原创 2019-12-01 11:27:55 · 893 阅读 · 0 评论