集群系统MOSIX分析(5)
2008-12-01 11:04:43 来源:WEB开发网由于物理页面的迁移很费时间,为了给其它进程必要的运行时间,MOSIX并不会一次将所有页面完全迁移,而是迁移一定数目的页面后,就再次调度schedule( ),给予其它进程运行的机会。
浮点处理器状态
task_struct结构中,used_math成员表明进程是否使用了浮点运算器,struct thread_struct 类型的thread成员则保存了该进程和CPU特定相关的状态。如果进程使用了浮点运算器的话,则也要迁移浮点处理器状态,这可以从thread.i387结构中获得。
union i387_union {
struct i387_fsave_struct fsave;
struct i387_fxsave_struct fxsave;
struct i387_soft_struct soft;
};
局部描述符表(LDT)
局部描述符表是一个段,它其中存放的是局部的、不需要全局共享的段描述符。例如,可以为每个正在运行的任务定义一个LDT,其中包含仅能被该任务使用的段描述符,如任务的代码段、数据段、堆栈段以及一些门描述符等。struct mm_struct的成员context 保存着体系结构相关的MM上下文。但是i386 结构不存在 MMU 上下文, 而是将段信息保存在其中。LDT保存于mm的segment成员中。每个进程最多有LDT_ENTRIES (8192)个条目,每个条目大小为LDT_ENTRY_SIZE (8)。
其它进程状态信息
包括其它的一些进程状态,如进程的时间数据成员,进程标识,进程资源管理等。
资源管理信息(limits)
结构rlimit中定义了与进程相关的资源限制信息。包括一个用户可以拥有的进程数、一个进程可以打开的文件数、地址空间限制、文件大小、数据大小等。进程可以随意减少自己的当前资源限制,也可以增加自己的当前资源限制,但增加的总数不能超过最大值,而且最大总数不能修改。一个进程只能修改自己的资源限制。进程中与资源控制相关的是数组rlim,其定义如下:struct rlimit {
long rlim_cur; /* 当前值 */
long rlim_max; /* 最大值 */
};
task_struct中rlim[RLIM_NLIMITS]数组保存了该进程得资源限制信息。迁移时,将从中取得CPU时间(RLIMIT_CPU)、最大数据长度(RLIMIT_CPU)、栈大小上界(RLIMIT_CPU)、驻留进程集上界(RLIMIT_CPU),地址空间界限(RLIMIT_CPU)等限制信息,传送到目的进程。
进程标识信息
包括进程的用户标识(uid)、用户组标识(gid)、进程的组标识号(pgrp)、 会话标识号(session)、可执行文件名(comm)。
时间数据成员
包括it_virt_value;和it_prof_value软定时值。
MOSIX控制相关状态
迁移限制
MOSIX的抢先式进程迁移机制进程支持对绝大多数进程的迁移,但是并不是所有的进程都能被迁移的。具有下面这些情况的进程是无法被迁移的。
进程以共享内存的方式使用文件或者使用了SysV IPC的共享内存。
进程映射了一些设备内存(device memory)。
进程处于8086仿真模式。
进程为内核守护进程。
进程的部分内存被mlock系统调用锁住。
进程与其它线程共享它的内存。
进程为实时调度的进程。因为迁移后无法精确控制时间。
进程被允许直接使用in/out IO指令(通过ioperm系统调用)。
init(1号)进程不能被迁移。
进程映射硬件内存来进行原始(raw )I/O。
更多精彩
赞助商链接