第三章 进程管理1. fork系统调用从内核返回两次: 一次返回到子进程,一次返回到父进程2. task_struct结构是用slab分配器分配的,2.6以前的是放在内核栈的栈底的;所有进程的task_struct连在一起组成了一个双向链表3. 2.6内核的内核栈底放的是thread_info结构,...
分类:
系统相关 时间:
2015-04-11 16:14:03
阅读次数:
257
http://blog.chinaunix.net/uid-14528823-id-4136760.html Linux中有多种栈,很容易弄晕,简单说明一下:1、用户态栈:在进程用户态地址空间底部,跟平时我们简单和理解的一样,就是虚拟地址空间中的一段,不多说~2、内核栈:跟用户态栈是独立的,在用户态...
分类:
系统相关 时间:
2015-04-02 18:22:16
阅读次数:
180
linux3.5内核中为所有进程(包括内核进程和用户进程)分配8k或4k的内核栈(可以在内核编译的时候选择),在模块代码中分配的栈内存就是在内核栈中,写模块代码如果要在堆中分配内存,则要使用kmalloc或vmalloc来分配,这是后话。 内核栈的栈底存放这thread_info, 通过获取...
分类:
系统相关 时间:
2015-01-12 20:58:48
阅读次数:
205
进程与线程
参考:http://www.cnblogs.com/blueclue/archive/2010/07/16/1778855.html
首先比较Linux进程和线程的创建的区别,以此展开:
创建进程:(1)调用fork(),为子进程新建内核栈、pthread_info和task_struct,复制父进程的大部分的参数,采用写时复制(copy-on-write)辅助父进程...
分类:
编程语言 时间:
2014-10-17 15:30:05
阅读次数:
237
一直缠绕的两个问题:怎样标识的内核栈与用户栈?如何在内核态堆栈与用户态堆栈之间切换? 用户态堆栈指针:ss和esp; 内核态堆栈指针:ss0和esp0; 二者均位于任务的tss结构中。这里的任务是指除任务0和1之外的普通任务。 CPU进行用户态堆栈到内核态堆栈的切换操作时,CPU会从当前任务的任务状...
分类:
系统相关 时间:
2014-10-10 23:09:25
阅读次数:
252
do_fork()实现一、在分析do_fork()之前,我们需要对进程要有一定的认识,因为do_fork()是创建进程的。进程四要素:1、有一段程序供其执行;2、有进程专用的系统堆栈空间,即内核栈;3、有进程控制块task_struct结构体;4、有独立的存储空间,专用的用户空间,即用于虚存管理的m..
分类:
其他好文 时间:
2014-09-24 20:52:28
阅读次数:
228
http://blog.163.com/di_yang@yeah/blog/static/86118492201212534924900/一直缠绕的两个问题:怎样标识的内核栈与用户栈?如何在内核态堆栈与用户态堆栈之间切换?用户态堆栈指针:ss和esp;内核态堆栈指针:ss0和esp0;二者均位于任务...
分类:
系统相关 时间:
2014-09-22 10:32:22
阅读次数:
229
操作系统:1. 进程的有哪几种状态,状态转换图,及导致转换的事件。2. 进程与线程的区别。3. 进程通信的几种方式。4. 线程同步几种方式。(一定要会写生产者、消费者问题,完全消化理解)5. 线程的实现方式. (也就是用户线程与内核线程的区别)6. 用户态和核心态的区别。7. 用户栈和内核栈的区别。...
分类:
其他好文 时间:
2014-08-10 12:40:50
阅读次数:
278
在3.16-rc4内核源码中,内核给每个进程分配的内核栈大小为8KB。这个内核栈被称为异常栈,在进程的内核空间运行时或者执行异常处理程序时,使用的都是异常栈,看下异常栈的代码(include/linux/sched.h):1 union thread_union {2 struct thre...
分类:
系统相关 时间:
2014-07-30 23:31:05
阅读次数:
411
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中 执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用 户态)。...
分类:
其他好文 时间:
2014-07-24 22:49:33
阅读次数:
167