NEWS DETAIL

【OpenAirInterface5g】高层模块接口及itti实体线程创建

发布时间:2026/10/17 22:45:03 · 栏目:资讯中心

尧图网络原创建站知识分享正文
目录OAI高层结构ITTI实体线程创建实体创建线程创建线程退出实体属性OAI高层结构OAI L3主要分为RRCNGAPSCTP三部分RRC负责无线资源管理负责让gNB与UE建立连接以及信令编解码。NGAP负责gNB与AMF建立连接进行信令NGAP编解码并转发。SCTP类似于TCP提供可靠的网络传输负责AMF与gNB之间NGAP消息发送和接收。在各模块之间OAI使用了ITTI公共管理模块来负责规范实体管理线程管理队列管理内存管理等保证了各模块在资源使用上的规范性。高层模块传输接口OAI主程序分别调用itti_create_task()创建RRC、NGAP、SCTP以及PDCP主线程线程创建时可进行CPU内核绑定当前OAI程序未启用核绑定。线程创建后在各模块内使用while(1)循环调用 itti_receive_msg()从本模块消息队列中取数据解码后按流程处理发送消息时调用iiti_send_msg_to_task()将数据压入目标模块的队列。SCTP与AMF之间以SCTP连接进行消息收发。ITTI实体线程创建实体创建实体创建实际就是OAI各模块task对象的创建以及相应的线程创建每个模块一般为一个主线程以及包含可能存在的辅助线程。线程内while()循环保证了实体始终处于运行状态这一点属于常规方法。intitti_create_task(task_id_ttask_id,void*(*start_routine)(void*),void*args_p){task_list_t*ttasks[task_id];threadCreate(t-thread,start_routine,args_p,(char*)itti_get_task_name(task_id),-1,OAI_PRIORITY_RT);LOG_I(TMR,Created Posix thread %s\n,itti_get_task_name(task_id));return0;}main调用itti_create_task函数来创建实体其中task_id模块实体ID如TASK_RRC_GNBstart_routine创建的线程函数名args_p传递的参数OAI里均为NULL代码中的tasks数组为各个实体的集合包含了每个实体公共属性方便随时取用。threadCreate函数负责线程创建线程创建线程创建流程如下创建步骤见注释voidthreadCreate(pthread_t*t,void*(*func)(void*),void*param,char*name,intaffinity,intpriority){pthread_attr_tattr;intret;intsettingPriority1;//初始化线程对象的属性retpthread_attr_init(attr);AssertFatal(ret0,ret: %d, errno: %d\n,ret,errno);//设置线程为分离状态retpthread_attr_setdetachstate(attr,PTHREAD_CREATE_DETACHED);AssertFatal(ret0,ret: %d, errno: %d\n,ret,errno);//设置线程不继承父线程的调度策略retpthread_attr_setinheritsched(attr,PTHREAD_EXPLICIT_SCHED);AssertFatal(ret0,ret: %d, errno: %d\n,ret,errno);if(checkIfFedoraDistribution())if(checkIfGenericKernelOnFedora())if(checkIfInsideContainer())settingPriority0;/*SCHED_OAI其宏定义为#define SCHED_OAI SCHED_RR即线程采用轮询式调度 各模块可以根据需要确定自己的优先级*/if(settingPriority){retpthread_attr_setschedpolicy(attr,SCHED_OAI);AssertFatal(ret0,ret: %d, errno: %d\n,ret,errno);if(prioritysched_get_priority_min(SCHED_OAI)||prioritysched_get_priority_max(SCHED_FIFO)){LOG_E(TMR,Prio not possible: %d, min is %d, max: %d, forced in the range\n,priority,sched_get_priority_min(SCHED_OAI),sched_get_priority_max(SCHED_OAI));if(prioritysched_get_priority_min(SCHED_OAI))prioritysched_get_priority_min(SCHED_OAI);if(prioritysched_get_priority_max(SCHED_OAI))prioritysched_get_priority_max(SCHED_OAI);}AssertFatal(prioritysched_get_priority_max(SCHED_OAI),);structsched_paramsparam{0};sparam.sched_prioritypriority;//设置线程优先级retpthread_attr_setschedparam(attr,sparam);AssertFatal(ret0,ret: %d, errno: %d\n,ret,errno);}//利用前面设置的属性变量创建线程retpthread_create(t,attr,func,param);AssertFatal(ret0,ret: %d, errno: %d\n,ret,errno);//设置线程名pthread_setname_np(*t,name);if(affinity!-1){cpu_set_tcpuset;CPU_ZERO(cpuset);CPU_SET(affinity,cpuset);AssertFatal(pthread_setaffinity_np(*t,sizeof(cpu_set_t),cpuset)0,Error setting processor affinity);}//销毁线程属性变量pthread_attr_destroy(attr);}线程退出负责退出当前线程常规函数。voiditti_exit_task(void){pthread_exit(NULL);}实体属性实体属性定义如下typedefstructtask_list_s{task_info_tadmin;pthread_tthread;pthread_mutex_tqueue_cond_lock;std::vectorMessageDef*message_queue;std::maplong,timer_elm_ttimer_map;uint64_tnext_timerUINT64_MAX;structepoll_event*eventsNULL;intnb_fd_epoll0;intnb_events0;intepoll_fd-1;intsem_fd-1;}task_list_t;admin实体信息包括调度优先级队列长度实体名称线程函数thread线程IDqueue_cond_lock队列锁message_queue消息队列每个模块均有自己的消息队列负责存储其他模块发送过来的消息timer_map定时器next_timer到期时间
✦

本文为尧图网络原创建站知识分享。想针对自身行业获取定制化建站方案?欢迎咨询,资深顾问免费为你出思路。

RELATED

相关 资讯推荐

MORE

更多 新鲜资讯

JMeter入门实战:从零构建HTTP接口性能测试脚本与结果分析
2026/10/16 11:11:29

JMeter入门实战:从零构建HTTP接口性能测试脚本与结果分析

1. 项目概述:从零开始,用JMeter搞定HTTP性能测试 刚接触性能测试的新手,或者是从功能测试转过来的朋友,一听到“压测”两个字,心里可能就有点发怵。工具那么多,概念那么杂,从哪儿下手呢&#xf…

Earendel: 一个纯TS写的POSIX兼容的微内核Web操作系统
2026/10/15 22:19:23

Earendel: 一个纯TS写的POSIX兼容的微内核Web操作系统

最近我用TypeScript写了一个运行在浏览器里的Web操作系统 Earendel(目前已知的距离地球最遥远的恒星)。开发它的初衷主要是为了Linux和操作系统课程的教学。市面上绝大多数Web OS项目,要么只是做了一个长得像Windows/macOS的网页UI拼盘&#…

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形[特殊字符]
2026/10/13 20:48:30

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形[特殊字符]

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形🚀 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: http…

从零制作同人动画:技术路线、流程与实战避坑指南
2026/10/17 10:14:08

从零制作同人动画:技术路线、流程与实战避坑指南

1. 先搞清楚这个“粉丝动画”到底是什么,以及它能解决什么问题看到“五条悟VS宿傩/咒术回战粉丝动画”这个标题,很多人的第一反应可能是去找一个现成的视频。但如果你是一个想自己动手创作、或者想了解这类作品背后技术流程的创作者,这个标题…

闭源降价80%,开源却在涨价:AI定价的交叉路口
2026/10/15 5:55:41

闭源降价80%,开源却在涨价:AI定价的交叉路口

8月6日,两条价格曲线悄然交汇。 一条向下:OpenAI把GPT-5.6 Luna的输出价格从6美元砍到1.2美元/百万Token,降幅80%。另一条向上:同一天,DeepSeek公告全线涨价,措辞是"涨幅较大",非试探…

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买
2026/10/17 21:18:48

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买经常有工厂朋友拿着网上的"三防平板十大品牌排行榜"来问我:到底选哪个?说实话排行榜看看就行,真正选型得看你产线什么场景。今天挑五个在产线数字化里用得比较多的品牌—…

看完这篇,还想了解更多?

预约尧图网络顾问一对一沟通,针对你的行业与现状给出建站建议,全程免费。

免费咨询