麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種線程調度方法、線程調度裝置及多核處理器系統的制作方法

文檔序號:6438518閱讀:274來源:國知局

專利名稱::一種線程調度方法、線程調度裝置及多核處理器系統的制作方法
技術領域
:本發明涉及計算機領域,尤其涉及一種線程調度方法、線程調度裝置及多核處理器系統。
背景技術
:線程是進程中的一個實體,不擁有系統資源,只有執行必須的一些數據結構,線程可以創建和撤銷,從而實現程序的并發執行。線程一般據具有就緒、堵塞和執行三種基本狀態。目前在多核處理器系統中,所有的處理器核都可以共享地訪問內存、I/O和外部中斷。系統中的硬件資源可以被多個處理器核共享,例如內存控制器、最后一級高速緩存存儲(LLC,LastLevelcache)等0現有技術中的多核處理器系統運行應用程序時,大多以線程為調度單位運行,然而,發明人在研究中發現,目前的線程調度過程中,是按照線程的優先級確定將要切換的線程,而忽略了多核處理器系統共享資源產生的資源競爭或浪費而導致多核處理器系統性能下降的問題。
發明內容本發明實施例提供了一種線程調度方法、線程調度裝置及多核處理器系統,用于對多核處理器系統中的線程進行調度,能夠有效的提高共享資源的利用率,緩和處理器核對共享資源的競爭,從而提高多核處理器系統的性能。本發明實施例中的線程調度方法包括當第一處理器核發生線程上下文切換時,確定與第一處理器核具有對應關系的第二處理器核當前運行的線程的類型;若第二處理器核當前運行的是緩存敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存非敏感型線程,或者,若第二處理器核當前運行的是緩存非敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存敏感型線程;當在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找到所需類型的線程時,將當前運行的線程切換成查找到的線程。本發明實施例中的線程調度方法包括當第一處理器核發生線程上下文切換時,將第一處理器核當前運行的線程在當前時間片的高速緩沖存儲器cache訪問率累加到第一處理器核總的cache訪問率中,將累加次數計數值加一;獲取與第一處理器核具有對應關系的第二處理器核總的cache訪問率及累加次數計數值;根據第一處理器核總的cache訪問率及累加次數計數值,計算第一處理器核的平均cache訪問率,根據第二處理器核總的cache訪問率及累加次數計數值,計算第二處理器核的平均cache訪問率,并將第一處理器核的平均cache訪問率和第二處理器核的平均cache訪問率求和作為第一參數值;掃描第一處理器核對應的處于就緒狀態的待運行線程的集合,計算當前掃描的線程在上個時間片的cache訪問率與第二處理器核當前運行的線程在上個時間片的cache訪問率的和,作為第二參數值;當第一參數值與第二參數值之間的差值大于或等于預置的數值,則將當前運行的線程切換成當前掃描的線程。本發明實施例中的線程調度裝置包括確定單元,用于當第一處理器核發生線程上下文切換時,確定與第一處理器核具有對應關系的第二處理器核當前運行的線程的類型;查找單元,用于若第二處理器核當前運行的是緩存敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存非敏感型線程,或者,若第二處理器核當前運行的是緩存非敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存敏感型線程;切換單元,用于當在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找到所需類型的線程時,則將當前運行的線程切換成查找到的線程。本發明實施例中的線程調度裝置包括第一累加單元,用于當第一處理器核發生線程上下文切換時,將第一處理器核當前運行的線程的高速緩沖存儲器cache訪問率累加到第一處理器核總的cache訪問率中,將累加次數計數值加一;第一獲取單元,用于獲取與第一處理器核具有對應關系的第二處理器核總的cache訪問率及累加次數計數值;第一計算單元,用于根據第一處理器核總的cache訪問率及累加次數計數值,計算第一處理器核的平均cache訪問率,根據第二處理器核總的cache訪問率及累加次數計數值,計算第二處理器核的平均cache訪問率,并將第一處理器核的平均cache訪問率和第二處理器核的平均cache訪問率求和作為第一參數值;第一掃描計算單元,用于掃描第一處理器核對應的處于就緒狀態的待運行線程的集合,計算當前掃描的線程在上個時間片的cache訪問率與第二處理器核當前運行的線程在上個時間片的cache訪問率的和,作為第二參數值;第一處理單元,用于當第一參數值與第二參數值之間的差值大于或等于預置的數值,則將當前運行的線程切換成當前掃描的線程。本發明實施例中的多核處理器系統包括第一處理器核和第二處理器核,以及共享的硬件資源;第一處理器核和第二處理器核訪問共享的硬件資源;第一處理器核用于當第一處理器核發生線程上下文切換時,確定與第一處理器核具有對應關系的第二處理器核當前運行的線程的類型;若第二處理器核當前運行的是緩存敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存非敏感型線程,或者若第二處理器核當前運行的是緩存非敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存敏感型線程;當在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找到所需類型的線程,將當前運行的線程切換成查找到的的線程;或者,第一處理器核用于當第一處理器核發生線程上下文切換時,將第一處理器核當前運行的線程在當前時間片的高速緩沖存儲器cache訪問率累加到總的cache訪問率中,將累加次數計數值加一;獲取與第一處理器核具有對應關系的第二處理器核總的cache訪問率及累加次數計數值;根據第一處理器核總的cache訪問率及累加次數計數值,計算第一處理器核的平均cache訪問率,根據第二處理器核總的cache訪問率及累加次數計數值,計算第二處理器核的平均cache訪問率,并將第一處理器核的平均cache訪問率和第二處理器核的平均cache訪問率求和作為第一參數值;掃描第一處理器核對應的處于就緒狀態的待運行線程的集合,計算當前掃描的線程在上個時間片的cache訪問率與第二處理器核當前運行的線程在上個時間片的cache訪問率的和,作為第二參數值;當第一參數值與第二參數值之間的差值大于或等于預置的數值,則將當前運行的線程切換成當前掃描的線程。從以上技術方案可以看出,本發明實施例具有以下優點當第一處理器核發生線程上下文切換時,確定與該第一處理器核具有對應關系的第二處理器核,若該第二處理器核當前運行的是緩存敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存非敏感型線程,或者若第二處理器核當前運行的是緩存非敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存敏感型線程,并將查找到的所需類型的線程切換成由該第一處理器核運行,從而本發明實施例中的線程調度裝置可使得不同緩存特征類型的線程能夠協調運行,進而避免第一處理器核及第二處理器核運行相同類型的線程而產生的資源競爭或者資源浪費,有效的緩和了處理器核對共享資源的競爭,且可提高共享資源的利用率,改善了多核處理器系統的性能。圖1為本發明實施例中一種線程調度方法的一個示意圖;圖2為本發明實施例中一種線程調度方法的另一示意圖;圖3為本發明實施例中一種線程調度方法的另一示意圖;圖4為本發明實施例中一種線程調度裝置的一個示意圖;圖5為本發明實施例中一種線程調度裝置的另一示意圖;圖6為本發明實施例中一種線程調度裝置的另一示意圖;圖7為本發明實施例中多核處理器系統的一個示意圖;圖8_a為本發明實施例中多核處理器系統的一個物理架構示意圖;圖8_b為本發明實施例中多核處理器系統的一個物理架構示意圖;圖8-c為本發明實施例中多核處理器系統的一個物理架構示意圖。具體實施方式本發明實施例提供了一種線程調度方法、線程調度裝置及多核處理器系統,用于對多核處理器系統中的共享硬件資源的處理器核上運行的線程進行調度,能夠有效的緩和共享硬件資源的多個處理器核對共享硬件資源的競爭,從而提高共享資源的利用率,改善了多核處理器系統的性能。在本發明實施例中,在處理器核對應的可執行連接格式(ELF,ExecutableandLinkableFormat)文件中創建線程之后,需要通過仿真實驗確定該ELF文件中的線程的類型,具體為1)若有η個線程,則將該η個線程依次編號為1n,選擇任意兩個線程同時運行,若線程i與線程j同時運行,那么將線程j在與線程i同時運行的性能損耗,記為du,在每一個線程均與其他的線程同時運行之后,可得到如下的矩陣D權利要求1.一種線程調度方法,其特征在于,包括當第一處理器核發生線程上下文切換時,確定與所述第一處理器核具有對應關系的第二處理器核當前運行的線程的類型;若所述第二處理器核當前運行的是緩存敏感型線程,則在所述第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存非敏感型線程,或者,若所述第二處理器核當前運行的是緩存非敏感型線程,則在所述第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存敏感型線程;當在所述第一處理器核對應的處于就緒狀態的待運行線程的集合中查找到所需類型的線程時,將當前運行的線程切換成查找到的線程。2.根據權利要求1中所述的方法,其特征在于,所述確定與所述第一處理器核具有對應關系的第二處理器核當前運行的線程的類型,包括根據所述第一處理器核的身份標識碼ID及預置的計算方法確定與所述第一處理器核具有對應關系的第二處理器核;從所述第二處理器核的當前運行線程描述符中獲取所述第二處理器核當前運行的線程的類型,所述線程的類型包括緩存敏感型、緩存較敏感型、緩存非敏感型。3.根據權利要求1中所述的方法,其特征在于,所述確定與所述第一處理器核具有對應關系的第二處理器核當前運行的線程的類型,包括根據所述第一處理器核的ID查找處理器核分組表,確定與所述第一處理器核具有對應關系的第二處理器核;從所述第二處理器核的當前運行線程描述符中獲取所述第二處理器核當前運行的線程的類型,所述線程的類型包括緩存敏感型、緩存較敏感型、緩存非敏感型。4.根據權利要求1至3任一項所述的方法,其特征在于,所述方法還包括將所述第一處理器核當前運行的線程在當前時間片的高速緩沖存儲器cache訪問率累加到所述第一處理器核總的cache訪問率中,并將累加次數計數值加一。5.根據權利要求4所述的方法,其特征在于,所述方法還包括當在所述第一處理器核對應的處于就緒狀態的待運行線程的集合中未查找到所需類型的線程時,根據所述第一處理器核總的cache訪問率及累加次數計數值,計算所述第一處理器核的平均cache訪問率,根據所述第二處理器核總的cache訪問率及累加次數計數值,計算所述第二處理器核的平均cache訪問率,并將所述第一處理器核的平均cache訪問率和所述第二處理器核的平均cache訪問率求和作為第一參數值;掃描所述第一處理器核對應的處于就緒狀態的待運行線程的集合,計算當前掃描的線程在上個時間片的的cache訪問率與所述第二處理器核當前運行的線程在上個時間片的的cache訪問率的和,作為第二參數值;當所述第一參數值與第二參數值之間的差值大于或等于預置的數值時,則將當前運行的線程切換成當前掃描的線程。6.根據權利要求5所述的方法,其特征在于,根據所述第一處理器核總的cache訪問率及累加次數計數值,計算所述第一處理器核的平均cache訪問率,根據所述第二處理器核總的cache訪問率及累加次數計數值,計算所述第二處理器核的平均cache訪問率,并將所述第一處理器核的平均cache訪問率和所述第二處理器核的平均cache訪問率求和作為第一參數值包括將所述第一處理器核總的cache訪問率除以所述第一處理器核的所述累加次數計數值,得到所述第一處理器核的平均cache訪問率;將所述第二處理器核總的cache訪問率除以所述第二處理器核的累加次數計數值,得到所述第二處理器核的平均cache訪問率;將所述第一的處理器核平均cache訪問率與所述第二處理器核的平均cache訪問率相加,得到所述第一參數值。7.根據權利要求5所述的方法,其特征在于,所述方法還包括當所述第一參數值與第二參數值之間的差值小于預置的數值,則掃描下一條線程,并返回執行所述計算當前掃描的線程在上個時間片的cache訪問率與所述第二處理器核當前運行的線程在上個時間片的的cache訪問率的和,作為第二參數值的步驟。8.根據權利要求1至7任一項所述的方法,其特征在于,所述第一處理器核完成線程切換后,將當前運行的線程的類型標識保存到所述第一處理器核的當前運行線程描述符中。9.一種線程調度方法,其特征在于,包括當第一處理器核發生線程上下文切換時,將所述第一處理器核當前運行的線程在當前時間片的高速緩沖存儲器cache訪問率累加到所述第一處理器核總的cache訪問率中,將累加次數計數值加一;獲取與所述第一處理器核具有對應關系的第二處理器核總的cache訪問率及累加次數計數值;根據所述第一處理器核總的cache訪問率及累加次數計數值,計算所述第一處理器核的平均cache訪問率,根據所述第二處理器核總的cache訪問率及累加次數計數值,計算所述第二處理器核的平均cache訪問率,并將所述第一處理器核的平均cache訪問率和所述第二處理器核的平均cache訪問率求和作為第一參數值;掃描所述第一處理器核對應的處于就緒狀態的待運行線程的集合,計算當前掃描的線程在上個時間片的cache訪問率與所述第二處理器核當前運行的線程在上個時間片的cache訪問率的和,作為第二參數值;當所述第一參數值與第二參數值之間的差值大于或等于預置的數值,則將當前運行的線程切換成當前掃描的線程。10.根據權利要求9所述的方法,其特征在于,所述獲取與所述第一處理器核具有對應關系的第二處理器核總的cache訪問率及累加次數計數值包括根據所述第一處理器核的身份標識碼ID及預置的計算方法確定與所述第一處理器核具有對應關系的第二處理器核,或者,根據所述第一處理器核的ID查找處理器核分組表確定與所述第一處理器核具有對應關系的第二處理器核;從所述第二處理器核中獲得所述第二處理器核總的cache訪問率及累加次數計數值。11.根據權利要求9所述的方法,其特征在于,所述根據所述第一處理器核總的cache訪問率及累加次數計數值,計算所述第一處理器核的平均cache訪問率,根據所述第二處理器核總的cache訪問率及累加次數計數值,計算所述第二處理器核的平均cache訪問率,并將所述第一處理器核的平均cache訪問率和所述第二處理器核的平均cache訪問率求和作為第一參數值,包括將所述第一處理器核總的cache訪問率除以所述第一處理器核的所述累加次數計數值,得到所述第一處理器核的平均cache訪問率;將所述第二處理器核總的cache訪問率除以所述第二處理器核的累加次數計數值,得到所述第二處理器核的平均cache訪問率;將所述第一處理器核平均cache訪問率與所述第二處理器核平均cache訪問率相加,得到所述第一參數值。12.根據權利要求9至11任一項所述的方法,其特征在于,所述方法還包括當所述第一參數值與第二參數值之間的差值小于預置的數值,則掃描下一條線程,并返回執行所述計算當前掃描的線程的在上個時間片的cache訪問率與所述第二處理器核當前運行的線程在上個時間片的的cache訪問率的和,作為第二參數值的步驟。13.根據權利要求12所述的方法,其特征在于,所述第一處理器核完成線程切換后,將當前運行的線程的類型標識保存到所述第一處理器核的當前運行線程描述符中。14.一種線程調度裝置,其特征在于,包括確定單元,用于當第一處理器核發生線程上下文切換時,確定與所述第一處理器核具有對應關系的第二處理器核當前運行的線程的類型;查找單元,用于若所述第二處理器核當前運行的是緩存敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存非敏感型線程,或者,若所述第二處理器核當前運行的是緩存非敏感型線程,則在所述第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存敏感型線程;切換單元,用于當在所述第一處理器核對應的處于就緒狀態的待運行線程的集合中查找到所需類型的線程時,將當前運行的線程切換成查找到的線程。15.根據權利要求14所述的裝置,其特征在于,所述確定單元包括處理器核確定單元,用于根據所述第一處理器核的身份標識碼ID及預置的計算方法確定與所述第一處理器核具有對應關系的第二處理器核,或者用于根據所述第一處理器核的ID查找處理器核分組表確定與所述第一處理器核具有對應關系的第二處理器核;線程確定單元,用于從所述第二處理器核的當前運行線程描述符中獲取所述第二處理器核當前運行的線程的類型,所述線程的類型包括緩存敏感型、緩存較敏感型、緩存非敏感型。16.根據權利要求14或15所述的裝置,其特征在于,所述裝置還包括累加單元,將所述第一處理器核當前運行的線程在當前時間片的高速緩沖存儲器cache訪問率累加到所述第一處理器核總的cache訪問率中,并將累加次數計數值加一;更新單元,用于所述第一處理器核完成線程切換后,將當前運行的線程的類型標識保存到所述第一處理器核的當前運行線程描述符中。17.根據權利要求16所述的裝置,其特征在于,所述裝置還包括計算單元,用于當在所述第一處理器核對應的處于就緒狀態的待運行線程的集合中未查找到所需類型的線程時,根據所述第一處理器核總的cache訪問率及累加次數計數值,計算所述第一處理器核的平均cache訪問率,根據所述第二處理器核總的cache訪問率及累加次數計數值,計算所述第二處理器核的平均cache訪問率,并將所述第一處理器核的平均cache訪問率和所述第二處理器核的平均cache訪問率求和作為第一參數值;掃描計算單元,用于掃描所述第一處理器核對應的處于就緒狀態的待運行線程的集合,計算當前掃描的線程在上個時間片中的cache訪問率與所述第二處理器核當前運行的線程在上個時間片中的cache訪問率的和,作為第二參數值;處理單元,用于當所述第一參數值與第二參數值之間的差值大于或等于預置的數值時,則將所述當前運行的線程切換成當前掃描的線程,及用于當所述第一參數值與第二參數值之間的差值小于預置的數值,則掃描下一條線程,返回到所述掃描計算單元。18.—種線程調度裝置,其特征在于,包括第一累加單元,用于當第一處理器核發生線程上下文切換時,將所述第一處理器核當前運行的線程的高速緩沖存儲器cache訪問率累加到所述第一處理器核總的cache訪問率中,將累加次數計數值加一;第一獲取單元,用于獲取與所述第一處理器核具有對應關系的第二處理器核總的cache訪問率及累加次數計數值;第一計算單元,用于根據所述第一處理器核總的cache訪問率及累加次數計數值,計算所述第一處理器核的平均cache訪問率,根據所述第二處理器核總的cache訪問率及累加次數計數值,計算所述第二處理器核的平均cache訪問率,并將所述第一處理器核的平均cache訪問率和所述第二處理器核的平均cache訪問率求和作為第一參數值;第一掃描計算單元,用于掃描所述第一處理器核對應的處于就緒狀態的待運行線程的集合,計算當前掃描的線程在上個時間片的cache訪問率與所述第二處理器核當前運行的線程在上個時間片的cache訪問率的和,作為第二參數值;第一處理單元,用于當所述第一參數值與第二參數值之間的差值大于或等于預置的數值,則將當前運行的線程切換成當前掃描的線程。19.根據權利要求18所述的裝置,其特征在于,所述第一獲取單元包括核確定單元,用于根據所述第一處理器核的身份標識碼ID及預置的計算方法確定與所述第一處理器核具有對應關系的第二處理器核,或者,根據所述第一處理器核的ID查找處理器核分組表確定與所述第一處理器核具有對應關系的第二處理器核;數值獲取單元,用于從所述第二處理器核中獲得所述第二處理器核總的cache訪問率及累加次數計數值。20.根據權利要求18或19所述的裝置,其特征在于,所述裝置還包括第二處理單元,用于當所述第一參數值與第二參數值之間的差值小于預置的數值,則掃描下一條線程,返回到所述第一掃描計算單元;第一更新單元,用于所述第一處理器核完成線程切換后,將當前運行的線程的類型標識保存到所述第一處理器核的當前運行線程描述符中。21.一種多核處理器系統,其特征在于,包括第一處理器核和第二處理器核,以及共享的硬件資源;所述第一處理器核和第二處理器核訪問所述共享的硬件資源;所述第一處理器核用于當所述第一處理器核發生線程上下文切換時,確定與所述第一處理器核具有對應關系的第二處理器核當前運行的線程的類型;若所述第二處理器核當前運行的是緩存敏感型線程,則在所述第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存非敏感型線程,或者若所述第二處理器核當前運行的是緩存非敏感型線程,則在所述第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存敏感型線程;當在所述第一處理器核對應的處于就緒狀態的待運行線程的集合中查找到所需類型的線程,將當前運行的線程切換成查找到的的線程;或者,所述第一處理器核用于當所述第一處理器核發生線程上下文切換時,將所述第一處理器核當前運行的線程在當前時間片的高速緩沖存儲器cache訪問率累加到總的cache訪問率中,將累加次數計數值加一;獲取與所述第一處理器核具有對應關系的第二處理器核總的cache訪問率及累加次數計數值;根據所述第一處理器核總的cache訪問率及累加次數計數值,計算所述第一處理器核的平均cache訪問率,根據所述第二處理器核總的cache訪問率及累加次數計數值,計算所述第二處理器核的平均cache訪問率,并將所述第一處理器核的平均cache訪問率和所述第二處理器核的平均cache訪問率求和作為第一參數值;掃描所述第一處理器核對應的處于就緒狀態的待運行線程的集合,計算當前掃描的線程在上個時間片的cache訪問率與所述第二處理器核當前運行的線程在上個時間片的cache訪問率的和,作為第二參數值;當所述第一參數值與第二參數值之間的差值大于或等于預置的數值,則將當前運行的線程切換成當前掃描的線程。22.根據權利要求21所述的系統,其特征在于,所述共享的硬件資源包括共享的存儲設備和/或共享的硬件高速緩存;當所述第一處理器核和所述第二處理器核分別屬于不同的處理器時,所述第一處理器核和第二處理器核訪問所述共享的硬件高速緩存;或者,當所述第一處理器核和所述第二處理器核屬于同一個處理器時,所述第一處理器核和第二處理器訪問所述共享的存儲設備和/或共享的硬件高速緩存。全文摘要本發明實施例公開了一種線程調度方法、線程調度裝置及多核處理器系統,用于處理器核進行線程調度。本發明實施例方法包括當第一處理器核發生線程上下文切換時,確定與第一處理器核具有對應關系的第二處理器核當前運行的線程的類型;若第二處理器核當前運行的是緩存敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存非敏感型線程,或者,若第二處理器核當前運行的是緩存非敏感型線程,則在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找一個緩存敏感型線程;當在第一處理器核對應的處于就緒狀態的待運行線程的集合中查找到所需類型的線程時,將當前運行的線程切換成查找到的線程。文檔編號G06F15/16GK102495762SQ20111036277公開日2012年6月13日申請日期2011年11月16日優先權日2011年11月16日發明者劉儀陽,崔巖,譚璽,陳渝申請人:華為技術有限公司,清華大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 滨海县| 玉环县| 盐山县| 建昌县| 句容市| 高雄市| 昭通市| 宜兴市| 苍梧县| 综艺| 志丹县| 宜君县| 图木舒克市| 辽源市| 五家渠市| 姜堰市| 嵊泗县| 永定县| 汝城县| 万宁市| 柳河县| 武鸣县| 普宁市| 忻城县| 赤水市| 吉隆县| 柯坪县| 枣庄市| 莆田市| 鹰潭市| 团风县| 遂平县| 蓬莱市| 长宁区| 阿鲁科尔沁旗| 浮山县| 科技| 广西| 乡宁县| 嵊泗县| 鹤壁市|