linux 进程管理
文章平均质量分 82
白水煮鸡蛋
这个作者很懒,什么都没留下…
展开
-
进程任务结构与初始化
Linux系统的线程实现非常特别:他对线程和进程并不特别区分。对linux而言,线程只不过是一种特殊的进程罢了,后面我们会看到,他们都通过do_fork函数创建,只是传入的参数不一样而已。线程创建时,会共享内核资源。 在内核中,各个进程的task_struct存放在他们内核栈的尾端。这样做是为了让那些像x86那些寄存器较少的硬件体系结构只要通过栈指针就能计算出他的位置而避免额外转载 2012-03-25 21:49:14 · 857 阅读 · 0 评论 -
Linux环境进程间通信-共享内存
共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。但是它不需要在所有进程的虚拟内存中都有相同转载 2013-01-15 18:06:38 · 723 阅读 · 0 评论 -
Linux环境进程间通信-消息队列
消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点。作为早期unix通信机制之一的信号能够传送的信息量有限,后来虽然POSIX 1003.1b在信号的实时性方面作了拓广,使得信号在传递信息量方面有了相当程度的改进,但是信号这种通信方式更像"即时"的通信方式,它要求接受信号的进程在某个时间范围内对信号做出反应,因此该信号最多在接受信号进程的生命周期内才有意义,信号所传递的信息是接近于随转载 2013-01-05 21:49:37 · 913 阅读 · 0 评论 -
Linux IPC发展的宏观介绍
inux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通转载 2013-01-05 08:20:20 · 649 阅读 · 0 评论 -
每CPU变量
本文采用linux 3.04内核版本。 多核情况下,CPU是同时并发运行的,但是多它们共同使用其他的硬件资源的,因此我们需要解决多个CPU之间的同步问题。每CPU变量(per-cpu-variable)是内核中一种重要的同步机制。顾名思义,每CPU变量就是为每个CPU构造一个变量的副本,这样多个CPU相互操作各自的副本,互不干涉。比如我们标识当前进程的变量cur转载 2012-06-14 22:19:53 · 4557 阅读 · 0 评论 -
do_IRQ 函数细节
//// do_IRQ 函数执行完硬件 ISR 后退出时调用此函数。//void irq_exit(void){ account_system_vtime(current); trace_hardirq_exit(); sub_preempt_count(IRQ_EXIT_OFFSET); //转载 2012-03-29 23:27:25 · 3397 阅读 · 0 评论 -
linux2.6软中断-tasklet
6.1下半部下半部的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。对于在上半部和下半部之间划分工作,尽管不存在某种严格的规则,但还是有一些提示可供借鉴:(1)如果一个任务对时间非常敏感,将其放在中断处理程序中执行。(2)如果一个任务和硬件相关,将其放在中断处理程序中执行。(3)如果一个任务要保证不被其它中断打断,将其放在中断处理程序中执行。(4)转载 2012-03-29 23:19:46 · 1349 阅读 · 0 评论 -
内核线程、轻量级进程、用户线程
转载:http://www.cnitblog.com/tarius.wu/articles/2277.html转载:http://www.fansoo.com/blog/2011/kernel-threads-lightweight-processes-threads-and-linuxthreads-library-users/内核线程内核线程只运行在内核态,不受用户态上下文的拖转载 2012-03-26 23:07:46 · 6384 阅读 · 0 评论 -
进程ID号
关于进程ID号,在深入理解linux内核架构中已经讲得很清楚了。下面是主要的部分。UNIX进程总是会分配一个号码用于在其命名空间中唯一地标识它们。该号码被称作进程ID号,简称PID。用fork或clone产生的每个进程都由内核自动地分配了一个新的唯一的PID值。1. 进程ID但每个进程除了PID这个特征值之外,还有其他的ID。有下列几种可能的类型。处于某个线程组(在转载 2012-03-25 21:59:58 · 2707 阅读 · 0 评论 -
内核线程
原文链接 http://blog.csdn.net/yunsongice/article/details/5522012按照传统UNIX规定的一些操作系统标准,一些重要的任务需要由进程来周期性地执行。这些任务包括刷新磁盘高速缓存,交换出不用的页框,维护网络连接等等。那么,由于这些系统进程只运行在内核态,所以Linux将他改造了,跟一般的进程不一样了,给它取个名称叫内核线程(kernel转载 2012-03-26 23:03:26 · 883 阅读 · 0 评论 -
进程的创建 —— do_fork()函数详解
原文链接http://blog.csdn.net/yunsongice/article/details/5508242在讲进程管理专题最核心的课题——进程创建之前,我们先简单地回顾一下上一篇博文的sys_clone()系统调用:asmlinkage int sys_clone(struct pt_regs regs){ unsigned long clone_flags;转载 2012-03-26 22:44:15 · 1164 阅读 · 0 评论 -
Linux的线程——轻进程
原文链接 http://blog.csdn.net/yunsongice/article/details/5506113进程类似于人生:它们被产生,有或多或少有效的生命,可以产生一个或多个子进程,最终都要死亡。一个微小的差异是进程之间没有性别差异——每个进程都只有一个父亲。那么,操作系统有一个重要的概念——线程,在Linux上是怎么实现的呢?可以明确的告诉你,Linux并没有线程这个概念。呵呵转载 2012-03-26 22:42:34 · 2120 阅读 · 0 评论 -
fork与vfock系统调用的区别
原文链接 http://blog.csdn.net/yunsongice/article/details/5516382fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别:1. fork():子进程拷贝父进程的数据段,代码段 vfork():子进程与父进程共享数据段2. fork():父子进程的执行次序不确定 vfork保证子进程先运行转载 2012-03-26 23:02:32 · 650 阅读 · 0 评论 -
执行进程间切换
原文链接 http://blog.csdn.net/yunsongice/article/details/55159651 进程切换之前的工作由于每个进程共享CPU寄存器(咱们就当是单CPU吧),因此在恢复一个进程之前,内核必须确保每个寄存器装入挂起进程时的值,他们就叫“硬件上下文”。在Linux中,进程硬件上下文得一部分放在TSS段,主要用于对内核态堆栈进行寻址,而剩余部分转载 2012-03-26 23:01:34 · 712 阅读 · 0 评论 -
Linux环境进程间通信-信号量
信号量是一个计数器,常用于处理进程和线程的同步问题,特别是对临界资源访问的同步。获取一次信号量的操作就是对信号量减一,而释放一次信号量的操作就是对信号量加一。Linux内核为每个信号集提供了一个semid_ds数据结构.该结构定义如下(linux/sem.h):/* Obsolete, used only for backwards compatibil转载 2013-01-16 18:25:40 · 907 阅读 · 0 评论