qnx之resource manager(一)
学习目的:
怎样使用qnx的resource manager framework
包括:初始化,读写操作,跟踪每个open和device的数据,阻塞和非阻塞操作。
学习纲领
- resource manager介绍
- resource manager的初始化(见二)
- open(), read(), write()的编写
1.resource manager介绍
- 可看作为扩展操作系统的一个程序。作用:创建和管理一个路径名;为客户端提供POSIX接口,如(open(), read(), write(), …)
- 可以与硬件相联系,如(serial port, disk drive)
- 也可以仅仅是一个单纯的软件,如(queuing, logging)
1.1 pathname space介绍
“/”—The prefix tree的介绍:
- 是整个pathname space的根
- 被process manager保存(以表的形式存储)
- 由resource managers增加和删除节点、内容
nd, pid, chid, handle与路径名相联系
注:当一个resource manager有多个name(路径名)注册时,resource manager就使用handle来区分这些name。
1.2 例子open一个文件
在这个图中,匹配为 /dev/ser1。而它指向devc-ser8250,所以由devc-ser8250来处理请求。- 客户端请求服务器
fd = open ("/dev/ser1", O_RDWR)
这个函数会导致客户端的library code(open)向process manager发送一个消息。
open函数执行时的 交互流程
注:open()是依靠nd,pid,chid来找到process manager。
*注:大多数的标准接口都是基于消息传递的。如:read, write, readdir, stat, close, devctl…resource manager的工作流程:
1.创建一个通道 channel
2.接管一个路径名空间
3.等待一个messages或events
4.处理消息,然后返回结果
消息的三种类型:
- connet messages:基于路径名的(open(“spud.dat”, …));在resource manager与client进程之间创建一个联系,以便I/O messager使用。
- I/O messages:基于文件描述符的(read(fd, …));基于之前connect messages创建的联系。
- 其他消息:pulses, private messages…
resour manager的简单书写:
1.一个主循环
2.每一种类型的消息均有默认的处理,不需要特殊操作。