SylixOS内核详解
文章平均质量分 56
SylixOS内核功能
ScilogyHunter
一码流年雨疏疏,莫道E人岁月蹴。。。
展开
-
SylixOS 终端设备
由于串口设备默认的缓冲区大小有限,不一定能满足单次传输的需求,如果发送方发送数据过快,来不及读取的数据将会被覆盖,因此程序中使用 FIORBUFSET(ioctl 命令)命令设置了接收缓冲区大小,这也是使用串口通信必须考虑的一个问题。在 SylixOS 中,普通串口终端设备名称为 /dev/ttyS0、/dev/ttyS1 等,而 USB 串口设备名称为 /dev/ttyUSB0、/dev/ttyUSB1 等。在 Linux 中,应用程序通常使用 termios 组件操作 tty 设备。原创 2023-06-05 20:00:07 · 368 阅读 · 0 评论 -
SylixOS 异步 IO 访问
信号机制提供了一种以异步方式通知某种事件已发生的方法,但是,这种异步 I/O 是有限制的,它们并不能用在所有的文件类型上,而且只能使用一个信号。如果要对一个以上的文件描述符进行异步 I/O,那么在进程收到该信号时并不知道这一信号对应哪一个文件描述符。原创 2023-06-01 20:51:19 · 626 阅读 · 0 评论 -
SylixOS vutex
SylixOS 引入了与 Linux futex 类似的(vitual user mutex)(SylixOS 习惯称为“”);vutex 包括两个操作:pend 和 post,pend 操作用于等待期望值得到满足,post 操作用于设置期望值,并唤醒等待的线程。vutex 通过一个变量地址(整形变量)管理线程间的“锁”,该变量地址为用户空间地址,因此在同一个进程中,vutex 的 pend 与 post 操作使用同一个虚拟地址(内核通过该虚拟地址对应的物理地址进行期望值的管理);原创 2023-05-30 20:43:15 · 724 阅读 · 0 评论 -
SylixOS环境变量实现原理
env 系列接口都是由一 一对应的 lib_xxx函数实现。而lib env 系列接口本质又是由API_TShellVar系列函数实现。SylixOS环境变量的shell操作功能是由API函数接口实现的,SylixOS中环境变量操作函数又存在两套接口:原生的API_TShellVar系列接口和POSIX标准的env接口。两个双向链表分别为管理用双链表和哈希分离链表,其中哈希分离链表主要是为了提高查找速度。每个环境变量为一个对象,核心成员为变量名和变量值两个字符串指针,由两个链表来管理。原创 2023-05-30 13:17:01 · 186 阅读 · 0 评论 -
SylixOS环境变量操作函数接口
SylixOS中环境变量操作函数存在两套接口:原生的API_TShellVar系列接口和POSIX标准的env接口。原创 2023-05-25 21:03:55 · 903 阅读 · 0 评论 -
SylixOS Shell下操作环境变量方法
SylixOS Shell下操作环境变量方法。原创 2023-05-15 20:06:37 · 741 阅读 · 0 评论 -
SylixOS 环境变量初始化流程
3.内核启动后,调用__tshellSysVarInit函数(位于libsylixos\SylixOS\shell\ttinyShell\ttinyShellSysVar.c文件中)通过shell命令项内核注册系统默认环境变量。4.然后系统通过shell命令“varload”尝试加载/etc/profile配置文件,如果文件存在且有效,则会根据此文件修改或增加系统环境变量。1.每个环境变量为一个对象,核心成员为变量名和变量值两个字符串指针,由两个链表来管理。原创 2023-05-15 15:30:26 · 224 阅读 · 0 评论 -
SylixOS 环境变量
(environment variables)是一组键值对(“key = value”)列表,每一项键值对为一个环境变量,分环境变量名和环境变量值,两者本质都是字符串。环境变量用于为系统提供一组动态可变参数,系统提供了统一的读写、存储、同步等方法,通过代码程序或shell命令都可以访问。具体某项环境变量起什么作用、如何解析则由使用该环境变量的程序具体决定,如TZ用于设置系统时区。原创 2023-05-12 18:37:39 · 553 阅读 · 0 评论 -
SylixOS中的动态内存分配【14】--- cache API中的非缓存内存分配接口实现原理
实现原理cache API中的非缓存内存分配接口是通过内核堆或arch API接口实现的。如果CPU没有cache则cache API也应该通过宏配置去掉,即是没有去掉实际也会变成内核堆接口的调用。如果系统没有DMA区,或arch层没有提供CACHEOP_pfuncDmaMalloc回调,则内存的分配与释放也是通过内核堆接口实现的,但cache同步接口是有效的,也是驱动层需要调用的。如果arch层提供了CACHEOP_pfuncDmaMalloc回调,则通过回调函数实现内存的分配与释放,此时cac原创 2022-04-11 09:13:38 · 385 阅读 · 0 评论 -
SylixOS中的动态内存分配【13】--- cache API中的非缓存内存分配接口
概念cache API中也有的非缓存内存动态分配接口,和vmm API中的非缓存内存动态分配接口类似。这些接口一般也是从DMA区动态分配或释放一段内存,也可能是通过内核堆从DATA区分配或释放的,此时则需要使用cache同步接口API_CacheDmaFlush、API_CacheDmaInvalidate 和API_CacheDmaClear进行主动的cache同步操作。接口API接口形式为API_CacheDmaXxx或宏接口形式cacheDmaXxx。/*******************原创 2022-04-11 09:07:54 · 338 阅读 · 0 评论 -
SylixOS中的中断服务对象
系统中断向量表typedef struct { LW_LIST_LINE_HEADER IDESC_plineAction; /* 判断中断服务函数列表 */ ULONG IDESC_ulFlag; /* 中断向量选项 */ LW_SPINLOCK_DEFINE (IDESC_s原创 2022-04-04 18:11:34 · 513 阅读 · 0 评论 -
SylixOS中的中断接口基础实现
SylixOS中断实现相对简单,主要借助arch接口,bsp接口,cpu对象,调度接口等实现。还通过数组和链表管理中断对象。原创 2022-04-04 17:14:48 · 648 阅读 · 0 评论 -
SylixOS中的中断(inter)操作接口
中断接口列表API功能API_InterLock关闭中断API_InterUnlock打开中断API_InterContext是否在中断中API_InterGetNesting获得中断嵌套层数API_InterGetNestingById获得指定 CPU 中断嵌套层数API_InterEnter进入中断API_InterExit退出中断API_InterVectorBaseGet获得中断向量表基址API_InterVect原创 2022-04-03 11:31:51 · 559 阅读 · 0 评论 -
SylixOS中的CPU集合及其操作
SylixOS中的CPU集合及其操作SylixOS支持SMP多核模式,在表示CPU集合时(如中断和线程绑定)通过一个位图来表示,操作和SylixOS位图接口类似,但并需要快速查找最低位,所以并不使用位图接口而是通过简单的宏接口来操作。SylixOS中的CPU集合及其操作宏定义如下:/********************************************************************************************************* CPU原创 2022-03-26 18:36:17 · 439 阅读 · 0 评论 -
SylixOS中的CPU对象结构
SylixOS中的CPU对象结构typedef struct __lw_cpu { /* * 运行线程情况 */ PLW_CLASS_TCB CPU_ptcbTCBCur; /* 当前 TCB */ PLW_CLASS_TCB CPU_ptcbTCBHigh; /* 需要原创 2022-03-26 18:20:35 · 573 阅读 · 0 评论 -
SylixOS中的CPU接口
SylixOS中的CPU接口列表接口功能API_CpuNum获得 CPU 个数API_CpuUpNum获得启动的 CPU 个数API_CpuCurId获得当前 CPU IDAPI_CpuPhyId逻辑 CPU ID to 物理 CPU IDAPI_CpuUp启动指定的 CPUAPI_CpuDown停止指定的 CPUAPI_CpuIsUp查看指定 CPU 是否已经被启动API_CpuIsRunning查看指定 CPU 是否已经运行原创 2022-03-26 18:14:00 · 647 阅读 · 0 评论 -
SylixOS中的线程【23】--- 线程条件变量
条件变量是多线程间的一种同步机制,能很好的解决以上问题。条件变量与互斥锁一起使用时,允许线程以无竞争的形式等待条件的发生。条件本身由互斥量保护,因此线程在改变条件之前必须首先锁住互斥量,其他线程在获得互斥量之前不会察觉到条件的改变。原创 2022-03-20 21:30:17 · 288 阅读 · 0 评论 -
SylixOS中的线程【22】--- 线程一次性初始化
有些情况,我们需要对一些多个线程共同使用的对象只进行一次性初始化,如线程键消息队列,信号量等。如果我们进行多次初始化就会出现错误。原创 2022-03-20 20:27:34 · 251 阅读 · 0 评论 -
SylixOS中的线程【21】--- 线程让出(yield)
调用线程yield接口时,并不会改变线程优先级,只是将线程自己剩余的时间片清零,这样当前线程就会被调出,并将下一个就绪同优先级线程运行,那让出的线程就是当前同优先级就绪线程环中的最后一个。原创 2022-03-20 14:20:58 · 344 阅读 · 0 评论 -
SylixOS中的线程【19】--- 线程常规参数获取和设置
接口这里获取的参数都是当前有效值,设置参数也是立即生效。而API_ThreadAttrxxxx系列接口设置的是属性块变量里的参数,只有在线程创是调用该属性块才会生效。API说明API_ThreadDesc获得线程基本信息API_ThreadGetName获得指定线程名API_ThreadGetPriority获得线程优先级, 中断中不可能发生优先级的转变,所以这里不必关中断API_ThreadGetSchedParam获得线程调度参数API_Threa原创 2022-03-20 12:30:26 · 511 阅读 · 0 评论 -
SylixOS中的线程【20】--- 线程记事本
概念接口用法原创 2022-03-19 17:54:34 · 197 阅读 · 0 评论 -
SylixOS中的线程【18】--- 线程看门狗
概念接口用法原创 2022-03-19 17:52:40 · 348 阅读 · 1 评论 -
SylixOS中的线程【17】--- 线程连接和分离
线程有两种状态可连接状态(joinable)和不可连接状态(unjoinable,也就是分离状态detach)。如果线程是joinable状态,当线程函数自己退出时或exit时都不会释放线程所占内核资源(堆栈和线程描述符等),只有当调用了join方法后这些资源才会被释放。若是unjoinable状态的线程,这些资源在线程函数退出时或exit时自动会被释放。原创 2022-03-19 17:35:12 · 481 阅读 · 0 评论 -
SylixOS中的线程【16】--- 线程亲和度
线程是调度的最小单位,对于多核处理器,可以同时运行多个线程。作为优先级抢占系统SylixOS优先运行优先级最高的n个线程,这样默认情况下同一线程在不同时间可能在不同的CPU上执行,SylixOS尽量保证个CPU执行时间基本相等(负载均衡)。为了提高某些线程的实时性,可以绑定线程到某CPU上,则该线程只在绑定(亲和)的CPU上执行,即便本CPU忙碌而其他CPU闲置。原创 2022-01-03 17:27:23 · 418 阅读 · 0 评论 -
SylixOS中的线程【15】--- 线程私有变量
线程私有变量原创 2022-01-02 19:18:28 · 386 阅读 · 0 评论 -
SylixOS中的线程【14】--- 线程CPU占用率
线程CPU利用率原创 2022-01-02 18:38:49 · 642 阅读 · 0 评论 -
SylixOS中的线程【13】--- 线程安全模式
概念为防止某些关键过程操作线程被删除或重启,SylixOS提供线程安全模式相关接口。线程进入安全模式后, 任何对本线程的删除或重启操作都会推迟到线程退出安全模式时进行。接口/*********************************************************************************************************** 函数名称: API_ThreadSafe** 功能描述: 线程进入安全模式(不得在中断中调用)** 输 入原创 2022-01-02 17:38:29 · 2398 阅读 · 0 评论 -
SylixOS中的线程【12】--- 线程启停
接口API宏说明API_ThreadRestartLw_Thread_Restart线程重新启动函数。,这里不改变时间片属性,不能因为重启而获得更多的时间片API_ThreadRestartExLw_Thread_RestartEx线程重新启动函数。,这里不改变时间片属性,不能因为重启而获得更多的时间片API_ThreadStartExLw_Thread_StartEx启动线程API_ThreadStartLw_Thread_Start启动线程原创 2021-12-31 09:00:31 · 171 阅读 · 0 评论 -
SylixOS中的线程【11】--- 线程锁
线程锁用于关闭线程调度,也可称之为调度锁,防止关键流程被其他线程打断或重入。原创 2021-12-25 12:36:16 · 187 阅读 · 0 评论 -
SylixOS中的线程【10】--- 线程互斥
互斥访问是操作系统中一个经典的理论问题,用于实现对共享资源的一致性访问,SylixOS 中实现了不同的函数来提供多种互斥机制。原创 2021-12-25 11:47:45 · 220 阅读 · 0 评论 -
SylixOS中的线程【9】--- 线程睡眠及唤醒
线程延时或线程睡眠就是让线程让出CPU并处于睡眠状态,从而调度器可以调度其他线程,当线程睡眠结束后,重新恢复运行。原创 2021-12-25 11:32:25 · 500 阅读 · 0 评论 -
SylixOS中的线程【8】--- 多线程安全
多线程模型与生俱来的优势使得 SMP 多核处理器实现真实的并发执行,但多线程带来便利的同时也引入了一些问题,例如全局资源互斥访问的问题。为了能够安全地访问这些资源,需要程序设计中考虑避免竞争条件和死锁。多线程安全是在多线程并发执行的情况下,一种资源可以安全地被多个线程使用的一种机制。多线程安全包括代码临界区的保护和可重入性等。代码的临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界区代码的执行不被中断,在进入临界区之前必须关闭中断,而临界区代码执行完后,要立即开中断。原创 2021-12-25 11:12:27 · 1806 阅读 · 0 评论 -
SylixOS中的线程【7】--- 线程清理
概念线程可以安排它退出时需要调用的函数,这样的函数称为线程清理处理程序,一个线程可以建立多个清理处理程序。处理程序记录在栈中,也就是说,他们的执行顺序与它们注册时相反,如下图所示。接口#include <pthread.h>void pthread_cleanup_pop(int iNeedRun);void pthread_cleanup_push(void (*pfunc)(void *), void *arg);如果 iNeedRun 是 0,那么清理函数将不被调用,pth原创 2021-12-24 08:51:09 · 433 阅读 · 0 评论 -
SylixOS中的线程【6】--- 线程取消
概念线程取消的方法是向目标线程发送 Cancel 信号,但如何处理 Cancel 信号则由目标线程自己决定,需要注意的是,线程取消是一个复杂的过程,需要考虑资源的一致性问题。取消一个线程要确保该线程能够释放其所持有的任何锁、分配的内存,使整个系统保持一致性。在很多复杂情况下要保证这种正确性是有一定困难的。一种简单的线程取消:取消线程调用一个取消线程的函数,被取消线程死亡。在这种情况下,被取消线程所持有的资源得不到释放。取消线程负责保证被取消者处于可安全取消状态,在一个要求可靠性高的系统中,这种保证非常原创 2021-12-24 08:46:49 · 466 阅读 · 0 评论 -
SylixOS中的线程【5】--- 线程结束
线程结束意味着线程生命周期终止。线程结束包括线程取消、线程退出和线程删除3 种情况。线程删除线程删除是将线程的资源返还给操作系统,删除后的线程不能再被调度。API说明API_ThreadDelete线程删除函数。API_ThreadForceDelete线程强制删除函数。API_ThreadExit线程自行退出。exit内核线程或者进程退出_exit内核线程或者进程退出, 不执行 atexit 安装的函数atexit进程退出时执行的操作.原创 2021-12-20 09:03:29 · 259 阅读 · 0 评论 -
SylixOS中的线程【4】--- 线程挂起和恢复
线程挂起宏接口API接口Lw_Thread_SuspendAPI_ThreadSuspendLw_Thread_ResumeAPI_ThreadResumeLw_Thread_ForceResumeAPI_ThreadForceResumeLw_Thread_IsSuspendAPI_ThreadIsSuspend/**********************************************************************原创 2021-12-20 08:41:01 · 240 阅读 · 0 评论 -
SylixOS中的线程【3】--- 线程创建
SylixOS提供两种原生线程创建接口:API_ThreadCreate和API_ThreadInit。原创 2021-12-20 08:32:25 · 480 阅读 · 0 评论 -
SylixOS中的线程【2】--- 线程属性块及操作
线程属性块每一个 SylixOS 线程都有自己的属性,包括线程的优先级、栈信息、线程参数等。每一个线程属性块都由结构体 LW_CLASS_THREADATTR 组成,该结构体成员如下所示:typedef struct { PLW_STACK THREADATTR_pstkLowAddr; /* 全部栈区低内存起始地址 */ size_t THREADATTR_stGuardSize; /* 栈警戒区大小 */ size_t THREADATTR_stStackByteSize;/* 全部栈区原创 2021-12-20 08:30:36 · 566 阅读 · 0 评论 -
SylixOS中的线程【1】--- 线程操作API接口
SylixOS支持两类线程操作API接口:SylixOS原生接口和POSIX标准线程接口。对于应用程序建议使用POSIX标准接口以提高可移植性。SylixOS原生线程API接口API说明API_ThreadSetAffinity将线程锁定到指定的 CPU 运行.API_ThreadGetAffinity获取线程 CPU 亲和度情况API_ThreadAttrGetDefault获得线程内核默认属性块API_ThreadAttrGet获得指定线程属性块相关属性原创 2021-12-20 08:27:58 · 549 阅读 · 0 评论 -
SylixOS系统异常处理工作队列
概念SylixOS系统异常时(如需要删除异常线程)为了统一且归一化处理,使用了工作队列模式,统一提交至系统异常线程中处理。系统异常处理工作队列的实现原理,用法和中断延迟队列基本相同,但只被内核用于异常处理。接口/*********************************************************************************************************** 函数名称: _excJobAdd** 功能描述: 加入待处理异常消息*原创 2021-12-14 10:30:48 · 216 阅读 · 0 评论