推荐一个操作系统的lab

我推荐的这个lab,名字叫做ucore,这个lab来自清华大学的操作系统课程,首先要说明一下,这确实是非常好的一个lab,想入门linux内核的同学可以读一读这个lab所涉及的ucore的源码。

书籍推荐

其实只要大家认认真真做下去,收获肯定会非常的大。虽然这么说,但是,这个lab 对大家的基础要求稍微有一点高,你至少要懂一点汇编,懂一点C。代码里面很多都是汇编,C交替着写,我推荐几本书,给大家补一下基础,大家可以参考一下。

第一本是王爽的汇编语言,这本书适合入门,但是只涉及到了8086的一点东西。书讲的浅显易懂。

汇编语言

另外一本书是《x86汇编语言–从实模式到保护模式》,这本书算是一本进阶的书籍,同时也是80386汇编入门的书籍。这本书里大部分的知识,这个lab都用得到,所以强烈推荐大家阅读。

x86汇编语言--从实模式到保护模式

还有一本需要参考一下的是《程序员的自我修养–链接、装载与库》,因为这个lab还涉及到了elf格式的可执行程序.

程序员的自我修养--链接、装载与库

当然,最好的话,能附带这么一本《orange’s 一个操作系统的实现》,作为参考是最好不过啦。这本书的话,汇编有点多,其实很多汇编都可以用C来代替。不过里面有一些点,这个lab也涉及到了,所以推荐读一下。

orange's 一个操作系统的实现

上面的几本书里应该涉及到了这个lab所需要的大部分的硬件以及汇编的知识,其余的,你可以去google或者baidu

做这个lab,你可能会遇到非常多的困难,比如说,调试异常困难,代码半天读不懂,没事,这都是很正常的情况。要是觉得困难实在太大,我建议你从这个玩具内核入手 – hurley,这个内核非常简单,适合积累一些最基本的知识。

关于代码的阅读

linux上面读ucore将近1 M的源文件真心费力,生活其实可以简单一点,你可以使用宇宙最强的idevisual stdio来进行代码的阅读,像我这样:

代码演示

是不是很爽,告诉你,爽翻了。特别是遇到一堆不知从哪里冒出来的宏,一堆不知名的函数的时候,VS可以实现十万分方便的跳转。

我推荐两个插件,一个叫做visual assistant,这个用来增强自动补全以及跳转操作,一个叫做visualGDB,是一个帮助你在window上面写linux程序的插件。自己去搜索安装吧,网上教程一大堆。我就懒得写了。

当然,你不可能用vs来编译代码,但是,vs会给你阅读代码,修改代码带来非常大的方便性。

收获

实在做不出也没有什么关系,因为很少有人会真正去做一个操作系统吧。但是读懂源码,我觉得还是非常有必要的,我稍微讲一下,我个人读完了这个lab源码之后的感受吧。

  • 以前学c的时候,我总是很好奇,printf之类的函数究竟是如何实现在屏幕上打印出字符的,从来没有老师讲过这些东西,现在,我懂了,原来我们只要将字符写在内存中的某个区域,然后驱动程序会自动帮我们实现字符在屏幕上的输出。

  • 为什么cpu可以实现进程的切换?一切都是因为中断,一旦发生中断,计算机要立马切换到中断处理程序中去,利用这个特性,操作系统设定好时钟频率,让时钟每多少毫秒触发中断,内核就可以获得控制权,从而实现进程的切换。

  • 一切的进程,只是一堆数据而已,只要你保存好这段数据,cpu先去干点别的事情,一段时间后再恢复这些数据,进程又活了。由于cpu的速度太快了,所以你会一直觉得进程还活着,其实它已经切换了几十次了。

  • 内存的分段,分页机制真是漂亮的抽象,逻辑上连续的页,实际在内存中可能相隔十万八千里,可是这并没有关系。因为我们已经 屏蔽了它,上层的应用是永远也感觉不到差别的。

  • 所谓的程序文件,加载到内存里,操作系统要对其进行重定向处理,在每个用户进程的眼里,它自己是独一无二的,分段分页机制完美地实现了进程的隔离。

  • … …

对于我来说,收获特别大。我懂了很多以前我自认为懂了的东西,当然至于这些东西我是不是真的懂了,我也不知道,因为人的认知总是在向前推进的嘛。

但是说实话,我对写一个内核什么的,没有多么大的兴趣,所以,我不会继续钻研地太深。所以,对于这个lab,我也只是玩一下的。

不过,读完这个lab,实验完这个lab,加上我以前学的编译器,硬件,汇编等一系列的东西,从硬件到软件这个层次发生的事情,我现在算是比较清楚了。

如果你要问,学这些玩意对你找工作有什么益处的话,我可以说,短时间内可能还真没有什么益处,不过这些玩意,算得上是一个编程爱好者的基本修养吧。就这样吧!

至少在现在,写一个玩具性质的操作系统并不是一件很难的事情,关键是你不熟练,写操作系统也没有很高深的技巧,它也不需要你有很高的智慧,它的理论基础在几十年前就已经成熟了,已经有无数人写了无数的操作系统,就如同编译器一样,我相信,只要你足够熟练的话,花点时间,参照各式各样的教程,你也能够写出一个操作系统,对于社会,这可能没什么卵用,但是对于你自己,你可以从中掌握到很多底层的细节.当然,这也可能没有什么卵用.

如果感到代码层层叠叠,数据结构花样翻新的话,可以参考一下我的注释版lab:cs-ucore

学了这么久的计算机,我突然感觉学海无涯,每一个点扩展出去,都是无穷无尽的,真心有点累,不行了,我要休息一段时间了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值