|
|
相关的其他资料,实验报告,代码,书籍应该都只能在南大校内访问……不过这份总结本身就非常不错了
--------------------------------------
作 者: jingdizhiwa
标 题: 20041227-os实验最终总结
时 间: Mon Dec 27 15:15:41 2004
点 击: 20
大家帮忙看看,给以后的学弟学妹铺好路
要不,发动所有的02cs的?
==============================================================================
==========
本文档由以下几个部分组成
1,如何学习linux
2,如何根据《边干边学》做实验
下面详细介绍
1,如何学习linux
*学习linux的目的是什么?
总体说来一句话,用linux来完成我要做的工作!也就是说,如果同样的任务你能用windo
ws做,而且做的更好,那么放弃linux吧,我会说你做
的对。而如果你想了解的更多,那么请向下看
*学习linux可以学习哪些方面
首先,要学习使用linux,作为一名计算机系的学生,这个应该是必须掌握的。尤其是这个
学期做内核试验,如果一般的使用都不会的话,内核
试验会遇到很大的困难。这部分很简单,只要安装一个版本的linux,学会安装软件,了解
一般的命令即可……
其次,学会shell编程,在平时的使用中,你会发现有许多东西使用shell更加方便。
继续深入,就看你的目的了,如果你想做一个系统管理员,一些服务器的搭建就要好好练
习;如果你想对操作系统很感兴趣,那么可以研究内
核(本学期的试验就是从内核的角度来验证操作系统的原理的);如果你对编程感兴趣,
linux所代表的开源世界中有很多源代码供你研究和学
习……总而言之,linux是个大宝藏。
*如何学习linux
首先学会装一个linux,现在许多linux的版本,比如Red Hat,Suse等,安装方式已经和w
indows差不多了,把安装盘放进去,然后按照提示就
可以了。安装linux主要的困难是分区的问题,大家可能不知道如何分区,我是这样分区的
,一个SWAP分区,大小是内存的两倍,然后直接是一
个/根分区。因为我的硬盘比较小,而且重要的东西都放在移动硬盘里面了,所以我重装一
个系统没有任何的留恋。如果你想保留安装的软件之
类的,建议再划一个/usr区,安装的程序一般都在这个分区里面。如果你还是看不懂提示
,那么,你应该找几本书来看看了。
**开始要看什么书?
任何一本关于linux的书都可以,我认为,只要你静下心来,看书加上实践,很快就可以达
到熟悉linux的程度。现在的书很多,都会讲到linux
的历史,linux的特点,如何安装,如何使用,这里有一点要事先声明,linux下面使用很
多时候都是命令行,所以不要有windows的想法,用鼠
标拖拖点点就可以了(虽然现在的linux也可以,但是始终不如命令行方便快捷),这里,
学习好这些命令的使用就可以拉。当然这些书里面肯
定还有如何安装软件的介绍,如何配置服务器的介绍,好好钻研一本书,linux就基本熟悉
了。
**开始可以看什么网站?
推荐www.linuxsir.cn/bbs,我就是 ... ,有问题会有
人及时回答,但是最重要的是,这个网站的精华区整
理的很好,建议基础版面的精华区一个帖子一个帖子的看完,内力肯定会大有长进。
遇到问题时,首先想到的应该是www.baidu.com和www.google.com,利用搜索引擎查找网上
的资料,然后可以在www.linuxsir.cn/bbs里面利用
搜索功能查找以往是否有相关帖子。我的建议是最好不要灌bbs,没意思,所以,实在没有
办法,才在sir里面发个帖子问问吧。不过我相信,
你肯定会在网上利用搜索引擎搜索到你要的东西的。
**如果你可以坚持做到这里,你对linux应该可以熟悉使用了,下面的就看个人兴趣了:
***如果你平时经常用linux,学习shell编程吧,会让你使用得更加得心应手。这里有本电
子书,似乎叫做《LINUX与UNIX Shell编程指南》,
可以到thephy.nju.edu.cn去搜索(校园网),或者到百度或google搜,但是那样比较慢,
这本书我认为是很全面了,不知道还有没有更好的,
如果有的话,请给我发信jingdizhiwa@lily
***如果有对做系统管理员感兴趣,那么可以使用linux搭个服务器,apache+php+mysql这
样的是一般的设置,或者你可以利用火鸟搭一个bbs
:),如果你够运气,你甚至可以取代小百合也不一定。这个时候,找一些系统管理或者
网络管理的书来看看(图书馆有),或者网上也有相
关论坛,这些都要借助www.baidu.com或www.google.com了
***如果你对操作系统感兴趣,内核就是你要做的了,我们这个学期所作的试验就可以使你
对内核有所了解。虽然这本书里面有很多瑕疵,单仍
然是一本好书,我会在下面说明的。
还有几本书,可能会对你研究操作系统感兴趣,这里全部列在下面
《操作系统:设计与实现》
《莱昂氏Unix源代码分析》
《Linux源代码完全注释》(这本书刚刚出版,但是电子版的已经流传很长时间了,以linu
x0.11版介绍)
《linux设备驱动程序 (2nd)》
我认为这几本都很经典
其他的还有《understanding linux kernel》《linux内核源代码情景分析》(浙大出版)
之类的,有时间就看看吧
***如果你对编程感兴趣,那简直太好了。linux的GCC是最规范的编译器,很多windows下
的VC老是报错的程序,在linux下可能就很容易通过,
好好编程吧,编程还有很多书可以看
《advanced programming in the unix environment》 (简称APUE,中译unix环境高
级编程)
作者:W.Richard.Stevens
《unix programming environment》 (简称UPE,中译unix编程环境)比较适合初学者的,
深入浅出,
**再深入下去,就凭自己兴趣去发掘网络的潜力吧,以上这些书籍大部分我都看了一点,确实
比较好,网上的评论也都很好
先总结一下吧,学习linux要看自己的兴趣,也要看自己想做什么,有了目的,学起来一是目的
性强,上手快,容易通,另外一个就是不容易厌倦.
2,如何根据《边干边学》做实验
我还是先说说我的经历吧,本来在做这个实验之前,我认为我已经初步掌握了linux,机器上
面也只有一个linux系统,每天都在看linuxsir上面的
精华帖子,然后一项一项的实行,感觉不亦乐乎.后来,可恨的组成原理出现了,老师给我们一
个模拟器,exe格式,大家知道exe在linux支持不好,为
了使用这个东西,我在linux下面虚拟了一个98系统,但是,我的老牛机器实在是跑不动,装了
wine,但是中文支持不好,后来,bbbush师兄和我交谈
中,深深的教育了我,他说你现在已经不小了,一个系统是拿来用的,不是来玩的,还是什么熟
悉,什么熟练就使用什么系统比较好,现在最重要的是
什么?不是你会装多少软件,而是你会不会编程,编程的能力如何?所以我重新装了windows,
实现双系统(后来陆续装了rh,Fc3,debian,Suse,是我
们系机器上linux系统最多的,但是我还是经常使用windows).这个也是我现在想对后来的师
弟师妹们说的,编程是最重要的.装了linux也是为了
更好地编程,当然,linux在以后的时间里,会越来越重要的,建议大家在课余少玩游戏,多玩
linux,权当放松.不过要分清主次,不要本末倒置.
《边》书还是不错的,虽然有很多错误,足以让一个新手放弃,但是只要坚持下来,就会
发现这本书确实不错。
我还是一章一章的来把
*第一章,了解内核。
**首先是一些基础的知识
内核版本的高低和含义,内核源代码目录结构,如何编译内核,如何查看linux内核状况
,如何使用gcc和gdb编译和调试程序
**重要的地方
1,编译内核是经常容易出错的地方,建议升级内核之前看看/usr/src/linux-x.x.x(版本
)/Documentation/changes里面的介绍,需要的
工具版本,如果你机器上面的版本低于要求的版本,一定要升级以后再编译内核,而且在机房
是2.4.22的内核,不要贸然升级到2.6,否则很容易挂
掉,升级之前看看这个文章(虽然有些不一样了,但是大部分还是适用的)(文章太长,我放在
《303&内核升级注意事项》内)
另外,除了编译,编译完以后的grub选项也是要好好研究的,否则,按照书上面的会出错
一般来说,编译步骤是:make mrproper; make config/menuconfig/xconfig; make dep;
make clean; make bzImage; (make
modules; make modules_instll; 如果编译模块就选这两个),下面的按照书上p8下面的步
骤,
#cp /usr/src/linux-x.x.x/arch/i386/boot/bzImage /boot/bzImage-x.x.x
#cp /usr/sc/linuc-x.x.x/System.map /boot/System.map-x.x.x
#ln -sf /boot/System.map-x.x.x /boot/System.map
然后修改grub参数
重新写一个新内核的启动选项
title YOUR_KERNEL
root (hd0,0) -->这个盘是你的root分区所在的盘,一般来说/dev/hda1 写成 (hd0,0)
kernel /boot/bzImage-x.x.x ro root=/dev/hda1 vga=792 --> /dev/hda1 指向你的根
分区所在硬盘
也就是说没有initrd 那一行,“root=” 也是固定的/dev/hda1
(注意:这个地方很多人没有搞懂,导致以后的实验都么没有办法做)
大家最好找个grub介绍的文章看看,我也找了一个,放到后面的《grub学习笔记zz_from_l
inuxsir》,更多文章请看
http://www.linuxsir.cn/bbs/showthread.php?s=&postid=18053
2,课本的P10中的procinfo程序可能机房没有,使用不了,你可以按照其后的实验步骤,自己
编写一个kinfo,实现同样的功能.kinfo里面
有一些错误,但是只要c,c++稍微懂一点,都可以把错误挑出来,无非就是一些变量没有定义
之类的,自己添加上就可以了.
3,gcc和gdb非常重要
这一点,我吃了很多的亏,如果一上来就找到gcc的所有使用参数,我后来就可能不会吃这么
多的亏了.现在我也仅仅会编译一个程序而已
,至于调试还是一窍不通,但是这个绝对重要,我想在期中考试以后肯定要好好钻研一下的.
*第二章,shell
这一章,如果你时间充足,可以看看我上面提到的这本书,《LINUX与UNIX Shell编程指
南》,如果你没有时间的话可以直接看课本,
其实,课本就是我上面所说那本书的浓缩版,大多数的东西都帮你总结好了。
这章我就不多说了,很简单,你可以自己实现一个shell,或者你用shell写一个很漂亮的
程序。前提是,你会使用linux,否则你看书
会有不知所云的感觉。
*第三章,内核时钟
大家到这里就牵扯到读内核源代码了,最好的方法就是先弄清楚数据结构,知道关键函数的
功能,然后就做实验吧.根据我们年级的情况,
这个实验不用编译内核,应该还是很简单的,我没有做这个,大家可以尝试一下,通过实验了
解内核时钟.如果你不太在乎也没有关系,这章对后面
的影响不是很大.
*第四章,内核模块
这一章是后面很多试验的基础,许多人没有做下去就是这里出了问题,一开始,我看这章的
时候,认为这章是最容易理解的,代码容易还有
图在旁边参照,所以理论知识很容易就掌握了,但是最试验却出现困难了,连最简单的Hello
world就出错了.
这里有两个地方需要注意:
** 1)
你的内核版本很重要,2.4和2.6的内核模块个是不一样,我一开始时是用2.6的内核,出现错
误了,换成2.4还是不成功,于是上网,找了很
多资料,结构发现,程序没有错误,是自己的编译命令有问题,对于书上的hello world,应该
使用的命令是
#gcc -c helloworld.c -D __KERNEL__ -I /usr/src/linux-x.x.x/include
-D选项其实是#define语句,如果你的程序里面没有#define MODUEL,编译命令还应该加上
-D MODULE,这里就不用了,否则会显示
MODULE重复定义,-I 后面跟上的是目前所使用的内核所在路径,切记
** 2)
上面是在2.4.20-8的内核下试验成功,2.6的内核后来也有人发贴说可以编译内核,这里附
上文章《linux2.6.添加模块方法》希望后来
人可以尝试一下
** 3)
有关printk,<1>表示的是优先级,0最高,7最低,具体的表示请看课本p164,如果你使用的
图形界面的话,很可能是因为你在图形界面,而
且由于优先级比较低(课本的实验环境肯定是文本界面),而看不到内核输出的信息,这里有
几个解决方法,一个是将所有的优先级都修改成为0,这
样肯定可以出现,二是使用命令 dmesg看输出信息
** 4)
另外,在做这个实验中,一定要对proc文件系统好好研究一下,以后的实验中这个文件系统
再次出现
*第五章 系统调用
我在实验总结已经很详细地写了如何做这个试验,为了避免重复劳动,我这里就不具体说
了,我只做了最简单的添加一个系统调用的
,关于课本第二个试验,一个更复杂的系统调用的例子,由于是使用内核模块,我认为第
三章做出来了,这个应该也不是很难的,大家自己动
手尝试
学习这一章,最重要的了解linux一层一层封装的思想以及系统调用的详细过程,有关系
统调用的一些数据结构和关键函数。
有意思的是汇编的格式是和我们大一学习的汇编语言是不一样的,mov 变成了 movl,而
且源操作数和目的操作数位置不一样,还有立
即操作数前面有个百分号%,如果你读源代码,估计会遇到更多.
如果遇到困难,我估计也是编译内核的错误,回过头看看当初自己是如何解决第二三四章的
问题的,前面如果都顺利下来的话,这里出现
的问题应该都可以解决.
*第六章 共享内存
这一章不用编译内核,所以做的人也很多,理解了数据结构和关键函数以后,大家可以先照
葫芦画瓢,把课本上的作出来再说,然后可以自
己写个其它的东西,这一章主要是了解理论知识,其次就看个人的创新了.
*第七章 虚拟内存
说实话,做完这章试验之后,我对操作系统的分页和分段机制有了更深刻的认识.对虚拟内
存也有了一定的了解了.
照例,先了解数据结构和关键函数(本章里面的关键函数很多),
做试验一的时候出现错误, P234中部,同理加入EXPORT_SYMBOL(jiffies)这句话删除,因为
在我的内核中(2.4.20-8),这句话已经存在了
具体看我的实验报告吧
*第八章,第九章
第八章,我没有做;第九章,我做了,但是没有做出来,原因是怎么查找都找不到for_each_u
ser_struct(up)这个函数曾经在内核中定义过
.我在水木bbs找到某人转载原书作者的勘误,说这里原程序错误太多,要我们具体看源代
码,或许应该看看2.4.18的内核代码,大家可以做做
看.
这里不得不说如何快速查找源代码,在你要查找的目录下使用命令
#grep word_you_want_to_find -R
然后等待一会儿,就会出现在什么文件,多少行之类的
*第十章 驱动程序
推荐一本书《linux device drivers》,英文已经出第二版了,中文的只有第一版,我都
搜集到了,大家可以参照。
*第十一章 文件系统
要做这章,最好把make config/menuconfig/xconfig里面的选项都看看,根据自己机器的
配置做,否则很容易出现错误,比如我一开
始没有把ext3文件系统编进去,导致根本无法启动内核。
另外,在做这个实验的时候,p459页缺少p457页最后面的两个头文件
include/linux/ext2_fs_i.h
include/linux/ext2_fs_sb.h
具体看我的实验报告吧
感觉起来,关键的地方还是再编译内核和加载模块这两个是拦路虎,这两个都弄清楚了以
后,后面的就是一马平川,我由于时间关系,仅仅把
书上面的做了,没有能够继续深入研究下去(因为马上考试了:),我认为,如果大家看了
我的这个介绍以后,肯定不会犯同样的错误,肯定有
时间继续深入研究下去了.这里面感谢水木bbs,我在上面找了很多好东西,最重要的是一个
FAQ,我也附在后面了,大家可以看看,真的是高手阿
基本上就这样吧,当然还有一些参考的东西,我放在文件夹<OS_REF>内部了,我争取上传
到ftp上 |
|