关于LPC, APC, LPC, RPC这些过程调用,不是很懂,麻烦各位大大了。

elmnd 2009-05-06 02:04:20
俺最近在看《深入解析WINDOWS》,看到这些感觉不是很懂。而MSDN得很多都是全英。请问各位大大, 上面的几个PC, 究竟有什么用?
最好举一些例子,说明那些“过程调用”是有什么用。俺菜,麻烦了啊。
...全文
995 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2009-05-11
  • 打赏
  • 举报
回复
学习了
jameshooo 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 elmnd 的回复:]

一句话,感觉LPC是简化的RPC
[/Quote]

用“简化”不太合适,用“特化”比较合适。
elmnd 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 makefriend7 的回复:]
呵呵。。。。其实搞简单的。。你用到的大概只会是APC。。。这个需要仔细看下
当然。。如果搞网络。可能会牵扯RPC...

至于DPC,如果你不打算搞驱动。完全可以不予理会。。当然,如果搞驱动。这个是很基本的概念。。。


LPC..嘿嘿。。这东东其实不用理解。。。。反正你理解了RPC就足够了。
[/Quote]
一句话,感觉LPC是简化的RPC
elmnd 2009-05-11
  • 打赏
  • 举报
回复
唉, 自己发点东西吧。DPC看了很久, 有点懂了, 就是为了高响应, 延迟执行高IRQL的任务;
A Deferred procedure call (DPC) is a Windows operating system mechanism which allows high-priority tasks (e.g. an interrupt handler) to defer required but lower-priority tasks for later execution. This permits device drivers and other low-level event consumers to perform the high-priority part of their processing quickly, and schedule non-critical additional processing for execution at a lower priority.

DPCs are implemented by DPC objects which are created and initialized by the kernel when a device driver or some other kernel mode program issues requests for DPC. The DPC request is then added to the end of the system-wide DPC queue. DPCs have three priority levels: low, medium and high. By default, all DPCs are set to medium priority. When the processor drops to an IRQL (interrupt request level) of Dispatch/DPC level, it checks the DPC queue for any pending(等候判定或决定) DPCs and executes them until the queue is empty or some other interrupt with a higher IRQL occurs.

For example, when the clock interrupt is generated(产生), the clock interrupt handler generally increments the counter of the current thread to calculate the total execution time of that thread, and decrements its quantum(定量) time remaining by 1(要在1以上). When the counter drops to zero, the thread scheduler has to be invoked to choose the next thread to be executed on that processor and dispatcher to perform a context switch(上下文切换). Since the clock interrupt occurs at a much higher IRQL, it will be desirable to perform this thread dispatching which is a less critical task at a later time when the processor's IRQL drops. So the clock interrupt handler requests a DPC object and adds it to the end of the DPC queue which will process the dispatching when the processor's IRQL drops to DPC/Dispatch level.
一句话:为了保持高响应, 延迟执行高IRQL的任务。
PS:要么不执行。 要么抽干整个DPC队列。
RuntimeError 2009-05-10
  • 打赏
  • 举报
回复
我看的是《Windows核心编程》。。。
MarsZhangLing 2009-05-10
  • 打赏
  • 举报
回复
呵呵。。。。其实搞简单的。。你用到的大概只会是APC。。。这个需要仔细看下
当然。。如果搞网络。可能会牵扯RPC...

至于DPC,如果你不打算搞驱动。完全可以不予理会。。当然,如果搞驱动。这个是很基本的概念。。。


LPC..嘿嘿。。这东东其实不用理解。。。。反正你理解了RPC就足够了。
lynx090 2009-05-08
  • 打赏
  • 举报
回复
LPC:本地过程调用,是用于本机上跨进程的一种调用方式,打印调用,安全登陆等等都使用LPC.
内核态和用户态切换是使用INT或者SYSENTER指令。

RPC:远程过程调用,可以调用远程机器上进程的方法。RPC是COM EXE服务器,DCOM/COM+的基础之一。

APC:异步过程调用,通过此技术,可以委托其他进程来完成调用,简单来说就是委托其他进程来做其他事情。
但是用户态的APC必须等待线程处于ALERT状态才能执行,内核态则不是。

DPC:延迟过程调用,摘抄书上的:
完整的中断服务通常需要执行这样一些操作,这些操作不适合在ISR中执行,或者考虑到执行在提升IRQL上的ISR中会对系统性能造成影响。为了解决这个问题,Windows NT的设计者提供了推迟过程调用(DPC)机制。DPC是一个通用机制,但通常都用在中断处理中。在最普通的情况下,ISR决定当前请求的完成并请求一个DPC。之后,内核在DISPATCH_LEVEL级上调用这个DPC例程。因此DPC中的代码要比ISR中的代码有更少的限制。特别是,DPC例程可以调用象IoCompleteRequest或IoStartNextPacket这样的例程,在一个I/O操作的结尾处调用这些例程在逻辑上是必要的。
elmnd 2009-05-06
  • 打赏
  • 举报
回复
1L的, 俺要GOOGLE,WIKI的话,比这个更详细的都有,思密达。。。
jameshooo 2009-05-06
  • 打赏
  • 举报
回复
补充一句,LPC是一个无形的东西,对用户来说它是透明的,但它时刻在起作用,用户看到的只有RPC。
jameshooo 2009-05-06
  • 打赏
  • 举报
回复
LPC和RPC都属于远程同步过程调用,远程的意思是指跨越进程边界进行调用,包括本机进程间调用和跨越机器边界的调用。本来只需要一个RPC就足够了,它同时可用于进行本机调用和网络调用,但由于网络调用的复杂性,微软发明了一套只用于本机跨进程调用的机制(专利产品)就是LPC。由于LPC不涉及网络控制,因此大大简化了远程调用的流程,也提高了调用效率,当RPC用于网络调用时,RPC还是RPC,当RPC用于本机调用时,实际上执行的是LPC,系统自动判断的。LPC在操作系统中无处不在,很多API都使用了LPC,尤其是那些需要在内核态和用户态之间切换的调用全部使用了LPC。

APC跟RPC是两个不同的概念,无法比较,它用于异步过程调用,本质就是把某个调用委托给其它线程完成而无须阻塞。被委托的调用并不是马上执行的,而是进入异步过程队列,当被委托的线程处于警觉模式(alertable)的休眠状态时,它并不真正休眠,而是扫描异步过程队列并调用队列中的过程。
elmnd 2009-05-06
  • 打赏
  • 举报
回复
自己顶一下,求高手!
biweilun 2009-05-06
  • 打赏
  • 举报
回复
楼上的是搜索高手。
其实楼主自己去网上搜下就出来很多结果了,Google很好很强大的
野男孩 2009-05-06
  • 打赏
  • 举报
回复
LPC: LOCAL PROCEDURE CALL

在 Windows NT 中,客户-子进程通讯的方式与 MACH 操作系统中的类似。每种子系统都有一个可户端 DLL 用来与客户可执行程序链接。 DLL 中有子系统 API 的 stub 函数。只要客户进程——使用子系统接口的应用程序——发出 API 调用,DLL 中相应的 stub 函数就将调用传递给子系统进程。 在处理完成后,子系统进程将结果返回给客户 DLL。DLL 中的 stub 函数等待子系统返回结果,再转回来将结果传递给调用者。客户进程只会觉得像是在调用自己代码中的函数一样。在 RPC 下,客户机确实是通过网络来调用某远程主机,因此叫做远程过程调用。Windows NT 的服务器与客户机运行在同一台机器上,因此此机制叫本地过程调用。

LPC 共有三种类型。第一类最多只能发送394字节的小消息。第二类能发送大一些的消息。第三类 LPC 叫做 Quick LPC,使用在 Windows NT 3.51 的 Win32 子系统上。

前两类 LPC 使用端口对象进行通讯。端口类似于 Unix 上的套接字或命名管道,是进程间的双向通讯通道。然而,与套接字不同的是,通过端口传递的数据并不是用流的形式。端口明确了消息的边界。简单讲,可以使用端口发送和接收消息。子系统用众所周知的名字来创建端口。需要调用子系统服务的客户进程使用这个名字打开相应的端口。打开端口后,客户程序就可以通过端口与服务器程序通讯了。
(以上内容转载自<Undocumented Windows NT>)

RPC跟LPC类似,但是支持基于网络的分布式处理,Remote Procedure Call。实际的用法可以看看MSDN,google了一下找到个blog有说这个的:http://www.cppblog.com/jb8164/archive/2008/04/28/48368.html

APC是异步过程调用,在用户态和内核态都有大量的应用。用户态下的QueueUserAPC就是典型,具体的例子可以看看<windows核心编程>

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧