进程 线程 进程迁移

进程

  • 进程是系统中独立存在的实体,它可以拥有自己独立的资源,比如文件和设备描述符等。在没有经过进程本身允许的情况下,其它进程不能访问到这些资源。这一点上和线程有很大的不同。
  • 进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合。
  • 在进程中加入了时间的概念。进程具有自己的生命周期和各种不同的状态,这些概念在程序中都是不具备的。
  • 若干个进程可以在单处理机状态上并发执行。
  • 进程运行的环境称为进程上下文(context),进程的上下文由进程控制块PCB(process control block)、正文段(text segment)、数据段(data segment)以及用户堆栈(stack)组成。其中:正文段存放该进程的可执行代码;数据段存放进程中静态产生的数据结构;PCB包括进程的编号、状态、优先级以及正文段和数据段中数据分布的大概情况。
  • 一个称做进程表(process table)的链表结构将系统中所有的PCB块联系起来。
  • 系统每次访问一个进程时,内核根据PID在进程表中查找相应的进程PCB块(具体查找过程通过一个PID的hash表实现),再通过PCB块找到其对应的代码段与数据段,并进行操作。

线程

  • 线程是包含在进程中的一种实体。它有自己的运行线索,可以完成一定的任务,可与其他线程共享进程中的共享变量及部分环境、相互之间协同来完成进程所要完成的任务。
  • 线程能够比进程有更高的性能,这是由于同一个进程中的线程都有共性:多个线程将共享同一个进程虚拟空间
  • 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。
  • 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程。
  • 由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便将来该线程在被重新切换到时能得以恢复。
  • 堆栈是保证线程独立运行所必须的。
  • 线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以线程必须拥有自己的函数堆栈,使得函数调用可以正常执行,不受其他线程的影响。
  • 由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参数,这个参数就是线程的优先级.

进程迁移

  • 进程迁移是将进程在处理机节点间转移的技术,也可以认为是进程的重新定位。

进程迁移的步骤:

  • [Step 1] 询问目标处理机是否可以接受迁移进程;
  • [Step 2] 得到目标处理机的肯定答复后,在目标处理机上创建恢复进程;
  • [Step 3] 中断迁移进程的运行程序;
  • [Step 4] 在源处理机上收集迁移进程状态;
  • [Step 5] 将迁移进程状态传输到目标处理机;
  • [Step 6] 目标处理机上的恢复进程负责恢复迁移进程状态,重建进程实例;
  • [Step 7] 通知系统内其它进程迁移进程的新位置,并重建迁移中断前的通信连接;
  • [Step 8] 迁移进程在目标节点恢复运行;
  • [Step 9] 利用转发机制(或利用单一系统映像的性质)保证进程可以在远程处理机透明执行。
posted @ 2011-08-02 15:58  摇风清影  阅读(3161)  评论(1编辑  收藏  举报