Linux2_6内核对SMP系统支持的研究
于PCI9656设备驱动程序的Linux2.6内核研究
于PCI9656设备驱动程序的Linux2.6内核研究【摘要】本文主要研究了PCI9656设备驱动程序在Linux2.6内核下的实现和优化。
在介绍了研究背景、研究目的和研究意义。
接着在分别对PCI9656设备驱动程序进行了概述,分析了Linux2.6内核的特性,并详细讨论了PCI9656设备驱动程序的实现原理和开发流程,最后对性能进行了优化。
在总结了PCI9656设备驱动程序的完善之处,展望了其应用前景,并对文章进行了总结。
本文通过对PCI9656设备驱动程序的研究,为进一步优化和完善该设备在Linux2.6内核下的驱动程序提供了重要的参考和指导。
【关键词】PCI9656设备驱动程序、Linux2.6内核、研究、实现原理、开发流程、性能优化、完善、应用前景、结论总结。
1. 引言1.1 研究背景研究背景:PCI9656是一款常用的PCI总线控制器芯片,广泛应用于各种嵌入式系统和工业控制领域。
在Linux系统中,设备驱动程序是系统与硬件设备之间进行通信的核心,而PCI9656设备驱动程序的编写和优化对于系统性能和稳定性具有重要意义。
深入研究PCI9656设备驱动程序在Linux2.6内核中的实现原理和优化方法,对于提高系统的性能和稳定性具有积极的意义。
本文将重点探讨PCI9656设备驱动程序的概述、Linux2.6内核特性分析、实现原理、开发流程和性能优化等内容,希望能为相关领域的研究和实践提供一定的参考价值。
1.2 研究目的的部分内容如下:研究的目的是为了深入了解PCI9656设备驱动程序在Linux2.6内核下的工作原理和性能表现,探索其在实际应用中的优化方法和可能存在的问题,最终实现对PCI9656设备驱动程序的更加完善和成熟。
通过对PCI9656设备驱动程序的分析和研究,可以为开发人员提供更多的参考和指导,帮助他们更好地应用和维护PCI9656设备驱动程序,提高系统的稳定性和性能。
研究还旨在为未来PCI9656设备驱动程序的进一步优化和扩展提供重要的理论基础和实践经验,同时为相关领域的学术研究和工程开发提供有益的参考和借鉴。
Linux2.6内核的定制
一Linux内核结构Linux内核主要有五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
进程调度(SCHED):Linux2.6内核推出了一种内嵌0(1)调度算法的调度器,该算法在进程间切换时有恒定的时间复杂度O(1)。
该调度器在进程调度性能、实时性、内核可抢占中发挥了极大的作用,迎合了嵌入式的要求。
内存管理(MM):Linux操作系统支持虚拟内存,允许多个进程共享内存区域,而Linux2.6版本又引进了基于页的反向映射技术,显著地改善了虚拟内存在一定负载下的性能。
该技术提供了一个发现哪些进程正在使用给定的内存物理页的机制。
虚拟文件系统(VirtualFileSystem,VFS):虚拟文件系统使Linux安装和支持不同类型的文件系统成为可能。
它对Linux的每个文件系统的所有细节进行了抽象,使得不同的文件系统在Linux内核及其进程看来都是相同的。
网络接口(NET):网络向来都是Linux引以自傲的强项,它提供了对各种网络标准的存取和各种网络硬件的支持。
进程间通信(IPC):linux不但支持单个计算机进程间的通信,而且支持基于Socket的进程间通信这五个子系统除了各自完成自己的功能外,还是相互依赖功能完成linux内核应有的义务。
在多道程序环境下,程序要运行必须要进程调度,而进程调度的第一件事就是通过内存管理为程序和数据分配内存;进程间通信中的共享内存通信机制则需要内存管理的协助;虚拟文件系统是在网络接口的基础上来支持网络文件系统(NFS)。
Linux内核个子系统及其依赖关系开用图2-4-1来表示。
图2-4-1 Linux内核子系统及其以来关系二 Linux2.6内核源码目录结构分析在linux的内核源码一般都安装在/usr/src/linux目录下,在安装linux发行版本,如Red Hat、ubuntu等过程中我们可以选择是否安装linux 内核源码。
对linux内核的研究,当然首先要对其源码目录结构了解一下。
Linux 是如何支持SMP的
Linux进程调度(续)
与task_struct有关的全局变量: task[NR_TASKS]:所有进程包括0号进程的数组,构成一个双向循环链表,表头是BSP的0号进程,即 init_task。 init_tasks[NR_CPUS]:所有CPU的0号进程的数组,构成一个链表,它是上一个链表的子链表,调度 器通过idle_task(cpu)宏来访问这些idle进程。
至此,AP启动完成。
华中科技大学 CGCL&SCTS实验 室
三、Linux进程调度
基本数uct task_struct{ volatile long states; //当前状态,包括可运行、可中断、不可中断、停止等 long priority; //静态优先级,实时进程忽略此成员 long nice; //用户可以控制的优先级 unsigned long rt_priority; //实时进程优先级 long counter; //剩余时间片,开始运行时初值等于priority unsigned long policy; //调度策略,有SCHED_FIFO,SCHED_RR,SCHED_OTHER三种 struct task_struct *next_task,*prev_task; //前(后)一个任务 struct task_struct *next_run,*prev_run; //前(后)一个可运行任务 unsigned short uid,gid,euid,egid; //用户id,组id,有效用户id,有效组id int pid; //进程号 struct thread_struct thread; //保存执行环境,包括一些寄存器内容 struct mm_struct *mm; //内存结构 int processor; //正在使用的CPU int last_processor; //上次使用的CPU int lock_depth; //内核锁的深度 }
Linux内核分析 SMP启动
SMP的启动
相关函数介绍 smp_init( )>smp_boot_cpus( ) 我们回到smp_boot_cpus( )继续往下讲。 完成所有do_boot_cpu( )后,首先显示整 个系统的运算能力,然后对外部APIC进行 初始化,最后通过zap_low_mappings( )清 除页面映射目录中的低区。
SMP的启动
CPU有APIC对SMP结构来说是必要条件, 所以还要对BP进行是否有APIC的检查以及 其初始化。setup_local_APIC( )等。 开始逐个启动各个AP。 phys_cpu_present_map是个全局的CPU 位图,根据此位图用一个循环依次对各个 AP调用do_boot_cpu( )。
SMP的启动
相关函数介绍 start_secondary( ) 1. cpu_init( )对AP作进一步初始化。 cpu_init( )主要为进程调度做准备,并把全 局位图cpu_initialized对应位置1,让BP知 道此AP已经初始化完毕。
SMP的启动
CPU之间的同步与协调 (1)全局量init_deasserted。BP为AP初始化前将 init_deasserted设置为0,AP进入smp_callin( )后在一个循 环中等待其成为1,保证AP在此期间不对APIC操作 (2)全局位图cpu_callout_map,AP在smp_callin( )中等待 对应位变成1,BP则在do_boot_cpu( )中将目标AP对应位 设1 (3)全局位图cpu_callin_map,BP在do_boot_cpu( )中向 AP发出启动命令后,在一个定时循环中等待其对应位变成1, AP则在smp_callin( )结束前设置相应位为1,BP检测到或 超时,才从do_boot_cpu( )返回 (4)全局量smp_commenced,AP的起跑命令
Linux2.6内核调度分析及实验设计
在现代操作系统中 , 进程调度一直是一 个核心问题 , 它往往不单独 使用其 中的一种调度方法 , 而是综合运用几种基本 的调度 方法 , 进程调 度策略的优劣对整个系统性 能有 至关重要 的影 响。 iu26引入了新的 Ln x. 调度 算法 , 具有 完全实现 O( ) 1算法 、 强了 S 增 MP可扩展性 、 强化 S MP 亲和力 、 增强了对软实时性的支持 、 公平性 等特点l 本文对 Lnx . 的 l l 。 i 26 u 调度过程及算法进 行了详 细分析 , 并设计 了 Ln x iu 调度实验 。
1Ln x . .iu 26内核 调 度 机 制 11 iu . Ln x内核 调 度 数 据 结 构
—
进程控制块 P BPoes ot l l k t k su t 系统 中最 为重 C (r s nr o )a — t c 是 c C oB c s r 要 的数据结构之一 ,用来存 放进程所必需的各种信息 , 包括进程 的类 型、 进程状态 、 优先级 、 时钟信息等 。
科技信息.
博 士 ・ 家论 坛 专
Ln x . 核 调度 分 析 及 实 验 设 计 iu 26内
安徽 科技 学 院理 学院 赵艳 红 沈 峰 段 汉根
[ 摘 要] 本文剖 析 了 Ln x . iu 26内核 重要数 据 结构 , 程调度 依据 、 进 调度 时机 、 度 策略 , 调 并详 细分析 了 Ln x , iu 26进程 调度 算法 。 Ln x . iu 26内核 实现 了 O( ) 1 的特性 , 据实验 结果, 明了 Ln x . 根 证 iu26具有很好 的实时性 , 多任务下有更 高的 C U使 用率。 P
一
pe 就是 当前进程结构 rv
基于Linux2.6嵌入式系统实时性研究
Ke wo ds y r :Emb d e ;Re l i e o a c ;Ken l edd a—t me P r r n e f m r e
1概 述
的, 内核就可以在任何 时间抢 占正在执行 的任务 。在 L x. i 2 6系
(调 ) 与 随着计算机 、 通信等技术 的迅速发展 , 工业 自动化的水平 也 统 中最显著 的特点就 是引入 了内嵌 0 1 度算 法 的调 度器 , 24调 度 器 相 比 , 论 是 在 调 度 性 能 、 时 性 . 核 抢 占 , 是 . 不 实 、 内 还 越来越高 。嵌入式系统 的应用在其 中起到 了举足轻重的作用 , 同
Linux2.6下内核调试技术的改进与研究
安 装 自己的新 内核 . 是 为 了在 内核 代 码 中加 入 以 这
收 稿 日期: 0 5 0 — 9 20— 80 基 金 项 目: 安 部 金 盾 工 程 资 助 项 目 (1 A 2W0 3 公 JG B 3 1 )
Ab ta t Ac o dn h iu d l c a im n e ied e ’ lme t. hsp p ra ay e e k re e sr c : cr igt te Ln xmo ue me h ns a dd vc dv rsee ns ti a e lBst e l - o n h n d b gp be i ed vc r e ’ e eo me tpo e s n d rsac e e k r e e u c n lg o gd , a - u r lm n t e ied v rsd v lp n rc s,a ee rh st en l b gt h oo yt mu lyme o h i h d e h n w i ,rp ssa mp o e ou o b u mo alc t nma a e n d ac s ntek r e. hl p o oe i rv dslt n a o t e n i me w l ai , n g me ta ce si e 1 o o n h n Ke r s Ln x26 De u e h oo y K o d ywo d : iu ., b g tc n lg , ig
YANG o Ma ,DAIZib n - i
( stt o lc o i T cn lg,h L fr ai n ier g nvri , hnzo 5 0 4C ia I tue f et nc eh o y teP AI om t nE g ei i sy Z e ghu4 0 0 hn ) ni E r o n o n nU e t
Linux2_6内_核_分_析
文章编号:1006-1576(2005)02-0089-02Linux 2.6内核分析栾建海,李众立,黄晓芳(西南科技大学计算机学院,四川绵阳 621002)摘要:Linux操作系统内核由进程和内存管理、文件系统、网络接口、进程间通信模块构成。
内核程序使用进程标识号(PID)标识过程。
内存管理程序采用页式管理机制,通过页面、中间目录及页面表三个层次实现从线形地址到物理地址的映射。
其网络接口模块分为:网络设备接口、网络接口核心、网络协议族及网络接口socket层。
关键词:Linux;操作系统;内核分析;网络接口中图分类号:TP316.89 文献标识码:AAnalyze on Linux 2.6 KernelLUAN Jian-hai, LI Zhong-li, HUANG Xiao-fang(College of Computer, Southwest University of Science & Technology, Mianyang 621002, China) Abstract: The kernel of Linux operating system is composed of course, memory management, file system, process communication model etc. The process is marked with PID numbers in kernel program. The page management system was applied in memory management program, and the mapping from line address to physics address was realized through three layers of page layout, middle list and page layout table. Interface modules of network are divided into interface of network device, the kernel of network interface, and the family of network protocol and socket layer of network interface. Finally, Linux 2.6 kernel was analyzed.Keywords: Linux; Operating system; Kernel analyze; Network interface1 引言Linux是运行于多种平台、源代码公开、免费、遵守POSIX标准、与UNIX兼容的操作系统。
linux2.6内核参数详解
收集额外的进程统计信息并通过taskstats接口发送到用户空间
Configure standard kernel features (for small systems)
配置标准的内核特性(为小型系统)
Enable 16-bit UID system calls
Subarchitecture Type
处理器的子架构,大多数人都应当选择"PC-compatible"
Processor family
处理器系列,请按照你实际使用的CPU选择
Generic x86 support
通用x86支持,如果你的CPU能够在上述"Processor family"中找到就别选
Initramfs source file(s)
initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白
Optimize for size (Look out for broken compilers!)
编译时优化内核尺寸(使用"-Os"而不是"-O2"参数编译),有时会产生错误的二进制代码
在多cpu系统中让特权CPU访问x86的MSR寄存器
/dev/cpu/*/cpuid - CPU information support
能从/dev/cpu/x/cpuid获得CPU的唯一标识符(CPUID)
IPC Namespaces
IPC命名空间支持,不确定可以不选
POSIX Message Queues
POSIX消息队列,这是POSIX IPC中的一部分
BSD Process Accounting
Linux 2.6内核分析
Linux 2.6内核分析
栾建海;李众立;黄晓芳
【期刊名称】《兵工自动化》
【年(卷),期】2005(024)002
【摘要】Linux操作系统内核由进程和内存管理、文件系统、网络接口、进程间通信模块构成.内核程序使用进程标识号(PID)标识过程.内存管理程序采用页式管理机制,通过页面、中间目录及页面表三个层次实现从线形地址到物理地址的映射.其网络接口模块分为:网络设备接口、网络接口核心、网络协议族及网络接口socket 层.
【总页数】3页(P89-90,92)
【作者】栾建海;李众立;黄晓芳
【作者单位】西南科技大学,计算机学院,四川,绵阳,621002;西南科技大学,计算机学院,四川,绵阳,621002;西南科技大学,计算机学院,四川,绵阳,621002
【正文语种】中文
【中图分类】TP3
【相关文献】
1.Linux
2.6内核分析——对进程调度机制的分析 [J], 张同光;李秀芹;朱家义;杨延玉
2.开发,定制Linux新生命——开发人员眼中的Linux 2.6内核 [J], 李庆明;张静
3.剖析定制Linux 2.6内核移植——定制2.6内核更容易 [J],
4.SuSE靓装Linux2.6桌面——体验SuSE Linux 9.1 [J], 伊利贵
5.Linux2.4与Linux2.6内核调度器的比较研究 [J], 叶超;郭立红;邹荣士
因版权原因,仅展示原文概要,查看原文内容请购买。
Linux2.6.31内核优化选项
Linux 2.6.31内核优化指南作者:Ken WuEmail: ken.wug@转载本文档请注明原文链接/docs/linux-kernel-2-6-31-optimization.htm!介绍本文档是一篇关于Linux Kernel 2.6.31的最简优化指南。
作者旨在编译一份性能最佳且适合普通Application/Server开发用的内核。
(非生产环境)本文提及的内核调优,主要是通过选择最佳编译选项,删除无用驱动,减少内核尺寸,关闭部分安全特性等方式来进行的。
优化后的效果,主要体现在OS启动时间,启动后的内存占用以及应用程序运行性能。
由于作者水平有限,如果描述错误,还请不吝指教。
运行环境作者是在虚拟机中编译的内核,如果你与作者的运行环境不同,则本文档中的部分描述可能会与你的实际情况有一定出入。
不过,相信大部分用户在看到选项释义时,能做出适合自己的选择。
说明下列选项中,通过 "// " 注释的行,代表金国步写的内核选项简介中未提及的选项释义。
通过红色 "<===" 注释的行,代表内核默认开启,本文档推荐关闭的选项,释义部分会给出关闭的理由。
参考资料金国步写的内核选项简介Linux Kernel DatabaseLinuxsir BBS优化前后性能对比General setup --->[ ] Prompt for development and/or incomplete code/drivers <=== 显示尚在开发中或尚未完成的代码和驱动. 我不是内核或驱动开发人员。
() Local version - append to kernel release[ ] Automatically append version information to the version stringKernel compression mode (Bzip2) ---> <=== 对比默认的Gzip,Bzip2拥有更高的压缩比[*] Support for paging of anonymous memory (swap)[*] System V IPC[*] BSD Process Accounting[ ] BSD Process Accounting version 3 file format[ ] Export task/process statistics through netlink (EXPERIMENTAL) <=== 体验类选项一律关[ ] Auditing support <=== 给SELinux提供支持。
【整理】Linux中对于SMP系统的实现
【整理】Linux中对于SMP系统的实现
Linux从2.0开始增加对SMP系统的⽀持。
在2.2前的内核中,SMP实现在⽤户级,Linux内核本⾝并不能因为有多个处理器⽽得到加速;在2.4内核后,SMP实现在核⼼级,使⽤多处理器可以加快内核的处理速度。
1、SMP中的系统引导
在同⼀时间,⼀个“上下⽂”只能由⼀个CPU处理。
在系统引导和初始化阶段,只有⼀个“上下⽂”,只能由⼀个处理器来处理。
BP完成系统的引导和初始化,并创建起多进程,从⽽可以由多个处理器同时参与处理时,才启动所有的AP,让它们在完成⾃⾝的初始化后投⼊运⾏。
在Linux中,SMP系统的引导是⼀个分阶段的过程,这中间需要主CPU和次CPU在⼏个地⽅进⾏同步,已取得相同的同步和协调,最终基本在同⼀时间进⼊SMP的进程调度。
Linux中SMP系统在Intel的Pentium上的引导过程如下:
2、SMP中的进程调度
在SMP结构的系统中同时有多个进程在运⾏,需要Linux在进程的task_struct数据结构中加上两个字段,⼀个是has_cpu,表进程是否在CPU上运⾏,另⼀个是processor,表进程在哪个CPU上运⾏。
linux内核2.6
越来越多的Linuxer开始对尚处在测试中的2.6内核产生了兴趣,确实它非常具有吸引力,众多的特性让人眼花潦乱。
我也从2.4全面转到了2.6内核之下,享受着新特性带来的新鲜体验。
不过不少兄弟在编译新内核时或多或少的遇到了一些问题,看来新娘的盖头也不是那么容易揭开的:)因此我打算写一些文章来介绍编译新内核时的一些应该注意的地方,以减少兄弟们在编译新内核时的麻烦。
由于我的水平十分有限,写这样的文章实在是勉为其难。
文中肯定有错误疏失之处,还请兄弟们多多包涵:)第一部分,准备:要使用新的内核首先当然要取得新内核的源码,内核的官方网站是 在上面可以得到最新的内核。
2.6的更新是相当快的,你可以在命令行下使用finger @命令来快速得到当前最新的内核列表。
在这篇文章中我将以2.6.0-test6为准。
下载了内核源码之后,我们要使用tar jxvf linux-2.6.0-test6.tar.bz2来提取源码,如果你下载的是以tgz结尾的压缩包就使用zxvf参数来解压。
我强烈建议你不要使用/usr/src/linux这个目录来存放源码,因为使用这个目录你需要手工在/usr/include目录下作一些符号链接,这实在不是一个好主意。
所以我建议你为源码单独建一个目录,这里我们的目录是/src/linux-2.6.0-test6。
要编译与正常运行新的内核你需要升级一些软件包,这些信息在源码目录下的Documentation/Changes 文件中,请根据你的实际情况选择升级。
这其中我强调一下你应该升级Module-Init-Tools,不要被你当前系统中depmod -V输出的版本号迷惑(在RH9中它的输出是2.4.22,感觉好象要比Changes中所要求的要高,实际上它们使用不同的版本规则)。
新的Module-Init-Tools在下面的网址中取得:/pub/linux/kernel/people/rusty/modules/我使用的是0.9.14。
Linux2.6内核配置详解
7.
[*] Automatic kernel module loading
复制代码
Enable loadable module support,很多人喜欢将全部功能、硬件支持一股脑的编 进内核,而不是使用模块的方式。这样做非常不好(个
人觉得)。其实我也做过嵌入式的开发,在针 对特定硬件的平台下尽可能将内核编小,将始终是支持 模块加载的。例如我们开发的防火墙就是做为内核的模 块被加载的。使用模块支持,你的系统能具有更好的可 扩充性。还有一个原因就是自己编写的功能模块、设备 驱动模块(假设编写的质量不高)以模块方式工作引起
2.
[*] Enable loadable module support
3.
[*] Module unloading
4.
[]
Forced module unloading
5.
[*] Module versioning support
(EXPERIMENTAL)
6.
[ ] Source checksum for all modules
Support for hot-pluggable devices:是否支持热插拔 的选项,肯定要选上。不然 USB、PCMCIA 等这些设备都
用不了。
Kernel Userspace Events:内核中分为系统区和用户区, 这里系统区和用户区进行通讯的一种方式,选上。
Kernel .config support:将.config 配置信息保存在 内核中,选上它及它的子项使得其它用户能从/proc 中 得到内核的配置。还记得另一篇贴子我是如何取得启动 光盘的内核配置信息,并在此基础上配置新的内核吗?
microcode support
Linux操作系统内核对SMP(对称多处理器)的支持
Linux操作系统内核对SMP(对称多处理器)的支持
高珍;吴永明;周卫华
【期刊名称】《计算机应用研究》
【年(卷),期】2002(019)009
【摘要】详细介绍了Linux操作系统内核是怎样支持SMP(对称多处理器)系统工作的,并具体分析了其内核源代码的实现过程.
【总页数】3页(P62-63,67)
【作者】高珍;吴永明;周卫华
【作者单位】同济大学,计算机科学与工程系,上海,200092;同济大学,计算机科学与工程系,上海,200092;同济大学,计算机科学与工程系,上海,200092
【正文语种】中文
【中图分类】TP393
【相关文献】
1.Linux
2.6内核对SMP系统支持的研究 [J], 李兰英;温现杰
2.片多处理器和对称多核处理器的研究进展 [J], 王永明;;
3.支持对称多处理器结构的操作系统设计 [J], 任晓瑞;时磊
4.基于多核对称最小二乘支持向量机的永磁同步电机混沌建模 [J], 陈强;任雪梅
5.MIPS科技宣布其对称多处理(SMP)支持MIPS-Based^(TM) SoC上的Android^(TM)平台 [J],
因版权原因,仅展示原文概要,查看原文内容请购买。
Linux2_6内核调度分析及实验设计
科技信息
博士·专家论坛
c=0,这代表某个调度(普通以及 RR)时间片到时,要更新全部进程 的权重。
c=-1,运行队列上的都有 SCHED_YIELD 标志,它们都想让位不引 发计时器更新。
c>1000,实时进程。 …… if (unlikely(!c)) {
struct task_struct *p; spin_unlock_irq(&runqueue_lock);
int weight = goodness(p, this_cpu, prev->active_mm); if (weight > c) c = weight, next = p;
} } 判定进程可被调度,计算权重,跟踪、记录循环中发现的最大权重 以及对应的进程。next 就是指向下一个要运行的进程的结构的指针,c 就是权重,各种值的含义:
case TASK_INTERRUPTIBLE: if (signal_pending(prev)) { prev->state = TASK_RUNNING; break; }
default: del_from_runqueue(prev);
case TASK_RUNNING:; } prev->need_resched = 0; …… 如果进程状态为可中断的睡眠状态,且收到信号,则将该进程设为 正在运行状态,由 CPU 处理该进程。如果该进程为运行状态,不进行任 何操作。将调度标志 prev->need_resched 设为 0 根据状态调整队列。 …… next = idle_task(this_cpu); c = -1000; …… if (can_schedule(p, this_cpu)) {
表 1 内核 Linux2.6.20 的平均完成率
2.6.xx内核编译详解
2.6.xx内核编译详解做一件事情,首先要知道自己在干什么,而不是盲目得升级内核,现在升级内核有点泛滥,sigh 首先让我们先了解一下2.6内核的新特性一、01.模块子系统(Module Subsystem)、统一设备模型(Unified Device Model)和PnP 支持模块子系统发生了重大变化。
02.稳定性有所提高为了彻底避免内核加载或者导出正在被使用的内核模块,或者至少为了减少加载或者卸载模块的同时使用该模块的可能性(这有时会导致系统崩溃),内核加载和导出内核模块的过程都得到了改进。
03.统一设备模型统一设备模型的创建是 2.6 内核最重要的变化之一。
它促进了模块接口的标准化,其目的是更好地控制和管理设备,例如:更准确地确定系统设备。
电源管理和设备电源状态。
改进的系统总线结构管理。
04.即插即用(PnP)支持1.1.1 和 1.1.2 小节中提及的变化使得运行2.6 内核的 Linux 成为一个真正即插即用的OS。
例如,对 ISA PnP 扩展、遗留 MCA 和 EISA 总线以及热插拔设备的 PnP 支持。
05.内核基础设施的变化为了区别以 .o 为扩展名的常规对象文件,内核模块现在使用的扩展名是 .ko。
创建了新的 sysfs 文件系统,当内核发现设备树时就会描述它。
内存支持,NUMA 支持支持更大数量的 RAM2.6 内核支持更大数量的 RAM,在分页模式下最高可达 64GB。
06.NUMA对非一致内核访问(Non-Uniform Memory Access - NUMA)系统的支持是 2.6 内核中新出现的。
07.线程模型,NPTL相对于 v2.4 的 LinuxThreads,在版本 2.6 中新出现的是 NPTL(Native POSIX Threading Library)。
NPTL 为 Linux 带来了企业级线程支持,提供的性能远远超过了 LinuxThreads。
linux内核2.6与之前版本的比较
《Linux系统与应用》大作业2010 / 2011 学年第 2 学期姓名:___刘颜铭_________学号:___090209114______班级:__09网络一班______指导教师:______王小英_______计算机科学与工程学院2011Linux内核2.6与之前版本的比较关键词: Linux2.6 比较老版本新特性2003年岁末,Linux内核2.6版本正式推出, 新内核是振奋人心的,无论对于企业用户、个人爱好者还是开发者。
新内核的功能比以往任何一个版本都更加强大,它支持更多类型的处理器,提高了可靠性和可扩展性,势必推动Linux更广泛地应用。
对于高端服务器,新特性改进了性能、可扩展性、吞吐率,以及对多处理机服务器的支持。
对于嵌入式领域,新内核合并了uCLinux,添加了新的体系结构和处理器类型,包括对无MMU系统的支持。
对于桌面用户,新内核则添加了一整套新的音频和多媒体驱动程序。
Linux强劲的发展势头再次向人们展现了其独特的魅力。
Linux 2.6内核新特性支持更多处理器,比如AMD64、一些大型机及嵌入式等,同时改进了对已有处理器的支持。
采用抢占式内核,使交互式操作的响应速度大大提高。
修改了I/O子系统部分,保证在各种工作负荷下I/O都有很好的响应速度。
更新了IDE/ATA、SCSI等存储总线,解决和改善了以前的一些问题,比如2.6版内核可以直接通过IDE驱动程序来支持IDE CD/RW设备,而不必像以前一样要使用一个特别的SCSI模拟驱动程序。
大量改进文件系统,比如支持Windows的逻辑卷管理器、重写对NTFS文件系统的支持、改进HPFS等。
改进和部分重写了Modules功能,使之更稳定。
改进对USB的支持,使之能够支持当前多数主流的USB设备。
加强对无线设备的支持。
增加了ALSA(Advanced Linux Sound Architecture)。
ALSA是有希望取代旧式OSS (Open Sound System)的另一种声音系统,能支持全杜比录音及回放、无缝混音、支持声音合成设备、USB声卡等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高新技术
Linux2.6 内核对 SMP 系统支持的研究
李兰英 温现杰
(哈尔滨理工大学,黑龙江 哈尔滨 150000)
摘 要:首先简要介绍了 SMP 系统的体系结构,接着重点分析了 SMP 系统中进程调度、同步机制和负载平衡三个方面的实现细节,最后给 出 Cache 一致性问题的解决方案。 关 键 词 :同步机制;负载平衡
… DEFINE_SPINLOCK(my_spinlock); … spin_lock_init(&my_spinlock); 定义了自旋锁之后,就可以使用大量的锁变量 了。每个变量用于不同的上下文。spin_lock 和 spin_unlock 变量。这是一个最简单的变量,它不会 执行中断禁用,但是包含全部的内存壁垒。这个变 量假定中断处理程序和该锁之间没有交互。 spin_lock(&my_spinlock); … spin_unlock(&my_spinlock); 接下来是 irqsave 和 irqrestore 对,前者需要自 旋锁,并且在本地处理器上禁用中断。后者释放自 旋锁,并且(通过 flags 参数)恢复中断。 spin_lock_irqsave(&my_spinlock, flags); … spin_unlock_irqrestore(&my_spinlock, flags); 最后,如果内核线程通过低半方式共享数据, 那么可以使用自旋锁的另一个变体。 spin_lock_bh(&my_spinlock); … spin_unlock_bh(&my_spinlock); 读写锁主要应用在读取数据比写入数据更常 见情况下。这种模型中允许多个线程同时访问相同 数据,但同一时刻只允许一个线程写入数据。如果 执行写操作的线程持有此锁,则临界段不能由其他 线程读取。如果一个执行读操作的线程持有此锁, 那么多个读线程都可以进入临界段。 1.3 负载平衡 在 Linux 支持的多处理机系统中,每个处理器 维护一个进程就绪队列 runqueue,并独立的对自己 的就绪队列进行调度操作。由于存在多个就绪进程 队列 runqueue,可能存在多个队列之间负载的不平 衡状况。函数 rebalance_tick(() 单个 CPU 时,此函数
参考文献
[1]Daniel P.深入理解 LINUX 内核[M].陈莉君译.北 京:中国电力出版社,2007.P84-107. [2]Schinmmel,C.现代体系结构上的 UNIX 系统:内核 程序员的 SMP 和 Caching 技术[M].张 辉译.北京:人 民邮电出版社,2003.P217-227.
- 6 - 中国新技术新产品
初始化自旋锁 x 是通过宏 DEFINE_SPIN- LOCK(x)实现的,自旋锁在真正使用前必须先初始 化,该宏用于动态初始化。自旋锁有完全锁和读写 锁两种形式。在 SMP 系统中主要用的是完全锁,这 种锁机制的过程:
首先通过一个简单的声明创建一个新的自旋 锁。
spinlock_t my_spinlock = SPIN_LOCK_UN- LOCKED;
是不起作用的空函数) 当有多个 CPU 时,在每个 CPU 上的每个定时器的 tick 时刻得到调用,检查每 个调度域,在一定的时间间隔时调用函数 load_bal- ance()进行负载平衡。该函数在两种情况下被调用: schedule( )在当前 runqueue 为空时调用或者在系 统空闲时由定时器每 1ms 调用一次,而在系统忙时 则由定时器每 200ms 调用一次。
(2“) 推”操作 线程 migration_thread 执行“推”操作。该进程 在系统启动时自动加载,并将自己设为 SCHED_FIFO 的实时进程,然后检查 runqueue:mi- gration_queue 中是否有请求等待处理,若没有,则 将自己休眠,直至被唤醒后再次检查。 2 SMP 结构中的 Cache 一致性问题 给 SMP 系统增加高速缓存能够利用局部引用 特性的优点提高性能,但也会带来保持高速缓存一 致性的问题。当多个处理器存取和修改共享数据 时,会出现 SMP 高速缓存一致性的主要问题。这种 问题可以通过使用无高速缓存的操作,以及有选择 的冲洗共享数据来管理共享数据解决。高速缓存与 内存一致性问题基本上是由硬件完成的,Intel 在 Pentum CPU 中为已经转入高速缓存的数据提供了 一种自动与内存保持一直的机制,即“窥探”(snoop- ing)机制。这种机制通过监视系统总线对内存的操 作,用废弃缓冲栈方法来重新装载高速缓存,因而 SMP 结构中的高速缓存与内存的数据一致性问题 是软件透明的[2]。 3 结束语。最新的 2.6 内核对多处理器体系架 构的更好支持,使整个系统更接近于多桌面和实时 系统。然而也有一些不进入人意的地方,例如自旋 锁是在保持自旋锁期间将失效抢占,这意味着抢占 延迟将增加,而且抢占延迟也是不确定的。这也成 为 linux 在实时性应用方面的一个障碍。
引言。SMP 系统的并行处理技术,不仅提高处 理器的运算能力和处理能力,而且对操作系统实时 性改进也提供了一个新的途径。
1 Linux 内核对 SMP 系统的支持 2.6 内核包含更好的 SMP 系统支持,关键在于 能在可用 CPU 之间进行负载平衡,同时维持亲合 性以提高缓存效率。对称多处理器系统中,每一个 CPU 都将维护一个自己的就绪队列,并且每个就绪 队列都有一个自旋锁,这样允许所有的 CPU 都可 以对任务进行调度,而不会与其他 CPU 产生竞争[1]。 1.1 SMP 系统的进程调度 2.6 内核中就绪队列定义为复杂得多的数据结 构 struct runqueue,首先分析一下其结构中关于 SMP 系统的定义。 (1) prio_array_t *active, *expired, arrays[2] runqueue 中最关键的数据结构。每个 CPU 的 就绪队列按时间片是否用完分为两部分,分别通过 active 指针和 expired 指针访问,前者指向时间片 没用完、当前可被调度的就绪进程,后者指向时间 片已用完的就绪进程。 (2)spinlock_t lock 就绪队列的自旋锁,只影响一个 CPU 上的就 绪队列。 (3) unsigned long nr_uninterruptible 记录本 CPU 尚处于 TASK_UNINTERRUPT- IBLE 状态的进程数,和负载信息有关。 (4) unsigned long timestamp_last_tick 本就绪队列最近一次发生调度事件的时间,在 负载平衡的时候会用到。 还有几个数据项,这里不做介绍了。 我们先来总结一下调度器的结构,每个 CPU 都有一个运行队列,其中包含了 140 个优先级列 表,它们是按照先进先出的顺序进行服务的。被调 度执行的任务都会被添加到各自运行队列优先级 列表的末尾。每个任务都有一个时间片,运行队列 的前 100 个优先级列表保留给实时任务使用,后 40 个用于用户任务。除了 CPU 的运行队列之外,还 有一个过期运行队列。当活动运行队列中的一个任 务用光自己的时间片之后,它就被移动到过期运行 队列中。在移动过程中,会对其时间片重新进行计 算。如果活动运行队列中已经没有某个给定优先级 的任务了,那么指向活动运行队列和过期运行队列 的指针就会交换,这样就可以让过期优先级列表变 成活动优先级的列表。 调度器的工作:在优先级最高的队列中选择一 个任务来执行。为使这个过程的效率更高,内核使 用了一个位图来定义给定优先级列表上何时存在 任务。因此,在大部分体系架构上,会使用一条 find-first-bit-set 指令在 5 个 32 位的字中哪一位的 优先级最高。查找一个任务来执行所需要的时间并 不依赖于活动任务的个数,而是依赖于优先级的数 量,这使得 2.6 内核的调度器复杂度为 O(1)。 1.2 SMP 系统中同步机制 只有在 MP 情况下存在真正的并行,因为线程 是同时执行的,其中每个处理器中共享相同数据的
线程同时执行。 自旋锁(spinlock)是使用忙等待锁来确保互斥
锁的一种特殊方法。如果锁可用,则获取锁,执行互 斥锁动作,然后释Байду номын сангаас锁。如果锁不可用,线程将忙等 待该锁,直到其可用为止。在可抢占内核和 SMP 情 况下对共享资源的同步问题,一般地一个任务对共 享资源的访问是非常短暂的,如果两个任务竞争一 个共享的资源时,没有得到资源的任务将自旋以等 待另一个任务使用完该共享资源。与原子操作、信 号量、读写、大内核锁、读写锁相比,这种锁机制也 是非常高效的。
Linux 2.6 内核调度系统采用相对集中的负载 均衡方案,有"拉"和"推"两种操作。在 load_balance 函数及 idle_balance 函数中调用 pull_task 函数来 实现"拉"操作,在 migration_thread 函数中实现"推" 操作。
(1“) 拉”操作 “拉”是指系统从重载 CPU 上“拉”进程过来到 轻载 CPU 上,函数 load_balance 根据当前 CPU 是 否空闲状态分为“忙平衡”和“空闲平衡”。每 tick 时 钟中断会启动一次函数 rebalance_tick 来计算合适 的时间间隔,启动函数 load_balance 平衡负载。另 外,在调度器 schedule 中,本 CPU 的就绪队列为 空,就调用 idle_balance 函数进行“空闲平衡”。函数 pull_task 实现“拉”进程的具体动作,并更新进程的 timestamp 属性,如果被“拉”进程的优先级比本 CPU 正运行的进程高,则当前进程被抢占。