QNX SLM 学习笔记
背景
了解学习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 学习笔记相关推荐
- [实践篇]13.19 Qnx进程管理slm学习笔记(二)
[QNX Hypervisor 2.2用户手册]目录(完结) 四,配置文件结构 4.1 根元素 一个配置文件的XML根元素是system,如下: <SLM:system>-- compon ...
- QNX手册学习笔记------同优先级调度算法
QNX作为一个微内核的实时操作系统,其进程没有优先级的概念,只有线程才有优先级的概念.QNX的优先级分为255个等级.每个等级可以有多个同优先级的线程准备执行,不同于UC/OS的每个优先级对应一个任务 ...
- QNX学习笔记5 消息传递(1) Messgae Passing
一.消息传递基础 Messaging fundamentals 微内核与消息传递 A small microkernel and message passing Neutrino 有一个特别的优势就是 ...
- QT 5.9学习笔记
QT 5.9学习笔记 写在前面 S1:初识QT:QT简介 S2:QT在Windows和Linux平台下的安装 Qt调出模态与非模态对话框 写在前面 本文章为我在学习QT5.9时的记录文章,里面会涉及所 ...
- Diffusion-weighted in MRI 学习笔记
功能像的学习已经差不多了,对功能连接.图论.机器学习方面的知识感觉已经掌握的差不多了,这段时间准备把DTI像给捡起来学习学习. 图片引用自FSL官网 学习DTI,不能逾越的软件当推FSL,我的学习笔记 ...
- MIT 6.s081学习笔记
MIT 6.s081学习笔记 introduction 计算机组织结构: 最底部是一些硬件资源,包括了CPU,内存,磁盘,网卡 最上层会运行各种应用程序,比如vim,shell等,这些就是正在运行的所 ...
- 【ESP32+freeRTOS学习笔记-开篇前言】
目录 前言的前言 RTOS的选择 开发与实践环境 参考资料 笔记的形式 专题文章的链接(持续更新中......) 前言的前言 单片机的开发,也有两年多了,之前一直是做一些简单应用,因此以裸机开发的方式 ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
最新文章
- intent传递有没有大小限制,是多少?
- 百度直播消息服务架构实践
- pyqt5切换python版本_PyQt5每天必学之切换按钮_python
- mysql errno : 1146_MySQL_MySQL复制出错 Last_SQL_Errno:1146的解决方法,背景:我们在做数据迁移或者 - phpStudy...
- 上海往事之与初中同学YS见面
- poj 2201(RMQ+笛卡尔树)
- C# StatusStrip状态栏 例程
- openwrt gpio控制与使用
- 调用拷贝构造函数的场景
- python机器学习库keras——线性回归、逻辑回归、一般逻辑回归
- Milogs客户销售工作日志软件系统简介
- DS18B20数字温度计 (二) 测温, ROM和CRC算法
- php怎么判断qq内置浏览器,PHP判断是否是微信打开,浏览器打开的方法
- wordpress之邮箱插件的配置
- Common Data Model (CDM)通用数据模型1
- GTX 1630参数性能如何 GTX 1630属于什么级别显卡
- Linux笔记 No.17---(磁盘分区fdisk,gdisk,parted、格式化mkfs,mke2fs、挂载mount、卸载umount、df、du、lsof命令)
- Android——Activity的生命周期
- java调用帆软cpt文件_报表中心FineReport中java如何直接调用报表打印
- android 人生日历,人生日历Android版 功能初体验