背景

了解学习QNX -SLM机制

内容

参考 QNX7.0 SLM,若需了解更过内容可移步

SLM是什么

系统启动和监控:启动由许多必须按特定顺序启动的进程组成的复杂应用程序,下图是可以看到SLM在整个QNX BOOT的运行位置。

怎么用

可以通过slmctrl控制。但是我们通常使用xml配置的方式来确定进程的启动顺序。

SLM 配置概要

//根节点
<SLM:system>//组件,可以有多个组件<SLM:component name="io-pkt"> //指令--执行/sbin/io-pkt-v6-hc<SLM:command>/sbin/io-pkt-v6-hc</SLM:command> //执行指令需要的参数--ptcpip stacksize=8192<SLM:args>-ptcpip stacksize=8192</ SLM:args> //启动后等待--等待/dev/socket起来<SLM:waitfor wait="pathname">/dev/socket</SLM:waitfor> </SLM:component> <SLM:component name="ifconfig"> //依赖项--需要依赖io-pkt起来后才能启动<SLM:depend>io-pkt</ SLM:depend> <SLM:command>/sbin/ifconfig</SLM:command> <SLM:args>en0 192.168.1.5 up</SLM:args> <SLM:waitfor wait="exits"></SLM:waitfor > </SLM:component> //由组件组成<SLM:module name="net-setup"> //执行io-pkt<SLM:member>io-pkt</SLM:member> //执行ifconfig<SLM:member>ifconfig</SLM:member> </SLM:module>
</SLM:system>

SLM 组件属性

<SLM:ability>:procnto赋予能力。

<SLM:ability> ability </SLM:ability>

procnto(结合了内核和进程管理器)赋予能力的过程,如root,deny,fork(参考on)。

<SLM:args>:启动进程的命令行参数列表。

<SLM:args>args</SLM:args>

<SLM:cd>:启动进程时切换到的目录。

<SLM:cd>directory </SLM:cd>

<SLM:command>:启动执行指令

<SLM:command [launch=" launch_option [ launch_option ]..."]>executable_path </SLM:command>
  • executable_path–要执行的二进制文件或脚本文件路径。

<SLM:debug>:在调试模式下启动进程时要使用的命令行参数。

<SLM:debug> command_args </SLM:debug>

<SLM:depend>:启动组件所需要的依赖

<SLM:depend [state="session|stateless"]>component_name </SLM:depend>

在所有依赖都在运行并且所有等待完成之前,SLM 不会启动组件。

  • session–停止组件时,SLM 首先停止依赖它的组件。
  • stateless–停止组件时,依赖组件不受影响。

<SLM:envar>:指定对环境变量的更改。

<SLM:envar [clear="none|login|all"]>environment_variables </SLM:envar>

默认情况下,这些变量是从 SLM 继承的。

  • none–保留所有环境变量(default)
  • login-- 清除所有环境变量,除了 环境元素指定 BAUD、DISPLAY、 HZ、PHOTON、 SYSNAME、TERM、TZ、 HOME、LOGNAME、 PATH、SHELL、TERM和 USERNAME。
  • all–清除所有当前环境变量。

<SLM:groups>:指定组件进程的组访问列表的组 ID 列表

<SLM:groups> gid_1 [, gid_2 ]... </SLM:groups>

<SLM:partition>:指定将进程放入的自适应调度程序分区。

<SLM:partition> partition_name </SLM:partition>

<SLM:priority>:指示分配进程的优先级和调度策略

<SLM:priority> priority_algorithm </SLM:priority>
  • f— SCHED_FIFO(先进先出调度)
  • r— SCHED_RR(循环调度)
  • ○— SCHED_OTHER(其他调度)
    调度策略的描述请参见程序员指南中的 “调度策略”。

<SLM:repair>:指定组件异常终止时要采取的操作

<SLM:repair> default|none|stop|restart </SLM:repair>
  • default-- SLM 执行由-r命令行选项指定的操作。
  • none–SLM 不采取恢复行动。
  • stop–SLM 停止依赖于发生故障的组件的任何其他组件
  • restart–SLM 重新启动出现故障的组件

<SLM:runmask>:指定进程可以在哪些处理器上运行

<SLM:runmask> component_runmask   </SLM:runmask>

解释为位掩码的值,它指定进程可以在哪些处理器上运行。它是一个 32 位整数,可以使用strtol()识别的任何格式指定 。
例如,十进制值 5对应于位掩码 00000101,它允许线程在 CPU 0 和 2 上运行。

<SLM:stderr>:错误文件地址

<SLM:stderr [iomode="w[+]|a[+]"]> stderr_filename </SLM:stderr>

overwrite (w), read and overwrite (w+; default), append (a), or read and append (a+).

<SLM:stdin>:输入文件地址

<SLM:stdin [iomode="r[+]"]> stdin_filename </SLM:stdin>

read only ® or read and write (r+).

<SLM:stdout>:输出文件地址

<SLM:stdout [iomode="w|a"]> stdout_filename </SLM:stdout>

overwrite (w) or append (a).

<SLM:stop>:停止组件

<SLM:stop [stop="none|signal"] [child="false|true"] [timeout=" timeout_time "]>stop_data </SLM:stop>

停止进程索要发生的信号编码或者名字。

  • stop:signal(default)发送信号编码或名字给下层进程,none表示什么都不做。
  • child:true停止进程前先停掉子进程,false(default)不会先停子进程。
  • timeout:停止操作的超时时间,超时发送SIGKILL

<SLM:tty>:错误,输入,输出文件地址

<SLM:tty> tty_filename </SLM:tty>

<SLM:type>:要启动组件的安全类型的名称

<SLM:type> type_name </SLM:type>

该名称是反映正在实施的安全策略的标签。通常,您应该根据您尝试启动的内容来选择一个名称。有关安全策略的信息,请参阅安全开发人员指南中的“安全策略”一章。

<SLM:user>:为底层进程分配用户 ID (UID)、组 ID (GID) 或两者。

<SLM:user> uid |: gid | uid : gid </SLM:user>

这些值可以是要在/etc/passwd和 /etc/group 中查找的名称。

<SLM:waitfor>:组件起来后执行一些操作

<SLM:waitfor [wait="none|delay|pathname|exists|blocks"][ polltime=poll_time:timeout_time]> waitfor_data </SLM:waitfor>
  • none–立即启动相关组件
  • delay–启动相关组件前延迟一会
  • pathname–检查相关组件是否启动
  • exists–等待相关组件以指定的代码退出,若预期不同将重启该组件
  • blocks–等待进程中的指定线程到达 RECV 阻塞 状态。
  • polltime–例如, polltime=“100:20000” 结果每 100 毫秒轮询一次,并在 20 秒后超时。

waitfor_data:对应到上面说的参数,可以是时间、路径、预期的退出代码、线程id

SLM 组件复用(系统中常用方式)

可以定义模块和组件以在一个或多个 SLM 文件中重复使用。这对于分解 SLM 模块和组件以在不同的 SLM 配置文件中重用非常有用。

<!DOCTYPE SLM_system [ <!ENTITY resumeModules SYSTEM 'my_reusable_modules.xml'>
]>
...
<SLM:system> ... <!--通过指定实体'包含'my_reusable_modules.xml'中指定的内容重用模块'--> &reuseModules; ...
</SLM:system>

SLM 进程终止

SLM 仅在以下情况下认为进程已正常终止:

  • 通过执行创建停止操作 slmctl 停止 组件。
  • 依赖项需要 SLM 来停止组件的进程。
  • 该组件配置了一个 等待=退出 并且组件的进程以预期的退出代码退出。
    所有其他进程终止都被视为异常并导致 SLM 重新启动组件的进程。如果某个进程在某个时间段内死得太频繁,即使终止异常,SLM 也会停止尝试重新启动该进程。

SLM7.0 & 7.1 对比

暂未识别出差异

参考

QNX BOOT
QNX7.0 SLM
QNX7.1 SLM

QNX SLM 学习笔记相关推荐

  1. [实践篇]13.19 Qnx进程管理slm学习笔记(二)

    [QNX Hypervisor 2.2用户手册]目录(完结) 四,配置文件结构 4.1 根元素 一个配置文件的XML根元素是system,如下: <SLM:system>-- compon ...

  2. QNX手册学习笔记------同优先级调度算法

    QNX作为一个微内核的实时操作系统,其进程没有优先级的概念,只有线程才有优先级的概念.QNX的优先级分为255个等级.每个等级可以有多个同优先级的线程准备执行,不同于UC/OS的每个优先级对应一个任务 ...

  3. QNX学习笔记5 消息传递(1) Messgae Passing

    一.消息传递基础 Messaging fundamentals 微内核与消息传递 A small microkernel and message passing Neutrino 有一个特别的优势就是 ...

  4. QT 5.9学习笔记

    QT 5.9学习笔记 写在前面 S1:初识QT:QT简介 S2:QT在Windows和Linux平台下的安装 Qt调出模态与非模态对话框 写在前面 本文章为我在学习QT5.9时的记录文章,里面会涉及所 ...

  5. Diffusion-weighted in MRI 学习笔记

    功能像的学习已经差不多了,对功能连接.图论.机器学习方面的知识感觉已经掌握的差不多了,这段时间准备把DTI像给捡起来学习学习. 图片引用自FSL官网 学习DTI,不能逾越的软件当推FSL,我的学习笔记 ...

  6. MIT 6.s081学习笔记

    MIT 6.s081学习笔记 introduction 计算机组织结构: 最底部是一些硬件资源,包括了CPU,内存,磁盘,网卡 最上层会运行各种应用程序,比如vim,shell等,这些就是正在运行的所 ...

  7. 【ESP32+freeRTOS学习笔记-开篇前言】

    目录 前言的前言 RTOS的选择 开发与实践环境 参考资料 笔记的形式 专题文章的链接(持续更新中......) 前言的前言 单片机的开发,也有两年多了,之前一直是做一些简单应用,因此以裸机开发的方式 ...

  8. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  9. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

最新文章

  1. intent传递有没有大小限制,是多少?
  2. 百度直播消息服务架构实践
  3. pyqt5切换python版本_PyQt5每天必学之切换按钮_python
  4. mysql errno : 1146_MySQL_MySQL复制出错 Last_SQL_Errno:1146的解决方法,背景:我们在做数据迁移或者 - phpStudy...
  5. 上海往事之与初中同学YS见面
  6. poj 2201(RMQ+笛卡尔树)
  7. C# StatusStrip状态栏 例程
  8. openwrt gpio控制与使用
  9. 调用拷贝构造函数的场景
  10. python机器学习库keras——线性回归、逻辑回归、一般逻辑回归
  11. Milogs客户销售工作日志软件系统简介
  12. DS18B20数字温度计 (二) 测温, ROM和CRC算法
  13. php怎么判断qq内置浏览器,PHP判断是否是微信打开,浏览器打开的方法
  14. wordpress之邮箱插件的配置
  15. Common Data Model (CDM)通用数据模型1
  16. GTX 1630参数性能如何 GTX 1630属于什么级别显卡
  17. Linux笔记 No.17---(磁盘分区fdisk,gdisk,parted、格式化mkfs,mke2fs、挂载mount、卸载umount、df、du、lsof命令)
  18. Android——Activity的生命周期
  19. java调用帆软cpt文件_报表中心FineReport中java如何直接调用报表打印
  20. android 人生日历,人生日历Android版 功能初体验

热门文章

  1. 实现童年宝可梦,教你用Python画一只属于自己的皮卡丘
  2. 手机注册邮箱格式是什么?电子邮箱地址怎么填?
  3. 一、Hbase介绍、数据模型、体系结构
  4. mac压缩文件有多余文件怎么办 mac压缩文件软件哪个好
  5. 云计算究竟有哪些优势
  6. 指向字符串的指针 ------ 字符串指针
  7. Java期末考试试题及参考答案(10)
  8. 响应式微服务_低风险整体式微服务演进第一部分
  9. 请原谅,我还来不及长大
  10. 通灵学院|游戏设计研习6:制作谜题的原则★(1800字)