2013年1月18日
摘要: Posix线程是一个POSⅨ标准线程线程类型pthread_t:线程句柄pthread_attr_t:线程属性pthread_mutex_tpthread_cond_tpthread_key_t线程相关函数pthread_create():创建一个线程pthread_exit():终止当前线程pthread_cancel():中断另外一个线程的运行pthread_join():阻塞当前的线程,直到另外一个线程运行结束pthread_attr_init():初始化线程的属性pthread_attr_setdetachstate():设置脱离状态的属性(决定这个线程在终止时是否可以被结合)pthr 阅读全文
posted @ 2013-01-18 14:56 冈萨雷斯 阅读(211) 评论(0) 推荐(0) 编辑
  2013年1月15日
摘要: #include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); //从消息队列读取信息参数: msgtyp: msgtyp = 0:收取队列中的第一条消息,任意类型。 msgtyp > 0:收取第一条 msgtyp 类型的消息。 msgtyp < 0:收取第一条最低类型(小于或等于 msgtyp 的绝对值)的消息。 其他参数参考msgsnd函数。 阅读全文
posted @ 2013-01-15 13:38 冈萨雷斯 阅读(758) 评论(0) 推荐(0) 编辑
摘要: #include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); //将消息送入消息队列参数: msqid:消息队列的标识符。 msgp:指向消息缓冲区的指针,此位置用来暂时存储发送和接收的消息,是一个用户可定义的通用结构,形态如下struct msgbuf { long mtype; /* 消息类型,必须 > 0 */ char mtext[1]; /* 消息文本 * 阅读全文
posted @ 2013-01-15 13:36 冈萨雷斯 阅读(511) 评论(0) 推荐(0) 编辑
摘要: #include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>int msgctl (int msqid, int cmd, struct msqid_ds *buf); //消息队列属性控制参数: msqid:消息队列的标识符。 cmd:执行的控制命令,即要执行的操作。包括以下选项: IPC_STAT:读取消息队列属性。取得此队列的msqid_ds 结构,并将其存放在buf指向的结构中。 IPC_SET :设置消息队列属性。 IPC_RMID:删除消息队列。 IPC_INFO:读取消息队列基本情况。此 阅读全文
posted @ 2013-01-15 13:35 冈萨雷斯 阅读(404) 评论(0) 推荐(0) 编辑
摘要: #include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>int msgget(key_t key, int msgflg); //创建消息队列参数: key:消息队列关联的键。为IPC_PRIVATE时表示创建自己的消息队列 msgflg:消息队列的建立标志和访问权限。msgflg 的低位用来确定消息队列的访问权限。 IPC_CREAT:如果 key不存在,创建 IPC_EXCL:如果 key 存在,返回失败 IPC_NOWAIT:如果需要等待,直接返回错误 如果单独使用IPC_CREAT,则ms 阅读全文
posted @ 2013-01-15 13:29 冈萨雷斯 阅读(407) 评论(0) 推荐(0) 编辑
  2013年1月10日
摘要: 之前了解arm9的启动过程,了解了init的重要性,那么ubuntu系统是不是也是这样的工作模式呢,查找发现ubuntu系统根本就没有inittab文件,那么init之后的过程是怎样的:/sbin/init通过/etc/init/rc-sysinit.conf文件了解到其执行了3/etc/init.d/rcS(exec /etc/init.d/rc S)执行/etc/init.d/rc,传入参数S(runlevel S=1)根据rc脚本实现启动过程,进入登录控制台 阅读全文
posted @ 2013-01-10 11:24 冈萨雷斯 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 从上电到登录的过程:加载BIOS读取MBR启动Bootloader(uboot)加载内核(程序的跳转调用过程) 内核的入口ENTRY(stext)---(arch/arm/kernel/head.S) __mmap_switched start_kernel---(arch/alpha/boot/bootp.c) runkernel 上面是汇编程序过程,以下是c程序的调用过程 start_kernel---(init/main.c) rest_kernel kernel_thread(kernel_init) init_post run_init_process("/sbin/ini 阅读全文
posted @ 2013-01-10 10:57 冈萨雷斯 阅读(206) 评论(0) 推荐(0) 编辑
  2013年1月9日
摘要: start_kernel函数的最后调用rest_init函数来创建并启动内核线程 1 static noinline void __init_refok rest_init(void) 2 { 3 int pid; 4 5 rcu_scheduler_starting(); 6 /* 7 * We need to spawn init first so that it obtains pid 1, however 8 * the init task will end up wanting to create ... 阅读全文
posted @ 2013-01-09 15:08 冈萨雷斯 阅读(216) 评论(0) 推荐(0) 编辑
摘要: start_kernel调用setup_arch()函数作为执行的第一步,在其中完成特定于体系结构的设置 1 void __init 2 setup_arch(char **cmdline_p) 3 { 4 extern char _end[]; 5 6 struct alpha_machine_vector *vec = NULL; 7 struct percpu_struct *cpu; 8 char *type_name, *var_name, *p; 9 void *kernel_end... 阅读全文
posted @ 2013-01-09 15:02 冈萨雷斯 阅读(524) 评论(0) 推荐(0) 编辑
摘要: 分析kernel运行的过程(mark) 1.smp_setup_processor_id():多CPU架构的初始化,空函数 2.lockdep_init():lockdep哈希表初始化,lockdep是linux内核的一个调试模块,用来检查内核互斥机制尤其是自旋锁潜在的死锁问题 3. debug_objects_early_init():空函数 4. boot_init_stack_canary():初始化栈canary值,canary值用于防止栈溢出攻击的堆栈的保护字 5. cgoup_init_early():空函数 6. local_irq_disable():关闭系统总中断 7. ea 阅读全文
posted @ 2013-01-09 14:12 冈萨雷斯 阅读(782) 评论(0) 推荐(0) 编辑