之前八次课的学习,于我而言算是Linux内核学习之路的开始吧,感觉现在的水平还欠火候,对于Linux这座冰山,还只能勉强看到一个角。趁着课程基础部分结束,做一个小结,既是对之前知识的复习,亦是鼓励自己在探索Linux内核的路上继续向前。
由于之前信息安全课上对汇编语言的使用已经得心应手了,这节课学习起来便很是轻松。算是对汇编语言及一些基础知识做了一次复习。
这次课算是对C语言中的嵌入式汇编基本了解了,Mykernel实验的代码倒是挺简单的,虽然按照说明实验指导体验了一下,这个最精简版的内核。但是对于如何在Linux源码里打补丁,就能让这个小小的模拟内核跑起来的原理还是没有思路,希望以后可以通过自己的学习,解决这个疑惑。
这节课中第一次开始用真实的Linux源代码进行学习,对于源代码的大致组成结构有了一定的了解,也对Linux中的“main函数”(start_kernel)进行了学习。
使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
这次实验中选择了mkdir的系统调用,但是实现完之后发现一个问题,menuos 中没有实现ls命令,即使mkdir成功了,也只能通过程序的返回值观察到。刚想到这个问题时还傻傻的去查了下有没有ls对应的系统调用,后来觉得按照unix一切皆文件的设计哲学,应该要打开当前目录对应的文件从中读取,等以后文件系统学的差不多了再回来看看当时的想法。
gdb这个以前真的用的不多,那次老师检查让print 一个变量,然后问那个值为什么和之前设想的不一样,当时还真懵了,答不上来。原来就是gdb中显示的是下一个将要执行的语句,而不是刚刚执行过的语句。现在终于可以用gdb熟悉的调试程序了。
这次课开始就进入了困难模式了,最近事情又有点多,觉得有点跟不上这个节奏了,对于代码的阅读,看完之后没能在脑海里留下完整的印象。对于fork函数在底层是如何执行的有了更深刻的理解。
之前对于执行一个程序的理解,也只是执行了一个程序,现在心里会不自觉的想到 exec如何调用sys_execve,然后调用do_execve,再调用do_execve_common把函数参数和系统环境传进来进行相应的处理。
作为压轴的一课,老师竟然放大招了,请来了舞女来助兴,哈哈。最后那个ls的例子,对于理解Linux的一般执行过程还是还有帮助的
总结:
不得不承认,虽然很早就决定选这门课了,但是后来因为种种原因,还是没有完全掌握老师所讲的知识。但相信对于操作系统与Linux的系统的兴趣,会促使自己不断向一个又一个的高峰攀爬。