資源描述:
《基于smp結(jié)構(gòu)的linux內(nèi)核進(jìn)程調(diào)度的研究》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、基于SMP結(jié)構(gòu)的linux內(nèi)核進(jìn)程調(diào)度的研究:在給定的時(shí)間里,CPU能達(dá)到的最高速度總是給定的,再要提高速度就要設(shè)法增加其并行度,就是在計(jì)算機(jī)中使用多個(gè)處理器,即使用SMP對(duì)稱多處理器技術(shù).作為一種開源的操作系統(tǒng),,linux提供了對(duì)SMP結(jié)構(gòu)很好的支持,SMP系統(tǒng)中最關(guān)鍵的技術(shù)是如何更好地解決多個(gè)處理器的相互通訊和協(xié)調(diào)問題以及l(fā)inux內(nèi)核對(duì)于SMP結(jié)構(gòu)的進(jìn)程調(diào)度問題. 關(guān)鍵詞:SMPlinux進(jìn)程 :TP316.8:A:1007-9416(2011)11-0089-02 Linux操作系統(tǒng)作為UNIX操作系
2、統(tǒng)的一種克隆系統(tǒng)最初是由LinuasTorvalds編寫,后來借助InterX絡(luò),在全世界計(jì)算機(jī)愛好者的共同努力下稱為一款優(yōu)秀的開源操作系統(tǒng)。linux起初是為單處理機(jī)設(shè)計(jì)的.隨著并行計(jì)算的發(fā)展,通過SMP所獲得的性能要比幾臺(tái)獨(dú)立的機(jī)器組合起來更加的便宜和簡(jiǎn)單,因此使其得到快速的發(fā)展。linux內(nèi)核從2.0版本就開始支持SMP系統(tǒng)。文中以Linux2.4.0版為基礎(chǔ),分析闡述了Linux內(nèi)核是如何支持SMP體系結(jié)構(gòu)的以及SMP對(duì)linux內(nèi)核進(jìn)程調(diào)度的處理機(jī)制?! ?、SMP系統(tǒng)模型 SMP是指在一個(gè)計(jì)算機(jī)上匯集了一組
3、處理器(多CPU),它們通常物理上也采用同一種CPU,所有的CPU通過同一條總線共享同一個(gè)內(nèi)存以及所有的外設(shè),為了減少訪問內(nèi)存的沖突,SMP結(jié)構(gòu)中的各個(gè)CPU通常都有自己的高速緩存。 在SMP結(jié)構(gòu)中,高速緩存的作用比在單處理器結(jié)構(gòu)中更為重要,不僅可以提高取指令和讀寫數(shù)據(jù)的速度,還有利于減少多個(gè)CPU在訪問內(nèi)存時(shí)的沖突。如果內(nèi)存在同一時(shí)間內(nèi)受到多個(gè)CPU的訪問,每個(gè)CPU把自己的高速緩沖存滿之后,就可以運(yùn)行相當(dāng)長(zhǎng)的時(shí)間而無需經(jīng)常地讀、寫物理上的內(nèi)存。 linux內(nèi)核要支持SMP,必須修改基于UP的內(nèi)核代碼以適應(yīng)SMP,
4、主要涉及部分就是基于SMP的啟動(dòng)和進(jìn)程調(diào)度問題?! ?、linux內(nèi)核在SMP結(jié)構(gòu)系統(tǒng)的引導(dǎo) 操作系統(tǒng)內(nèi)核的映像必須存儲(chǔ)在不揮發(fā)的介質(zhì)中.當(dāng)系統(tǒng)開機(jī)加電時(shí).CPU從某個(gè)特殊的地址開始執(zhí)行指令,這段指令就是引導(dǎo)加載程序,負(fù)責(zé)將linux內(nèi)核的映像從Flash或EPROM中加載入內(nèi)存,這段程序有三部分,用匯編寫成:bootsect.S,setup.S,video.S.對(duì)i386的CPU而言,源碼放在linux系統(tǒng)的arch/i386/boot目錄下,從線性地址0xffff0執(zhí)行這段程序之后,將linux內(nèi)核的映像裝入內(nèi)存,
5、CPU通過一條長(zhǎng)線程轉(zhuǎn)移指令轉(zhuǎn)到映像代碼段開頭的入口startup_32,關(guān)鍵啟動(dòng)代碼如下: ENTRY(stext) ENTRY(_stext); startup_32: cld movl$(__KERNEL_DS),%values movl陎,%ds movl陎,%es ......... #ifdefCONFIG_SMP orp_init()進(jìn)行SMP結(jié)構(gòu)的初始化,并創(chuàng)建起多個(gè)進(jìn)程,從而可以由多個(gè)處理器同事參與處理時(shí),才啟動(dòng)所有的”應(yīng)用處理器”,讓他們?cè)谕瓿勺陨淼某跏蓟院笸度脒\(yùn)行。一旦各個(gè)AP
6、都已投入運(yùn)行,這種暫時(shí)的主次關(guān)系便結(jié)束,從此之后便一律平等了,smp_init()函數(shù)的代碼如下: staticvoid__initsmp_init(void) { mp_boot_cus(); smp_threads_ready=1; mp_mence(); } 3、linux內(nèi)核在SMP結(jié)構(gòu)中的進(jìn)程調(diào)度 3.1SMP結(jié)構(gòu)進(jìn)程的互斥 linux系統(tǒng)中,進(jìn)程間的互斥通信是一個(gè)必須要考慮的問題,在單處理器結(jié)構(gòu)中,各個(gè)進(jìn)程間實(shí)際上同一時(shí)間點(diǎn)上只有一個(gè)進(jìn)程在運(yùn)行。但在SMP結(jié)構(gòu)中,由于多個(gè)處理器在獨(dú)立的運(yùn)行,
7、即使在單條指令中完成的操作也有可能受到干擾,有些在單處理器中的“原子操作”不再是原子了?! ≡趌inux內(nèi)核中使用自旋鎖的方式來實(shí)現(xiàn)多個(gè)進(jìn)程通信之間的互斥問題。關(guān)鍵代碼如下: inlineintspin_trylock(spinlock_t*lock) { charoldval; __asm____volatile__( “xchgb