应用层上的同步原理
来源:互联网 发布:can总线报文数据段 编辑:程序博客网 时间:2024/06/05 23:48
对于内核程序来说,同步和异步是经常用来处理某些请求的。。。
他们的区别在于执行的效率以及执行的方法上。。。
对于应用层上的实现,可以有三个函数吧:
1:ReadFiel()
2:WriteFile()
3:DeviceIoControl()
他们都可以来设置不同还是异步的方式,之前的帖子又说道过这个,不过是在内核程序下实现的,现在来说说应用层它是怎么来运行的。
还是以DeviceIoControl 为 例子吧:
1:同步的时候:
当函数得到 irp 后, 它会将irp 传到内核, 也就是 irp_mj_device_Control 请求。。
然后内核就回相应这个事件,而这个函数就回等待这个事件被底层完成,并且返回,它才回去做其他的处理,
在这期间,底层的IoCompleteRequest(), 会去调用 WaitForObjectRequset(), 这个函数,
从这里,可见请求的处理方式,以及内核程序的强大。。。
2:异步处理:
顾名思义吧,就是各干各的,当我把请求发给你之后,我就不再对你负责了,就像两个对象,分手了,谁还去对你负责呀。。。
比喻而已,呵呵。。。之后,当请求完成时,底层会通知上层这个请求完成。。。
在异步处理的过程中,如果不使用IoCompleteRequest(),那么一定要将此 IRP 出于挂起状态,也就是标记未决,在键盘过滤中
有这样的使用。。。函数是 IoMarkPending(irp);
从上边可以容易的看出,异步对于对线程的支持比较强大,效率也是比较高的。。。
同样,在之前对 磁盘还原, 虚拟磁盘的设计,以及 键盘,usb 等的过滤驱动的学习,我感觉,完成函数在处理异步的请求方面
有着非常大的作用。。。
对于这些发到底层的请求,内核程序会怎么样去处理呢?
一般来说可以有三种处理方法:
1:首先,我来说一下过滤驱动的处理方法吧,毕竟我对这方面是比较感兴趣的。。。
对于过滤驱动而言,拦截时他的首要任务,对于它关系的请求,他当然是不会放过的哦。。。
1)我们可以得到放送下来的请求,然后决定是继续发往下层设备,让底层设备处理,2)当然,我们同样可以直接的返回请求,
那么底层就不知道这回事了,也就达到了过滤,3)我们还可以更改请求信息,达到某些目的,加密,或者对数据进行处理,
防火墙,杀软。。。。他们都是这么做的。。。
- 应用层上的同步原理
- 应用层上的同步原理
- 应用层上的同步原理(2)
- 应用层上的同步问题(3)
- 驱动层与应用层的事件同步(主动防御原理浅析)
- 驱动层和应用层的同步通信
- ucenter应用同步登录的原理
- 应用层原理
- windows编程之应用层的线程同步
- 应用层和驱动层的同步与异步的处理逻辑及底层实现
- 应用层和驱动层的同步与异步的处理逻辑及底层实现
- 应用层和驱动层的同步与异步的处理逻辑及底层实现
- 从应用层打通内核:驱动的工作原理1
- 在应用层上_注册表的_API
- 总结一下应用层上对注册表的操作
- UIView层动画在view转换上的应用
- 计算机网络应用层(一)应用协议原理
- 发现ajax应用在firefox上同步的问题
- 使用MySQL Proxy解决MySQL主从同步延迟
- 浅入浅出nutch 0.8使用指南4windows
- 爆笑!你知道msdn与csdn的意思吗?
- 可标记列表 笔记
- Asp.net DataTable添加列和行的方法
- 应用层上的同步原理
- 回填数据
- DO-178B三种文本对照学习注记(增补)
- 关于物联网
- VS20XX使用DEF文件来生成DLL与Lib
- 批处理语法
- sliverlight入门指南
- 关于类成员函数指针的调用问题
- Cache Server 内存数据库说明