侵权投诉

带大家看看Linux内核如何调度进程的

FPGA干货 ? 2021-07-26 15:14 ? 次阅读

1.开场白

环境:

处理器架构:arm64

内核源码:linux-5.11

ubuntu版本:20.04.1

代码阅读工具:vim+ctags+cscope

本文步进到Linux内核进程管理的核心部分,打开调度器的黑匣子,来看看Linux内核如何调度进程的。实际上,进程调度器主要做两件事:选择下一个进程,然后进行上下文切换。

而何时调用主调度器调度进程那是调度时机所关注的问题,而调度时机在之前的内核抢占文章已经做了详细讲解,在此不在赘述,而本文关注的调度时机是真正调用主调度器的时机。

本文分析的内核源代码主要集中在:

kernel/sched/core.c

kernel/sched/fair.c

2.调用时机

关于调度时机,网上的文章也五花八门,之前在内核抢占文章已经做了详细讲解,而在本文我们从源码注释中给出依据(再次强调一下:本文的调度时机关注的是何时调用主调度器,不是设置重新调度标志的时机,之前讲解中我们知道他们都可以称为调度时机)。

先来说一下什么是主调度器,其实和主调度器并列的还有一个叫做周期性调度器的东西(后面有机会会讲解,主要用于时钟中断tick调来使夺取处理器的控制权),他们都是内核中的一个函数,在合适的时机被调用。

主调度器函数如下:

kernel/sched/core.c __schedule()

内核的很多路径会包装这个函数,主要分为主动调度和抢占式调度场景。

内核源码中主调度器函数也给出了调度时机的注释,下面我们就以此为依据来看下:

kernel/sched/core.c /* *__schedule()isthemainschedulerfunction. * *Themainmeansofdrivingtheschedulerandthusenteringthisfunctionare: * *1.Explicitblocking:mutex,semaphore,waitqueue,etc. * *2.TIF_NEED_RESCHEDflagischeckedoninterruptanduserspacereturn *paths.Forexample,seearch/x86/entry_64.S. * *Todrivepreemptionbetweentasks,theschedulersetstheflagintimer *interrupthandlerscheduler_tick(). * *3.Wakeupsdon'treallycauseentryintoschedule().Theyadda *tasktotherun-queueandthat'sit. * *Now,ifthenewtaskaddedtotherun-queuepreemptsthecurrent *task,thenthewakeupsetsTIF_NEED_RESCHEDandschedule()gets *calledonthenearestpossibleoccasion: * *-Ifthekernelispreemptible(CONFIG_PREEMPTION=y): * *-insyscallorexceptioncontext,atthenextoutmost *preempt_enable().(thismightbeassoonasthewake_up()'s *spin_unlock()!) * *-inIRQcontext,returnfrominterrupt-handlerto *preemptiblecontext * *-Ifthekernelisnotpreemptible(CONFIG_PREEMPTIONisnotset) *thenatthenext: *-cond_resched()call *-explicitschedule()call *-returnfromsyscallorexceptiontouser-space *-returnfrominterrupt-handlertouser-space * *WARNING:mustbecalledwithpreemptiondisabled! */ staticvoid__schednotrace__schedule(boolpreempt)

我们对注释做出解释,让大家深刻理解调度时机(基本上是原样翻译,用颜色标注)。

1.显式阻塞场景:包括互斥体、信号量、等待队列等。

这个场景主要是为了等待某些资源而主动放弃处理器,来调用主调度器,如发现互斥体被其他内核路径所持有,则睡眠等待互斥体被释放的时候来唤醒我。

2.在中断和用户空间返回路径上检查TIF_NEED_RESCHED标志。例如,arch/x86/entry_64.S。为了在任务之间驱动抢占,调度程序在计时器中断处理程序scheduler_tick()中设置标志。

解释如下:这实际上是说重新调度标志(TIF_NEED_RESCHED)的设置和检查的情形。

1)重新调度标志设置情形:如scheduler_tick周期性调度器按照特定条件设置、唤醒的路径上按照特定条件设置等。当前这样的场景并不会直接调用主调度器,而会在最近的调度点到来时调用主调度器。

2)重新调度标志检查情形:是真正的调用主调度器,下面的场景都会涉及到,在此不在赘述。

3.唤醒并不会真正导致schedule()的进入。他们添加一个任务到运行队列,仅此而已。

现在,如果添加到运行队列中的新任务抢占了当前任务,那么唤醒设置TIF_NEED_RESCHED, schedule()在最近的可能情况下被调用:

1)如果内核是可抢占的(CONFIG_PREEMPTION=y)

-在系统调用或异常上下文中,最外层的preempt_enable()。(这可能和wake_up()的spin_unlock()一样快!)

-在IRQ上下文中,从中断处理程序返回到抢占上下文

注释中很简洁的几句话,但其中的含义需要深刻去体会。

首先需要知道一点是:内核抢占说的是处于内核态的任务被其他任务所抢占的情况(无论是不是可抢占式内核,处于用户态的任务都可以被抢占,处于内核态的任务是否能被抢占由是否开启内核抢占来决定),当然内核态的任务可以是内核线程也可以是通过系统调用请求内核服务的用户任务。

情况1:这是重新开启内核抢占的情况,即是抢占计数器为0时,检查重新调度标志(TIF_NEED_RESCHED),如果设置则调用主调度器,放弃处理器(这是抢占式调度)。

情况2:中断返回内核态的时候,检查重新调度标志(TIF_NEED_RESCHED),如果设置且抢占计数器为0时则调用主调度器,放弃处理器(这是抢占式调度)。

注:关于内核抢占可以参考之前发布的文章。

2)如果内核是不可抢占的(CONFIG_PREEMPTION=y)

cond_resched()调用

显式的schedule()调用

从系统调用或异常返回到用户空间

从中断处理器返回到用户空间

解释如下:

cond_resched()是为了在不可抢占内核的一些耗时的内核处理路径中增加主动抢占点(抢占计数器是否为0且当前任务被设置了重新调度标志),则调用主调度器进行抢占式调度,所进行低延时处理。

显式的schedule()调用,这是主动放弃处理器的场景,如一些睡眠场景,像用户任务调用sleep。

系统调用或异常返回到用户空间使会判断当前进程是否设置重新调度标志(TIF_NEED_RESCHED),如果设置则调用主调度器,放弃处理器。

中断处理器返回到用户空间会判断当前进程是否设置重新调度标志(TIF_NEED_RESCHED),如果设置则调用主调度器,放弃处理器。

其实还有一种场景也会调用到主调度器让出处理器,那就是进程退出时,这里不在赘述。

下面给出总结:

1.主动调度:

睡眠场景,如sleep。

显式阻塞场景,如互斥体,信号量,等待队列,完成量等。

任务退出时,调用do_exit去释放进程资源,最后会调用一次主调度器

2.抢占调度:

不可抢占式内核

cond_resched()调用

显式的schedule()调用

从系统调用或异常返回到用户空间

从中断处理器返回到用户空间

可抢占式内核(增加一些抢占点)

重新开启内核抢占

中断返回内核态的时候

3.主调度器调用时机源码窥探

下面给出主要的一些主调度器调用时机源码分析,作为学习参考。

3.1 常规场景

中断返回用户态场景:

arch/arm64/kernel/entry.S el0_irq ->ret_to_user ->work_pending ->do_notify_resume ->if(thread_flags&_TIF_NEED_RESCHED){//arch/arm64/kernel/signal.c schedule(); ->__schedule(false);//kernel/sched/core.cfalse表示主动调度

异常返回用户态场景:

arch/arm64/kernel/entry.S el0_sync ->ret_to_user ...

任务退出场景:

kernel/exit.c do_exit ->do_task_dead ->__schedule(false);//kernel/sched/core.cfalse表示主动调度

显式阻塞场景(举例互斥体):

kernel/locking/mutex.c mutex_lock ->__mutex_lock_slowpath ->__mutex_lock ->__mutex_lock_common ->schedule_preempt_disabled ->schedule(); ->__schedule(false);//kernel/sched/core.cfalse表示主动调度

3.2 支持内核抢占场景

中断返回内核态场景

arch/arm64/kernel/entry.S el1_irq #ifdefCONFIG_PREEMPTION ->arm64_preempt_schedule_irq ->preempt_schedule_irq(); ->__schedule(true);//kernel/sched/core.ctrue表示抢占式调度 #endif

内核抢占开启场景

preempt_enable ->if(unlikely(preempt_count_dec_and_test()))//抢占计数器减一为0 __preempt_schedule(); ->preempt_schedule//kernel/sched/core.c ->__schedule(true)//调用主调度器进行抢占式调度

注:一般说异常/中断返回,返回是处理器异常状态,可能是用户态也可能是内核态,但是会看到很多资料写的都是用户空间/内核空间并不准确,但是我们认为表达一个意思,做的心中有数即可。

3.选择下一个进程

本节主要讲解主调度器是如何选择下一个进程的,这和调度策略强相关。

下面我们来看具体实现:

kernel/sched/core.c __schedule ->next=pick_next_task(rq,prev,&rf); ->if(likely(prev->sched_class<=?&fair_sched_class?&&?????????????? ????????|??rq->nr_running==rq->cfs.h_nr_running)){ p=pick_next_task_fair(rq,prev,rf); if(unlikely(p==RETRY_TASK)) gotorestart; /*Assumesfair_sched_class->next==idle_sched_class*/ if(!p){ put_prev_task(rq,prev); p=pick_next_task_idle(rq); } returnp; } for_each_class(class){ p=class->pick_next_task(rq); if(p) returnp; }

这里做了优化,当当前进程的调度类为公平调度类或者空闲调度类时,且cpu运行队列的进程个数等于cfs运行队列进程个数,说明运行队列进程都是普通进程,则直接调用公平调度类的pick_next_task_fair选择下一个进程(选择红黑树最左边的那个进程),如果没有找到说明当前进程调度类为空闲调度类,直接调用pick_next_task_idle选择idle进程。

否则,遍历调度类,从高优先级调度类开始调用其pick_next_task方法选择下一个进程。

下面以公平调度类为例来看如何选择下一个进程的:调用过程如下(这里暂不考虑组调度情况):

pick_next_task ->pick_next_task_fair//kernel/sched/fair.c ->if(prev) put_prev_task(rq,prev); se=pick_next_entity(cfs_rq,NULL); set_next_entity(cfs_rq,se);

先看put_prev_task:

put_prev_task ->prev->sched_class->put_prev_task(rq,prev); ->put_prev_task_fair ->put_prev_entity(cfs_rq,se); ->/*Put'current'backintothetree.*/ __enqueue_entity(cfs_rq,prev); cfs_rq->curr=NULL;

这里会调用__enqueue_entity将前一个进程重新加入到cfs队列的红黑树。然后将cfs_rq->curr 设置为空。

再看pick_next_entity:

pick_next_entity ->left=__pick_first_entity(cfs_rq); ->left=rb_first_cached(&cfs_rq->tasks_timeline);

将选择cfs队列红黑树最左边进程。

最后看set_next_entity:

set_next_entity ->__dequeue_entity(cfs_rq,se); ->cfs_rq->curr=se;

这里调用__dequeue_entity将下一个选择的进程从cfs队列的红黑树中删除,然后将cfs队列的curr指向进程的调度实体。

选择下一个进程总结如下:

运行队列中只有公平进程则选择公平调度类的pick_next_task_fair选择进程。

当前进程为idle进程,且没有公平进程存在情况下,调用pick_next_task_idle选择idle进程。

运行队列存在除了公平进程的其他进程,则从高优先级到低优先级调用具体调度类的pick_next_task选择进程。

对于公平调度类,选择下一个进程主要过程如下:1)调用put_prev_task方法将前一个进程重新加入cfs队列的红黑树。2)调用pick_next_entity 选择红黑树最左边的进程作为下一个进程。3)将下一个进程从红黑树中删除,cfs队列的curr指向进程的调度实体。

通用的调度类选择顺序为:

stop_sched_class ->dl_sched_class->rt_sched_class->fair_sched_class ->idle_sched_class

比如:当前运行队列都是cfs的普通进程,某一时刻发生中断唤醒了一个rt进程,那么在最近的调度点到来时就会调用主调度器选择rt进程作为next进程。

做了以上的工作之后,红黑树中选择下一个进程的时候就不会再选择到当前cpu上运行的进程了,而当前进程调度实体又被cfs队列的curr来记录着(运行队列的curr也会记录当前进程)。

下面给出公平调度类选择下一个进程图解(其中A为前一个进程,即是当前进程,即为前一个进程,B为下一个进程)

编辑:jq

原文标题:深入理解Linux内核之主调度器(上)

文章出处:【微信号:gh_6fde77c41971,微信公众号:FPGA干货】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

STM32MP157 Linux系统移植开发篇15:Linux内核7寸触摸屏驱动移植

本文章为《STM32MP157 Linux系统移植开发篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32M...
发表于 09-29 08:45 ? 0次 阅读

全志H6方案板香橙派OrangePi 3开发板26pin GPIO口测试

wiringOP 已适配 Orange Pi 3 开发板,使用 wiringOP 可以测试 GPIO、I2C、UART 和 SPI 的功能,下文先介绍...
发表于 09-28 19:20 ? 0次 阅读
全志H6方案板香橙派OrangePi 3开发板26pin GPIO口测试

STM32MP157 Linux系统移植开发篇14:Linux内核RGB LCD驱动移植

本文章为《STM32MP157 Linux系统移植开发篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32M...
发表于 09-28 11:22 ? 101次 阅读

如何利用linux来开发属于自己的嵌入式项目

如何利用linux来开发属于自己的嵌入式项目?有哪些流程?...
发表于 09-28 07:39 ? 0次 阅读

Linux 新手必掌握技能

嵌入式对于我们这些初学者来讲应该比较纠结吧,因为嵌入式的学习过程是一个困难的过程,对于刚入门者来讲更是这样。那么在Linux...
发表于 09-27 14:29 ? 0次 阅读
Linux 新手必掌握技能

单片机、Cortex-M与Linux和嵌入式有什么区别

单片机、Cortex-M、Linux它们和嵌入式有什么区别? 跑 Linux 操作系统需要什么处理器....
的头像 硬件攻城狮 发表于 09-26 09:59 ? 116次 阅读

Linux下的AVR单片机开发不看肯定后悔

Linux下的AVR单片机开发不看肯定后悔
发表于 09-26 07:51 ? 0次 阅读

华为欧拉系统免费吗

华为欧拉系统是免费的?;防低呈腔菊攵云笠导禠inux服务器操作系统自研开发的,可以覆盖到....
的头像 lhl545545 发表于 09-24 17:44 ? 1544次 阅读

华为欧拉系统下载安装教程

华为欧拉系统是一款具备高安全性、高可扩展性的企业级Linux操作系统平台,能够满足客户从传统IT基础....
的头像 lhl545545 发表于 09-24 17:14 ? 6022次 阅读

华为欧拉系统怎么样

根据华为公司的官方消息公布,华为将在25日发布全新openEuler欧拉操作系统?;防低掣?...
的头像 lhl545545 发表于 09-24 16:29 ? 1917次 阅读

如何使用NMT和pmap来解决JVM的资源泄漏问题

编者按:笔者使用 JDK 自带的内存跟踪工具 NMT 和 Linux 自带的 pmap 解决了一个非....
的头像 openEuler 发表于 09-24 16:00 ? 175次 阅读
如何使用NMT和pmap来解决JVM的资源泄漏问题

Linux下Apache性能分析总结

Linux下Apache性能分析总结(深圳核达中远通电源技术有限公司地址)-该文档为Linux下Ap....
发表于 09-24 14:53 ? 17次 阅读
Linux下Apache性能分析总结

华为将推出openEuler欧拉操作系统 华为欧拉操作系统发布时间曝光

根据媒体的报道消息称,华为近日将会正式推出openEuler欧拉操作系统。据悉,华为公司此前就已经发....
的头像 lhl545545 发表于 09-24 10:33 ? 1064次 阅读

【干货】简述Linux如何应用在嵌入式单片机上

大多数功能更强大的紧凑型单片机(SBC)都运行一种流行的Linux发行版,专门用于这些嵌入式板。尽管没有针对嵌入式应用程序的...
发表于 09-24 09:48 ? 101次 阅读

高效学习Linux内核——内核??楸嘁?/a>

本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用、功能及基本编程方法,以便于读者能快速理解什么是Linux...
发表于 09-24 09:11 ? 0次 阅读

Cadence发布Helium Virtual和Hybrid Studio平台,加速移动、汽车及超大规模系统开发

全新Helium Virtual和Hybrid Studio是Cadence验证全流程的组成部分,该....
发表于 09-23 14:30 ? 972次 阅读

嵌入式linux直流电机驱动程序的设计

嵌入式linux直流电机驱动程序的设计(深圳核达中远通电源技术股份有限公司怎么样)-3.1?安装Re....
发表于 09-23 13:44 ? 24次 阅读
嵌入式linux直流电机驱动程序的设计

跑Linux操作系统需要什么处理器

单片机、Cortex-M、Linux它们和嵌入式有什么区别? 跑 Linux 操作系统需要什么处理器....
的头像 硬件攻城狮 发表于 09-23 11:10 ? 836次 阅读

手把手教你在旧手机上搭建一台备份服务器

本文将向你展示如何使用 UrBackup 和 Linux Deploy在一台 Android 旧手机....
的头像 凡亿PCB 发表于 09-23 10:26 ? 2485次 阅读
手把手教你在旧手机上搭建一台备份服务器

可搭建私人网盘的在线文件浏览器

【导语】:可搭建私人网盘的在线文件浏览器。 简介 filebrowser 提供指定目录下的文件管理界....
的头像 Linux爱好者 发表于 09-23 09:32 ? 144次 阅读

怎么安装适用于Linux *的OpenVINO?工具包的英特尔?发布版?

怎么安装适用于Linux *的OpenVINO?工具包的英特尔?发布版?...
发表于 09-23 08:33 ? 0次 阅读

香蕉派 BPI-M2 Pro单板计算机,采用Amlogic S905X3 四核A55 64位处理器设计

Banana Pi BPI-M2 Pro是比派科技于2021年推出的一款单板机计算机。它采用Amlogic S905X3四核Cortex-A55 (2.0 XX...
发表于 09-18 17:28 ? 0次 阅读
香蕉派 BPI-M2 Pro单板计算机,采用Amlogic S905X3 四核A55 64位处理器设计

在linux下安装Apache+Php+Mysql

在linux下安装Apache+Php+Mysql(数字电源技术及其应用)-文档为在linux下安装....
发表于 09-18 16:09 ? 26次 阅读
在linux下安装Apache+Php+Mysql

深入探究Linux系统噪音统计(osnoise tracer)

在Linux系统中作为一个普通线程是非??啾频?。不仅NMI 、硬中断、软中断可以打断它,甚至其它普通....
的头像 Linux阅码场 发表于 09-18 10:53 ? 261次 阅读
深入探究Linux系统噪音统计(osnoise tracer)

开发板上玩GTA,RISC-V多项移植项目成功运作中

开发板上玩GTA ,RISC-V 多项移植项目成功运作中 ? RISC-V近期再度掀起了不小的热度,....
的头像 E4Life 发表于 09-15 09:47 ? 2041次 阅读
开发板上玩GTA,RISC-V多项移植项目成功运作中

Linux系统中图形显示方案

Linux系统中图形显示方案 ? 1 FBDEV Framebuffer device 社区参与度不....
的头像 Linux爱好者 发表于 09-14 10:43 ? 254次 阅读
Linux系统中图形显示方案

「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!

NXP IMX8图形开发指南(GPU) 基于Graphical Demo,支持OpenGL、Open....
的头像 黄工 发表于 09-10 18:13 ? 55次 阅读
「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!

在Windows系统中安装WSL子系统

在上一篇文章中,我们主要聊了一下:在 Windows 系统中,安装 WSL 子系统。 文章在此:WS....
的头像 Linux阅码场 发表于 09-09 11:33 ? 320次 阅读
在Windows系统中安装WSL子系统

嵌入式Linux应用程序开发标准教程电子版

共计12章,有需要剩下部分的私信我哦~免费分享
发表于 09-09 09:29 ? 28次 阅读

如何使用顶级的Linux手机

未来取代安卓或 iOS 的可能是 Linux 手机,但如今,有哪些选择可以尝试一下呢? 虽然安卓是基....
的头像 Linux爱好者 发表于 09-09 09:26 ? 1471次 阅读

最为精简的一个Linux Fork炸弹解析

转自:http://blog.saymagic.cn/2015/03/25/fork-bomb.ht....
的头像 Linux爱好者 发表于 09-07 16:12 ? 152次 阅读

在Linux中如何使用shell批量修改文件名

1、通过sed替换 [root@node01 wolf]# find / -type f -name....
的头像 马哥Linux运维 发表于 09-07 16:06 ? 195次 阅读

如何使用uptimed来监视Linux系统

大家好,我是良许。 作为一名合格的 Linux 运维人员,监视系统的正常运行时间可以说是一门基本功了....
的头像 Linux阅码场 发表于 09-07 15:00 ? 206次 阅读
如何使用uptimed来监视Linux系统

Linux问题分析与性能优化

文章来源于:https://mp.weixin.qq.com/s/d1NLXGp7teOgskuss....
的头像 张真 发表于 09-06 19:01 ? 114次 阅读
Linux问题分析与性能优化

Ubuntu权威指南电子版资源下载

Ubuntu权威指南电子版资源下载
发表于 09-06 15:13 ? 29次 阅读

Linux ptp4l程序实现PTP边界时钟和普通时钟

精确时间协议(PTP)是用于在网络中进行时钟同步的协议。当与硬件支持结合使用时, PTP 能够达到亚....
的头像 广州虹科电子科技有限公司 发表于 09-05 11:27 ? 570次 阅读

NVIDIA DRIVE OS 5.2.6 Linux SDK发布 为加速计算和AI而设计

NVIDIA DRIVE OS 5.2.6 Linux SDK现已在NVIDIA DRIVE开发者网....
的头像 NVIDIA英伟达企业解决方案 发表于 09-03 15:03 ? 3189次 阅读

【含案例源码】IMX8基于FlexSPI、PCIe与FPGA的高速通信开发详解!

前 言本文主要介绍i.MX 8M Mini基于FlexSPI、PCIe与FPGA的高速通信案例。本文....
的头像 黄工 发表于 09-02 17:29 ? 215次 阅读
【含案例源码】IMX8基于FlexSPI、PCIe与FPGA的高速通信开发详解!

Linux系统编程中的文件描述符调用

文件描述符 进程每打开一个文件的时候,会获得该文件的文件描述符,而后续的读写操作都把文件描述符作为参....
的头像 C语言编程学习基地 发表于 09-02 09:50 ? 195次 阅读
Linux系统编程中的文件描述符调用

Linux服务器被入侵导致冻结的过程

来自:看雪论坛,作者:Hefe https://bbs.pediy.com/thread-22516....
的头像 Linux爱好者 发表于 09-01 16:11 ? 1332次 阅读

从零开始搭建Kubernetes集群步骤

虽然网上有大量从零搭建 K8S 的文章,但大都针对老版本,若直接照搬去安装最新的 1.20 版本会遇....
的头像 Linux爱好者 发表于 09-01 14:33 ? 674次 阅读
从零开始搭建Kubernetes集群步骤

查看Linux服务器性能参数指标教程

一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息。通常来说运维人员、系统....
的头像 Linux爱好者 发表于 09-01 14:25 ? 231次 阅读
查看Linux服务器性能参数指标教程

Linux内核文件Cache机制

Linux内核文件Cache机制(开关电源技术与设计 第二版)-Linux内核文件Cache机制....
发表于 08-31 16:34 ? 26次 阅读
Linux内核文件Cache机制

安装xp win7 mac linux多系统

安装xp win7 mac linux多系统(电源技术审稿严不严)-安装xp、win7、mac、li....
发表于 08-31 16:25 ? 29次 阅读
安装xp win7 mac linux多系统

Linux下Apache服务器的安装和配置

Linux下Apache服务器的安装和配置(现代电源技术的发展概况)-Linux下Apache服务器....
发表于 08-31 16:22 ? 28次 阅读
Linux下Apache服务器的安装和配置

Linux的apache

Linux的apache(ups电源技术转让)-Linux的apache,有需要的可以参考!
发表于 08-31 16:17 ? 20次 阅读
Linux的apache

远程桌面协议是如何工作的 常用的协议有几种

远程桌面协议(RDP)是一个多通道(multi-channel)的协议,让使用者(所在计算机称为用户....
的头像 Les 发表于 08-31 14:37 ? 1042次 阅读

并行程序设计中最重要的锁-RCU锁

hi,大家好,今天给大家分享并行程序设计中最重要的锁-RCU锁,RCU锁本质是用空间换时间,是对读写....
的头像 开关电源芯片 发表于 08-27 14:25 ? 334次 阅读

Linux进程间通信趣味介绍

??? 月黑风高夜,突然听得咣当一声,Web服务器的目录下冒出了两个文件,弄出了不小的声响。这两个家....
的头像 深圳东裕光大 发表于 08-27 10:28 ? 1268次 阅读

嵌入式Linux工程师的职业方向是什么

很多学习嵌入式的新人、工程师,在学习到半途中,总会感觉到迷茫,不知道自己从哪方面入手、进阶,也不知道....
的头像 硬件攻城狮 发表于 08-25 16:55 ? 446次 阅读

用来获取linux系统信息的shell脚本

一、脚本 今天主要分享一个shell脚本,用来获取linux系统CPU、内存、磁盘IO等信息。 #!....
的头像 RTThread物联网操作系统 发表于 08-25 16:00 ? 1930次 阅读

OpenCV中的Python实现

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Window....
的头像 人工智能 发表于 08-25 15:55 ? 235次 阅读

人工智能正在改变物流自动化的方式,将为劳动密集型产业带来革新

将人工智能引入物流自动化将大大增强人工智能的影响力。人工智能可以减少常见的半技能任务(如对产品进行分....
发表于 08-25 14:49 ? 986次 阅读

鸟哥的Linux私房菜基础学习篇电子版下载

鸟哥的Linux私房菜基础学习篇电子版下载
发表于 08-23 16:14 ? 91次 阅读

18个用来监控网络使用情况的Linux命令行工具

导读本文介绍了一些可以用来监控网络使用情况的Linux命令行工具。这些工具可以监控通过网络接口传输的....
的头像 开关电源芯片 发表于 08-23 09:56 ? 225次 阅读
18个用来监控网络使用情况的Linux命令行工具

如何在Android旧手机上搭建一台备份服务器

原作者:Hannah Lee 译者:弯月 本文将向你展示如何使用 UrBackup 和 Linux ....
的头像 开关电源芯片 发表于 08-23 09:40 ? 255次 阅读

linux查看端口被进程占用的方法 Linux与windows的区别

Linux的全称为GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·....
的头像 Les 发表于 08-22 14:23 ? 440次 阅读

Firefly云手机集群服务器解决方案

Firefly云手机服务器解决方案是基于ARM集群芯片和虚拟化技术的一站式解决方案,具有高性能,高集....
发表于 08-20 16:27 ? 2次 阅读

Cluster Server R2集群服务器

查看ClusterServerR2集群服务器规格书,可了解更多内容
发表于 08-20 16:27 ? 2次 阅读

Core-3399Pro-JD4六核高性能AI核心板

查看Core-3399Pro-JD4六核高性能AI核心板规格书,可了解更多内容
发表于 08-20 16:27 ? 17次 阅读

AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)

TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)?;贚inux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。 这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。 这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。 处理器子系统基于ARM Cortex-A9内核,PowerVR SGX™图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。 可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...
发表于 09-25 11:51 ? 349次 阅读
AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)
最好看的最新高清中文字幕,我不卡影院午夜伦不卡,亚洲国产在线精品一区在,yw193.尤物影院 岱山县| 双柏县| 扶沟县| 景宁| 吴江市| 和田市| 太仆寺旗| 神农架林区| 修水县| 临漳县| 武安市| 加查县| 射洪县| 金阳县| 景德镇市| 凤山市| 仁寿县| 固镇县| 修武县| 武威市| 商都县| 兰西县| 兴化市| 华容县| 满城县| 宣城市| 客服| 苗栗市| 大安市| 利川市| 台北市| 屏东县| 喀喇沁旗| 阜南县| 正阳县| 霞浦县| 松潘县| 从化市| 德清县| 鄂尔多斯市| 阿图什市| http://444 http://444 http://444 http://444 http://444 http://444