- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Linux内核多线程技术研究
基于Linux内核多线程技术研究
摘 要 多线程技术是一项新的微处理器体系结构技术,它在传统并行指令集的基础上,添加了并行线程集,对操作系统来说,一个具有多线程的微处理器就相当于两个逻辑处理器。任何微处理器的使用都需要有操作系统的支持,Linux是UNIX类的操作系统,其发展十分迅猛,已经成为使用最为广泛的网络服务器操作系统。Linux提供的稳定性和强大网络支持能力必将使多线程技术发挥得更为快捷和顺畅。本文介绍了多线程技术的概念,Linux内核的技术特点等,并分析了在Linux下多线程技术的实现方式,以及遇到的问题。
关键词 Linux内核;多线程;互斥
中图分类号TP39 文献标识码A 文章编号 1674-6708(2013)94-0201-02
1多线程技术及优势
进程是程序执行的动态过程,是系统分配资源的最小单位。而线程是更小的执行实体,是进程的分支,其本身不占用系统资源,而是与其所属的进程共享系统的软硬件资源。创建和撤销另一个进程的工作可以由同一个线程完成,多个线程可以同时进行。就绪、阻塞、运行,这三种状态是线程的基本状态。
多线程技术旨在提高CPU的性能,一个CPU同能能执行多个程序,能分享同一个CPU的资源。但是多线程技术并不等于是多个CPU,当两个线程同时需要同一个资源的时候,只有一个能够得到,另一个就要等待,进而暂时停止,直到资源限制方可继续。
使用多线程技术的原因有三,其一,与进程相比,线程这种多任务操作方式,能最大程度的节约系统的耗费,其耗费大约是进程的1/30左右。其二,线程之间方便通信。其三,多线程作为一种多任务并发的工作机制,能进一步提高应用程序响应,改善程序结构,提高多CPU效率。
2 Linux内核的技术特点
1)Linux采用分页式内存管理,对于基本物理页面的管理采用Buddy算法,对于任意长度的内核数据结构采用动态分配,使用Slab算法;
2)Linux引入了虚拟文件系统层作为物理文件系统的接口,支持文件延迟写、顺序访问、预读和内存影射文件,使用buffer cache和page cache分别以盘块和页面为单位的两类磁盘访问数据;
3)Linux支持虚拟内存的使用,共享和私有页面可以交换执行;
4)Linux在进程管理中内使用的核设计原则是不可重入式的。进程在内核态运行时,仅在时间片用完、请求数据或等待I/O完成时触发调度,需要的自旋锁和信号量很少。
3 Linux内核多线程的实现
3.1 Linux内核为多线程技术的实现提供的支持
多线程的实现需要操作系统的有效识别和支持,Linux2.5系列的内核针对多线程引起的调度问题专门进行了设计和优化。
首先必须对Linux内核进行正确的设置,才能真正达到多线程处理的效果,在配置时应将对称多处理器SMP勾选上,并在BOOT中将通过引导选项acpismp=force 来指定使用超线程。支持多线程的Linux对于信息的处理速度是实际物理处理器的一倍。
Linux内核对多线程处理器提供的支持如下:
启动时Linux将自动检测是否是多线程处理器,如是,启动逻辑处理器。
可重用旋转等待(spin-wait)的优化和同步变量的对齐。当使用多线程系统的时候,为了取得良好的性能,首先是对spin-wait loops的方式进行编程,第二个是同步变量的对齐。
进程用户栈和内核栈的切换。进程因为中断或者系统调用而陷入内核态时,进程所使用的堆栈也要从用户栈转到内核栈。进程陷入内核态后,先把用户态堆栈的地址保存在内核栈之中,然后设置堆栈指针寄存器的内容为内核栈的地址,这样就完成了用户栈向内核栈的转换;当进程从内核态恢复到用户态时,在内核态的最后将保存在内核栈里面的用户栈的地址恢复到堆栈指针寄存器即可。这样就实现了内核栈和用户栈的互转。
3.2调度器功能的优化
Linux2.6版本从调度系统的应用上,其设计理念是满足实时性的要求和多处理机并行执行。因而新调度系统兼具有2.4版本交互式作业优先、高 CPU 使用率、轻载条件下调度/唤醒的高性能、基于优先级调度、公平共享、SMP 高效亲和、实时调度和 cpu 绑定等调度手段等优势,并具有其自身的特点:如可扩展性高、更好的实时性能、O1调度算法、子进程在父进程之前运行、新的SMP亲和方案等等。在诸多方面进行了进一步的改善。
3.3 Linux中的线程实现机制
Linux内核仍然使用进程模式,真正线程的实现是在用户空间中,Linux内核只是为线程的创建提供了一个进程的模型。Linux为用户线程提供了可用的线程库,本文以LinuxThreads线程库为例进行阐述。
Linux内核中的进
文档评论(0)