linux基础与应用学习感想

linux基础与应用学习感想
linux基础与应用学习感想

linux基础与应用学习感想

首先就是基础知识,俗话说工欲善其事,必先利其器,Linux 下95%以上的代码都是由C语言编写的(还有部分汇编和脚本),所以要想学好Linux,必须要有扎实的C语言基础,C语言看似简单,但要学好并不容易,它绝非我们大学教材里面讲的那点东西。而且千万不要认为C语言过时了,它是开源社区,系统开发和嵌入式开发方面的王者,在软件世界可以预见的未来,C语言将永远不会被淘汰,并将持续不断的焕发生命力。要学好C语言,没有别的办法,除了多写,多练,多看书,多看优秀代码(例如Linux 内核代码)。在此,给大家介绍几本我读过,并且读后觉得效果不错的经典书籍,入门的就不介绍了,大学基本上都学过,这里介绍几本进阶的,《C专家编程》,《C和指针》还有《C语言深度剖析》,前两本是国外优秀经典教材,国际级Hacker的巨作,是C 语言进阶必备书籍,后一本是国内一个高人写的网络书籍,很多地方也参考了前两本,由于是中国人自己写的,并且语言诙谐幽默,读起来比较容易理解,把这几本书吃透,再加上大量的练习,你基本上就可以大胆的说你精通C语言了。第二个需要掌握的基础知识就是数据结构和算法,Linux的代码里面运用了大量的链表,队列,堆栈,Hash表,排序查找等数据结构和算法,所以把这些基础搞好,在后续的开发学习中会有事半功倍的效果。这里也没啥好多介绍的,计算机专业的话《数据结构与算

法》课程是最重要的基础课,掌握这些是最基本的要求,没学过的话最好也找本书好好研究下。当然,上面提到的基础知识也不是说要非常精通才能学Linux,C语言和数据结构不是一朝一夕就能学好的,一些东西先了解下,等在后期的学习开发过程中再慢慢补充也行。

学Linux要怎么入手?有哪些方法和路径?我学的时候也在网上参考了很多Linux前辈的学习路径,基本上都大同小异,殊途同归,总结出来由简到难就是使用Linux—〉Linux系统编程开发—〉驱动开发和分析Linux内核,我也是这样一路走过来的。要使用Linux,首先你要有思维上的转变,忘掉Windows,Linux和Windows的设计思想不同,操作方式也有很大的不同,Windowws以图形操作为主,而Linux的精髓在于命令行,基本上所有的Linux 高级用户都是以命令操作为主,所以忘掉图形操作吧,把自己变成&;命令控&;,多学一些命令,你会发现一切会变得简单。然后学习下gcc,Makefile和gdb,这些是Linux编程的编译器和调试器,先知道怎么用就行了,在以后的编程中会大量使用到,到时候自然就熟悉了。还有就是要学会搭建自己的开发环境,学着配置下samba,tftp之类的网络服务器,在以后都可能用的上的。

现在我们就进入Linux的系统编程,Linux的系统编程主要分为文件操作,进程控制,线程控制,信号处理,IPC(进程间通信)这几个部分,这些都是Linux编程的基础,必须要掌握。就文件操作来说,在Linux的内核层,很多系统接口和设备驱动的节点

基本上都是以文件的形式映射到上层文件系统,用户要访问这些设备都必须通过文件操作来进行。而且世界上不存在只有内核的操作系统,如果没有系统级的编程,内核就只是束之高阁的玩具,所以就算你的最终目的是驱动,是内核,这些东西也是必学的,在学这些的过程中也能锻炼你的Linux思维,加深功底,有了深厚的功底,后面的东西看起来会变得很简单。在这个阶段我再推荐两本书,人民邮电出版社的《Linux C编程实战》,这本书是Linux下系统编程的入门级书籍,虽说是入门,但涵盖了Linux 下系统编程的所有主题,详略得当,也比较容易读懂,很适合初学者。还有一本就是国外的经典教材《UINX 环境高级编程》(Advanced Programming in the UNIX Environment),这本书很厚(780页),我自己也没看完,讲的比前面那本更深入,更全面,也会更难一些,网上有人评论说在Linux系统编程上遇到的所有问题基本上都能在这本书上找到。如果时间精力允许的话,强烈建议读完此书,并作为案头教材,随时参考,当然如果你暂时没有那么多精力的话,把第一本书看完并吃透,你也可以进入下一阶段---内核!

进入内核,你的思维又得转变下了。我在这里先声明一个概念,关于Linux操作系统的两种运行级别,在intel cpu上有Ring0-Ring3四个运行级别(其实不止是intel的cpu,几乎所有的cpu都有不同的运行级别,只是定义不同罢了),不同的级别运行权限不一样,一个低级别运行态不能随便访问高级别运行态的

数据。但在Linux上只用了两种,Ring3级运行用户态,Ring0运行内核态,没有使用Ring1和Ring2。Ring3状态不能访问Ring0的地址空间,包括代码和数据。Linux进程被映射到4GB的地址空间,0-3GB是用户态和内核态共享的,3GB-4GB是内核态专用的地址空间,这里存放了整个内核的代码和内核模块,以及内核所维护的数据。用户的应用程序是运行在用户态的,如果需要访问内核态的数据,比如应用层需要与驱动交互,进行网络数据发送等,则必须使用open,read/write,ioctl,send等系统调用才能访问到,系统调用会调用到内核中的代码,这时,必须切换到

Ring0,然后进入3GB-4GB的内核地址空间去执行这些内核代码,完成后,切换回Ring3,回到用户态。这样,用户态的程序就不能随意操作内核地址空间,对内核起到一定的安全保护作用。所以当进入内核编程时,一切也要小心,稍微不注意就会把系统搞挂。另外还有一个事情提醒下大家,内核态和用户态相当于两个世界了,两个世界两个制度,之前在应用层编程的用的得心应手的C函数库在内核态就不能再用了,之前的很多编程调试技巧在内核里面也不起作用了。所以,我们又得从&;Hello World&;开始了。

写一个内核模块程序应该算是内核的&;Hello World&;了,把这个程序编译并装载进内核运行后,了解其运行机制,你基本上就算进入内核了(当然你也得先了解内核的基本架构,知道怎么编译配置一个内核),但后面的路还很长,相当于万里长征的第一

步。接下来你就可以研究Linux驱动了,关于驱动的学习,除了Linux自身的驱动原理架构要掌握之外,硬件基础和实践都是很重要的,所以对硬件基础较差的初学者来说这个阶段最好有人带,一个人自学的话往往收效甚微,你自己琢磨一个星期都想不明白的事情,别人可能一句话就能把你点通。这个阶段不得不推荐的书当然就是Linux驱动开发人员的圣经---O'REILLY的《Linux设备驱动程序》(俗称LDD)了,现已出了第三版,基于Linux2.6内核,这本书理论讲解透彻,包括了Linux驱动开发中常用到的所有技术点,把底层内核提供给驱动的API介绍的也比较清楚,而且每个技术点都有相应的例子供你练习,学的时候注意多实践,不要一味的看书,而且不要指望第一遍就能看懂他,我断断续续看了三遍以上,很多地方也还拿不准,这本书对做驱动的人来说,读五遍以上一点都不过分,每读一遍你都会有新的收获,回味无穷。但这本书对基础较差的人来说起点偏高,不容易看懂,国内也有不少关于Linux驱动的书,但真正能拿的出手的不多,宋宝华的《Linux设备驱动开发详解》还算不错,他很多地方参考了前面那本,虽说比起来还有一定的差距,但对初学者来说更容易看懂,建议两本书交叉着一起看,遇到不懂的可以相互参考,看完这两本书,你基本上就掌握了驱动开发的基础了,剩下的就是实际开发经验。驱动方面我就不多说了,很多同事都有丰富的经验,每个人的基础不一样,所处的环境不一样(是否有

人带,是否有机会参加实际项目开发),学习的效果也是有很大的差距的。如果真的没人带的话,最好自己买个arm开发板,在网上找资料,自己玩板子,没有实际调试,就枉谈驱动开发。另外在学习的驱动的时候最好能深入研究驱动的实现原理和机制,多思考,比如知道怎么去创建一个字符设备了,但对实现原理不大清楚的话就深入点去看看Linux设备模型,了解Linux系统的设备管理机制,对整个系统的掌控都会有不小的收获,不要认为把结果调出来完成了工作你就掌握了Linux驱动开发,那样长期以往,你有的只是靠时间累积起来的经验,但如果能深挖内部原理,你的能力将呈指数增长。

知道了怎么用kmalloc()不代表你就懂的Linux的内存管理系统,知道schedule()函数也不代表你知道操作系统的进程调度原理,正如同会说汉语并不能说明你了解中国文化一样,如果你有足够的好奇心,吃的下苦,有足够的时间精力,那就去读Linux 内核源码吧,去了解操作系统的核心,内核比较难啃,但能啃下来的话你将收获颇丰。

Linux的内核主要分为五个模块,内存管理,文件系统,进程调度,进程间通信(IPC)和网络接口。进程调度控制进程对CPU的访问;内存管理控制进程对内存区域的安全访问,Linux的内存管理还使用了虚拟内存,较为复杂;虚拟文件系统隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,目前Linux提供了数十种的文件系统的支持;进程间通信(IPC)提供了各个进程之

间相互通信的机制;网络接口提供了对各种网络标准的存取和各种网络硬件的支持。从图可以看到进程调度是最核心的模块,也是整个操作系

篇三:linux学习心得

Linux学习心得

我们这一代90后,从小接触的是windows98,家里条件好的自己有电脑装的是2000,后来又有了XP,上大学时又有了win7。说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。

以前觉得Linux就跟dos一样,全是用命令窗口,相对于窗口界面来说多麻烦呀。直到学习Linux这门课以后,我才知道,原来我错了。

一.为什么要学Linux呢?每个人都有不同的看法,下面我说说自己的感想吧。

首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。其中不乏很多IT精英的心血。我们学透以后更可以做成自己的OS!

其次,Linux简单易学,因为我们初学者只是学的基础部分,Linux的结构体系非常清晰,再加上老师循序渐进的教学以及耐心的讲解,使我们理解起来很快,短期内就基本掌握了操作和运行

模式。对我们学习操作系统有很大的帮助,加深我们对OS的理解。

再次,Linux是用C语言编写的,我们有学习C语言的基础,读程序和编写代码方面存在的困难小一点,也是我们能较快掌握的原因之一。

二.学习情况

在学习的过程中,我们用的是VM虚拟机,开始时真的不真的该怎么去做,特别是我的是命令窗口界面,别人的是图形界面,我都不知道怎么调过来。后来通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在Linux 环境下运行,转换目录等等。学了这些基础才能进行下面的模拟OS程序。

老实说,第一个程序是在C中编译好的,调试好了才在Linux 下运行,感觉用vi比较麻烦,因为有错了不能调试,只是提示错误。但是一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。

就这样,我们一边上OS理论课,一边上这个实验,这样挺互补的,老师讲课,一步一步地布置任务,我们自学,就这个循环的过程中,我们学习了基本操作,用vi,shell,模拟内存的分配过程等一些OS管理。可以说自己收获很大,基本上完成了老师布

置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。

期间我阅读了不少关于Linux的相关资料,其中也不乏一些有趣的小故事,这既丰富了我的课余生活,也让我加深了对一些术语的理解,比玩游戏强多了。

三.对Linux未来的展望

众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户,甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的,这也正是有别的OS得以存在的原因,每个系统都有其自身的优

点。

Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一,随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面,那么Linux的成功就在于用最少的资源最短的时间实现了所有功能,这也是符合人类进化的,相信以后节能问题会日益突出。

四.

随着实验课程的结束,理论课也该结束了,说实话教OS的这两位老师是我们遇到过的不错的老师(这话放这可能不太恰当),因为他们上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题,让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。

其实老师让写我也没怎么找资料应付,自己想到什么就写些什么,所以不免有些凌乱;很少提到编程,因为那些在实验里已经说了,这里再写就多余了。最后,感谢老师和同学们在学习上对我的帮助。

20xx-10-24 附:参考资料

百度百科老师给的讲义

相关主题
相关文档
最新文档