1.为什么计算机操作系统要引进进程 在操作系统中引入进程的目的是为了使多个程序并发执行 ,以改善资源利用率及提高系统吞吐量。
2.进程的概念 进程是程序的一次执行,进程是拥有资源的最小单位和调度单位(在引入线程的操作系统中,线程是最小的调度单位)
进程又称任务,是一个动态的使用系统资源、处于活动状态的应用程序。
3.进程由什么组成 进程由进程控制块(PCB),数据,程序3部分组成。其中PCB是进程的灵魂。
进程控制块PCB中包含了进程的所有信息,主要包括进程PID、进程所占有的内存区域、文件描述符和进程环境等信息。
4.进程的状态 进程的三种最基本的状态是:运行态(running),等待态(readying), 阻塞态(block)
#define TASK_RUNNING 0 //运行状态
#define TASK_INTERRUPTIBLE 1 //等待状态(可被中断)
#define TASK_UNINTERRUPTIBLE 2 //等待状态(不可被中断)
#define TASK_STOPPED 4 //停止状态
#define TASK_ZOMBIE 8 //睡眠状态
#define TASK_DEAD 16 //僵死状态
5.进程和程序的区别 进程是动态的,程序是静态的。
进程时运行中的程序,程序是一些保存在硬盘上的可执行的代码。
6.进程的优缺点优点
使多个程序并发执行
缺点
程序并发执行时付出了巨大的时空开销,每个进程在进行切换时身上带了过多的“累赘”导致系统效率降低。
于是人们为了解决这个缺点想到让进程在并行时不拥有资源---从而引入了线程的概念:即线程本身不拥有资源或者是很少的资源,进程只是拥有资源的基本单位,线程是调度的基本单位
引入线程减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。
7.进程的表示 在 Linux 内核内,进程是由相当大的一个称为 task_struct 的结构表示的。此结构包含所有表示此进程所必需的数据,此外,还包含了大量的其他数据用来统计(accounting)和维护与其他进程的关系(父和子)。对 task_struct 的完整介绍超出了本文的范围,以下代码给出了 task_struct 的一小部分。这些代码包含了本文所要探索的这些特定元素。task_struct 位于 ./linux/include/linux/sched.h。
task_struct 的一小部分
- struct task_struct {
-
volatile long state;
-
void *stack;
-
unsigned int flags;
-
-
int prio, static_prio;
-
-
struct list_head tasks;
-
-
struct mm_struct *mm, *active_mm;
-
-
pid_t pid;
-
pid_t tgid;
-
-
struct task_struct *real_parent;
-
-
char comm[TASK_COMM_LEN];
-
-
struct thread_struct thread;
-
-
struct files_struct *files;
-
...
-
};
详见《
Linux2.25进程结构task_struct
》
8.进程分配 Linux 内所有进程的分配有两种方式。第一种方式是通过一个哈希表,
由 PID 值进行哈希计算得到;第二种方式是
通过双链循环表。循环表非常适合于对任务列表进行迭代。由于列表是循环的,没有头或尾;但是由于 init_task 总是存在,所以可以将其用作继续向前迭代的一个锚点。让我们来看一个遍历当前任务集的例子。
任务列表无法从用户空间访问,解决方法详见《文献3》。
9.程序转化为进程通常需要经过以下步骤:
内核将程序读入内存,为程序分配内存空间
内核为该进程分配进程标识符(PID)和其他资源
内核为该进程保存PID及相应的状态信息,把进程放到运行队列中等待执行。程序转化为进程后就可以 被操作系统的调度程序执行了。
10.进程的内存映像 进程的内存映像是指内核在内存中如何存放可执行程序文件 。在将程序转化为进程的过程中,操作系统将可执行程序由硬盘复制到内存中。
linux下程序映像的一般布局如下:(从低地址到高地址)
1>代码段:代码段是只读的,可被多个进程共享。
2>数据段: 存储已被初始化的变量,包括全局变量和已被初始化的静态变量。
3>未初始化数据段:存储未被初始化的静态变量,它也被称为bss段
4>堆:用于存放程序运行中动态分配的变量
5>栈:用户函数调用,保存函数的返回地址,函数的参数,函数内部定义的局部变量。
参考文献1.Linux进程学习总结.
2.linux获取进程信息函数.http://blog.csdn.net/jpcfei/article/details/6288467
3.Linux 进程管理剖析.http://www.ibm.com/developerworks/cn/linux/l-linux-process-management/
阅读(1303) | 评论(0) | 转发(1) |