注:本文翻译自:
http://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.getting_started/topic/s1_resmgr.html
一、本章前言
在本章中,我们将了解编写资源管理器需要了解的内容。 资源管理器是 QNX Neutrino 的另一个显着功能,它允许您通过标准 POSIX 调用访问服务。
What is a resource manager?
资源管理器只是一个具有一些明确定义的特征的程序。
The client's view
我们已经看到了客户期望的一些暗示。 它需要一个基于文件描述符的接口,使用标准 POSIX 函数。
The resource manager's view
让我们从资源管理器的角度来看事情。
The resource manager library
在深入讨论有关资源管理器的所有问题之前,我们必须熟悉 QNX Neutrino 资源管理器库。
Writing a resource manager
现在我们已经介绍了基础知识——客户端如何看待世界、资源管理器如何看待世界以及库中两个合作层的概述,现在是时候关注细节了。
Handler routines
并非所有呼出都对应于客户端消息——有些是由内核合成的,有些是由库合成的。
Alphabetical listing of connect and I/O functions
本节按字母顺序列出了您可以填写的连接和 I/O 函数入口点(传递给 resmgr_attach() 的两个表)。 请记住,如果您只是调用 iofunc_func_init(),所有这些条目都将填充适当的默认值; 仅当您希望处理特定消息时才需要修改该特定条目。 在下面的“Example”部分中,您将看到一些常用函数的示例。
Examples
我现在将向您展示一些“食谱”示例,您可以将其剪切并粘贴到代码中,以用作项目的基础。 这些不是完整的资源管理器 - 您需要添加线程池并调度下面所示的“骨架”,并确保在您完成之后将您的 I/O 函数版本放入 I/O 函数表中。 完成 iofunc_func_init(),以覆盖默认值!
Advanced topics
现在我们已经介绍了资源管理器的“基础知识”,是时候看看一些更复杂的方面了。
Summary
编写资源管理器是迄今为止我们在本书中讨论过的最复杂的任务。
Related concepts
Resource Managers (System Architecture)
Writing a Resource Manager
二、 Summary
编写资源管理器是迄今为止我们在本书中讨论过的最复杂的任务。
资源管理器是接收某些明确定义的消息的服务器。 这些消息分为两大类:
(1)连接消息
与基于路径名的操作相关,这些可以为进一步的工作建立上下文。
(2)输入/输出消息
始终在连接消息之后到达并指示客户端希望完成的实际工作(例如 stat())。
资源管理器的操作由线程池函数(在“Processes and Threads”一章中讨论)和调度接口函数控制。
QNX Neutrino 在资源管理器库中提供了一组 POSIX 辅助函数,这些函数执行处理客户端到达的 Connect 和 I/O 消息的大部分工作。
资源管理器显示了许多与客户端和资源相关的数据结构,需要记住:
(1)OCB
根据每次打开进行分配,其中包含客户端的上下文(例如,当前 lseek() 位置)
(2)属性结构
按资源分配,包含有关资源的信息(例如设备大小、权限)
(3)安装结构(Mount structure)
基于每个资源管理器进行分配,并包含有关整个资源管理器的特征的信息。
客户端通过消息传递与资源管理器通信,将路径名(通过 open() 和其他调用)解析为节点描述符、进程 ID、通道 ID 和句柄。
最后,通过覆盖“Connect and I/O functions table”选项卡中的一些函数,提供您希望在资源管理器中实际执行的功能。
- 开篇 QNX Managers Resource 文档开篇qnx managers resource qnx managers resource文档 qnx managers resource manager qnx managers resource routines qnx managers resource writing qnx managers examples resource qnx managers advanced resource scheduling qnx sporadic文档 performance qnx文档tuning programming qnx overview文档