WEB开发网
开发学院服务器服务器方案 集群系统MOSIX分析(6) 阅读

集群系统MOSIX分析(6)

 2008-12-01 11:04:52 来源:WEB开发网   
核心提示: 系统调用的处理MOSIX中,位置透明性是通过将节点相关的系统调用转发到home节点上的deputy来实现的,集群系统MOSIX分析(6)(2),系统调用是用户上下文和系统上下文之间的一种同步的交互形式,进程执行的所有系统调用都被远程节点的连接层所截获,然后,开中断,如果是节点无关的,则在远

系统调用的处理

MOSIX中,位置透明性是通过将节点相关的系统调用转发到home节点上的deputy来实现的。系统调用是用户上下文和系统上下文之间的一种同步的交互形式。进程执行的所有系统调用都被远程节点的连接层所截获。如果是节点无关的,则在远程节点上本地执行。否则,系统调用将被转发给deputy,deputy则代表home节点上的进程执行该系统调用。结果返回给Remote,Remote然后从系统调用返回,继续执行用户代码。

我们知道,进程是通过系统调用进入核心态的,请求OS提供服务。在Linux中,系统调用处理程序地址都保存在表sys_call_table中。【kernel/entry.S】中定义了系统调用的入口ENTRY(system_call),通过系统调用号查找sys_call_table表,找到对应的系统调用处理程序并调用之。MOSIX中则定义了一个相应的remote_sys_call_table,并修改了ENTRY(system_call)。

在ENTRY(system_call)中,首先判断进程是否为Remote。如果是,则查找remote_sys_call_table;否则查找sys_call_table。对于本地的非remote进程,对系统调用的处理和通常的一样,大家都很熟悉。我们主要介绍对remote进程系统调用的处理情况。remote_sys_call_table中保存的为对应的系统调用的remote版本,对于大多数系统相关的调用的处理都是remote发送请求给deputy,再由deputy调用本地相应的处理函数处理的,然后将结果返回给remote。

对于remote进程的各种系统调用,处理方式也各不一样。有的只是直接调用原有的系统调用,并不作改变,像remote_sys_brk,remote_sys_mprotect等。有的则作些额外处理,然后通过remote_standard_system_call来实现。remote_standard_system_call将系统调用的参数封装成syscall_h包,然后向Deputy发送请求,请求类型为REM_SYSCALL,然后等待Deputy的回复消息(remote_wait(REM_SYSCALL|REPLY,,) )。Deputy一直在deputy_main_loop中一直循环等待消息的到来,当收到请求后,判断其类型,并作相应的处理。对于 REM_SYSCALL请求,则调用deputy_syscall( )处理。deputy_syscall则从传入的参数中取出系统调用号,拷贝寄存器值,然后根据系统调用号查找系统调用表syscall_table中对应的处理例程,由它完成真正的处理过程。然后,开中断,通过deputy_reply(REM_SYSCALL,,)发回响应消息和处理结果。

Tags:集群 MOSIX

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接