• 沒有找到結果。

多處理器執行環境

在文檔中 多執行緒Java處理器設計 (頁 49-53)

第四章 多處理核心系統架構

4.1. 多處理器執行環境

JAIP 0

Java Stack Method Cache

Heap Cache

System Bus JAIP 1

Java Stack Method Cache

Heap Cache

JAIP N

Java Stack Method Cache

Heap Cache

RISC-core

Multi-core

Coordinator MPMC

JAIP 2

Java Stack Method Cache

Heap Cache

DDR-SDRAM

(Class images pool, Object Heap space)

JAIP Manager Data Coherence

Controller

圖 30. 多處理核心系統架構

為了讓執行緒能夠真正達到並行,因此我們提出了多處理核心的執行環境架構(如 圖 30 所示)。在系統加入多個 JAIP,而每個 JAIP 處理核心上分別有自己獨立的執行堆 疊、Method Cache 與 Heap Cache。這些記憶體元件將只屬於在處理核心上所執行的執行

41

緒來運作。並同原先 Java 處理器的設計,在系統中會存在一個 RISC 處理核心,主要負 責於執行系統軟體來協助執行,包含類別解析器、原生方法等。由於 Object Heap 上的 資料在運作時是共同使用的,因此我們將完整的 Object Heap Space 改移到

DDR-SDRAM,使得每個處理核心上不需要有完整的 Object Heap Space,而只需要藉由 Heap Cache 的機制來在處理核心上自己所使用到的資料即可。因此對於 JAIP 處理核心 而言,DDR-SDRAM 上不再只有由系統軟體的類別解析器所產生每個類別的執行映像 檔,而還包含存放了 Java 程式執行時完整的 Object Heap Space。而 Multi-core Coordinator 中的 Data Coherence Controller 此元件負責協助處理核心間的 Heap Cache 上的資料一 致,並管理程式執行的同步機制。且在多處理核心環境中,Multi-core Coordinator 還須 負責執行緒的管理,包含新增執行緒、指派處理核心執行等。

對於執行緒的管理,在此系統架構上是由 Multi-core Coordinator 中的 JAIP Manager 來支援。因此在此元件上會記錄各處理核心目前的狀態,以及目前系統中所存在的執行 緒狀態。由於我們目前的設計架構是在單一處理核心上只能執行一條執行緒,且並無執 行緒切換之機制。因此在 JAIP Manager 上,並不需要紀錄每個執行緒在執行過程中的資 訊。所以目前管理執行緒的作法較為單純,負責管理紀錄每個在系統中的 JAIP 處理核 心當下是否已經有執行緒在執行中。若是當有一個新增執行緒的事件發生,會去選出目 前還在閒置的 JAIP 處理核心,並將執行緒的資訊傳到該處理核心中並驅動此核心使其 能開始進行執行動作。而且 JAIP Manager 會將各處理核心狀態記錄下來,形成 JAIP Information Table(圖 31 所示),此表是利用 JAIP 處理核心的編號做索引,分別記錄該處 理核心目前的運作狀態(0 表示 JAIP 正在閒置,1 表示 JAIP 目前有執行緒在運作中),

以及所執行的執行緒編號。

JAIP ID Active(0 or 1) Thread ID 0

1 2

圖 31. JAIP Information Table

42 JAIP 0

Java Stack Method Cache

Heap Cache

System Bus JAIP 1

Java Stack Method Cache

Heap Cache

JAIP 3

Java Stack Method Cache

Heap Cache

MPMC JAIP 2

Java Stack Method Cache

Heap Cache

DDR-SDRAM

(2) triggers JAIP 0

(a)

Idle

(1) send main method info.

RISC-core Multi-core

Coordinator

JAIP Manager Data Coherence

Controller

JAIP 0

Java Stack Method Cache

Heap Cache

System Bus JAIP 1

Java Stack Method Cache

Heap Cache

JAIP 3

Java Stack Method Cache

Heap Cache

RISC-core MPMC

JAIP 2

Java Stack Method Cache

Heap Cache

DDR-SDRAM

(1) notify DCC and send thread info.

(b)

(2) select a JAIP to execute the thread.

(3) triggered JAIP with the thread information.

Idle

Multi-core Coordinator

JAIP Manager Data Coherence

Controller

圖 32. 多處理核心系統運作;(a) 系統啟動;(b) 新增執行緒

以圖 32 為例,在這個例子中我們在系統裡面放入 4 個 JAIP 處理核心。當系統一開 始啟動時,系統軟體給定每個處理核心一個獨立的編號,且把所有在系統中的 JAIP 處 理核心判斷是否開始運作的暫存器設為閒置狀態。並使得 JAIP Manager 中的 JAIP

43

Information Table 中所有欄位初始化(如圖 33.a 所示),且由系統軟體會先將一開始所要 執行的類別作解析。而當系統軟體已完成解析後,會將解析的資訊與系統開始執行的訊 號傳到 Multi-core Coordinator。而 JAIP Manager 當收到系統開始執行訊號時,會先選定 其一在閒置中的 JAIP 處理核心,在此例中首先指定 JAIP 0 作為第一個所運作的處理核 心,而將之前由 RISC 處理核心所送來的 Java 程式一開始所執行 main()方法的類別編號 與方法編號送到 JAIP 0,並改變 JAIP 0 判斷運作的暫存器(如圖 32.a 所示),使得 JAIP 0 更改為運作狀態並開始執行程式。而且此時會在 JAIP Information Table 記錄編號為 0 的 JAIP 處理核心已在運作,以及填入主執行緒的編號(系統啟動後首先執行的主執行緒編 號固定為 0)。而其他三個處理核心尚未開始執行依然是閒置狀態(如圖 33.b 所示)。

JAIP ID Active Thread ID

0 0 X

1 0 X

2 0 X

3 0 X

JAIP ID Active Thread ID

0 1 0

1 0 X

2 0 X

3 0 X

JAIP ID Active Thread ID

0 1 0 叫到 java.lang.Thread 類別的 start()方法時,所以在 dynamic resolution 機制查照過程中,

會得知此次的呼叫是為了新增一組執行緒。所以在查找的過程會找出此執行緒所要執行 的方法,並將其記錄於暫存器中。而在多處理器的系統架構下將修改 dynamic resolution 機制如圖 14 一般,新增一狀態為 NewThread。但功能卻不同於 3.1.1.節所敘述。而是由 JAIP 0 直接來通知 Multi-core Coordinator 要執行新增執行緒的動作並傳送此執行緒的相 關資訊。因此當 JAIP Manager 收到新增執行緒要求後,會先給予新執行緒一個獨立的編 號(此例中編號為 1),並記錄由 JAIP 0 所傳送過來此新增執行緒所要執行的方法編號與 類別編號,且檢視系統中是否有尚未運作而閒置的處理核心。在此例中 JAIP 處理核心 編號 1、2、3 皆處於閒置狀態(如圖 33.b 所示),因此選定處理核心 JAIP 1 來運作此執行

44

緒。而將新執行緒所執行類別編號與方法編號送入 JAIP 1 的中記錄,並改變 JAIP 1 判 斷運作的暫存核心,使得 JAIP 1 更改為運作狀態並開始執行程式。而且此時會在 JAIP Information Table 記錄編號為 1 的 JAIP 處理核心已在運作狀態,以及填入此次所新增執 行緒的編號(如圖 33.c 所示)。

然而在之前的設計中 JAIP 處理核心終止執行時,JAIP 處理核心並不會主動去通知 RISC 處理核心已經執行終止。而是會直接將處理核心上判斷執行的暫存器設為閒置狀 態,由 RISC 處理核心上的系統軟體會一直監看著處理核心的執行狀態,若有發現處理 核心已經將自己設為閒置狀態,此狀況就是已經執行完畢而終止。然而在多核心的執行 環境之中,我們包含了多個 JAIP 處理核心,且各核心的狀態是由 JAIP Manager 來負責 管理。因此當 JAIP 處理核心內執行完畢之後,除了將自己設為閒置狀態以外,還需通 知 Multi-core Coordinator 此處理核心已經執行終止。當收到終止執行的訊號後,會將此 處理核心在 JAIP Information Table 中的資訊清除,並改為閒置狀態,藉以等待下一次被 分配執行緒執行。此外在 JAIP Manager 也維護一個暫存器來記錄是否所有 JAIP 處理核 心都已是閒置狀態,代表系統所要執行的程式已執行完畢。而 RISC 處理核心只要檢查 此暫存器即可,若發現暫存器已被設為執行完畢,則結束整個系統的運作。

在文檔中 多執行緒Java處理器設計 (頁 49-53)