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介绍
qnx之resource manager(一)_第1张图片

“/”—The prefix tree的介绍:

  • 是整个pathname space的根
  • 被process manager保存(以表的形式存储)
  • 由resource managers增加和删除节点、内容
  • nd, pid, chid, handle与路径名相联系
    注:当一个resource manager有多个name(路径名)注册时,resource manager就使用handle来区分这些name。
    1.2 例子

  • open一个文件
    qnx之resource manager(一)_第2张图片
    在这个图中,匹配为 /dev/ser1。而它指向devc-ser8250,所以由devc-ser8250来处理请求。

  • 客户端请求服务器
fd = open ("/dev/ser1", O_RDWR)
   
   
   
   
   
   
   
   
  • 1

这个函数会导致客户端的library code(open)向process manager发送一个消息。

  • open函数执行时的 交互流程
    qnx之resource manager(一)_第3张图片
    注:open()是依靠nd,pid,chid来找到process manager。
    qnx之resource manager(一)_第4张图片
    *注:大多数的标准接口都是基于消息传递的。如:read, write, readdir, stat, close, devctl…

  • resource manager的工作流程:
    1.创建一个通道 channel
    2.接管一个路径名空间
    3.等待一个messages或events
    4.处理消息,然后返回结果

消息的三种类型:

  1. connet messages:基于路径名的(open(“spud.dat”, …));在resource manager与client进程之间创建一个联系,以便I/O messager使用。
    qnx之resource manager(一)_第5张图片
  2. I/O messages:基于文件描述符的(read(fd, …));基于之前connect messages创建的联系。
    qnx之resource manager(一)_第6张图片
    qnx之resource manager(一)_第7张图片
  3. 其他消息:pulses, private messages…

resour manager的简单书写:
1.一个主循环
2.每一种类型的消息均有默认的处理,不需要特殊操作。
qnx之resource manager(一)_第8张图片
qnx之resource manager(一)_第9张图片

你可能感兴趣的:(qnx学习)