《深入解析Windows操作系统》第7章读书笔记

1、远程过程调用RPC:传统上,网络软件是围绕着IO处理模型来组织结构的。例如在Windows中,当一个应用程序发出一个IO请求时,它就会发出一个网络操作。操作系统酌情处理,它将此请求转发给一个重定向器,此重定向器承担一个远程文件系统的角色,它使得客户可以与“对客户不可见的远程文件系统”进行交互。重定向器将该操作传递给远程文件系统,当远程文件系统处理完请求并返回结果以后,本地网卡激发中断,内核处理中断,原先的IO操作完成,处理结果被返回给调用者。RPC应用程序和普通应用程序的区别在于,RPC应用程序中的有些过程库(即函数)被保存在远程计算机上,并且在远程计算机上被执行,而其他的过程则在本地执行。

对于RPC应用程序,所有的过程看起来都是在本地执行的。换句话说,不需要应用程序员主动编写代码来完成诸如网络传输计算类型的请求或者与IO相关的请求。处理网络协议、网络错误、等待结果之类的任务,RPC软件会自动地完成这些任务。

RPC的工作方式:应用程序(此处应用程序指的是RPC服务器和RPC客户端)被链接到一个包含存根过程的本地库或者DLL,其中每个远程过程都有一个对应的存根过程(即存根函数)。对于简单的应用程序,存根过程以静态的方式与应用程序链接在一起,但是对于大组件,存根被包含在单独的DLL(动态链接库)中。RPC客户端上的存根过程与RPC服务器上的远程过程具有相同的函数名和函数参数(即两者的函数签名是一致的),但是存根过程(RPC客户端)并不处理所请求的操作,相反地,它(位于RPC客户端)将传递给它的参数进行序列化(参数一一取出来并转变成一个二进制的数据流)以便通过网络传输到RPC服务端。对参数进行序列化,意味着要按照特定的方式将参数排序并包装起来,以便适合在网络连路上传输,比如引用解析,指针解引用等(为指针附加一份所指数据结构的拷贝)。然后存根调用RPC运行时过程,这些RPC运行时过程可以找到远程过程所在的RPC服务器、确定RPC服务器使用哪些传输机制、然后将参数序列化后的二进制流以RPC请求的方式发送给RPC服务器。RPC服务器收到此RPC请求时,它将参数二进制流解析出来(反序列化),使用解析后的参数调用本地(此处的本地指的是RPC服务器)的函数完成逻辑功能。当RPC服务器结束以后,它以相同的方式将结果返回给RPC客户端。(注意RPC客户端和服务端并不是一成不变的,二者都是相当于RPC请求而言的。RPC请求发起者被称为RPC客户端,接受并处理RPC请求的称为RPC服务端。在本次远程过程调用中角色属于RPC客户端的进程可能在后续的远程过程调用中又承担着RPC服务器的角色)。

上述描述的是同步RPC,Windows也支持异步RPC。在异步RPC中,RPC客户端不必等待RPC服务端的应答,相反,它可以执行其他的代码。当后续收到来自RPC服务端的应答是,RPC运行时库会通知RPC客户端该操作已经完成。RPC运行时库使用客户端所要求的通知机制:事件同步对象或、步过程调用APC或者IO端口完成。事件同步对象的实现方式是:RPC客户端调用WaitForSingleObject或者WaitForSingleObjects函数来等待该事件对象变成有信号状态;异步过程调用APC的实现方式是:RPC运行时库将该APC的执行排队到执行此RPC函数的线程中。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值