摘要:
Linux进程所需具备的四要素:1.程序代码。代码不一定是进程专有,可以与其它进程共用。2.系统堆栈空间,这是进程专用的。3.在内核中维护相应的进程控制块。只有这样,该进程才能成为内核调度的基本单位,接受调度。并且,该结构也记录了进程所占用的各项资源。4.有独立的存储空间,表明进程拥有专有的用户空间。以上四条,缺一不可。如果缺少第四条,那么就称其为“线程”。如果完全没有用户空间,称其为“内核线程”;如果是共享用户空间,则称其为“用户线程”。 阅读全文
摘要:
Linux进程所需具备的四要素:1.程序代码。代码不一定是进程专有,可以与其它进程共用。2.系统堆栈空间,这是进程专用的。3.在内核中维护相应的进程控制块。只有这样,该进程才能成为内核调度的基本单位,接受调度。并且,该结构也记录了进程所占用的各项资源。4.有独立的存储空间,表明进程拥有专有的用户空间。以上四条,缺一不可。如果缺少第四条,那么就称其为“线程”。如果完全没有用户空间,称其为“内核线程”;如果是共享用户空间,则称其为“用户线程”。 阅读全文
摘要:
1. 在Linux的内核底层中的代码,多数是以汇编语言完成的。 汇编代码以两种形式存在,一种是纯汇编代码,后缀名为.s的文件。当然这样的汇编代码其中也加入了预编译选项,而不是单纯的汇编。另一种是在C语言中嵌入汇编语言。虽然在ANSI的C语言标准中并没有关于汇编片段的规定,但事实上各种实际使用的C编译中都作了这方面的扩充。GNU的C编译器gcc也在这方面作了很强的扩充。 GNU的C编译器gcc在内核“纯”汇编代码中采用了不同于常用386汇编语言的句法;而在嵌入C程序的汇编片段中,也增加了一些指导汇编工具如何分配使用寄存器、以及如何与C程序中定义的变量相结合的语言成分。这些成分使得这种汇编语 阅读全文
摘要:
对于Linux中的C,采用gcc编译器进行编译,其内核源代码的编译也依赖相应的gcc版本。 由于内核中需要大量的使用双链表,因此将双链表数据结构抽象出来,成为list_head结构体。对于这样的问题,内核源代码采用的方法如下: 利用宏container_of(ptr,type,member) ({ const typeof( ((type *)0)-member) * __mptr = (ptr); (type *)( (char *)__mptr - offsetof(type,member));}) 其中ptr表示list成员指针,type表示宿主结构体类型,member表示宿 阅读全文
|