具体分析设备模型中的设备管理,首先要分析device结构。从device可见,重点是管理的资源,当然也包含针对sys文件系统关联的属性。而设备的层次关系在实际的情况下通常是从逻辑层的功能设备逐渐到物理层的总线设备,最终到platform bus中对应的device,这样系统就建立了完整的设备层次关系。设备模型通知udev的方式如图5-19所示。通过uevent通知到应用层,就完成设备管理创建设备文件到应用层的操作。......
2025-09-30
在内核提供的基本服务中已经简单介绍了一些锁的功能,这里对与驱动相关的数据一致性保护服务进行进一步介绍。
1ᤫ顺序和屏障
驱动经常要涉及很多读写操作,设备的读写操作很多是要有顺序性的,对编译器和处理器来说并不能在之前就进行这种顺序性的假设,而是尽力优化代码,相应的驱动就需要保证这种顺序性,这是矛盾的,不过还好编译器和处理器都提供了相关功能来保证操作的顺序性。Linux内核对编译器和处理器的相关指令和操作进行了封装,提供给其他模块使用,相关的操作就是形成一个屏障,屏障保证之前和之后的某些操作的顺序性,下面是相关的接口及说明:
●rmb():阻止跨越屏障的读操作发生重排序,保证前后读操作的顺序性。
●read_barrier_depends():阻止跨越屏障的具有数据依赖关系的读操作重排序。
●wmb():阻止跨越屏障的写操作发生重排序。
●mb():阻止跨越屏障的读和写操作重新排序。
●smp_rmb():在SMP上提供rmb()功能,在UP上提供barrier()功能。
●smp_read_barrier_depends():在SMP上提供read_barrier_depends()功能,在UP上提供barrier()功能。
●smp_wmb():在SMP上提供wmb()功能,在UP上提供barrier()功能。
●smp_mb():在SMP上提供mb()功能,在UP上提供barrier()功能。
●barrier():阻止编译器跨越屏障对读或写操作进行优化。(https://www.chuimin.cn)
2ᤫ内核抢占
Linux内核提供了内核抢占之后在一定程度上也会造成数据的不一致,比如说进程的切换造成数据访问的交叉执行,这样只在进程上下文的数据操作可以考虑通过内核抢占的接口来保证数据一致性,接口说明如下:
●preempt_disable():增加抢占计数值,从而禁止内核抢占。
●preempt_enable():减少抢占计算,并当该值降为0时检查和执行被挂起的需调度的任务。
●preempt_enable_no_resched():激活内核抢占但不再检查任何被挂起的需调度的任务。
●preempt_count():返回抢占计数。
这里的preempt_disable()和preempt_enable()是可以嵌套调用的,disable和enable的次数最终应该是一样的。
另外在中断上下文和进程上下文中需要的数据一致性保护可以通过中断开关解决,多处理器操作的数据一致性保护可以通过自旋锁解决,在实际的应用中自旋锁的接口提供了相关中断的操作,所以通常都直接使用正确的自旋锁接口进行相关的保护操作。还有原子操作和互斥锁也是数据一致性保护操作,原子操作主要针对单变量的数据,没有上下文的限制,而互斥锁通常是在多个进程上下文中进行数据一致性的保护。这些接口都在内核基本服务中有简单介绍,这里就不重复说明了。
还有各种RCU(主要差别在如何进行回写上)、读写锁等,通常都是针对网络协议栈、文件系统等有一定读写特点的数据一致性保护操作,在驱动中使用的情况并不多,就不进行详述了。
总之对数据一致性保护操作,是要在正确的前提下,尽量根据数据操作的上下文以及特点选择合适的接口进行操作,在完成功能的基础上尽力提升性能。
相关文章
具体分析设备模型中的设备管理,首先要分析device结构。从device可见,重点是管理的资源,当然也包含针对sys文件系统关联的属性。而设备的层次关系在实际的情况下通常是从逻辑层的功能设备逐渐到物理层的总线设备,最终到platform bus中对应的device,这样系统就建立了完整的设备层次关系。设备模型通知udev的方式如图5-19所示。通过uevent通知到应用层,就完成设备管理创建设备文件到应用层的操作。......
2025-09-30
图5-21块设备内部框架2核心管理实体从整体的层次上看,块设备需要有针对文件系统和VFS的接口实体,另外还需要管理生命周期的设备模型相关实体以及驱动管理实体。图5-22块设备层各实体及系统关系框图从图5-23可见,文件系统中的设备层次由block_device来实现,驱动的管理实体通过gendisk来进行管理,hd_struct进行物理的分区管理,同时为设备模型的接口。图5-24块设备驱动管理实体从图5-24可见,其中主要包括设备的控制操作接口......
2025-09-30
可以看到非常的小,比硬币大不了多少,这个系统只要接上电池就可以运行了。图1-1LogicPD DM 3730 SOM示意图再来看看LogicPD的SOM都有些什么,系统框图如图1-2所示。PoP在一起的芯片分别是主处理器DM 3730和NAND Flash/mDDR SDRAM chip。主处理器和内存是所有系统必需的,关系自然紧密了,这是能PoP的资本。PoP的优势很明显就是使电路板的面积减小了,这个对于手机等对电路板大小要求高的设备来说是非常重要的。图1-2LogicPD DM 3730 SOM系统框图......
2025-09-30
整个系统启动和初始化的过程,Linux内核是在主处理器启动之后才会执行。不同的处理器启动流程并不相同,这就要求Linux内核能支持各种处理器的初始化操作。Linux内核各个模块,大部分设计时做到了体系结构无关。Linux内核是一个庞大的系统,最终生成的操作系统代码的执行文件非常大。......
2025-09-30
VFS的实现是以“一切皆是文件”为需求出发点的。要理解VFS的框架首先看一下VFS和系统的静态关系框图,如图5-1所示。从图5-1可见,VFS是用户层的直接接口,是面向用户的服务。图5-1VFS和系统静态关系图在图5-2中每个节点被使用时都会在VFS层中创建dentry,这样可以快速通过文件名进行查找和定位,Linux内核中对dentry的管理组织形式如图5-3所示。以上是系统运行时VFS对文件名的组织管理,这是VFS管理的一个方面。......
2025-09-30
考虑到电源管理的需求涉及处理器和各种设备,一方面是处理器尽可能减少功耗,另一方面是设备尽可能减少功耗。图5-30Linux电源管理各个功能从图5-30可见Linux内核的电源管理功能有与处理器相关的CPUIdle和CPUFreq,也有与设备相关的runtime pm,另外还有与整个系统待机时SLM相关的低功耗电源管理功能。下面分别对这些功能框架进行介绍。具体的驱动同样会在SoC电源管理部分进行讲解。对具体设备的电源管理实现,将在设备驱动中进行详细分析。......
2025-09-30
谈到Linux内核,大家的第一感觉就是一个庞大的系统、很多的模块和功能,实在是太复杂了。Linux内核在设计过程中这些都已考虑在其中,这也就提升了它的适用范围。抽象是人类的一个重要思维能力,从某种角度来说软件系统是对各种概念或者行为进行抽象,并加以管理。......
2025-09-30
也正是因为Linux内核的唯一性,各个不同发布版本拥有相同的框架。Linux内核是在整个Linux系统的最底层,它负责管理硬件,运行用户程序,并保持系统整体的安全性和完整性。可以说是Linux系统的根和灵魂。图3-1中看到Linux内核还有另一层面的含义。这对于Linux内核同样适用。所以对Linux内核的剖析、学习和研究也不能独立于系统进行,而是要综合考虑应用、内核和硬件等各方面的信息和内容。这样才能更全面、深刻地理解Linux内核。......
2025-09-30
相关推荐