欢迎来到天天文库
浏览记录
ID:21893640
大小:52.50 KB
页数:5页
时间:2018-10-25
《基于smp结构的linux内核进程调度的研究》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于SMP结构的linux内核进程调度的研究:在给定的时间里,CPU能达到的最高速度总是给定的,再要提高速度就要设法增加其并行度,就是在计算机中使用多个处理器,即使用SMP对称多处理器技术.作为一种开源的操作系统,,linux提供了对SMP结构很好的支持,SMP系统中最关键的技术是如何更好地解决多个处理器的相互通讯和协调问题以及linux内核对于SMP结构的进程调度问题. 关键词:SMPlinux进程 :TP316.8:A:1007-9416(2011)11-0089-02 Linux操作系统作为UNIX操作系
2、统的一种克隆系统最初是由LinuasTorvalds编写,后来借助InterX络,在全世界计算机爱好者的共同努力下称为一款优秀的开源操作系统。linux起初是为单处理机设计的.随着并行计算的发展,通过SMP所获得的性能要比几台独立的机器组合起来更加的便宜和简单,因此使其得到快速的发展。linux内核从2.0版本就开始支持SMP系统。文中以Linux2.4.0版为基础,分析阐述了Linux内核是如何支持SMP体系结构的以及SMP对linux内核进程调度的处理机制。 1、SMP系统模型 SMP是指在一个计算机上汇集了一组
3、处理器(多CPU),它们通常物理上也采用同一种CPU,所有的CPU通过同一条总线共享同一个内存以及所有的外设,为了减少访问内存的冲突,SMP结构中的各个CPU通常都有自己的高速缓存。 在SMP结构中,高速缓存的作用比在单处理器结构中更为重要,不仅可以提高取指令和读写数据的速度,还有利于减少多个CPU在访问内存时的冲突。如果内存在同一时间内受到多个CPU的访问,每个CPU把自己的高速缓冲存满之后,就可以运行相当长的时间而无需经常地读、写物理上的内存。 linux内核要支持SMP,必须修改基于UP的内核代码以适应SMP,
4、主要涉及部分就是基于SMP的启动和进程调度问题。 2、linux内核在SMP结构系统的引导 操作系统内核的映像必须存储在不挥发的介质中.当系统开机加电时.CPU从某个特殊的地址开始执行指令,这段指令就是引导加载程序,负责将linux内核的映像从Flash或EPROM中加载入内存,这段程序有三部分,用汇编写成:bootsect.S,setup.S,video.S.对i386的CPU而言,源码放在linux系统的arch/i386/boot目录下,从线性地址0xffff0执行这段程序之后,将linux内核的映像装入内存,
5、CPU通过一条长线程转移指令转到映像代码段开头的入口startup_32,关键启动代码如下: ENTRY(stext) ENTRY(_stext); startup_32: cld movl$(__KERNEL_DS),%values movl陎,%ds movl陎,%es ......... #ifdefCONFIG_SMP orp_init()进行SMP结构的初始化,并创建起多个进程,从而可以由多个处理器同事参与处理时,才启动所有的”应用处理器”,让他们在完成自身的初始化以后投入运行。一旦各个AP
6、都已投入运行,这种暂时的主次关系便结束,从此之后便一律平等了,smp_init()函数的代码如下: staticvoid__initsmp_init(void) { mp_boot_cus(); smp_threads_ready=1; mp_mence(); } 3、linux内核在SMP结构中的进程调度 3.1SMP结构进程的互斥 linux系统中,进程间的互斥通信是一个必须要考虑的问题,在单处理器结构中,各个进程间实际上同一时间点上只有一个进程在运行。但在SMP结构中,由于多个处理器在独立的运行,
7、即使在单条指令中完成的操作也有可能受到干扰,有些在单处理器中的“原子操作”不再是原子了。 在linux内核中使用自旋锁的方式来实现多个进程通信之间的互斥问题。关键代码如下: inlineintspin_trylock(spinlock_t*lock) { charoldval; __asm____volatile__( “xchgb
此文档下载收益归作者所有