进程、线程概念及内涵梳理

     进程、线程的概念实在太重要,在每个编程语言里都有相应的实现机制,面试的时候也经常被问到,今天稍微梳理以下,说的不好请投隐藏帖。

 1.进程

        《APUE》上的解释:程序是存放在磁盘上,处于某个目录中的一个可执行文件。程序的执行实例被称为进程(process)。

          从内核的角度来看,进程是操作系统分配内存、CPU时间片等资源 的基本单位,为正在运行的程序提供的运行环境。它代表了程序的一个执行过程,是一个动态的实体,随着程序中的指令的执行而不断变化。

         《深入理解Linux内核》中的解释:一个进程可以被定义为:“执行程序的一个实例 ”,或者一个运行程序的“执行上下文”。在传统的操作系统中,一个进程在地址空间(address space)中执行一个单独的指令序列。地址空间是允许进程引用的内存地址集合。现代操作系统允许具有多个执行流的进程,也就是说,在相同的地址空间可执行多个指令序列。

         类Unix操作系统采用进程/内核模式。每个进程都自以为它是系统中唯一的进程,可以独占操作系统所提供的服务。只要进程发出系统调用(即对内核提出请求), 硬件就会把特权模式由用户态变成内核态,进程开始执行一个内核过程,该过程的执行目的就被局限在一个非常小的范围内。这样,操作系统在进程执行的上下文中运行来满足进程的请求。一旦请求完全得到满足,内核过程将迫使硬件返回到用户态,进程将从系统调用的下一条指令开始继续执行。

 2.线程

       《Linux内核修炼之道》对线程的解释:线程是在进程基础上的进一步的抽象,一个进程可以分为两个部分:线程集合和资源集合 。线程是进程中的一个动态对象 ,是一组独立的指令流 ,进程中的所有线程将共享进程里的资源,但同时各个线程也拥有独立的程序计数器、堆栈和寄存器上下文。

       所有的进程都至少拥有一个线程。相对于进程是操作系统进行资源管理的最小单元,线程则是程序执行的最小单元。

      从Linux内核的角度来说,并没有所谓的进程线程之分,从而也就不会有特别针对线程进程描述的数据结构。线程在内核中的体现只是一个普通的进程,它拥有自己的进程描述符,只不会该进程与其他一些进程共享某些资源 ,比如地址空间、打开的文件等,这样的进程也称为轻量级进程 (Light weight Process)。

     针对Linux这种独特的线程机制,在进行多线程应用实现的时候,就需要将轻量级进程(内核调度的实体)与用户创建的每个线程(通过pthread_create函数)关联起来,这个,每个线程就可以由内核独立调度,保证了多个线程之间的并发执行。

猜你喜欢

转载自chriszeng87.iteye.com/blog/1123385
今日推荐