Written by manio (http://blog.csdn.net/manio)
Linux内核是一个无比复杂的系统,要想看清大致的脉络也非易事。其实,可以把运行中的Linux想像成一个人类的社会,当中的进程就是社会中的人。人有生老病死,进程有创建、异常、终止。人有各种各样的财产,进程有对应的地址空间、设备等等。人被各种各样的东西限制着,被人管着,进程也是。内核无比巨大,从哪着手?我想,从进程的视角来看是个好办法。并且,在学习Linux内核的同时,类比人类社会来看,会有更深刻的印象,理解得更透彻。
本来也应该从进程的创建开始写的,但是最近在看调度的相关论文,就又把Linux调度的东西看了一下。所以,就先写调度相关的东西吧。
首先介绍与进程所在环境对应的人类场景:
这是一个公司,公司里有很多人(进程),每个人都有其对应的职称(优先级)。这个公司很奇怪,只有一张办公桌(CPU),在任意时刻,只能有一个人在工作(TASK_RUNNING正在运行状态)。其他人呢,要么在休息室时短暂地休息(对应TASK_RUNNING就绪状态),要么就在寝室Sleep(对应TASK_INTERRUPTABLE或TASK_UNINTERRUPTABLE),要么就是死人了,在停尸间(TASK_ZOMBIE)。是的,这是真的,这个公司就是个血汗工厂,干活 ......
1. 输入法:Ibus。非常好用,可以记忆词语的使用频率,也能智能拼音,可以安装多种输入法,内嵌。
2. 浏览器:firefox。
3. 文件差异比较器: meld diff viewer。
4. office: 首当其冲的open office!!
5. 摄像头: cheese webcam booth。拍照还有模式选择。
6. 文件同步:Grsync.
7. 网络管理: Wicd。 ......
买来的开发板一启动就进入Qtopia的界面,很像个手机,但我想让它开机就执行我的程序,怎么办呢?
在网上查找关于Linux启动的文章,发现这个文件配置了启动所做的操作:/etc/inittab.
# This is run first except when booting
::sysinit:/etc/init.d/rcS
# Start an "askfirst" shell on the console
# shell routine
::askfirst:/bin/bash
# Stuff to do when restarting the init process
# init routine
::restart:/sbin/init
# a routine
::once:/usr/sbin/inetd
::once:/usr/etc/rc.local
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
仔细看这段代码发现很有意思,语法挺简单:sysinit(系统初始化)时执行/etc/init.d/rcS;askfirst(不知道什么意思)时执行/bin/bash;restart(重启)时执行/sbin/init;once(执行一次,我猜的,我指正)的有/usr/sbin/inetd和/usr/etc/rc.local;按下Ctrl+Alt+Del时执行/sbin/reboot;shutdown(关机时执行)/bin/umount。
了解了这些,我就一个一个文件去深度遍历,最终找到了——/usr/etc/rc.local
#!/bin/bash
. /usr/etc/profile
/sbin/i ......
1 前言
许多人在分析linux代码时对网络部分(主要是src/linux/net,src/linux/include/net及src/linux/include/linux目录下的文件)比较感兴趣,确实,尽管已经从书本上学到了大量的TCP/IP原理,不读源码的话,头脑中还是建立不起具体的印象。而分析这部分代码的一个问题便是代码众多而资料很少。这篇文章的目的就是勾勒出一个框架,让读者能够大致能够了解TCP/IP究竟是怎么工作的。以前见到的许多代码分析都是基于2.0内核的,在新的内核中许多函数变了名字,这尤其给初学者带来了困难,本文是以2.4.0-test9的代码作例子,这样对照代码时可能更清晰些。
其实网络部分的代码我只对防火墙部分一行行仔细分析过,其他许多地方也只是一知半解,如果理解有误,欢迎指正。
建议在看本文的同时,用source insight(www.soucedyn.com)建立一个项目,同时看代码,这样可能效果更好点。我也用过其他的一些工具,但在分析大量的代码的时候,没有一个工具比它更方便的了。
2 正文
ISO的七层模型都非常熟悉了,当然,对于internet,用四层模型更为适合。在这两份模型里,网络协议以层次的形式出现。而LINUX的内核代码中,严格分出清楚的层次却比较困难,因为除了一些"内核线程(kern ......
一.文件目录类
1.建立目录:mkdir 目录名
2.删除空目录:rmdir 目录名
3.无条件删除子目录: rm -rf 目录名
4.改变当前目录:cd 目录名 (进入用户home目录:cd ~;进入上一级目录:cd -)
5.查看自己所在目录:pwd
6.查看当前目录大小:du
7.显示目录文件列表:ls -l (-a:增加显示隐含目录)
其中:蓝:目录;绿:可执行文件;红:压缩文件;浅蓝:链接文件;灰:其他文件;红底白字:错误的链接文件
8.浏览文件:more 文件名.txt;less 文件名.txt
9.复制文件: cp 源文件 目标文件 (-r:包含目录)
10.查找文件:(1)find (2)locate 命令名
11.链接:(1)建立hard链接:ln 来源文件 链接文件(-d:创建目录链接);(2)建立符号链接:ln -s 来源文件 链接文件
二.驱动挂载类
1.检查硬盘使用情况:df -T -h
2.检查磁盘分区:fdisk -l
3.挂载软硬光区:mount -t /dev/fdx|hdax /mnt/目录名
其中::modos--FAT16;vfat--FAT32;ntfs--NTFS;光驱--iso9660
支持中文名:mount -o iocharset=x /dev/hdax /mnt/目录名(其中:x=cp936或
挂载光驱:mount -t auto /dev/ ......
参考:
Linux下syslog日志函数使用 :http://blog.csdn.net/telehiker/archive/2007/10/18/1830575.aspx
xinetd 使用指南中文:http://www.dbanotes.net/OpenSource/Using_xinetd.html
xinetd 官网: http://www.xinetd.org
xinetd 跟服务通信使用 stdin/stderr 输入和输出:
使用 c编写的一个例子:helloword.c
#include <stdio.h>
#include <syslog.h>
#define MAX_INPUT 256
int main(void)
{
char input[MAX_INPUT+1] ;
if ( fgets(input, MAX_INPUT, stdin) != NULL ) {
//printf ("%s",input);
syslog(LOG_INFO,"hel - %s\n",input);
fprintf (stdout,input);
}
return 0;
}
1.编译后放在/usr/bin/helloword
2.编写配置文件:nano -w /etc/xinetd.d/helloword
service helloword
{
disable = no
wait = no
socket_type = stream
flags = IPv6
port = 3000
user = root
group = root
server = /usr/bin/helloword
#server_args =
}
......