linux 2.6源代码情景分析笔记之进程1
进程是程序执行时的一个实例,是充分描述程序已经执行到何种程度的数据结构的汇集。在linux中,常将进程称为任务(task)或者线程(thread)。进程的目的就是承担分配系统资源的实体。
当一个进程创建时,几乎与父进程相同。接受父进程地址空间的一个逻辑拷贝,并从进程创建系统调用的下一条指令开始执行与父进程相同的代码。尽管父子进程可以共享含有程序代码的页,但是它们各自有独立的数据拷贝(栈和堆),因此子进程对一个内存单元的修改对父进程是不可见的。
linux使用轻量级进程(lightwetght process)对多线程应用程序提供更好的支持。两个轻量级进程基本上可以共享一些资源,诸如地址空间、打开的文件等等。只要其中一个修改共享资源,另一个就立即查看这种修改。两个线程访问共享资源时就必须同步它们自己。实现多线程应用程序的另一个简单方式就是把轻量级进程与每个线程关联起来。线程之间就可以通过简单地共享同一内存地址空间、同一打开文件集等来访问相同的应用程序数据结构集;同时,每个线程都可以由内核独立调度,以便于一个睡眠的同时另一个仍然是可以运行的。
描述进程数据结构的是task_struct,它的字段包含了与一个进程相关的所有信息。/include/linux/sched.h
进程的状态和进程的父/子间关系
进程状态:
进程描述符中的state字段描述了进程当前所处的状态。由一组标志组成,其中每个标志描述一种可能的进程状态。这些状态是互斥,因此只能设置一种状态,其余的标志将被清除。
#define TASK_RUNNING 0
可运行状态,进程要么在cpu上执行,要么准备执行。
#define TASK_INTERRUPTIBLE 1
可中断等待状态,进程被挂起(睡眠),直到某个条件变为真。产生一个硬件中断,释放进程正等待的系统资源,或传递一个信号都是可以唤醒进程的条件(把进程的状态放回到TASK_RUNNING).
#define TASK_UNINTERRUPTIBLE 2
不可中断的等待状态,与可中断的等待状态类似,担忧一个例外,把信号传递到睡眠进程不能改变它的状态。这种状态很少用到,但在一些特定的情况下(进程必须等待,直到一个不能被中断的事件发生),这种状态是很有用的。例如,当进程打开一个设备文件,其相应的设备驱动程序开始探测相应的硬件设备时会用到这种状态。探测完成以前,设备驱
相关文档:
引导 Linux® 系统的过程包括很多阶段。不管您是引导一个标准的 x86 桌面系统,还是引导一台嵌入式的
PowerPC® 机器,很多流程都惊人地相似。本文将探索 Linux
的引导过程,从最初的引导到启动第一个用户空间应用程序。在本文介绍的过程中,您将学习到各种与引导有关的主题,例如引导加载程序、内核解压、初始
RA ......
我们在Linux下安装系统软件的时候,经常遇到一些系统环境变量配置的问题。什么是环境变量?如何定制环境变量?我将在下面做一些介绍。
一、什么是环境变量?
Linux是一个多用户的操作系统。多用户意味着每个用户登录系统后,都有自己专用的运行环境。而这个环境是由一组变量所定义,这组变量被称为环境变量。用户可以对自 ......
01-.tar格式
解包:[*******]$ tar xvf FileName.tar
打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)
02-.gz格式
解压1:[*******]$ gunzip FileName.gz
解压2:[*******]$ gzip -d FileName.gz
压 缩:[*******]$ gzip FileName
03-.tar.gz格式
......
由于Linux不是中国人开发的,开发过程中也不是以中文为母语,虽有中文语言包,在软件兼容性上出现中文乱码也在所难免。我抽取网络上前人的经验,结合自己的理解,将他们加以总结,希望对后来者有所帮助。
1、html文件乱码;
&nbs ......
Red Hat Linux的分区是不同于其它操作系统分区的,它的分区格式只有Ext2(Ext3)和Swap两种,Ext2(Ext3)用于存放系统文件,Swap则作为Red Hat Linux的交换分区。Red Hat Linux至少需要两个专门的分区(Linux Native和Linux Swap)况且不能将Red Hat Linux安装在Dos/Windows分区。一般来说我们将Red Hat Linux安装一个或多 ......