在 UNIX 的開機程序中,會在不同的階段啟用 Solaris Resource Manager 的各種功能。主要步驟如下所示﹕
首次啟始 kernel 時,會由 /etc/system 檔中載入各種參數。其中某些會影響到 Solaris Resource Manager 。下面會就這方面詳加說明。
當 kernel 繼續其啟始程序時,Solaris Resource Manager 會在建立了處理 0 ,但在處理 1 開始之前被啟始。這包括載入 SHR 模組,並且安排由 Solaris Resource Manager 來排程處理 1(init(1M) 處理)。要這麼做,必須開始 SHR 排程類別中的 init(1M),而非內定的排程類別。
最初 init(1M) 處理及其所有子處理都將被附加在代理 root lnode 之上。
當 kernel 完全啟始之後,系統會從單一使用者轉變為某種多重使用者模式之一(通常是執行層級 2 或 3)。程序稍早會執行 /etc/init.d/init.srm 指令集。這個指令集所執行的動作於"開機順序事件"中有說明,並且啟用一般性的 Solaris Resource Manager 操作。
如果必須在不使用 Solaris Resource Manager 的情況下開機,其方法很簡單,就是變更 /etc/system 檔案中的 initclass 變數以參考分時 (TS) 而非 SHR。最簡單的方法就是使用-一個 boot(1M) 指令的 (ask) 選項,提示您輸入一個系統檔案。然後再按下 RETURN 鍵以接受其他提示的內定值,直到您被提示要輸入系統檔的名稱。這時請輸入 etc/system.noshrload(沒有前導斜線)來做回應。以下是程序範例﹕
請注意 /etc/system.noshrload 只是安裝 Solaris Resource Manager 時所製作的 /etc/system 的備份。如果後來對 /etc/system 進行其他編輯,那麼應該同時維護 /etc/system.noshrload,因此其差別僅限於 Solaris Resource Manager 進行某些修正時﹕
# diff /etc/system /etc/system.noshrload < # enable srm < set initclass="SHR" |
系統開機之後切換為多重使用者模式時事件發生的順序,在 Solaris Resource Manager 中特別重要。下列步驟說明正確建立 Solaris Resource Manager 系統的順序﹕
使用 srmadm(1MSRM) 指令來設置與啟動 Solaris Resource Manager。這時限制資料庫會開啟並且啟動 Solaris Resource Manager 排程器。請參閱 "使用 srmadm 來啟用 Solaris Resource Manager " 以取得更多有關使用 srmadm(1MSRM) 來啟動 Solaris Resource Manager 方面的資訊。
指派 'lost' 及 'idle' lnode。
啟始 Solaris Resource Manager 精靈。請參閱 "啟始 Solaris Resource Manager 精靈" 以取得更多有關此程序的資訊。
在一個適當的 lnode 上啟始其他系統精靈。
附錄中有說明上述處理中的步驟 1 到 3 所使用的內定指令集。
特別重要的是一個 lnode 的精靈(會永久執行的系統維護處理)附件而非 root lnode。附加至 root lnode 的處理會特別加以排程,而且會取得它們所需的所有 CPU 資源;因此不建議您將任何處理附加至可能會佔用太多 CPU 的 root lnode 之上。附加精靈至其自身的 lnode 可讓中央管理員為它們配置一個適當的 CPU 配分。
在開機程序當中,每個新的處理都會從其雙親處理承繼其 lnode 附件。因為 init(1M) 處理被附加至 root lnode,所以全都屬於後續處理。直到執行 Solaris Resource Manager 初始指令集並且開啟 lnode 資料庫之後,處理才能附加至其他的 lnode 之上,而且到時也只有在一個處理進行一個明確的 setuid(2) 系統呼叫(如 login(1)),或是特別要求 Solaris Resource Manager 附加至一個如 srmuser(1SRM) 指令命名的 lnode 時才會發生。以 setuid 檔模式位元集來執行一個程式並無法改變 lnode 附件。
其後果是,所有在系統啟始時自動啟動的系統程式會被附加到 root lnode。我們不希望看到這種情形,因為附加至 root lnode 上的處理會佔用太多 CPU 資源,因而嚴重地干擾其他處理的執行。因此我們建議您,任何作為開機程序的精靈處理都必須明確地附加至其本身的 lnode,方法是以 srmuser(1SRM) 指令來調用它們。這樣將不會影響其真正或有效的 UID。
這__以一個範例來加以說明﹕
# /usr/srm/bin/srmuser Start in.named attached to the my_daemons lnode. |
以上數行可以用來取代 named(1M) 精靈在其啟動指令集中現有的調用。因為要事先建立 "網路",所以需要一位使用者的帳號及 lnode。
srmadm(1MSRM) 指令可以讓管理員控制作業狀態以及 Solaris Resource Manager 整個系統的設置。此指令通常是在從 Solaris Resource Manager init.d(4) 指令集 /etc/init.d/init.srm 內轉換為執行層級 2 或 3時採用, 以確保系統每次開機時能為所有參數設定適當的值,並且確定在使用者取得系統的存取權之前先啟用 Solaris Resource Manager 系統。srmadm(1MSRM) 指令也可以用來管理全域的 Solaris Resource Manager 參數。請參閱 srmadm(1MSRM) 線上援助頁中可以利用 srmadm 來設定的參數表。Solaris Resource Manager init.d(4) 指令集中核發的 srmadm(1MSRM) 指令功能如下﹕
開啟限制資料庫。直到這點,任何被啟始的處理會自動附加至一個代理 root lnode 之上。代理 root lnode 可用來確保無論 Solaris Resource Manager 的作業狀態為何,處理總是有一個可用的 lnode 可以連結。因此在啟始任何非-root 的處理之前,必須先開啟限制資料庫。當限制資料庫開啟之後,代理 root lnode 中的使用量屬性數值會被增入其在真正的 root lnode 中的對應。此種技術的缺點是無法計算使用量的淨減少額,才能確保開啟限制資料庫之前的使用量變化不被丟棄。
啟用限制的強制實施。
設定可以控制 Solaris Resource Manager SHR 排程器行為的參數,例如使用量消減率。
啟用 Solaris Resource Manager 排程器。在此之前,SHR 排程類別中的處理是依照一個簡單的輪流法來排程的,而且 Solaris Resource Manager 系統中的 CPU 權利設定沒有任何效果。
請參閱"透過 srmadm 的全域 Solaris Resource Manager 參數"以取得某些常見的 srmadm(1MSRM) 指令調用方面的資訊。
limdaemon(1MSRM) 程式是一種 Solaris Resource Manager 使用者模式精靈。它通常會在轉換為執行層級 2 或 3 時被調用,作為 Solaris Resource Manager init.d(4) 指令集的最後一步。請勿將它與由 kernel 所初始的 srmgr 系統處理(SYS 類別中)混淆。下列 ps(1) 列表中顯示了這兩種處理﹕
# ps -efc | egrep 'limdaemon|srmgr' root 4 0 SYS 60 18:42:14 ? 0:05 srmgr root 92 1 SHR 19 18:42:32 ? 0:41 limdaemon |
接收通知訊息並且將它們傳遞至目的使用者的終端機
接收登入或登出通知訊息,保持一份所有目前進行中 Solaris Resource Manager 登入階段作業的實際記錄
定期更新目前進行中 Solaris Resource Manager 登入階段作業的所有使用者的連結時間使用量(選擇性的)
偵測是否有到達其連結時間限制的使用者,並且在寬限期之後取消處理而登出(選擇性的)
使用 syslog(3) 來將所有動作登入 syslogd(1M) 中
limdaemon 在接到 Solaris Resource Manager 登入階段作業的通知後,會監控所有使用者的終端機連結時間,並且檢查其連結時間的限制。快要到達連結時間限制時,使用者會收到一份通知訊息。一旦超過限制時間,使用者會有一段寬限時間以終止所有處理並且登出。
limdaemon 程式會消減連結時間的使用量。如果使用連結時間限制的話,就必須執行終端機裝置類目的使用量消減。請參閱"使用 limdaemon 選項"中更多有關可用來控制 limdaemon 行為的指令行選項詳細資訊。