一種進(jìn)程調(diào)度方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種進(jìn)程調(diào)度方法及裝置。
【背景技術(shù)】
[0002]VxWorks操作系統(tǒng)和Linux操作系統(tǒng)都是嵌入式操作系統(tǒng),隨著數(shù)據(jù)通信技術(shù)的發(fā)展,VxWorks操作系統(tǒng)已經(jīng)無法滿足通信設(shè)備廠商在硬件、成本和功能上逐漸增長的需求。在這樣的背景下,通信設(shè)備廠商逐步嘗試將通信設(shè)備由VxWorks操作系統(tǒng)迀移到Linux操作系統(tǒng),在這一過程中,出于對成本的考慮,需要將許多原先運(yùn)行在VxWorks操作系統(tǒng)上的軟件移植到Linux操作系統(tǒng)上。
[0003]但由于VxWorks操作系統(tǒng)與Linux操作系統(tǒng)的設(shè)計(jì)思想和系統(tǒng)架構(gòu)差異較大,如果不提供相應(yīng)的適配機(jī)制,在將原先運(yùn)行在VxWorks操作系統(tǒng)上的軟件移植到Linux操作系統(tǒng)上的過程中,將會遇到較多困難,并且需要對原先運(yùn)行在VxWorks操作系統(tǒng)上的軟件進(jìn)行較大改動(dòng),使將原先運(yùn)行在VxWorks操作系統(tǒng)上的軟件移植到Linux操作系統(tǒng)上所需成本提高,并降低了軟件移植所帶來的收益。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的實(shí)施例提供的一種進(jìn)程調(diào)度方法及裝置,能夠在Linux中實(shí)現(xiàn)VxWorks中任務(wù)調(diào)度的搶占鎖定功能,降低從VxWorks移植軟件到Linux所需成本,提高從VxWorks移植軟件到Linux所帶來的收益。
[0005]為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0006]第一方面,本發(fā)明實(shí)施例提供了一種進(jìn)程調(diào)度方法,應(yīng)用于包含一個(gè)或多個(gè)CPU核心的Linux設(shè)備,包括當(dāng)CPU核心處于用戶態(tài),設(shè)置CPU核心對應(yīng)的調(diào)度控制標(biāo)識;當(dāng)CPU核心處于內(nèi)核態(tài),獲取CHJ核心對應(yīng)的調(diào)度控制標(biāo)識,其中CPU核心用于進(jìn)程或線程調(diào)度;當(dāng)調(diào)度控制標(biāo)識允許調(diào)度時(shí),在CPU核心進(jìn)行進(jìn)程或線程調(diào)度。
[0007]在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述設(shè)置CPU核心對應(yīng)的調(diào)度控制標(biāo)識,包括在共享內(nèi)存設(shè)置CHJ核心對應(yīng)的調(diào)度控制標(biāo)識,共享內(nèi)存位于Linux設(shè)備;獲取CPU核心對應(yīng)的調(diào)度控制標(biāo)識,包括在共享內(nèi)存讀取CPU核心對應(yīng)的調(diào)度控制標(biāo)識。
[0008]在第一方面的第二種可能的實(shí)現(xiàn)方式中,所述獲取所述CPU核心對應(yīng)的調(diào)度控制標(biāo)識,具體包括獲取CR]核心的標(biāo)識;根據(jù)CPU核心的標(biāo)識獲取CPU核心的調(diào)度控制標(biāo)識。
[0009]在第一方面的第三種可能的實(shí)現(xiàn)方式中,進(jìn)程調(diào)度方法還包括當(dāng)調(diào)度控制標(biāo)識不允許調(diào)度時(shí),不在(PU核心進(jìn)行進(jìn)程或線程調(diào)度。
[0010]結(jié)合第一方面第二種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,當(dāng)調(diào)度控制標(biāo)識為允許調(diào)度時(shí),在CPU核心進(jìn)行進(jìn)程或線程調(diào)度,具體包括當(dāng)調(diào)度控制標(biāo)識為零時(shí),在CPU核心進(jìn)行進(jìn)程或線程調(diào)度;當(dāng)調(diào)度控制標(biāo)識不允許調(diào)度時(shí),不在CPU核心進(jìn)行進(jìn)程或線程調(diào)度,具體包括當(dāng)調(diào)度控制標(biāo)識為非零時(shí),不在(PU核心進(jìn)行進(jìn)程或線程調(diào)度。
[0011]結(jié)合第一方面,或者第一方面第一至第四種任意一種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,獲取CPU核心對應(yīng)的調(diào)度控制標(biāo)識前,還包括關(guān)閉內(nèi)核搶占;進(jìn)程調(diào)度方法還包括清除進(jìn)程或線程對應(yīng)的重調(diào)度標(biāo)識,開啟內(nèi)核搶占,重調(diào)度標(biāo)識用于標(biāo)識進(jìn)程或線程是否需要調(diào)度。
[0012]結(jié)合第一方面,或者第一方面第一至第四種任意一種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,還包括:當(dāng)CPU核心禁止進(jìn)程或線程調(diào)度時(shí),將CPU核心的調(diào)度控制標(biāo)識加I;當(dāng)CPU核心允許進(jìn)程或線程調(diào)度時(shí),將CPU核心的調(diào)度控制標(biāo)識減I。
[0013]第二方面,本發(fā)明實(shí)施例提供了一種進(jìn)程調(diào)度裝置,位于包含一個(gè)或多個(gè)CPU核心的Linux設(shè)備,包括設(shè)置單元,用于當(dāng)CPU核心處于用戶態(tài),設(shè)置CPU核心對應(yīng)的調(diào)度控制標(biāo)識;獲取單元,用于當(dāng)CPU核心處于內(nèi)核態(tài),獲取CPU核心對應(yīng)的調(diào)度控制標(biāo)識,其中CPU核心用于進(jìn)程或線程調(diào)度;調(diào)度單元,用于當(dāng)調(diào)度控制標(biāo)識允許調(diào)度時(shí),在CPU核心進(jìn)行進(jìn)程或線程調(diào)度。
[0014]在第二方面的第一種可能的實(shí)現(xiàn)方式中,設(shè)置單元具體用于當(dāng)CPU核心處于用戶態(tài),在共享內(nèi)存設(shè)置CR]核心對應(yīng)的調(diào)度控制標(biāo)識,共享內(nèi)存位于Linux設(shè)備;獲取單元具體用于:當(dāng)CPU核心處于內(nèi)核態(tài),在共享內(nèi)存讀取CPU核心對應(yīng)的調(diào)度控制標(biāo)識。
[0015]在第二方面的第二種可能的實(shí)現(xiàn)方式中,獲取單元具體用于獲取CPU核心的標(biāo)識;根據(jù)CHJ核心的標(biāo)識獲取CPU核心的調(diào)度控制標(biāo)識。
[0016]在第二方面的第三種可能的實(shí)現(xiàn)方式中,調(diào)度單元還用于當(dāng)調(diào)度控制標(biāo)識不允許調(diào)度時(shí),不在(PU核心進(jìn)行進(jìn)程或線程調(diào)度。
[0017]結(jié)合第二方面第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,調(diào)度單元具體用于當(dāng)調(diào)度控制標(biāo)識為零時(shí),在CPU核心進(jìn)行進(jìn)程或線程調(diào)度;當(dāng)調(diào)度控制標(biāo)識為非零時(shí),不在CPU核心進(jìn)行進(jìn)程或線程調(diào)度。
[0018]結(jié)合第二方面,或者第二方面第一至第四種任意一種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,進(jìn)程調(diào)度裝置還包括管理單元,用于在獲取單元獲取CHJ核心對應(yīng)的調(diào)度控制標(biāo)識前,關(guān)閉內(nèi)核搶占;管理單元還用于清除進(jìn)程或線程對應(yīng)的重調(diào)度標(biāo)識,開啟內(nèi)核搶占,重調(diào)度標(biāo)識用于標(biāo)識進(jìn)程或線程是否需要調(diào)度。
[0019]結(jié)合第二方面,或者第二方面第一至第四種任意一種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,進(jìn)程調(diào)度裝置還包括標(biāo)識單元,用于當(dāng)CPU核心禁止進(jìn)程或線程調(diào)度時(shí),將CPU核心的調(diào)度控制標(biāo)識加I,當(dāng)CPU核心允許進(jìn)程或線程調(diào)度時(shí),將CPU核心的調(diào)度控制標(biāo)識減I。
[0020]本發(fā)明的實(shí)施例提供的進(jìn)程調(diào)度方法及裝置,通過根據(jù)需要在用戶態(tài)下設(shè)置Linux設(shè)備中的CPU核心是否可以進(jìn)行進(jìn)程或線程調(diào)度的標(biāo)識,在內(nèi)核態(tài)下獲取Linux設(shè)備中CPU核心是否可以進(jìn)行進(jìn)程或線程調(diào)度的標(biāo)識,并根據(jù)該標(biāo)識確定Linux設(shè)備中任一 CPU核心是否可以進(jìn)行進(jìn)程或線程調(diào)度,當(dāng)可以進(jìn)行進(jìn)程或線程調(diào)度時(shí),在該CPU核心上進(jìn)行進(jìn)程或線程調(diào)度。本發(fā)明的實(shí)施例提供的進(jìn)程調(diào)度方法在Linux設(shè)備的CPU核心運(yùn)行重要性較高的進(jìn)程或線程時(shí),避免該CPU核心被進(jìn)程調(diào)度機(jī)制切換到運(yùn)行其他進(jìn)程或線程,使原先運(yùn)行在VxWorks上的軟件在Linux中運(yùn)行時(shí),不會因重要性較高的進(jìn)程或線程在運(yùn)行時(shí)被切換出CPU核心而出現(xiàn)錯(cuò)誤,從而在Linux中實(shí)現(xiàn)VxWorks中任務(wù)調(diào)度的搶占鎖定功能,降低從VxWorks移植軟件到Linux所需成本,提高從VxWorks移植軟件到Linux所帶來的收益。
【附圖說明】
[0021]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0022]圖1為本發(fā)明實(shí)施例提供的一種進(jìn)程調(diào)度方法的流程示意圖;
[0023]圖2為本發(fā)明實(shí)施例提供的另一種進(jìn)程調(diào)度方法的流程示意圖;
[0024]圖3為本發(fā)明實(shí)施例提供的一種進(jìn)程調(diào)度裝置的示意性結(jié)構(gòu)圖;
[0025]圖4為本發(fā)明實(shí)施例提供的另一種進(jìn)程調(diào)度裝置的示意性結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0026]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0027]在本申請中使用的術(shù)語是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請。在本申請和所附權(quán)利要求書中所使用的單數(shù)形的術(shù)語如“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。同時(shí)還應(yīng)當(dāng)理解,本申請中使用的術(shù)語“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
[0028]通常情況下,在Linux中,進(jìn)程是具有獨(dú)立功能的程序?qū)δ硞€(gè)數(shù)據(jù)集在處理機(jī)上的執(zhí)行過程和分配資源的基本單位,而線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,因此在Linux中進(jìn)程或線程和任務(wù)的概念是等價(jià)的。在VxWorks中把每個(gè)相互獨(dú)立的程序稱為任務(wù),任務(wù)是VxWorks資源分配的單位,也是處理器調(diào)度的基本單位。
[0029]由于在VxWorks中,所有任務(wù)共存于單一的線性地址空間,當(dāng)多個(gè)任務(wù)共享全局的數(shù)據(jù)結(jié)構(gòu)時(shí),需要通過互斥訪問機(jī)制訪問臨界區(qū),因此需要在任務(wù)調(diào)度層次上提供對互斥訪問進(jìn)行保護(hù)的機(jī)制,即在臨界區(qū)內(nèi)禁止任務(wù)的搶占調(diào)度,保證重要性較高的任務(wù)在運(yùn)行時(shí)獨(dú)享CPU,使該CPU不會被調(diào)度切換為用于運(yùn)行其他任務(wù)。但是在Linux中,進(jìn)程采用的是搶占式多任務(wù)處理或公平調(diào)度多任務(wù)處理,所以當(dāng)Linux系統(tǒng)處于用戶態(tài)時(shí),沒有能夠保證進(jìn)程或線程在運(yùn)行時(shí)能夠獨(dú)占CPU的機(jī)制,在將原先運(yùn)行在VxWorks上的軟件移植到Linux上時(shí),可能會因?yàn)樵谶\(yùn)行重要性較高的進(jìn)程時(shí)將運(yùn)行此進(jìn)程的CPU調(diào)度切換為運(yùn)行其他進(jìn)程,從而造成從VxWorks上移植到Linux上的軟件運(yùn)行出錯(cuò)。
[0030]基于上述在VxWorks與Linux中進(jìn)行進(jìn)程調(diào)度的原理,參照圖1所示,本