今天读了本书的第一章.这一章初步介绍了Linux内核的总体布局,也就是总体上来看有哪些模块组成.从上到下主要是:glidc->系统调用->(VFS,Schedular,Soft ISR,ISR,FILE Sytem,Task Manager,Memory Manager,IP Stack)括号里面的各个模块都是并列存在的.目前对于这其中的许多名词我还不熟悉,不禁感到惭愧,要学习的东西实在有许多,自己浪费了不少时间....按作者说的,这本书主要讲的是IP Stack的信息流程.读者可以在宏观上了解IP协议族的各个协议间的消息是如何流动的.
第一章一开始就讲了微内核和大内核的区别,并在最后现在的OS大多不是一单一的某一种,通常都是两种都有涉及.因为各自有各自的好处:微内核的内核的实现更加高效,便于移值,方面系统其他各个模块间的通信.大内核的主要特点就是,它在执行的时候在内存中是一个大的二进制的映像,各个模块在运行的时候都要加载到内存中去,能够充分的利用硬件.
这一章另外还讲解了几个在协议栈中用的很多的数据结构,主要是链表和Hash链表.看到这部分的时候我深深的感觉到数据结构非常的重要,并接要学活了,不能走教条主义道路!比如说Linux的链表的实现就相当的漂亮.它不是像大多教科书的说的那样,在链表的节点中存放data.而是让含有数据的结构中包含一个链表节点.这样更灵活.可以看的出来Linux源代码中许多地方都利用了C语言的灵活性,和GCC编译器的特性,如typeof等.(^_^看来C语言要加强了下了,我还很嫩..)其中链表的这种实现机制的关键是list_entry宏.list_entry(ptr,type,memeber),
ptr是指向含有真实数据的结构中strcut list head成员的指针.type是struct list head的类型.member是该成员的变量名.
list_entry( ptr, type , member);
#define list_entry(ptr, type, member) container_of(ptr, type, member)
#define container_of(ptr, type, member) ({\
const typeof( ((type*)0)->member) *mptr = (ptr);\
(type *)( (char *) mptr-offsetof(type,member) );})
#define offsetof(TYPE,MEMBER)( (size_t) &((TYPE *)0)\
->MEMBER)
(AIX命令)iostat命令主要通过观察物理磁盘的活跃时间以及他们的平均传输速度,监控系统输入/输出设备负载.
iostat [间隔时间] [打印次数]
exp: iostat 5 2
ps命令是UNIX系统中最常见的命令,它主要显示系统中关于进程的统计和状态信息,如进程ID,I/O行为以及CPU利用率等.
显示10个消耗CPU最多的进程:
ps aux |sort ......