對計(jì)算機(jī)上的操作系統(tǒng)隱藏邏輯處理器的制造方法
【專利摘要】描述對計(jì)算機(jī)的操作系統(tǒng)(OS)隱藏邏輯處理器。在示例中,一種隱藏具有多個(gè)邏輯處理器的計(jì)算機(jī)中的至少一個(gè)邏輯處理器的方法包括:通過執(zhí)行系統(tǒng)固件中的預(yù)啟動(dòng)例程,初始化多個(gè)邏輯處理器;標(biāo)識多個(gè)邏輯處理器中要對該計(jì)算機(jī)的操作系統(tǒng)(OS)隱藏的至少一個(gè)邏輯處理器,以提供至少一個(gè)隱藏的邏輯處理器和至少一個(gè)可見的邏輯處理器;通過執(zhí)行該系統(tǒng)固件中的暫停例程,將至少一個(gè)隱藏的邏輯處理器中的每個(gè)置于系統(tǒng)管理模式(SMM)中;以及啟動(dòng)該計(jì)算機(jī)的OS來使用至少一個(gè)可見的邏輯處理器。
【專利說明】對計(jì)算機(jī)上的操作系統(tǒng)隱藏邏輯處理器
【背景技術(shù)】
[0001]計(jì)算機(jī)系統(tǒng)可以具有至少一個(gè)中央處理單元(CPU)集成電路(1C),每個(gè)中央處理單元集成電路具有至少一個(gè)處理器或者“核”。在一些情況下,每個(gè)處理器核能夠執(zhí)行多個(gè)線程。例如,市場上可買到的英特爾公司的CPU,如英特爾酷睿(INTEL CORE) i7 CPU,可以包括兩個(gè)核(雙核)、四個(gè)核(四核)或者六個(gè)核(六核),其中這些核中的每個(gè)提供兩個(gè)線程。計(jì)算機(jī)系統(tǒng)中的電路板或“主板”可以包括至少一個(gè)插槽,每個(gè)插槽支持CPU 1C。例如,主板可以支持用于四核CPU IC的兩個(gè)插槽。
[0002]注冊一些類型的軟件(如數(shù)據(jù)庫軟件)的成本依賴于安裝該軟件的計(jì)算機(jī)中的處理器數(shù)量。該軟件會計(jì)算物理插槽、物理核或核線程。可用的處理器越多,注冊該軟件的成本越大。在一些情況下,企業(yè)購買數(shù)個(gè)具有相同配置的計(jì)算機(jī),但是對這些計(jì)算機(jī)中的每個(gè)不相同地利用。例如,計(jì)算機(jī)的一些使用可能不需要所有可用的處理器。因此,用戶可能支付增加的軟件注冊成本,即使他們不需要所有處理器來執(zhí)行所指明的該計(jì)算機(jī)的功能。
【專利附圖】
【附圖說明】
[0003]本發(fā)明的一些實(shí)施例是參照如下附圖描述的:
[0004]圖1是根據(jù)示例實(shí)現(xiàn)方式的計(jì)算機(jī)系統(tǒng)的框圖。
[0005]圖2是描繪根據(jù)示例實(shí)現(xiàn)方式的隱藏具有多個(gè)邏輯處理器的計(jì)算機(jī)中的邏輯處理器的方法的流程圖。
[0006]圖3是描繪根據(jù)示例實(shí)現(xiàn)方式的中斷所隱藏的邏輯處理器的方法的流程圖。
【具體實(shí)施方式】
[0007]描述了對計(jì)算機(jī)的操作系統(tǒng)(OS)隱藏邏輯處理器。在實(shí)施例中,通過執(zhí)行系統(tǒng)固件中的預(yù)啟動(dòng)例程,初始化計(jì)算機(jī)中的邏輯處理器。例如,可以執(zhí)行通電自檢(POST)以初始化該計(jì)算機(jī)的邏輯處理器和其它組件。標(biāo)識這些邏輯處理器中要對OS隱藏的至少一個(gè)邏輯處理器,以限定隱藏的邏輯處理器和可見的邏輯處理器。通過執(zhí)行系統(tǒng)固件中的暫停(park)例程,將隱藏的邏輯處理器中的每個(gè)置于系統(tǒng)管理模式(SMM)中。SMM是一種操作模式,在該操作模式中,正常執(zhí)行被掛起,因此SMM中的邏輯處理器不能由OS使用。啟動(dòng)該計(jì)算機(jī)的OS來使用可見的邏輯處理器。根據(jù)所使用的CPU IC的能力,“邏輯處理器”可以包括CPnC (例如插槽)、CPU IC核或者核上線程。
[0008]“暫?!被蛘唠[藏邏輯處理器可能需要使用被設(shè)計(jì)為對具有特別處理器體系結(jié)構(gòu)的CPU進(jìn)行操作的專有操作系統(tǒng)。本文描述的實(shí)施例可以用于廣泛使用的基于X86的CPU,如那些市場上可買到的英特爾和AMD的CPU,基于x86的CPU沒有用于暫停邏輯處理器的特別體系結(jié)構(gòu)。進(jìn)一步,本文描述的實(shí)施例可以用于廣泛使用的基于x86的操作系統(tǒng),如微軟視窗(MICROSOFT WINDOWS)、紅帽LINUX (RED HAT LINUX)等。在一些示例中,可以對OS及它的對OS本身沒有任何依賴性的應(yīng)用程序隱藏邏輯處理器。通過隱藏不需要的邏輯處理器,能夠減少基于CPU IC(例如插槽)、CPU IC核或者核線程的數(shù)量的軟件注冊。本發(fā)明的實(shí)施例可以參考下面的示例實(shí)現(xiàn)方式得到理解。
[0009]圖1是根據(jù)示例實(shí)現(xiàn)方式的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括至少一個(gè)中央處理單元(CPU)集成電路(IC) 102、各種支持電路106、存儲器108、各種輸入/輸出
(10)電路110、系統(tǒng)固件112以及互連電路104?;ミB電路104可以提供總線、橋等,以促進(jìn)計(jì)算機(jī)系統(tǒng)100的組件之間的通信。CPU IC 102各自可以包括至少一個(gè)物理“核”。每個(gè)物理核可以包括至少一個(gè)線程。通常,計(jì)算機(jī)系統(tǒng)100包括邏輯處理器103,邏輯處理器103根據(jù)CPU IC 102的能力可以是CPU 1C、核或者線程。CPU IC 102具有支持系統(tǒng)管理模式(SMM)的類型,在系統(tǒng)管理模式中包括由操作系統(tǒng)進(jìn)行的正常執(zhí)行在內(nèi)的所有正常執(zhí)行被掛起,作為替代提供系統(tǒng)固件112中的特殊例程執(zhí)行。支持SMM的示例性CPU IC包括市場上可買到的英特爾和AMD的基于x86的處理器。
[0010]支持電路106可以包括緩存、電源、時(shí)鐘電路、數(shù)據(jù)寄存器等等。存儲器108可以包括隨機(jī)存取存儲器、只讀存儲器、緩存存儲器、磁性讀/寫存儲器等等,或者這些存儲器設(shè)備的任意組合。存儲器108可以存儲供CPU IC 102執(zhí)行的操作系統(tǒng)(OS) 114和軟件應(yīng)用程序(“apps 116”)。1電路110可以幫助去往和來自CPU IC 102和/或存儲器108的通信。
[0011]系統(tǒng)固件112包括固件接口 118。固件接口 118可以包括基本輸入/輸出系統(tǒng)(B1S)、統(tǒng)一可擴(kuò)展固件接口(UEFI)等等。系統(tǒng)固件112進(jìn)一步包括預(yù)啟動(dòng)例程120、暫停例程122和引導(dǎo)例程124。預(yù)啟動(dòng)例程120包括在啟動(dòng)或者復(fù)位時(shí)由CPU IC 102首先執(zhí)行的代碼。預(yù)啟動(dòng)例程120初始化計(jì)算機(jī)系統(tǒng)100的CPU IC102和其它組件(例如存儲器108)。例如,預(yù)啟動(dòng)例程120可以包括通電自檢(POST)例程。特別地,一些類型的CPU1C,如特定的基于x86的CPU 1C,需要在啟動(dòng)期間啟用至少一個(gè)邏輯處理器,以能夠正常初始化CPU 1C。在預(yù)啟動(dòng)例程120的執(zhí)行期間,計(jì)算機(jī)系統(tǒng)中的所有邏輯處理器103被啟用,以使CPU IC 102正常初始化。
[0012]暫停例程122包括在預(yù)啟動(dòng)例程120之后由CPU IC 102執(zhí)行的代碼。暫停例程122識別邏輯處理器103中哪些可以對OS隱藏并且“暫停”這些邏輯處理器。例如,暫停例程122限定要暫停的隱藏的邏輯處理器以及供OS 114使用的可見的邏輯處理器。暫停例程122將每個(gè)隱藏的邏輯處理器置于SMM中。隱藏的或被暫停的處理器受系統(tǒng)固件112和暫停例程122的控制。邏輯處理器103中受系統(tǒng)固件112控制且對OS 114隱藏的那些是“隱藏的邏輯處理器”或者“固件控制的邏輯處理器”。邏輯處理器103中可由OS 114使用的那些是“可見的邏輯處理器”或者“OS控制的邏輯處理器”。
[0013]引導(dǎo)例程124包括在暫停例程122之后由CPU IC 102執(zhí)行的代碼。引導(dǎo)例程124啟動(dòng)OS 114來使用可見的邏輯處理器(例如,可見的邏輯處理器可以進(jìn)入OS可使用的模式,如基于x86處理器上的保護(hù)模式)。OS 114沒有對隱藏的邏輯處理器的使用權(quán)或者可見性。
[0014]圖2是描繪根據(jù)示例實(shí)現(xiàn)方式的隱藏具有多個(gè)邏輯處理器的計(jì)算機(jī)中的邏輯處理器的方法200的流程圖。方法200可以參考圖1的計(jì)算機(jī)系統(tǒng)100得到理解。方法200在步驟202處開始,在步驟202處通過執(zhí)行系統(tǒng)固件112中的預(yù)啟動(dòng)例程120,初始化邏輯處理器103。
[0015]在步驟204處,將邏輯處理器103分成隱藏的邏輯處理器和可見的邏輯處理器。在示例中,系統(tǒng)固件112存儲硬件配置屬性126。硬件配置屬性126可以描述所部署的計(jì)算機(jī)100的配置。例如,硬件配置屬性126可以指示計(jì)算機(jī)100被配置為一種大體上提供存儲器和1功能而非大量計(jì)算功能的設(shè)備。暫停例程122可以分析硬件配置屬性126以確定要隱藏的特定多個(gè)邏輯處理器。例如,硬件配置屬性126可以指示多個(gè)角色之一,并且暫停例程122可以被配置為對每個(gè)這樣的角色暫停特定多個(gè)邏輯處理器。
[0016]在另一示例中,系統(tǒng)固件112存儲可選擇的設(shè)置128。例如,固件接口 118可以提供圖形用戶界面(GUI)或者命令行界面(CLI)以允許用戶交互和定義可選擇的設(shè)置128。暫停例程122可以分析可選擇的設(shè)置128以確定要隱藏的特定多個(gè)邏輯處理器。例如,可選擇的設(shè)置128可以指示多個(gè)角色之一,并且暫停例程122可以被配置為對每個(gè)這樣的角色暫停特定多個(gè)邏輯處理器??商娲?,可選擇的設(shè)置128可以包括關(guān)于要暫停和要對OS隱藏的多個(gè)邏輯處理器的特定的用戶可選擇設(shè)置。
[0017]在步驟206處,暫停例程122將隱藏的邏輯處理器中的每個(gè)置于SMM中。在步驟208處,引導(dǎo)例程124啟動(dòng)OS 114來使用可見的邏輯處理器。例如,引導(dǎo)例程124可以使用高級配置與電源接口(ACPI)表來對OS 114通知可見的邏輯處理器。一旦啟動(dòng)OS 114,隱藏的邏輯處理器就將對OS 114是不可見的并且不能被中斷,因?yàn)殡[藏的邏輯處理器處于SMM中并且對系統(tǒng)固件112有響應(yīng)。由于隱藏的邏輯處理器對OS 114是不可見的,所以這些隱藏的邏輯處理器對軟件應(yīng)用程序116是不可見的。根據(jù)被隱藏的邏輯處理器,這可以引起那些處理器不為基于CPU 1C、核或者線程數(shù)量確定注冊成本的軟件應(yīng)用程序116中的任何軟件應(yīng)用程序所考慮。
[0018]回到圖1,系統(tǒng)固件112還包括系統(tǒng)管理中斷(SMI)處理器序(handler) 130。SMI處理程序130包括用于為邏輯處理器103處理系統(tǒng)管理中斷的例程。SMI處理程序130還可以為隱藏的邏輯處理器處理機(jī)器檢查異常(MCE)等類型的計(jì)算機(jī)硬件錯(cuò)誤。
[0019]圖3是描繪根據(jù)示例方式的中斷隱藏的邏輯處理器的方法300的流程圖。方法300可以參照圖1的計(jì)算機(jī)100得到理解。方法300在步驟302處開始,在步驟302中用信號通知要由全部邏輯處理器103處理的中斷。例如,可以用信號通知全局SMI??梢杂蒓S114或者計(jì)算機(jī)系統(tǒng)100中的其它硬件用信號通知該全局SMI。該全局SMI中斷所有可見的邏輯處理器并且導(dǎo)致這些處理器進(jìn)入SMM( “OS可見的SMM處理器”)。隱藏的邏輯處理器保持在SMM中。
[0020]在步驟304處,邏輯處理器103執(zhí)行SMI處理程序130。在示例中,SMI處理程序130包括默認(rèn)代碼,如執(zhí)行電源管理功能。在另一示例中,SMI處理程序130可以包括用于處理機(jī)器檢查異常的MCE處理程序。在示例中,可見的邏輯處理器在收到該中斷時(shí)執(zhí)行SMI處理程序130。然后,可見的邏輯處理器可以用信號通知隱藏的處理器以執(zhí)行SMI處理程序130 (例如,通過向隱藏的邏輯處理器正在監(jiān)視的存儲器地址進(jìn)行寫入)。在步驟306處,SMI處理程序130將OS可見的SMM處理器返回至OS可見的SMM處理器的默認(rèn)操作模式(例如保護(hù)模式)以由OS 114控制。隱藏的邏輯處理器可以保持在SMM中,因此保持對OS 114隱藏。
[0021]在示例中,步驟304處,在該中斷期間,可以釋放隱藏的邏輯處理器中至少一個(gè)邏輯處理器以由OS控制。在示例中,OS 114可以與系統(tǒng)固件112(例如,SMI處理程序130和/或暫停例程122)配合以指示對附加邏輯處理器的需求。然后,系統(tǒng)固件112可以將隱藏的邏輯處理器中至少一個(gè)隱藏的邏輯處理器轉(zhuǎn)移至OS可見的SMM處理器的集合。一旦SMI處理程序130從該中斷返回,新增加的邏輯處理器就變成能夠由OS 114控制的可見的邏輯處理器的一部分。
[0022]在示例中,在步驟304處,可見的邏輯處理器中至少一個(gè)可見的邏輯處理器可以在該中斷期間從OS控制中刪除。在示例中,OS 114可以與系統(tǒng)固件112(例如,SMI處理程序130和/或暫停例程122)配合以指示對邏輯處理器刪除的需求。然后,系統(tǒng)固件112可以將可見的邏輯處理器中至少一個(gè)可見的邏輯處理器轉(zhuǎn)移至隱藏的邏輯處理器的集合。一旦SMI處理程序130從該中斷返回,新刪除的邏輯處理器就停留在SMM中并且從能夠由OS114控制的可見的邏輯處理器中刪除。
[0023]上面描述的方法可以包含在計(jì)算機(jī)可讀介質(zhì)中以配置計(jì)算系統(tǒng)執(zhí)行該方法。該計(jì)算機(jī)可讀介質(zhì)可以分布在多個(gè)物理設(shè)備(例如,計(jì)算機(jī))上。該計(jì)算機(jī)可讀介質(zhì)可以包括例如而沒有限制以下任意多個(gè):磁性存儲介質(zhì),包括磁盤和磁帶存儲介質(zhì);光存儲介質(zhì),如光盤介質(zhì)(例如,⑶-ROM、⑶-R等)以及數(shù)字視頻盤存儲介質(zhì);全息存儲器;非易失性存儲器存儲介質(zhì),包括基于半導(dǎo)體的存儲器單元,如快閃式(FLASH)存儲器、EEPROM、EPROM、ROM ;鐵磁性數(shù)字存儲器;易失性存儲介質(zhì),包括寄存器、緩沖器或者緩存、主存儲器、RAM等;僅舉幾例。其它新的或各種計(jì)算機(jī)可讀介質(zhì)可以用于存儲本文介紹的機(jī)器可讀代碼。
[0024]在前面的描述中,闡述了眾多細(xì)節(jié)以提供對本發(fā)明的理解。然而,本領(lǐng)域技術(shù)人員將理解,本發(fā)明可以在沒有這些細(xì)節(jié)的情況下實(shí)踐。盡管已關(guān)于有限多個(gè)實(shí)施例公開了本發(fā)明,但是本領(lǐng)域技術(shù)人員將理解由此產(chǎn)生的眾多修改和變化。希望所附權(quán)利要求覆蓋落入本發(fā)明的真正精神和范圍內(nèi)的這種修改和變化。
【權(quán)利要求】
1.一種隱藏具有多個(gè)邏輯處理器的計(jì)算機(jī)中至少一個(gè)邏輯處理器的方法,包括: 通過執(zhí)行系統(tǒng)固件中的預(yù)啟動(dòng)例程,初始化所述多個(gè)邏輯處理器; 標(biāo)識所述多個(gè)邏輯處理器中要對所述計(jì)算機(jī)的操作系統(tǒng)(OS)中隱藏的至少一個(gè)邏輯處理器,以提供至少一個(gè)隱藏的邏輯處理器和至少一個(gè)可見的邏輯處理器; 通過執(zhí)行所述系統(tǒng)固件中的暫停例程,將所述至少一個(gè)隱藏的邏輯處理器中的每個(gè)置于系統(tǒng)管理模式(SMM)中;以及 啟動(dòng)所述計(jì)算機(jī)的OS來使用所述至少一個(gè)可見的邏輯處理器。
2.根據(jù)權(quán)利要求1所述的方法,其中所述預(yù)啟動(dòng)例程包括通電自檢(POST)例程。
3.根據(jù)權(quán)利要求1所述的方法,其中標(biāo)識的步驟包括: 分析所述系統(tǒng)固件中的硬件配置屬性,以確定要隱藏所述多個(gè)邏輯處理器中的哪個(gè)。
4.根據(jù)權(quán)利要求1所述的方法,其中標(biāo)識的步驟包括: 分析所述系統(tǒng)固件中能選擇的設(shè)置,以確定要隱藏所述多個(gè)邏輯處理器中的哪個(gè)。
5.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括: 使用所述系統(tǒng)固件中的系統(tǒng)管理中斷(SMI)處理程序來處理機(jī)器檢查異常(MCE)。
6.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括: 所述OS用信號通知全局系統(tǒng)管理中斷(SMI),以促使將所述多個(gè)邏輯處理器置于SMM中; 使用所述系統(tǒng)固件中的SMI處理程序例程來處理全局SMI ;以及 返回所述至少一個(gè)可見的邏輯處理器以由所述OS使用。
7.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括: 所述OS用信號通知全局系統(tǒng)管理中斷(SMI),以促使將所述多個(gè)邏輯處理器置于SMM中; 請求另一邏輯處理器為可見的; 使用所述系統(tǒng)固件中的SMI處理程序例程來處理全局SMI ; 將所述至少一個(gè)隱藏的邏輯處理器中要可見的邏輯處理器重歸類為所述至少一個(gè)可見的邏輯處理器的一部分;以及 返回所述至少一個(gè)可見的邏輯處理器以由所述OS使用。
8.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括: 所述OS用信號通知全局系統(tǒng)管理中斷(SMI),以促使將所述多個(gè)邏輯處理器置于SMM中; 請求從所述至少一個(gè)可見的邏輯處理器中刪除邏輯處理器; 使用所述系統(tǒng)固件中的SMI處理程序例程處理全局SMI ; 將所述至少一個(gè)可見的邏輯處理器中要隱藏的邏輯處理器重歸類為所述至少一個(gè)隱藏的邏輯處理器的一部分;以及 返回所述至少一個(gè)可見的邏輯處理器以由所述OS使用。
9.一種計(jì)算機(jī),包括: 至少一個(gè)中央處理單元(CPU)集成電路(1C),共同地具有多個(gè)邏輯處理器; 存儲器,存儲操作系統(tǒng)(OS); 系統(tǒng)固件,具有: 預(yù)啟動(dòng)例程,能執(zhí)行以初始化所述多個(gè)邏輯處理器; 暫停例程,用于將所述多個(gè)邏輯處理器中至少一個(gè)邏輯處理器置于系統(tǒng)管理模式(SMM)中,以限定至少一個(gè)隱藏的邏輯處理器和至少一個(gè)可見的邏輯處理器;以及 引導(dǎo)例程,用于啟動(dòng)所述計(jì)算機(jī)的OS來使用所述至少一個(gè)可見的邏輯處理器。
10.根據(jù)權(quán)利要求9所述的計(jì)算機(jī),其中所述預(yù)啟動(dòng)例程包括通電自檢(POST)例程。
11.根據(jù)權(quán)利要求9所述的計(jì)算機(jī),其中所述系統(tǒng)固件包括硬件配置屬性,所述硬件配置屬性限定所述計(jì)算機(jī)的硬件配置,并且其中所述暫停例程通過分析硬件配置屬性來標(biāo)識所述至少一個(gè)隱藏的邏輯處理器。
12.根據(jù)權(quán)利要求9所述的計(jì)算機(jī),其中系統(tǒng)固件包括通過用戶界面選擇的可選擇屬性,并且其中所述暫停例程通過分析所述可選擇屬性來標(biāo)識所述至少一個(gè)隱藏的邏輯處理器。
13.根據(jù)權(quán)利要求9所述的計(jì)算機(jī),其中所述系統(tǒng)固件包括系統(tǒng)管理中斷(SMI)例程,以處理機(jī)器檢查異常(MCE)或SMI中至少之一。
14.根據(jù)權(quán)利要求13所述的計(jì)算機(jī),其中所述SMI例程基于來自所述OS的請求,將所述至少一個(gè)隱藏的邏輯處理器中要可見的邏輯處理器重歸類為所述至少一個(gè)可見的邏輯處理器的一部分,或者將所述至少一個(gè)可見的邏輯處理器中要隱藏的邏輯處理器重歸類為所述至少一個(gè)隱藏的邏輯處理器的一部分。
15.一種計(jì)算機(jī)可讀介質(zhì),具有在所述計(jì)算機(jī)可讀介質(zhì)上存儲的指令,所述指令在由至少一個(gè)中央處理單元(CPU)執(zhí)行時(shí)促使至少一個(gè)CPU執(zhí)行隱藏多個(gè)邏輯處理器中至少一個(gè)邏輯處理器的方法,所述方法包括: 執(zhí)行預(yù)啟動(dòng)例程,以初始化所述多個(gè)邏輯處理器; 執(zhí)行暫停例程,以將所述多個(gè)邏輯處理器中至少一個(gè)邏輯處理器置于系統(tǒng)管理模式(SMM)中,來限定至少一個(gè)隱藏的邏輯處理器和至少一個(gè)可見的邏輯處理器;以及 執(zhí)行引導(dǎo)例程,以啟動(dòng)操作系統(tǒng)(OS)來使用所述至少一個(gè)可見的邏輯處理器。
16.根據(jù)權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),進(jìn)一步包括: 基于來自所述OS的請求,執(zhí)行系統(tǒng)管理中斷(SMI)例程,以將所述至少一個(gè)隱藏的邏輯處理器中要可見的邏輯處理器重歸類為所述至少一個(gè)可見的邏輯處理器的一部分,或者將所述至少一個(gè)可見的邏輯處理器中要隱藏的邏輯處理器重歸類為所述至少一個(gè)隱藏的邏輯處理器的一部分。
【文檔編號】G06F9/44GK104205043SQ201280071766
【公開日】2014年12月10日 申請日期:2012年2月22日 優(yōu)先權(quán)日:2012年2月22日
【發(fā)明者】德雷克·舒馬赫 申請人:惠普發(fā)展公司,有限責(zé)任合伙企業(yè)