《一个操作系统的实现》实践总结---写在前面
2016-02-15 11:58
260 查看
一开始学习操作系统课程的时候,是要应付考试。在学习的过程中,受大学老师的影响喜欢上看书了,从大三一直看到现在,也有两三年了。一点点深入下来,每当收获一些,那不知道的视野也扩大一分,受好奇与好胜的心理驱使着不断前进,越来越觉得要是不实践一下是不甘心的。
今年八月底开始按照于渊老师写的《一个操作系统的实现》来一步步实践,耗时两个月。除了最后拷贝到裸机上来检验效果没有做,其余的都是一行行代码敲出来的。本来计划十月底到十一月底把总结写出来,但是由于自己那时候还在上课,正好后来的课程还比较重要,像反汇编引擎和调试器之类的,也不敢再一心二用了,老老实实的跟着培训的课程走了。
我自己写总结的话,侧重于原理的解释和结构的建立,很少会直接贴一段代码来做局部功能的解说。我是按照代码的思路来总结我对整个流程的理解的。
如果有同学感兴趣想自己实践的话,我的建议是最好是不用作者提供的源码,哪怕是抄写一遍源码也比直接拿来用强太多了。作者的源码前面几章都是对的,但是到文件系统开始就会出错,可能我的环境有问题吧。
我自己的感受就是:
1.对于一些宏的定义,如果用作者提供好的代码,那就不太可能理解这个宏是在什么时候因为什么原因被提炼出来的。
2.如果用作者的源码我们可能读一遍大概懂了就会直接编译过去,不再耗费精神研习细节。如果我们自己抄一遍的话,抄写的话中间肯定会有错误,一般找一个错误都会把上下关联的代码逻辑都读三四遍,在找错误的过程中才能真正的理解某一块功能的实现。
3.对于makefile可以用一种很笨拙的方式理解它最初的形态和作用了。
4.对于作者对源码的每一步的修改都有切身的体会,能够前后衔接起来,不是孤立的一个个生冷的章节。
一开打算按照作者的介绍搭建实验环境的。后来发现无论如何自己是整不出来一模一样的,装了五六次都不满意。就全部上最新版的了。
操作系统:debian 8(用来编译源码和运行虚拟机的)
debian8的安装,我是按照最简安装方式的,中间安装软件那一步跳过了。要不然需要很长时间的。等系统安装好了,我们在命令行下安装gcc和界面程序就够我们使用了。
虚拟机:Bocks 2.6.8(用来加载实验的操作系统)。
它的配置文件和作者描述的有些出入了,vgaromimage路径到时候不太一样,仔细按照路径手动跟进去就明白了。
今年八月底开始按照于渊老师写的《一个操作系统的实现》来一步步实践,耗时两个月。除了最后拷贝到裸机上来检验效果没有做,其余的都是一行行代码敲出来的。本来计划十月底到十一月底把总结写出来,但是由于自己那时候还在上课,正好后来的课程还比较重要,像反汇编引擎和调试器之类的,也不敢再一心二用了,老老实实的跟着培训的课程走了。
我自己写总结的话,侧重于原理的解释和结构的建立,很少会直接贴一段代码来做局部功能的解说。我是按照代码的思路来总结我对整个流程的理解的。
如果有同学感兴趣想自己实践的话,我的建议是最好是不用作者提供的源码,哪怕是抄写一遍源码也比直接拿来用强太多了。作者的源码前面几章都是对的,但是到文件系统开始就会出错,可能我的环境有问题吧。
我自己的感受就是:
1.对于一些宏的定义,如果用作者提供好的代码,那就不太可能理解这个宏是在什么时候因为什么原因被提炼出来的。
2.如果用作者的源码我们可能读一遍大概懂了就会直接编译过去,不再耗费精神研习细节。如果我们自己抄一遍的话,抄写的话中间肯定会有错误,一般找一个错误都会把上下关联的代码逻辑都读三四遍,在找错误的过程中才能真正的理解某一块功能的实现。
3.对于makefile可以用一种很笨拙的方式理解它最初的形态和作用了。
4.对于作者对源码的每一步的修改都有切身的体会,能够前后衔接起来,不是孤立的一个个生冷的章节。
一开打算按照作者的介绍搭建实验环境的。后来发现无论如何自己是整不出来一模一样的,装了五六次都不满意。就全部上最新版的了。
操作系统:debian 8(用来编译源码和运行虚拟机的)
debian8的安装,我是按照最简安装方式的,中间安装软件那一步跳过了。要不然需要很长时间的。等系统安装好了,我们在命令行下安装gcc和界面程序就够我们使用了。
虚拟机:Bocks 2.6.8(用来加载实验的操作系统)。
它的配置文件和作者描述的有些出入了,vgaromimage路径到时候不太一样,仔细按照路径手动跟进去就明白了。
相关文章推荐
- 如何选择MySQL存储引擎
- Android实现手势滑动多点触摸缩放平移图片效果(二)
- Android Volley框架(三):解决Volley请求服务器返回中文乱码问题
- 2015湘潭邀请赛 E.Magic Triangle
- jQuery中绑定事件的几种方法
- android客户端点击图片,显示密码可见
- 修改Android签名证书keystore的密码、别名alias以及别名密码
- MFC之ActiveX的使用
- json与XML的区别
- qt event 判断事件类型
- 关于jquery的事件委托-bind,live,delegate,on的区别发展
- 2009-2016 web技术发展和展望
- 使用Ubuntu的android Studio 解决中文乱码问题(总汇)
- ATEN瞄准专业级影音市场,发表全新VanCryst™视频系列产品线
- TCP与UDP协议socket函数实例理解
- GCD之dispatch_after、dispatch_apply、dispatch_once等使用介绍
- 快速搭建Spring MVC 4开发环境
- Java陷阱之assert关键字
- 本科教育忽略的黄金C++<前言>
- 22.2 波形音频 I