2. DOS 多线程
写DOS的时候 ,我在想,这么老的东西干嘛还要用它呢,而且Turbor C 还那么难用。
然而还是要做的,初期写代码的时候,发现老师把四个例程合并到一个C文件里面了,带来了很严重的变量污染,
全局变量放在一起,搞不懂了。
后来萌发了,写几个库文件的想法,后来发现这么搞得画接口成本太高,后来又发现,多个C文件不同同时共享使用一个全局变量会报错,
而且在Turbor C里面也没法写Makefile。后来还是把函数都写到一起了,但是是分成四个文件写的。
自己从底层去实现DOS多线程还是蛮有趣的
3.文件系统
老师说,文件系统是最比较简单的,后来我信了,但是自己真正做的时候发现并不是这样。
操作系统理论并没有好好学,然后自己做之前花了好多时间,搞懂各个部分的关系定义。
比如元数据Metadata,FAT表,Boot Block 引导块等等,同样的还是那个问题,初期在看文档的时候,描述的不是很容易懂。
同时关于各个结构体部分,包括结构体的属性,觉得老师的命名规范不好所以就自己重构了,导致,后期写代码的时候,
参考学长代码的时候,遇到很多问题,但是还是觉得自己设计的结构体会好一些。尤其是Open File Table中我把原来的一个整体
拆分成 FCB(File Control Block),FDT(File Descriptor Table)和 isUse字段,这样在操作和赋值的时候就会方面很多,
自己差不多花了半个月的时间从早上8:00到晚上23:00,写代码调BUG,重构了三次,在结构体设计上纠结了大量的时间,
很遗憾自己版本没跑起来,运行一直有BUG。
另外,Magic Number 魔数的定义有两个,一个是系统文件或者其他格式文件起始位或者终止位特定的字符串例如“1010101010”
还有一个定义是出现在编程里面,很突兀的出现的数字 1024 变量+1 等等,看的一头雾水,还得想侦探小说一样,花大量的时间来
搞懂这里为啥要这么写,总之这是非常不好的编程习惯。 另外如果变量名称起不好,会给理解功能带来非常大的阻力,最好的代码
是把注释写到命名中。
PS: 关于模拟系统的尺度,时间存储处理和其他跟寄存器相关的约束,觉得没啥必要,毕竟系统也是比较老的类型了,这个并不是重点
4.Linux部分
开始的时候,没有好好看课程设计指导书,所有的东西差不多都是百度来的,花了好多时间。
一开始其实我最大的困难不是不会写程序,而是不知道老师要的是啥,这个就比较尴尬了。
然后,初期还有一个大的门槛是,Linux操作系统下面的各个库函数的细节,一堆函数各种参数,曾经一度质疑过人生。
后来发现了Linux操作系统的命名规律,rcv[recive] ,snd[send],ctl[control]等等,命名简约,体现了Unix体系的设计理念。
之后System V 和POSIX之间,后来才知道System V 出现时间比较早,POSIX机制是建立在System V之上的,
使用Posix机制会更易懂和易用一些。
另外还有一个收获是学了Makefile的使用,初步了解了Build构建,这也是自己比较骄傲的地方
给老师的建议
- 开放基础代码.c ,大家每次都是从底层一点一点造轮子,一方面,有能力这么干的人是少数,大部分同学还是以借鉴学长的代码为主。另一方面,每年大家写出来的水平都差不多,把大部分精力都放在底层实现去了,但是操作系统里面讲的一些调度算法等等反而没有用上,这样就有些舍本逐末了。
- 发布基础代码到Github上面,学生可以提交改进,这样就可以进化,关于操作系统的代码会越来越完善,考核方式,有能力的学生,可以以改善代码,拓展功能为考核条件。
- 没有连贯性,课程设计应该粒度变细,拆分成模块,样例代码可以给一部分,其他的需要学生去填,从头到尾,新的课程设计需要用到之前的课程设计,这样到学期末的时候,大家都会有一个自己的操作系统的版本
- 自选课程设计主题,学生可以不可以自己选题,比如在一个嵌入式的板子上面自己写一个操作系统,或者移植操作系统到板子上面
- 关于团队合作,团队合作模式是一种很好的模式,但不是对每个人都试用,如果单纯为了团队合作而去团队合作,最终达到的效果,可能不会很好
- 关于课堂上课,老师像一个慈母,老师关于操作系统上非常奇妙的部分,视若珍宝,恨不得都交给学生,但是学生接受信息是有限的,尤其是没有相关实践的体验,单纯理论的灌输,没有共鸣,最终能够领悟的部分其实会很少,学会了一些细节的计算题其实这不是最重要的。
老师只讲一下框架就可以了,细节需要学生自己搞懂。 - 上课形式,针对操作系统这门课的特点,比较适合MOOC的形式,老师提前把课程录好,大家可以比较方便的学习,而且进度可以异步
省下的课时时间放在课程设计上面。这样不至于学生跟不上老师进度的情况
推荐老师看一下,清华大学在学堂在线上面的操作系统的课程,课程的结构和模块的设计[需要注册一下学堂在线的账号]
http://www.xuetangx.com/courses/course-v1:TsinghuaX+30240243X+2016_T1/courseware/be5b8d4fec0c4c329d19845020bc67b2/39384cfa48f44ee8a99561f69f4db4a5/
写在最后,老师我很喜欢你,对自己所从事领域喜爱痴迷欢喜的老师是我一直比较敬仰的,当时选课的时候就是冲着你的严格来的,虽然最后自己分数可能不会很高,但是只要收获满满就很满足了,