荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: zzt (好好学习,天天向上), 信区: Linux
标  题: 进程迁移技术及其发展(第一部分)
发信站: BBS 荔园晨风站 (Thu Feb 17 19:44:51 2000), 站内信件

发信人: xz (香紫), 信区: Linux
标  题: 进程迁移技术及其发展(第一部分)
发信站: 一网深情 (Thu Jul  1 06:54:48 1999), 转信

1. UNIX中进程的概念
从用户角度看,程序(program)是指可执行文件,进程(process)则是指执行中的程
序的实例.从UNIX核心的角度看,进程是映象的执行,映象则是指计算机的执行环境.
1.1可执行文件的格式
用户对一个程序的源代码进行编译,链接而建立的可执行文件,主要由以下几部分
组成:
? 文件头(header):描述文件的属性,程序的格式及结构
? 程序正文(text):即程序的指令序列
? 一个经初始化的数据段和一个尚未初始化的数据段bss段(block static storage):
初始化的数据段中,数据按其大小分配了空间,并且赋予初值;未初始化的数据段
只含有一个空间指示,表示核心为未初始化数据应分配多大的空间,而该空间的分
配仅在运行时进行,bss段的初值置为0
? 其他段:诸如符号表等信息
1.2进程的存储器模型
每个进程在自己的虚拟地址空间运行,UNIX区别用户进程和系统进程,系统进程管
理整个系统的资源,如分配内存,将用户进程换入换出,在第二级存储器之间换进
换出内存页面.用户进程运行用户级的代码被称为在用户态(user-mode)下运行,用
户进程执行系统级的指令称为在核心态下(kernel-mode)运行.用户程序在以下情
况下会进入核心态运行,执行系统调用,产生例外和出错,中断处理等.例如,系统
况下会进入核心态运行,执行系统调用,产生例外和出错,中断处理等.例如,系统
时钟引起了时钟中断.在核心态下,进程运行核心代码,因此能够充分利用处理器
资源,并执行特权指令.虚拟存储系统允许核心访问任何进程的代码和数据,但反
之则不允许.用户态的进程只能通过系统调用接口向核心请求服务.另一方面,核
心有权访问所有进程的整个地址空间.
从用户程序的角度看,进程的地址是一段线性编址内存区域,从地址0开始,其上限
由硬件和操作系统决定.但是,在核心内,进程的地址空间被划分为几个特定的段:
正文段,数据段,bss段和栈段.
1.3进程的上下文
进程的上下文(Context)指进程当前的运行时环境,包含描述进程的所有信息.主
要由以下部分组成:
? 用户地址空间,即程序的正文段,数据段,用户栈,共享内存区等等
? 控制信息,核心用两个主要的数据结构来维护进程有关的控制信息--user区和
proc结构,每个进程还有自己的核心栈和地址转换映射表
? Credentials,表示与进程相联系的用户和组表识符
? 环境变量,一般保存在用户栈的底部
? 硬件上下文,包括通用寄存器,以及系统寄存器的内容
1.4USER区和PROC结构
每个进程有自己的一块user区(也称u区).user区由user结构所定义(See include
/linux/sched.h),包含进程信息中不需要常驻内存的部分.这些信息只在进程运
行时才需要访问,即核心只需访问当前运行进程的user区,对于非运行状态的进
程,其user区与进程映象的其他部分一起,可以保留在内存中,也可换出到对换区
中,user区只能由核心访问.
中,user区只能由核心访问.
User区中包括与进程执行环境有关的所有信息,如进程所属用户的标识符,组标识
符,文件打开数,信号处理信息,共享内存段的数目,程序激活的参数,记帐信息等
等,还有一个指向proc结构的指针.
Proc结构包含与进程有关并且需要常驻内存的信息,如进程状态,进程及父进程标
识符,待处理的信号,共享内存段,页表信息,换出内存后所在的磁盘地址,等等.
1.5用户地址空间的进程映象
进程在用户地址空间的映象包括user区和可执行文件中的区段,这两部分组成了
用户程序映象.UNIX核心代码将可执行程序装入内存后,用户的虚地址空间应包含
下列逻辑区段:
? 正文段,包括程序的机器指令序列,对应于可执行程序的正文段
? 数据段和bss段
? 栈段,由系统创建,并且在运行过程中可能动态地改变.栈由一些逻辑栈帧(stack
 frame)构成,当调用一个函数时, 栈帧被压入,当返回时栈帧被弹出.一个栈帧包
含着用于函数调用的参数,它的局部变量,函数调用前所保存的现场--其中包括函
数调用时程序计数器的值及栈指针的值.每个进程都有两个栈:用户栈及核心栈.
前者用于用户态执行指令,后者用于在核心态执行指令(为了可重入,注意DOS下就
是因为没核心栈所以核心不可重入)
1.6处理器寄存器
寄存器与处理器类型密切相关,同样的处理器上也可以实现不同的操作系统.按照
惯例,有以下寄存器为多数操作系统所用:
? 通用寄存器,在进程的执行过程中用于存放数据.例如,临时表达式的值,整数和
指针返回值,函数调用参数,等等
指针返回值,函数调用参数,等等
? Scratch寄存器,用于存放中间表达式计算结果,例如过程调用所产生的返回值
? 程序计数器(PC),指向CPU将要执行的下条指令的虚存地址
? 程序状态寄存器(PS),又称程序状态字(Program Status Word)PSW,状态寄存器,
控制寄存器等等
? 帧寄存器(Frame Pointer)FP,一系列活动记录编入一个活动记录中称为一帧,帧
内元素的顺序与栈生长的方向有关
? 栈指针(Stack Pointer)SP, 指向栈中的最上层元素的虚存地址,进程运行于用
户态时,栈指针指向进程的私有用户栈,如果进程运行于核心态,栈指针指向进程
的核心栈
? 存储器管理寄存器(Memory Management Registers),是一组用于核心完成虚实
地址转换的寄存器
? 浮点寄存器,是浮点协处理器为系统增加的用于浮点运算的寄存器
1.7信号(SIGNAL)处理机制
UNIX利用信号机制来通知进程发生了异步事件,每种信号都有一种缺省的处理,多
数信号使得进程终止,有些信号在缺省情况下将被忽略,另一些信号会阻塞进程的
执行.
另一方面,用户程序可以通过相应的库函数和系统调用,来指定自己对信号的非缺
省的处理,可以选择激活一个用户指定的信号处理程序(handler),可以指定忽略
某些信号,也可以恢复缺省处理.
当进程即将从核心态返回用户态时,或者进程要进入或离开一个适当的低调度优
先级睡眠状态时,核心要检查它是否收到了信号.也就是说,核心仅当一个进程从
核心态返回用户态时才处理软(!)中断信号.
核心态返回用户态时才处理软(!)中断信号.
1.8进程间通信(IPC)
进程间通信机制允许任意进程交换数据和同步执行.
在传统的单机UNIX系统中,提供了几种进程间通信机制:管道,有名管道,信号灯机
制,信息机制,共享存储器,信号量等.
然而,随着互联网络的发展,导致了UNIX在进程间通信机制上有了显著的进展;另
一方面,分布式数据库一类的多进程程序,要求与远程的无关进程之间能够方便地
通信.新出现的网络技术与工作站技术也要求新的通信机制提供象文件服务器那
样的局域网服务结构,旨在支持资源共享的分布式环境中提供一些能够方便使用
的工具.
为了支持建立建立在通信原语上的分布式计算程序结构,BSD4.3发展和完善了BSD4.2,
提供了一组丰富的进程通信机制.这套通信机制在底层可以支持不同协议集合,不
同命名约定,不同硬件的通信网络.但是在应用程序接口,只提供了一个统一的抽象,
这就是套接字(socket).使得用户在访问网络时,可以通过UNIX的文件描述符对套
接字进行操作.
之后,在其他的UNIX版本上,也纷纷实现了基于套接字的应用程序接口,并且都支持
最基本的两个通信域:UNIX域和INET域.UNIX域为一台机器上的进程间通信所用,
INET域(互联网域)为使用TCP/IP通信协议的进程见进行通信.
2. 进程迁移技术的发展
--


--
※ 来源:.一网深情 bbs.uestc.edu.cn.[FROM: 202.202.37.26]

--
☆ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: bbs@192.168.1.11]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店