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

您所在的位置:网站首页 多线程的锁机制 并行程序设计中最重要的锁

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

#并行程序设计中最重要的锁| 来源: 网络整理| 查看: 265

hi,大家好,今天给大家分享并行程序设计中最重要的锁-RCU锁,RCU锁本质是用空间换时间,是对读写锁的一种优化加强,但不仅仅是这样简单,RCU体现出来的垃圾回收思想,也是值得我们学习和借鉴,。

各个语言C++, C++,Java, go等都有RCU锁实现,同时内核精巧的实现也是学习代码设计好素材,深入理解RCU分为两个部分,第一部分主要是讲核心原理,理解其核心设计思想,对RCU会有个宏观的理解;第二部分会分析源码实现(本来准备放在一起,由于实现相当精巧,篇幅会很多,就单独成一篇),希望大家喜欢。

并行程序设计演进如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步。同步可分为阻塞型同步(Blocking Synchronization)和非阻塞型同步( Non-blocking Synchronization)。

阻塞型同步是指当一个线程到达临界区时,因另外一个线程已经持有访问该共享数据的锁,从而不能获取锁资源而阻塞(睡眠),直到另外一个线程释放锁。常见的同步原语有 mutex、semaphore 等。如果同步方案采用不当,就会造成死锁(deadlock),活锁(livelock)和优先级反转(priority inversion),以及效率低下等现象。

为了降低风险程度和提高程序运行效率,业界提出了不采用锁的同步方案,依照这种设计思路设计的算法称为非阻塞型同步,其本质就是停止一个线程的执行不会阻碍系统中其他执行实体的运行。

先有阻塞型同步

互斥锁(英語:Mutual exclusion,缩写Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源进行读写的机制。该目的通过将代码切片成一个一个的临界区域(critical section)达成。临界区域指的是一块对公共资源进行存取的代码。

信号量(Semaphore),是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用,可以认为mutex是0-1信号量;

读写锁是计算机程序的并发控制的一种同步机制,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作,读操作可并发重入,写操作是互斥的。

再有非阻塞型同步

当今比较流行的非阻塞型同步实现方案有三种:

Wait-free(无等待)

Wait-free 是指任意线程的任何操作都可以在有限步之内结束,而不用关心其它线程的执行速度。Wait-free 是基于 per-thread 的,可以认为是 starvation-free 的。非常遗憾的是实际情况并非如此,采用 Wait-free 的程序并不能保证 starvation-free,同时内存消耗也随线程数量而线性增长。目前只有极少数的非阻塞算法实现了这一点。

简单理解:任意时刻所有的线程都在干活;

Lock-free(无锁)

Lock-Free是指能够确保执行它的所有线程中至少有一个能够继续往下执行。由于每个线程不是 starvation-free 的,即有些线程可能会被任意地延迟,然而在每一步都至少有一个线程能够往下执行,因此系统作为一个整体是在持续执行的,可以认为是 system-wide 的。所有 Wait-free 的算法都是 Lock-Free 的。

简单理解:任意时刻至少一个线程在干活;

Obstruction-free(无障碍)

Obstruction-free 是指在任何时间点,一个孤立运行线程的每一个操作可以在有限步之内结束。只要没有竞争,线程就可以持续运行。一旦共享数据被修改,Obstruction-free 要求中止已经完成的部分操作,并进行回滚。所有 Lock-Free 的算法都是 Obstruction-free 的。

简单理解:只要数据有修改,就会重新获取,并且把已经完成操作回滚重来;

综上所述,不难得出 Obstruction-free 是 Non-blocking synchronization 中性能最差的,而 Wait-free 性能是最好的,但实现难度也是最大的,因此 Lock-free 算法开始被重视,并广泛运用于各种程序设计中,这里主要介绍Lock_free算法。

lock-free(无锁)往往可以提供更好的性能和伸缩性保证,但实际上其优点不止于此。早期这些概念首先是在操作系统上应用的,因为一个不依赖于锁的算法,可以应用于各种场景下,而无需考虑各种错误,故障,失败等情形。比如死锁,中断,甚至CPU失效。

主流无锁技术

Atomic operation(原子操作),在单一、不间断的步骤中读取和更改数据的操作。需要处理器指令支持原子操作:

● test-and-set (TSR)

● compare-and-swap (CAS)

● load-link/store-conditional (ll/sc)

Spin Lock(自旋锁)是一种轻量级的同步方法,一种非阻塞锁。当 lock 操作被阻塞时,并不是把自己挂到一个等待队列,而是死循环 CPU 空转等待其他线程释放锁。

Seqlock (顺序锁) 是Linux 2.6 内核中引入一种新型锁,它与 spin lock 读写锁非常相似,只是它为写者赋予了较高的优先级。也就是说,即使读者正在读的时候也允许写者继续运行,读者会检查数据是否有更新,如果数据有更新就会重试,因为 seqlock 对写者更有利,只要没有其他写者,写锁总能获取成功。

RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针替换为新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的访问。

本文主要讲解RCU的核心原理。

历史背景高性能并行程序中,数据一致性访问是一个非常重要的部分,一般都是采用锁机制(semaphore、spinlock、rwlock等)进行保护共享数据,根本的思想就是在访问临界资源时,首先访问一个全局的变量(锁),通过全局变量的状态来控制线程对临界资源的访问。但是,这种思想是需要硬件支持的,硬件需要配合实现全局变量(锁)的读-修改-写,现代CPU都会提供这样的原子化指令。

采用锁机制实现数据访问的一致性存在如下两个问题:

效率问题。锁机制的实现需要对内存的原子化访问,这种访问操作会破坏流水线操作,降低了流水线效率,这是影响性能的一个因素。另外,在采用读写锁机制的情况下,写锁是排他锁,无法实现写锁与读锁的并发操作,在某些应用下会降低性能。

扩展性问题。例如,当系统中CPU数量增多的时候,采用锁机制实现数据的同步访问效率偏低。并且随着CPU数量的增多,效率降低,由此可见锁机制实现的数据一致性访问扩展性差。

原始的RCU思想

在多线程场景下,经常我们需要并发访问一个数据结构,为了保证线程安全我们会考虑使用互斥设施来进行同步,更进一步我们会根据对这个数据结构的读写比例而选用读写锁进行优化。但是读写锁不是唯一的方式,我们可以借助于COW技术来做到写操作不需要加锁,也就是在读的时候正常读,写的时候,先加锁拷贝一份,然后进行写,写完就原子的更新回去,使用COW实现避免了频繁加读写锁本身的性能开销。

优缺点

由于 RCU 旨在最小化读取端开销,因此仅在以更高速率使用同步逻辑进行读取操作时才使用它。如果更新操作超过10%,性能反而会变差,所以应该选择另一种同步方式而不是RCU。

好处

几乎没有读取端开销。零等待,零开销

没有死锁问题

没有优先级倒置问题(优先级倒置和优先级继承)

无限制延迟没有问题

无内存泄漏风险问题

缺点

使用起来有点复杂

对于写操作,它比其他同步技术稍慢

适用场景

核心原理理论基础-QSBR算法

(Quiescent State-Based Reclamation)

这个算法的核心思想就是识别出线程的不活动(quiescent)状态,那么什么时候才算是不活动的状态呢?这个状态和临界区状态是相对的,线程离开临界区就是不活动的状态了。识别出不活动状态了,还需要把状态通知出去,让其他线程知道,这整个过程可以用下面的图来描述:

上面有四个线程,线程1执行完更新操作后添加了释放内存的callback,此时线程2,3,4都读取的是之前的内容,等他们执行完成后分别回去调用onQuiescentState来表明自己已经不不活动了,等到最后一个线程调用onQuiescentState的时候就可以去调用注册的callback了。

要实现上面这个过程其要点就是选择适合的位置执行onQuiescentState,还有就是如何知道谁是最后一个执行onQuiescentState的线程。

批量回收,如果更新的次数比较多的话,但是每次只回调一个callback,释放一次内存就会导致内存释放跟不上回收的速度,为此需要进行批量回收,每次更新都会注册新的callback,当第一次所有的线程都进入不活动状态的时候就把当前的所有callback保存起来,等待下一次所有线程进入不活动的状态的时候就回调前一次所有的callback。

基本架构

Linux 内核RCU 参考QSBR算法设计一套无锁同步机制。

多个读者可以并发访问共享数据,而不需要加锁;

写者更新共享数据时候,需要先copy副本,在副本上修改,最终,读者只访问原始数据,因此他们可以安全地访问数据,多个写者之间是需要用锁互斥访问的(比如用自旋锁);

修改资源后,需要更新共享资源,让后面读者可以访问最新的数据;

等旧资源上所有的读者都访问完毕后,就可以回收旧资源了;

RCU 模型

Removal:在写端临界区部分,读取(Read()),进行复制(Copy),并执行更改(Update)操作;

Grace Period:这是一个等待期,以确保所有与执行删除的数据相关的reader访问完毕;

Reclamation:回收旧数据;

三个重要概念

静止状态QS(Quiescent State): CPU发生了上下文切换称为经历一个quiescent state;

宽限期GP(Grace Period): grace period就是所有CPU都经历一次quiescent state所需要的等待的时间,也即系统中所有的读者完成对共享临界区的访问;

读侧临界部分RCS(Read-Side Critical Section): 保护禁止其他CPU修改的代码区域,但允许多个CPU同时读;

三个主要的角色

读者reader:

安全访问临界区资源;

负责标识进出临界区;

写者updater:

复制一份数据,然后更新数据;

用新数据覆盖旧数据,然后进入grace period;

回收者reclaimer:

等待在grace period之前的读者退出临界区;

在宽限期结束后,负责回收旧资源;

三个重要机制

发布/订阅机制

主要用于更新数据,即使在数据被同时修改时线程也能安全浏览数据。RCU通过发布-订阅机制(Publish-Subscribe Mechanism)实现这种并发的插入操作能力;

延迟回收机制:

实现检查旧数据上所有RCU读者完成,用于安全删除旧数据;

多版本机制:

维护最近更新对象的多个版本,用于允许读者容忍并发的插入和删除新对象的多个版本;

最后总结最后,总结一下RCU锁的核心思想:

读者无锁访问数据,标记进出临界区;

写者读取,复制,更新;

旧数据延迟回收;

RCU核心思想就三句话,产品经理都说简单,但Linux内核实现却不是这么简单。除了要实现基本功能,需要考虑很多复杂情况:

内核的RCU系统可以说是内核最复杂系统之一,为了高性能和多核扩展性,设计了非常精巧的数据结构:

同时巧妙实现了很多核心流程:

检查当前CPU是否度过QS;

QS report(汇报宽限期度过);

宽限期的发起与完成;

rcu callbacks处理;

其中很多实现都可以说是非常精巧,结合了预处理,批量处理,延后(异步)处理,多核并发,原子操作,异常处理,多场景精细优化等多种技术,性能好,可扩展性强,稳定性强,有一定的学习和参考价值,即使你的工作不是内核编程,里面体现很多编程思想和代码设计思想,也是值得大家学习的。

扩展阅读http://csng.cs.toronto.edu/publication_files/0000/0159/jpdc07.pdf

http://www.rdrop.com/users/paulmck/rclock/RCUdissertation.2004.07.14e1.pdf

https://lwn.net/Articles/262464/

http://www.wowotech.net/kernel_synchronization/461.html

http://concurrencyfreaks.blogspot.com/2013/05/lock-free-and-wait-free-definition-and.html

编辑:jq

原文标题:深入理解 RCU 核心原理

文章出处:【微信号:gh_3980db2283cd,微信公众号:开关电源芯片】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

扫一扫,分享给好友

复制链接分享 评论

发布评论请先 登录

相关推荐

i.MX6ULL驱动开发3—GPIO寄存器配置原理 介绍了字符设备驱动的两种新旧开发方式,并使用一个虚拟的字符驱动来学习字符设备的开发的流程。 的头像 码农爱学习 发表于 03-18 08:17 • 63次 阅读 i.MX6ULL驱动开发3—GPIO寄存器配置原理 保障两会工作用机,飞腾同方展现中国科技力量 飞腾腾锐 D2000 是飞腾新一代高效能 8 核桌面处理器芯片,自推出以来获得了市场的高度认可,实现.... 发表于 03-17 16:19 • 113次 阅读 保障两会工作用机,飞腾同方展现中国科技力量 鸿蒙java框架如何从AttrSet读取自定义属性? 鸿蒙java框架中继承DirectionalLayout,自定义属性定义在哪里,如何从AttrSet读取自定义属性? ... 发表于 03-17 15:53 • 3016次 阅读 Hi3861开发板串口看不到命令行是为什么?   1)开发板启动,只有教程中的AT命令能使用,敲回车报ERROR;   2)开发板没有linux常用命令吗(ls、pwd、cd)?还... 发表于 03-17 15:41 • 804次 阅读 Elasticsearch 8作为开源软件正式发布 Elasticsearch 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、支持多租户的.... 的头像 Linux爱好者 发表于 03-17 14:12 • 136次 阅读 高速存储技术的进化:DDR和LDPPR 手机、电脑等电子设备与我们的生活密不可分,它们的使用频率高,更换周期快。消费者在购买产品时,除了考虑.... 的头像 三星半导体和显示官方 发表于 03-17 11:17 • 243次 阅读 一款搭载骁龙4100可穿戴设备平台的智能手表 随着大家越来越重视身体健康,定期运动健身已经成为了很多人的日常生活方式。佩戴便捷、性能出众的智能手表.... 的头像 Qualcomm中国 发表于 03-17 10:14 • 253次 阅读 国内外独立服务器的区别是什么 服务器是建立网站的最基础的必不可少的东西,也是根本呢所在,所以挑选何种类型的独立服务器成为了建站者的.... 发表于 03-17 10:02 • 2次 阅读 i.MX6ULL嵌入式Linux开发6-系统烧写到eMMC 本篇主要介绍了Linux移植的系统打包烧录的EMMC的方法,使用MfgTool工具,将**uboot.... 的头像 码农爱学习 发表于 03-17 09:17 • 603次 阅读 i.MX6ULL嵌入式Linux开发6-系统烧写到eMMC MediaTek天玑9000支持移动端游戏超分技术 PC 游戏飞速演进,硬件线程调度器(Thread Director)、深度学习超级采样(DLSS)等.... 的头像 联发科技 发表于 03-17 09:17 • 132次 阅读 在CPU上如何同时尝试 getrandom Jason Donenfeld 是 WireGuard 的主要开发者,同时他也是 Linux 内核随.... 的头像 Linux爱好者 发表于 03-16 17:19 • 514次 阅读 FireEye推AWS新云安全解决方案 龙芯中科发布龙芯平台Java环境 近日,中科创达董事长赵鸿飞、执行总裁武文光和高级副总裁兼智能汽车事业群总裁常衡生应邀出席会议。会上,.... 发表于 03-16 15:08 • 396次 阅读 ALIENWARE系列笔记本为玩家带来全新游戏体验 游戏笔记本的极致应该是什么样子?很多人应该都会首先想到ALIENWARE,而用性能挑战边界,自由穿梭.... 的头像 焦点讯 发表于 03-16 11:18 • 120次 阅读 一文深入理解操作系统的进程调度 想深入理解操作系统的进程调度,需要先获得一些准备知识,这样后面就不懵圈啦: 的头像 Linux爱好者 发表于 03-16 10:58 • 103次 阅读 如何编译已有的C++去生成可在OpenHarmony系统使用的动态库文件呢 原有Linux环境下的C++ 项目,可通过在CMakeList文件中设置使用的工具链,编译出各平台开发板上可使用的so文件。 请问,我现... 发表于 03-16 10:42 • 500次 阅读 CPU负荷重服务器数据延迟高怎么办 满载的应该是大脑而非机器。“东数西算”工程背景下,各应用场景对数据处理能力的考量和需求日新月异。这带.... 发表于 03-16 10:19 • 7次 阅读 如何鉴别Linux服务器是否被入侵 随着开源产品的越来越盛行,作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显得至.... 的头像 马哥Linux运维 发表于 03-16 10:08 • 141次 阅读 Linux namespace和cgroups简介 先放结论,namespace 是用来做资源隔离, cgroup 是用来做资源限制。 的头像 马哥Linux运维 发表于 03-16 09:03 • 137次 阅读 基础的Linux操作命令 IC设计是在linux环境下,很多操作需要在Terminal中进行,因此想要学习IC设计,就必须先需.... 的头像 FPGA之家 发表于 03-15 13:42 • 107次 阅读 日常服务器的维护是怎样的 数据库经过长期的运行,需要调整数据库性能,使之进入最优化状态。数据库中的数据是最重要的,这些数据如果.... 发表于 03-15 11:10 • 4次 阅读 怎么构建CPU这个非0即1的开关世界 除了加法,我们也可以根据需要将不同的算数运算设计出来,负责计算的电路有一个统称,这就是所谓的算术逻辑.... 的头像 STM32嵌入式开发 发表于 03-15 09:49 • 95次 阅读 如何通过FB126对PROFINET IO系统进行判断 对于一些CPU,比如S7-300 CPU315-2DP (6ES7 315-2AG10-0AB0) .... 的头像 机器人及PLC自动化应用 发表于 03-15 09:24 • 110次 阅读 S7-200智能设备组态的运行模式分析 1、新建空白项目,打开系统块,选择CPU ST40,CPU的固件选择V2.5,设置选择CPU启动后的.... 的头像 机器人及PLC自动化应用 发表于 03-15 09:18 • 83次 阅读 GetError与GetErrorID指令的区别与应用场景分析 在 STEP7 11 中,可以通过GetError (获取本地错误信息)或者GetErrorID (.... 的头像 机器人及PLC自动化应用 发表于 03-14 17:55 • 652次 阅读 如何调用OpenHarmony系统SA服务呢 之前在HarmonyOS可以支持JAVA,Java中可以调用系统SA服务的,但是OpenHarmony只有JS/TS,这两个开发框架,如果我... 发表于 03-14 16:57 • 583次 阅读 基于S7-300CPU的通信配置过程 SIMATIC S7- 300 CPU集成了 PROFINET 接口,该接口除了具备连接 PROFI.... 的头像 机器人及PLC自动化应用 发表于 03-14 16:43 • 444次 阅读 BPF系统调用与Tracing类型的BPF程序 既然是提供向内核注入代码的技术,那么安全问题肯定是重中之重。平时防范他人通过漏洞向内核中注入代码,这.... 的头像 Linux阅码场 发表于 03-14 16:42 • 263次 阅读 TIA Portal的程序块保护功能实现 IA Portal为程序块提供 KNOW_HOW_PROTECT 保护功能。如果没有使用正确密码打开.... 的头像 机器人及PLC自动化应用 发表于 03-14 16:35 • 179次 阅读 TIA Portal的程序块保护功能实现 S7-1200 TRACE功能与应用分析 在TIA博途软件中,通过轨迹功能记录测量值变化,并通过逻辑分析器对记录进行评估分析。 的头像 机器人及PLC自动化应用 发表于 03-14 16:03 • 159次 阅读 如何在TIA Portal软件进行ET200SP F-IO模块的分配 每个故障安全模块都有自己的 PROFIsafe 地址(F_destination_address),.... 的头像 机器人及PLC自动化应用 发表于 03-14 15:52 • 172次 阅读 盘点5款值得收藏的Linux开发板 最近股市又哀鸿遍野……于是,那句 “树莓派是最好的理财产品”又开始在我耳边萦绕。“缺芯”笼罩之下,开.... 的头像 话说科技 发表于 03-14 15:12 • 247次 阅读 盘点5款值得收藏的Linux开发板 霍尼韦尔智能楼宇技术助力小镇建设_ADI为Linux发行版扩充1000多个器件驱动  2022年2月11日,中国北京——霍尼韦尔宣布与中建二局安装工程有限公司和北京市设备安装工程集团有.... 的头像 电子魔法师 发表于 03-14 15:04 • 553次 阅读 如何修改S7-1500创建的S7-GRAPH FB保持性属性 在S7-1500 CPU中创建的S7-GRAPH FB 默认其保持性属性为“非保持”且其下拉框无法操.... 的头像 机器人及PLC自动化应用 发表于 03-14 09:54 • 76次 阅读 网站搭建时该如何选择租用服务器 在搭建网站的时候是必须要用到服务器。服务器分很多种,有用来开发游戏叫游戏服务器,用来存放数据叫数据库.... 发表于 03-14 09:44 • 6次 阅读 i.MX6ULL嵌入式Linux开发5-根文件系统完善 上篇文章,使用BusyBox构建了基础的嵌入式Linux系统的根文件系统,基本的功能可以正常运行,但.... 的头像 码农爱学习 发表于 03-14 08:44 • 146次 阅读 i.MX6ULL嵌入式Linux开发5-根文件系统完善 i.MX6ULL嵌入式Linux开发4-根文件系统构建 本篇使用BusyBox来构建根文件系统,并通过NFS网络调试的方式实现根文件系统挂载测试,实测时解决.... 的头像 码农爱学习 发表于 03-14 08:41 • 158次 阅读 i.MX6ULL嵌入式Linux开发4-根文件系统构建 i.MX6ULL嵌入式Linux开发3-Kernel移植 本文进行Linux内核的移植。 的头像 码农爱学习 发表于 03-14 08:36 • 158次 阅读 i.MX6ULL嵌入式Linux开发3-Kernel移植 嵌入式操作系统任务的定义、特性及划分 在嵌入式开发中,面对的都是单个 CPU 的情况,而在这个开发过程中,我们会涉及到裸机开发或者是跑操作.... 的头像 嵌入式ARM 发表于 03-12 08:49 • 303次 阅读 嵌入式操作系统任务的定义、特性及划分 有没有能用在51单片机平台上的语音芯片? 最近看了一下云知声的蜂鸟M系列的离线语音,但是研究了半天不知道能不能移植到51单片机的平台上(就是通过串口通讯),后来又看... 发表于 03-11 17:08 • 1264次 阅读 什么是apt?怎样使用BufferKnife注入工具 安卓to鸿蒙系列:ButterKnife(一)本文是关于ButterKnife的移植的第一篇:先介绍基础知识,理解apt是什么,最终输出一个乞丐版... 发表于 03-11 15:15 • 1212次 阅读 Tina Linux 系统介绍 Tina Linux是全志科技基于Linux内核开发的针对智能硬件类产品的嵌入式软件系统。Tina Linux基于openwrt-14.07 版本的软件开... 发表于 03-11 15:05 • 2715次 阅读 XR806是否可用类似SDIO接口与CPU连接,并作为Linux的一个外设网卡设备? 如题:XR806是否可用类似SDIO接口与CPU连接,并作为Linux的一个外设网卡设备? ... 发表于 03-11 15:02 • 617次 阅读 S7-1500 :存储卡功能 当前要下载的博途项目版本比存储卡里的项目版本低,比如,存储卡中的博途项目版本是V16,但是当前需要下.... 的头像 机器人及PLC自动化应用 发表于 03-11 14:16 • 213次 阅读 S7-1200将模块添加到组态的方法  使用硬件目录将模块添加到 CPU 。 有三种类型的模块。 的头像 机器人及PLC自动化应用 发表于 03-11 10:30 • 150次 阅读 提高Linux服务器性能的20个技巧  Linux功能丰富、强大、灵活,你可以用它完成各种任务,在这篇文章中,我们将讨论一些提高Linux.... 的头像 Linux爱好者 发表于 03-11 10:14 • 159次 阅读 KUKA机器人PN系统网络故障的判断方法 KUKA机器人PN系统网络故障的判断方法说明。 的头像 机器人及PLC自动化应用 发表于 03-11 10:08 • 188次 阅读 英特尔携手腾讯共推云数智变革 德赛西威联合高通打造数字化座舱方案 在2021腾讯数字生态大会上,英特尔与腾讯共同宣布了一系列深化创新合作成果:双方不仅以CPU为基础,.... 的头像 牵手一起梦 发表于 03-11 10:01 • 245次 阅读 西门子CPU-1200在线和诊断工具 您可以通过 STEP 7 在线和诊断工具格式化连接的 CPU 中的存储卡。为此,请按下列步骤。 的头像 机器人及PLC自动化应用 发表于 03-11 09:23 • 138次 阅读 51点灯与Linux驱动点灯的区别 嵌入式初学者入门的第一个“项目”就是LED点灯,那么,本文带你看看51、STM32、Linux点灯有.... 的头像 strongerHuang 发表于 03-10 17:37 • 1360次 阅读 迎接智能仪表的设计挑战 智能仪表是通过某种通信网络记录和报告公用事业服务的使用消耗的电子设备,例如电、气、水以及供暖/制冷等.... 发表于 03-10 16:46 • 1122次 阅读 境外服务器资源被占满的原因和解决办法 随着互联网的飞速发展,越来越多海内外用户选择使用境外服务器来搭建网站,搭建和运行网站时,用户们会关注.... 的头像 深圳市恒讯科技有限公司 发表于 03-10 16:22 • 225次 阅读 单片机应用系统的开发流程 我们学习单片机的目的就是为了进行嵌入式系统的开发,学好单片机首先要有一个整体认识。 的头像 strongerHuang 发表于 03-10 16:13 • 293次 阅读 CPU利用率过高的原因是什么 租用的服务器在使用操作系统的时候,用着用着系统就变慢了,打开“ 任务管理器 ”一看,才发现CPU使用.... 发表于 03-10 09:28 • 47次 阅读 AGM观点:独立FPGA公司将不复存在 未来很可能独立FPGA公司不再有存在的意义,FPGA技术将与CPU/MCU深度融合,成为异构计算的新.... 的头像 MCU/FPGA by AGM 发表于 03-10 08:57 • 1368次 阅读 AGM观点:独立FPGA公司将不复存在 [RK3288][Android6.0]偶发会遇到播放GIF动画会卡顿怎么解决 [RK3288][Android6.0]偶发会遇到播放GIF动画会卡顿的原因有哪些?怎样去解决呢?... 发表于 03-10 07:52 • 380次 阅读 RK3288系统CPU的频率调节策略是什么 RK3288系统CPU的频率调节策略是什么? 怎样去修改RK3288系统CPU的频率调节策略呢? ... 发表于 03-10 07:35 • 323次 阅读 为VisionFive星光板上创建Debian系统镜像 在RISC-V 星光板VisionFive上创建Debian/Linux系统 发表于 03-09 20:52 • 10次 阅读 为VisionFive星光板上创建Debian系统镜像 Linux内核代码修改将为性能测试获8450%提升 Jason Donenfeld 是 WireGuard 的主要开发者,同时他也是 Linux 内核随.... 的头像 马哥Linux运维 发表于 03-09 14:16 • 211次 阅读 澎湃微PT32L031xx系列产品特性的介绍 1、澎湃微PT32L031xx产品特性  l 内核:Cortex-M0  Ø  CPU 运行时钟频率.... 发表于 03-09 14:15 • 26次 阅读 评判工业主板质量的三大标准 工业主板是应用于工业场合的主板,根据需求可以适应复杂的现场环境、长时间高负荷工作等。工控机的质量取决.... 发表于 03-08 14:35 • 12次 阅读 TMS320VC5501 定点数字信号处理器 TMS320VC5501(5501)定点数字信号处理器(DSP)基于TMS320C55x™DSP生成CPU处理器内核。 C55x™DSP架构通过增加并行性和全面关注降低功耗来实现高性能和低功耗。 CPU支持内部总线结构,该结构由一个程序总线,三个数据读总线,两个数据写总线以及专用于外设和DMA活动的附加总线组成。这些总线能够在一个周期内执行最多三次数据读取和两次数据写入。并行,DMA控制器可以独立于CPU活动执行数据传输。 C55x™CPU提供两个乘法累加(MAC)单元,每个单元能够进行17位×17位乘法运算。单循环。额外的16位ALU支持中央40位算术/逻辑单元(ALU)。 ALU的使用受指令集控制,提供优化并行活动和功耗的能力。这些资源在C55x CPU的地址单元(AU)和数据单元(DU)中进行管理。 C55x DSP代支持可变字节宽度指令集,以提高代码密度。指令单元(IU)从内部或外部存储器执行32位程序提取,并为程序单元(PU)排队指令。程序单元解码指令,将任务指向AU和DU资源,并管理完全受保护的管道。预测分支功能可避免执行条件指令时的管道刷新。 5501外设... 发表于 10-09 14:55 • 463次 阅读 TMS320VC5501 定点数字信号处理器 AM4379 AM437x ARM Cortex-A9 微处理器 (MPU) TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从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 • 532次 阅读 AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3