- 博客(28)
- 收藏
- 关注
原创 2-6-1-1 QNX编程入门之进程和线程(六)
本文探讨了 QNX 系统中相互独立场景下的多线程问题。先从多进程(每个进程一个线程)角度阐述,其具有最松散耦合和可分布式部署优势,通信通过面向连接协议;接着介绍多进程共享内存方式,加强耦合,实现快速高效数据流,控制信息仍用面向连接协议;还提及一个进程含多个线程的系统 3,线程隐式共享数据区域,控制信息可多种方式实现。最后对比三种方式,系统 1 灵活可扩展,系统 2 可移除组件但限单机,系统 3 虽不灵活但速度快、启动优、占空间小,需按需选择。
2024-12-30 00:32:37
943
原创 2-6-1-1 QNX编程入门之进程和线程(五)
本文主要介绍了QNX系统下多线程在数学运算中的应用。首先以光线追踪程序为例,对比单线程和多线程版本的实现,指出简单多线程做法的问题及改进方案,即将任务按CPU数量拆分以减少栈空间浪费。接着阐述线程同步终止的问题及两种解决方法:pthread_join函数通过等待线程终止实现同步,pthread_barrier_wait函数利用屏障使线程会合后继续运行。还探讨了单CPU系统多线程的优势及时间计算,以及多线程在SMP系统中的情况和CPU利用率,最后强调使用 SMP 时的注意事项,如同步、并发和原子操作等。
2024-12-30 00:23:09
956
原创 2-6-1-1 QNX编程入门之进程和线程(四)
本文主要阐述了启动线程的相关内容。首先介绍了最常见的线程启动方法,即使用 POSIX pthread_create () 调用及其四个参数。接着讲解了线程属性结构体 pthread_attr_t 及其众多相关函数,包括属性管理、标志、堆栈和调度等方面。对于属性管理,使用前需调用 pthread_attr_init () 初始化;在标志方面,阐述了可连接和不可连接等设置;堆栈部分涉及设置栈地址、保护区域、栈大小等;调度方面则说明了设置调度策略和优先级的方法及常见错误。
2024-12-30 00:00:23
1090
原创 2-6-1-1 QNX编程入门之进程和线程(三)
本文主要讨论线程和进程在 QNX Neutrino 系统中的相关内容。首先对比了线程和进程的特性,阐述进程可分解为多线程的好处,包括解耦、模块化、可维护性和可靠性。接着介绍了启动进程的多种方式,如从命令行启动,或使用 system ()、exec ()、spawn ()、fork ()、posix_spawn () 等函数在程序内部启动,详细解释了各函数的使用、差异及适用场景。同时指出在多线程进程中使用 fork () 的问题及解决办法。
2024-12-29 23:47:13
1388
原创 2-6-1-1 QNX编程入门之进程和线程(二)
文章主要介绍了内核在系统中的角色相关内容。先是阐述单 CPU 与多 CPU(SMP)情况下线程运行情况,指出内核决定哪个线程在特定时刻使用 CPU 并进行上下文切换。接着讲了影响内核决定的因素,如线程优先级,高优先级可抢占低优先级;还有调度策略,包含 FIFO 和循环调度策略(RR)。随后明确了单 CPU 的调度规则,多 CPU 系统规则与之类似。还介绍了内核状态,像运行、就绪、阻塞等多种状态及各自含义,强调阻塞时线程不消耗 CPU。
2024-12-22 23:45:00
1038
原创 2-6-1-1 QNX编程入门之进程和线程(一)
文章围绕进程和线程展开介绍。先是将进程类比为房子,线程类比为居住者,阐述其基本概念,如进程占用内存,线程可共享内存。接着讲解同步相关内容,介绍了互斥,线程通过互斥锁来控制对特定资源的访问,像使用浴室一样。还提到优先级,线程按优先级和等待时长来决定获取资源顺序。此外,说明了信号量,以厨房为例,区分计数为 1 和大于 1 的信号情况,且指出信号量可当互斥锁用,但互斥锁是特殊用途信号量,二者存在区别,最后提及后续会介绍其他同步机制。
2024-12-22 22:12:56
1043
原创 2-6-1 关于“QNX Neutrino 编程入门”的前言
当前专栏系列文章翻译并整理和总结了《QNX Neutrino 入门:实时编程程序员指南》这本官方英文原版书的内容,该书旨在帮助读者了解 QNX Neutrino 实时操作系统并开发相关应用程序与资源管理器。该书适合想对该系统关键特性及工作原理有基础认知的人阅读。书中内容涵盖多个方面,如介绍进程与线程,包括其调度等情况;阐述消息传递这一基本特性及相关高级主题;讲解时钟、定时器知识;说明中断处理程序编写;介绍资源管理器及提供其源代码等,还有术语表与其他参考资料相关内容。
2024-12-21 22:14:38
805
原创 2-2-18-17 QNX系统架构之“实时”
本文主要围绕 QNX RTOS 实时操作系统展开,可以让我们了解实时性概念,知晓其在操作系统中易被误解误用,明白硬实时、软实时特点及区别;清楚在关键任务、服务质量保证等场景需实时性,以及使用实时技术的利弊;掌握实时操作系统定义、要求,其与常规操作系统差异,还有软实时操作系统额外要求;明晰实时操作系统对应用程序影响,像利用其特性调整优先级等技巧,助开发者合理运用相关知识。
2024-12-19 23:46:05
1074
原创 2-2-18-16 QNX系统架构之自适应分区
文章围绕 QNX Neutrino 的自适应分区展开。先是介绍其能解决应用程序间干扰问题,阐述自适应分区的缘由,如静态分区在动态系统中效率低等。接着讲其好处,涵盖工程化产品性能,利于处理设计复杂性、提供安全性以及方便调试等多方面。还提到自适应分区线程调度器,其目的在于保证过载时 CPU 时间份额、防止资源独占等。
2024-12-16 23:54:06
1033
原创 2-2-18-15 QNX系统架构之高可用性
高可用性指系统在面对故障或错误时仍能保持一定程度正常运行的能力。本文主要介绍了 QNX 系统中对高可用性HA的支持,同时介绍了一些与高可用性管理器(HAM)相关的函数。包括对 action 的多种操作,如执行、添加、移除、等待等;对条件的设置、关联、触发及句柄操作;实体的创建、关联、分离、句柄操作;连接与断开 HAM;发送心跳信号、停止 HAM 以及修改日志详细程度等。通过阅读本文可以让我们了解 QNX 操作系统 HA 的相关概念,对 QNX 操作系统中的 HAM 等有一个初步认识;
2024-12-16 23:44:01
1455
原创 2-2-18-14 QNX系统架构之 TCP/IP 网络
文章主要介绍了 QNX Neutrino RTOS中的 TCP/IP 网络相关内容。包括 TCP/IP 协议栈的配置,如 NetBSD TCP/IP 协议栈、增强型 NetBSD 协议栈等;TCP/IP 管理器结构,如 io-pkt-* 的优势、PPP 的实现方式等;Socket API 及其相关例程;多个协议栈的运行;IP 过滤和 NAT 功能;NTP、动态主机配置、自动 IP、PPPoE 以及自动连接等功能特点和实现,展示了 QNX 在 TCP/IP 网络方面的强大功能和广泛的应用场景。
2024-12-08 17:17:52
1521
原创 2-2-18-13 QNX系统架构之原生网络(Qnet)
本文阐述了QNX Neutrino 原生网络 Qnet 协议的核心作用,Qnet 可以让机器高效共享资源、完成诸多任务,如访问远程文件、扩展应用程序等,且 IPC 机制也能在网络上工作。接着介绍名称解析和查找相关内容,包含文件描述符、open 函数背后交互步骤、全局命名服务等,还提及网络命名涉及的多种术语及解析器。在服务质量(QoS)方面,讲解了 QoS 策略(负载均衡、首选、排他性等)及其含义、应用场景、物理网络结构对其功能影响,还有指定 QoS 策略、符号链接相关操作。
2024-12-04 22:17:42
2598
原创 2-2-18-12 QNX系统架构之网络架构
文章介绍了 QNX Neutrino RTOS 的网络架构,其网络服务在内核外执行,有统一接口。网络子系统含网络管理器(io-pkt*),采用零复制架构加载协议和驱动模块。提到线程模型,默认按 CPU 创建线程,阐述了其应对不同事件的服务方式等。网络协议模块负责实现特定协议,可并发运行,Qnet 是原生网络协议栈。驱动模块用于管理网络适配器,以共享对象形式安装到 io-pkt * 组件内,可动态加载、卸载。此外,本文还介绍了协议栈中数据包过滤的相关接口,整体展现了该系统网络架构各方面特点。
2024-12-03 23:56:30
1755
原创 2-2-18-11 QNX系统架构之字符I/O
对于任何实时操作系统来说,高性能的字符 I/O都是一个关键要求。与面向块的设备(例如,磁盘驱动器)不同,字符设备可以被描述为由串行传输字节序列组成其 I/O 内容的设备。字符设备的输入有两种模式,分别是原始模式和编辑模式,这两种模式有显著的区别。在原始模式下,在原始模式下,中断处理程序将每个字符接收到原始输入缓冲区中。当应用程序从设备请求数据的条件满足时,应用程序就会解除阻塞读取到数据。而对于编辑模式来说,只有在“完整输入”一行时(通常是在接收回车[CR]时),应用程序进程才能使用这行数据。
2024-12-01 20:54:15
941
原创 2-2-18-10 QNX 持久化发布/订阅(PPS)
QNX Neutrino 持久化发布/订阅(PPS,Persistent Publish/Subscribe)服务是一个小型的、可扩展的发布/订阅服务,提供跨重启的持久化特性。它旨在为嵌入式系统中的发布/订阅和持久化提供简单易用的解决方案,满足使用异步发布和通知构建松散连接系统的需求。使用PPS,发布和订阅是异步的,订阅者不需要等待发布者。事实上,发布者和订阅者对相互彼此之间无需过多了解;它们之间仅通过一个对象进行连接,这个对象仅对发布者和订阅者才是有意义的。
2024-12-01 08:00:00
1706
原创 2-2-18-9 QNX系统架构之文件系统(三)
QNX Neutrino RTOS 提供了丰富多样的文件系统。本篇文章接续上一张继续介绍各种文件系统,并介绍在 QNX 操作系统下对于各个文件系统的实现方式。与大多数提供服务的进程一样,这些文件系统在内核之外进行执行;应用程序通过 POSIX API 生成的消息与之通信来使用它们提供的服务。这些文件系统也是本书中所描述的资源管理器,通过这些标准 POSIX API (open(),read(),write(),lseek()等)来提供文件系统服务。
2024-11-30 00:27:27
2343
原创 2-2-18-9 QNX系统架构之文件系统(二)
QNX Neutrino RTOS 提供了丰富多样的文件系统。本篇文章接续上一张继续介绍各种文件系统,并介绍在QNX操作系统下对于各个文件系统的实现方式。与大多数提供服务的进程一样,这些文件系统在内核之外进行执行;应用程序通过 POSIX API 生成的消息与之通信来使用它们提供的服务。这些文件系统也是本书中所描述的资源管理器,通过这些标准 POSIX API (open(),read(),write(),lseek()等)来提供文件系统服务。
2024-11-30 00:07:38
1061
原创 2-2-18-9 QNX系统架构之文件系统(一)
QNX Neutrino RTOS 提供了丰富多样的文件系统。本篇文章介绍各种文件系统,并介绍在QNX操作系统下对于各个文件系统的实现方式。与大多数提供服务的进程一样,这些文件系统在内核之外进行执行;应用程序通过 POSIX API 生成的消息与之通信来使用它们提供的服务。这些文件系统也是本书中所描述的资源管理器,通过这些标准 POSIX API (open(),read(),write(),lseek()等)来提供文件系统服务。
2024-11-29 23:49:45
2633
原创 2-2-18-8 QNX 资源管理器
QNX Neutrino RTOS 通过对路径名空间映射的支持,为资源管理器提供了定义好的一套接口,并为公共的资源管理器功能提供一组库函数。QNX操作系统也为开发人员在进行新硬件“驱动程序”开发方面,提供了前所未有的灵活性和简单性。本篇文章从相关概念以及常用函数方面切入,为大家简单介绍了QNX独特的资源管理器特性。
2024-11-29 23:27:33
928
原创 2-2-18-7 QNX 系统架构-动态链接
在典型的系统中会运行许多程序,每个程序都依赖于许多函数,其中有些是 “标准的” C库函数,比如 printf(), malloc(), write() 等。如果每个程序都使用标准C库,则通常每个程序都会在其内部拥有该C库的唯一副本,如果这样做,会导致资源的浪费。由于C库是通用的,因此可以让每个程序引用该库的公共实例,而不是每个程序都包含该库的副本。这种方法有多个优点,当然其中最重要的就是节省所需的系统内存。在本文章中对动态链接的过程和概念进行简单介绍以供大家参考。
2024-11-28 23:42:52
1308
原创 2-2-18-6 QNX 进程管理器
本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个或多个系列进行发布,从遵从原文的翻译,到针对某些重要概念的穿插引入,以及再到各个重要专题的梳理,大致分为这三个层次部分,分不同的文章进行发布,依据这样的原则进行组织,读者可以更好的查找和理解。
2024-11-27 23:35:40
1136
原创 2-2-18-4 QNX 仪表化的微内核
仪表化的微内核【Instrumented Microkernel】,顾名思义,就是指微内核中一个专门负责系统指标参数化、系统参数可视化的相关模块及相关工具(可视化需要配合IDE),这一章是简单介绍一下QNX微内核的仪表化模块以及相关机制,可以有个大致了解。
2024-11-26 08:00:00
1150
原创 2-2-18-5 QNX 多核处理
QNX Neutrino RTOS 既可以在单核系统上运行,也可以在多核系统上运行。多核处理器通过并发性提供更强的计算能力,提供更高的系统密度,并且比单处理器芯片以更低的时钟速度运行。多核处理器还可以减少散热、功耗和电路板面积(从而降低系统成本)。本篇文章主要从多处理器架构的几种形式和差异上,讲解QNX在多处理器或多核处理器上运行的情况以及一些概念,可以让我们对操作系统对于多处理器方面的结合有个大致了解。
2024-11-26 08:00:00
1002
原创 2-2-18-3 QNX 进程间通信(IPC)(二)
本文接着上一篇继续讲解QNX进程间通信的方式和概念。IPC是把添加到微内核中的提供各种服务的进程组件连接成一个内聚整体的“粘合剂”。消息传递是QNX 操作系统中 IPC 的主要形式,本文从消息传递的过程、简单消息传递,以及消息传递时如何进行消息拷贝等方向进行了概述,同时还介绍了其他进程间通信的方式或形式,可以让读者对QNX系统中的通信及同步服务有个清晰了解。
2024-11-25 00:38:50
960
原创 2-2-18-3 QNX 进程间通信(IPC)(一)
进程间通信在微内核从嵌入式实时内核到全面POSIX操作系统的转换中起到了重要作用。随着各种提供服务的进程被添加到微内核中,IPC是把这些组件连接成一个内聚整体的“粘合剂”。消息传递是QNX 操作系统中 IPC 的主要形式,本文从消息传递的过程、简单消息传递,以及消息传递时如何进行消息拷贝等方向进行了概述,同时还介绍了其他进程间通信的方式或形式,可以让读者对QNX系统中的通信及同步服务有个清晰了解。
2024-11-25 00:37:12
1554
原创 2-2-18-2 QNX Neutrino 微内核(二)
本文内容接着上一篇文章继续介绍与QNX微内核紧密相关的线程和进程、线程调度、调度策略、IPC以及中断等的一些概念,并且介绍了QNX操作系统关于这些内容是如何设计的。这一章主要的内容是同步服务、时钟定时器、中断处理的内容,可以让我们对微内核在这些内容上与宏内核的一些区别,以及QNX微内核的一些特色。
2024-11-24 16:35:54
856
原创 2-2-18-2 QNX Neutrino 微内核(一)
QNX 微内核实现了嵌入式实时系统中使用的核心POSIX特性,以及基本的QNX Neutrino消息传递服务。在procnto微内核中没有实现的POSIX特性(例如文件和设备I/O)由可选进程和共享库提供。本文介绍了QNX微内核线程和进程、线程调度、调度策略、IPC以及中断等与内核服务紧密相关的一些概念,并且介绍了QNX操作系统关于这些内容是如何设计的。
2024-11-24 16:18:46
1446
原创 2-2-18-1 QNX 实时操作系统的哲学
QNX Neutrino RTOS的主要目标是以一种健壮的、可扩展的形式提供开放系统POSIX API,适用于各种系统,从小型的、资源受限的嵌入式系统,到高端的、分布式的计算环境。也支持多种处理器体系,包括x86和ARM。本文从操作系统相关功能的设计角度出发,主要介绍QNX操作系统设计的哲学之美。同时还介绍了 QNX 操作系统是由微内核管理的一组协作进程实现的,因此用户编写的进程既可以作为应用程序,也可以作为扩展底层操作系统功能的进程。
2024-11-23 19:55:07
1163
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人