闲话Linux内核——学习,揣摩与玩味
最早接触Linux内核是在大三的时候,那时《操作系统》的课程设计就是进行Linux内核源代码的分析与进程调度的改进。题目是大的有点吓人,特
别是对那时一个涉足未深的年轻人看来。不过那时做的事情很简单,认认真真的看了《Linux内核源代码情景分析》的前言部分(主要讲的AT&T汇
编语言,内核中一些特殊的编程规则),与进程调度相关的部分,包括进程的管理,进程的切换,进程与中断,软中断,系统调用,进程互斥与同步机制。并画了几
张图阐述了进程调度的路线,对spinlock机制进行了深入的剖析。明白了2.4的内核为何是非抢占式内核,进程调度器其实也不是什么神奇的东 东——
一个函数罢了,啥叫process
context。同时,为了完成“进程调度机制的改进”,看了实现可抢占的两个补丁,哦,现在已经整合进2.6了,也怪不得昨天看2.6进程调度的介绍有
种似曾相识的感觉。
可以说,那时的分析完全是理论学习。对于内核编程的实践几乎没有。带来的好处最主要的在于提高了对操作系统运行的认识与提高了代码的阅读能
力。
回头去看这段往事,总觉得存在着有所改进的地方。
现在看来,内核是啥呢?只是一个比较大的软件项目,可以拿它与Eclipse相比,或者mplayer相比,或者就是与任何一个开源软件处
于同层次的东西,只是它更具复杂性,涉及到的软件与硬件的东西更全面罢了。
或者说,经过这几年对开源项目的接触,对软件项目的参与,Linux内核在我心目中的神秘感已然消失,Eclipse在软件架框方面应该可
以算出类拔萃,EFI在BIOS这一层上也实现了新的可扩展的和良好的设备管理模型,而Linux在操作系统的层次上也应该是一个典范,值得去学习,去揣
摩,去玩味。
2.6内核之于2.4内核,无疑是前进了一大步,进程调度,设备管理等等方面都形成了更良好的framework。同时也涌现出了好多优秀
的传道士及其杰作,如《Linux Kernel Development Second Edition》《Linux Device Driver
Third Edition》。我更想把这些带有浓厚实践性质的书籍当做进入Linux
内核世界的一个极佳的“切入点”。想起Eclipse世界一本与此类似的书《contributing to
eclipse》,一个提倡的规则就是“MONKEY SEE/MONKEY DO RULE Always start by copying the
structure of a similar plug-in.”。从内核中学习内核,增强内核,应该是内核编程的一个原则。
不可否认地,“情景分析”是《Linux内核源代码情景分
相关文档:
进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi ......
Linux下软件的安装与卸载
一、二进制分发软件包的安装与卸载
Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优点是安装使用容易,缺点则是缺乏灵活性,如果该软件包是为特定的硬件/操作系统平台编译的,那它就不能在另外的平台或环境下正确执行。
1、*.rpm形式的二进制软件包
安装:rpm ......
1、在linux下读微软标准的chm文件时,找了好久终于找了一款很不错的软件---KchmViewer
可以通过终端安装:
sudo apt-get install kchmViewer
使用ubuntu的朋友也可以在ubuntu软件中心安装。
2、LibeFetion非常好的第三方免费飞信软件,也有windows版本
官网主页:http://www.libfetion.org/index.php
真的非常好用 ......
文件在两个文件夹:
inc/hello.h
main/hello.c, main.c, Makefile
文件内容:
hello.h
void hello(char name[]);
hello.c
#include <stdio.h>
void hello(char name[])
{
printf("Hello %s!\n", name);
}
main.c
#include <stdio.h>
#include "../inc/hello.h"
// The second
int main( ......
包含3个文件夹,和一个文件Makefile
目录组织结构如下:
Makefile
inc/hello.h
main/main.c
src/hello.c
Makefile文件在外面,这样生成的.o和可执行文件都在外面,clean之后会很干净,结构清晰
文件内容如下:
Makefile(之所以用大写,因为make可以识别Makefile和makefile,用大写可以鲜明一些)::
# String declar ......