LINUX内核研究----内核角度看什么是进程

Linux下的进程拥有以下四个要素:

进程的四要素:

    一、进程有需要执行的代码,也就是CPU指令和被操作的数据。代码相当于进程的剧本,可以和其他进程共用,不一定是该进程所私有。

    二、有进程专用的系统堆栈空间。

    三、在内核中有描述进程信息和进程占用各项资源的信息的结构体task_struct,用于对该进程进行管理。也就是PCB进程控制块,有这个数据结构,进程才能成为一个接受内核调度的基本单位。

    四、有独立的存储空间,意味着除第二点的系统堆栈空间还需要有专有的用户空间的堆栈。在PCB上就是虚拟地址空间。

    四个条件都是必要条件,不可缺少。

如果只具备了前两条而缺第四条则称之为线程。

完全没有用户空间则称之为内核线程,共享用户空间则称之为用户线程。

 

32位地址意味着4G的虚拟地址空间,linux内核将4G的空间分为两部分:从虚地址0xC0000000到0xFFFFFFFF用于内核本身叫做系统空间,从虚地址0x00000000到0xBFFFFFFF用作每个进程的用户空间,理论上每个进程都可以使用3G的用户空间,但是实际空间受到物理存储器(内存以及磁盘交换区和交换文件的)大小的限制。各进程拥有独立的3G用户空间,系统空间却由所有进程共享。linux内核对虚拟地址空间进行抽象的数据结构是在用于虚存管理的mm_struct数据结构以及下属的VM_area_数据结构这些数据结构也保存在进程中的PCB中。

 

每当一个进程通过系统调用方式进入了内核,一个进程必定同时又是一个内核线程,在内核中拥有自己的堆栈空间。该进程就在共享的系统空间中运行,每个进程都拥有自己的task_struct数据结构(PCB)和一片用作系统空间的堆栈的存储空间。操作系统在内核空间中为每个进程分配两个连续的物理页面作为进程在内核中的登记。在内核2.6版本以后这个PCB被放到了高速缓冲区中,但是和系统空间堆栈通过链表的形式相互指向。


猜你喜欢

转载自blog.csdn.net/run32875094/article/details/79328531