<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 五、Unix內核概述: Unix內核提供了應用程序可以運行的執行環境。因此,內核必須實現一組服務及相應的接口,應用程序使用這些接口,而且通常不會與硬件資源直接交互。 ### 進程/內核模式: 所有標準的Unix內核都僅僅利用了內核態和用戶態。 一個程序執行時,大部分時間都處在用戶態下,只有需要內核所提供的服務時才切換到內核態。當內核滿足了用戶程序的請求后,便使程序回到用戶態下。 內核本身不是進程,而是進程的管理者。 Unix系統包括幾個稱為內核線程的特權進程,它們通常在系統啟動時創建,并以內核態運行在內核地址空間,一直處于活躍狀態直到系統關閉。 ### 進程實現: 每個進程由一個進程描述符表示。 當內核暫停一個進程的執行時,就把幾個相關處理器寄存器的內容保存在進程描述符中。當內核決定恢復執行一個進程時,它用進程描述符中合適的字段來裝載CPU寄存器,由于程序計數器中所存儲的值指向下一條將要執行的指令,所以進程從它停止的地方恢復執行。 Unix內核可以區分很多等待狀態,這些等待狀態由進程描述符隊列實現。每個隊列對應一組等待特定事件的進程。 ### 可重入內核: 可重入,意味著若干進程可以同時在內核態下執行,但在每個處理器上只有一個進程在真正運行,其它則可能在等待執行或處于阻塞狀態。 如果一個硬件中斷發生,可重入內核能掛起當前正在執行的進程,即使這個進程處于內核態,這樣可以提高發出中斷的設備控制器的吞吐量。 ### ### 進程地址空間: 在用戶態下運行的進程涉及到私有棧、數據區和代碼區。 在內核態下運行的進程,訪問內核的數據區和代碼區,但使用另外和私有棧。 如果一個程序由幾個用戶同時使用,則這個程序只被裝入內存一次,其指令由所需要它的用戶共享,當然,其數據不被共享。 進程間也能共享部分地址空間,以實現一種進程間的通信。 ### ### 同步和臨界區: 實現可重入內核需要利用同步機制,因為如果當內核控制路徑對某個內核數據結構進行操作時被掛機,那么,其它內核控制路徑就不應當再對該數據結構進行操作。 對全局變量的安全訪問通過原子操作來保證。 如果內核支持搶占,如Linux,那么在應用同步機制時,確保進入臨界區前禁止搶占,退出臨界區時啟用搶占。 信號量: 可以把信號量看成一個對象,其組成如下: * 一個整數變量 * 一個等待進程的鏈表 * 兩個原子方法:down()和up() 每個要保護的數據結構都有它自己的信號量,其初始值為1。當內核控制路徑希望訪問這個數據結構時,它在相應的信號量上執行down()方法,若信號量的當前值不是負數,則允許訪問這個數據結構,否則,把執行內核控制路徑的進程加入到這個信號量的鏈表并阻塞該進程。當另一個進程在那個信號量上執行up()方法是,允許信號量鏈表上的一個進程繼續執行。 自旋鎖: 自旋鎖與信號量非常相似,但沒有進程鏈表;當一個進程發現鎖被另一個進程鎖著時,它就不停的“旋轉”,執行一個緊湊的循環指令直到鎖打開。 自旋鎖在單處理器環境下是無效的。因為:當內核控制路徑試圖訪問一個上鎖的數據結構時,它開始無休止循環,則內核控制路徑可能因為正在修改受保護的數據結構而沒有機會繼續執行,也沒有機會釋放這個自旋鎖,最后的結果可能是系統掛起。 Linux使用一個名為init的特殊系統進程,它在系統初始化的時候被創建。當一個進程終止時,內核改變其所有現有子進程的進程描述符指針,使這些子進程成為init的孩子。Init監控所有子進程的執行,并且按常規發布wait4()系統調用,除掉所有僵死的進程。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看