QNX-9—QNX官网文档翻译—Resource Managers—开篇

发布时间 2023-07-09 18:45:47作者: Hello-World3

注:本文翻译自:
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”选项卡中的一些函数,提供您希望在资源管理器中实际执行的功能