Linux kernel development Chapter2 进程管理
1 进程管理相关代码
1.1 thread_info结构,在文件<asm/thread_info.h>中定义
struct thread_info {
struct task_struct *task;
struct exec_domain *exec_domain;
unsigned long flags;
__u32 cpu;
__s32 preempt_count;
mm_segment_t addr_limit;
u8 supervisor_stack[0];
};
每个任务的thread_info结构在其内核栈顶端分配,其task域指向该任务的事件task_struct结构。
1.2 任务队列(task list)
双向循环链表,链表每一项都是一个task_struct(定义在include/linux/sched.h中),该进程描述符包含了一个仅进程的所有信息。
1.3 slab
linux通过slab机制分配task_struct结构,以达到对象复用和缓存着色的目的。
1.4 pid
linux通过pid(pid_t类型,integer)来标示每一个任务进程。为了与老版本unix和linux兼容,pid最大值为32767.如果需要更多进程,可以通过
修改/proc/sys/kernel/pid_max来提高上限。
1.5 current宏
current宏用于查找当前正在运行进程的进程描述符。不同的硬件体系结构的实现不同。
在x86架构中,寄存器不多,不能使用专门的寄存器指向当前进程的task_struct.它的方式是通过在内核栈顶端创建thread_info结构,间接的
查找task_struct结构:
(1)通过屏蔽栈指针(esp)的后13个有效位获得thread_info结构,在current_thread_info()函数完成:
&n
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
七:kmem_cache_free()的实现
kmem_cache_free用于把从slab中分配的对象释放掉,同分配一样,它首先会把它放到AC中,如果AC满了,则把对象释放到share链中,如果share也满了,也就把它释放至slab。来看具体的代码:
void kmem_cache_free (kmem_cache_t *cachep, void *objp)
{
unsi ......
九:几点补充:
1: Slab中使用的页面都会加上“PG_slab”标志,以跟一般的页面区别。另外,在释放内存的时候,经常需要用到从页面到slab的对应转换关系。那是怎样标识的呢?
关于标志:
注意有以下代码:
static void *kmem_getpages(kmem_cache_t *cachep, int flags, int nodeid)
{
&n ......
未完待续...
设置时间:
date -s "2009/11/08 11:23:00"
硬件时钟与系统时间同步一下:
hwclock --systohc
编程:
#include <cstdlib>
time_t time(time_t *timer)
调用后将当前系统时间与1900年1月1日相差的秒数存入到timer中,timer可看成是一个长整型数
具体描述:
函数原型: ......