- 博客(31)
- 资源 (13)
- 收藏
- 关注
转载 gdb调试多进程
转自:http://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/使用 GDB 调试多进程程序田 强 (tianq@cn.ibm.com), 软件工程师, IBM中国软件开发中心简介: GDB 是 linux 系统上常用的调试工具,本文介绍了使用 GDB 调试多进程程序的几种方法,并对各种方法进行比较。
2011-10-31 23:11:24 690
原创 实验——系统调用execve时的用户空间堆栈情况
创建的新的子进程在调用execv执行新的程序段(开始独立于父进程执行)的时候,子进程用户空间栈的安排应该是怎样的呢?参数是如何传递的呢?编写如下两个程序:程序一:test1.c#include int main(int args, char* argv[]) { char s[5] = "ABCD"; while(1) { printf("%s\n", s); p
2011-10-31 22:47:23 1458
原创 进程管理之schedule --> pick_next_task()
/* * Pick up the highest-prio task: */static inline struct task_struct *pick_next_task(struct rq *rq){ const struct sched_class *class; struct task_struct *p; /* * Optimization: we know tha
2011-10-30 13:16:14 5297 1
原创 进程管理之schedule()
/* * schedule() is the main scheduler function. */asmlinkage void __sched schedule(void){ struct task_struct *prev, *next; unsigned long *switch_count; struct rq *rq; int cpu;need_resched:
2011-10-28 18:03:34 3430
原创 do_exit——>exit_notify()
/* * Send signals to all our closest relatives so that they know * to properly mourn(悼念) us.. */static void exit_notify(struct task_struct *tsk, int group_dead){ int signal; void *cookie; /*
2011-10-26 19:28:28 4244
原创 进程(组)/线程(组)/会话
可以参看UNIX环境高级编程的相关章节。为了搞清楚进程组之间的关系,我们做如下的实验:编写程序:/*test.c*/#include "../include/apue.h"void main() { pid_t pid; char *args[] = {"/bin/echo", "Hello", "World!", NULL }; if((pid = fork()
2011-10-26 16:55:03 2505
原创 进程管理之exit()
NORET_TYPE void do_exit(long code){ struct task_struct *tsk = current; int group_dead; profile_task_exit(tsk); WARN_ON(atomic_read(&tsk->fs_excl)); //如果进程holding fs exclusive resources,则报错。但是还
2011-10-25 22:12:37 3995
转载 Linux中的同步机制
转自:http://hi.baidu.com/luxiaoyi/blog/item/3db9a302ba9a0f074bfb51e3.htmlLinux中的同步机制(一)--Futex引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序",那futex是什
2011-10-25 16:35:12 6070
转载 fs寄存器
FS寄存器指向当前活动线程的TEB结构(线程结构)偏移 说明000 指向SEH链指针004 线程堆栈顶部008 线程堆栈底部00C SubSystemTib010 FiberData014 ArbitraryUserPointer018 FS段寄存器在内存中的镜像地址020 进程PID024 线程ID02C 指向线程局部存储指针
2011-10-25 16:04:52 905
原创 系统调用execve的入口sys_execve()
/* * sys_execve() executes a new program. */long sys_execve(const char __user *name, //需要执行的文件的绝对路径(存于用户空间) const char __user *const __user *argv, //传入系统调用的参数(存于用户空间) const ch
2011-10-24 22:47:17 9779
原创 do_fork->copy_process->copy_mm
static int copy_mm(unsigned long clone_flags, struct task_struct * tsk){ struct mm_struct * mm, *oldmm; int retval; tsk->min_flt = tsk->maj_flt = 0; tsk->nvcsw = tsk->nivcsw = 0;#ifdef CONFIG_D
2011-10-23 15:44:06 3397
转载 linux的swapper_pg_dir的初始化
转自:http://blog.sina.com.cn/s/blog_639dde240100qvfp.htmlLinux的启动涉及到一个解压与定位的过程,对于x86体系结构而言,系统被加载到0x100000的地方,那么swapper_pg_dir的值是什么呢?我们知道swapper_pg_dir是一个很重要的东西,它是所有进程内核空间的页表的模板,而且在涉及到896M以上的内存分配时,sw
2011-10-23 11:14:55 3935
原创 进程创建之do_fork
/* * Ok, this is the main fork-routine. * * It copies the process, and if successful kick-starts * it and waits for it to finish using the VM if required. */long do_fork(unsigned long clone_fla
2011-10-18 21:39:33 2422
原创 进程创建之dofork->copy_process()
/* * This creates a new process as a copy of the old one, * but does not actually start it yet. * * It copies the registers, and all the appropriate * parts of the process environment (as per the
2011-10-17 23:46:47 2602
原创 内核进程创建之分配task_struct(do_fork->copy_process->dup_task_struct())
static struct task_struct *dup_task_struct(struct task_struct *orig){ struct task_struct *tsk; //sizeof(task_struct) = 3236;这个值是通过gdb得到的, //可以看到单个的task_struct
2011-10-17 21:18:00 3982
原创 ubuntu arm 交叉编译环境的搭建
1. arm-none-linux-gcc搭建$ sudo apt-get install build-essential ddd cpio libncurses5-dev libsdl-dev zlib1g-dev$ wget http://www.codeso
2011-10-15 20:32:57 1496
原创 ubuntu联网
ubuntu不能联网:1.不能够ping通局域网那么指定固定的IP等参数,方法如下:$cd /etc/network$sudo gedit interfaces然后,将interfaces文件中的内容改为如下:auto loiface lo inet
2011-10-15 12:33:47 1330
原创 Linux内核中的简称/前缀/后缀总结
TLS——Thread Level Storage 或者 Thread Local Storage http://en.wikipedia.org/wiki/Thread-local_storageGFP_KERNEL——意思是这个分配((内部最终通过调用 __get_free_pages 来进行, 它是 GFP_ 前缀的来源) 代表运行在内核空间的进程而进行的. 换句话说, 这意味着
2011-10-14 09:51:11 2253 2
原创 malloc函数
#include #include #include typedef struct { char s[16];} PString;void main() { PString *p; int n = 8; p = (PString *) malloc(n
2011-10-14 09:01:57 536
原创 好的学习linux内核的网站
http://blog.chinaunix.net/space.php?uid=20543183&do=blog&view=me&frmd=-1&classid=0&page=1
2011-10-13 16:29:57 1081
原创 Linux3.0.6内核task_struct注释
struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; //stack should points to a threadinfo struct atomic_t usage; //有几个进程正在使用该结构 unsigned int flags; /
2011-10-13 14:34:52 8253
原创 用宏初始化结构体
#define INIT_STRUCT_PID { \ .count = ATOMIC_INIT(1), \ .tasks = {
2011-10-12 21:18:04 2353
转载 内核/内存管理中的VSS/RSS/PSS/USS
转自:http://www.douban.com/note/161471809/ RSS is the total memory actually held in RAM for a process. RSS can be misleading, because it
2011-10-12 17:14:38 1744
转载 2.4内核中task_struct结构体全解
/*转自:http://wenku.baidu.com/view/9132d213f18583d049645902.html*/********************************************为了管理进程,操作系统必须对每个进程所做的事情进行
2011-10-12 16:40:13 1139
转载 关于volatile
转自:http://baike.baidu.com/view/608706.htm推荐一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用
2011-10-12 15:26:12 400
转载 Linux 2.6内核中新的锁机制--RCU
杨燚 (yang.yi@bmrtech.com), 计算机科学硕士什么是RCU?RCU的实现机制?RCU的API?RCU的典型应用?转自:http://www.ibm.com/developerworks/cn/linux/l-rcu/
2011-10-12 15:05:49 1038
原创 rt_mutex
do_fork --> copy_process --> rt_mutex_init_task(p); 关于rt_mutex,请参考Documentation/rt_mutex.txt注解: PI 是Priority Inheritanc
2011-10-12 14:02:51 1966
原创 情景分析中的一个例程
在情景分析的第278页有这样一个例子:#include /*一个有趣的现象:注释行是否被注释得到的结果是不一样的,试一下,想一下什么原因?*/int main() { int child; char *args[] = {"/bin/echo", "Hello",
2011-10-11 17:12:51 594
原创 分配task_struct时分配页面的大小的问题
#define THREAD_SIZE (PAGE_SIZE #define THREAD_SIZE_ORDER 1THREAD_SIZE定义为两个页面来表示一个内核线程#define alloc_task_struct_node(node)
2011-10-11 15:12:53 1544 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人