<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 簡介 如果每個程序員都不得不掌握系統的所有細節,那就不可能再編寫代碼了.而且管理這些部件并加以優化使用,是一個挑戰性極強的工作.所以計算機安裝了一個操作系統 # 運行模式 **多數計算機有2種運行模式:內核態和用戶態.** 軟件最基礎是操作系統,他運行在內核態(也稱為管態,核心態),在這個模式中,操作系統對所有硬件有完全訪問權,可以執行機器能夠運行的任何指令. 軟件其他部分運行在用戶態,在用戶態下,只使用了機器指令中的一個子集.特別的,哪些會影響機器的控制或可進行I/O操作的指令,在用戶態是完全禁止的 ![](https://box.kancloud.cn/6d4d4bd7a064f0241f225d0e511b04e7_920x518.png) # 作為一個可擴展的操作系統 **抽象是管理所有復雜性的一個關鍵.好的抽象可以把一個幾乎不可能管理的任務劃分成2個可管理的部分. 其第一部分是有關抽象的定義和實現. 第二部分是隨時用這些抽象解決問題** 操作系統的任務是創建好抽象,并實現和管理它所創建的抽象 # 作為資源管理者的操作系統 **把操作系統看作應用程序提供的基本抽象概念,是一種自頂向下的觀點. 按照另一種自底向上的觀點,操作系統則用來管理一個復雜系統的各個部分** **資源管理者包括用以下2種不同方式實現多路復用(共享)資源,在時間和空間上復用** 當一種資源在時間上復用時,不同的程序或用戶輪流使用它 空間復用,每個客戶都得到資源的一部分,從而取代客戶排隊,通常在運行程序之間分割內存,這樣每一個運行程序都可以同時入駐內存,假設有足夠多的內存可以放多個程序,那么在內存中同時存放若干個程序的效率,比把所有內存給一個程序效率要高的多,特別是程序只需要內存中的一部分,更是這樣 # 簡單的個人計算機中部件 ![](https://box.kancloud.cn/632caf5a70ef4640fb45860ec8cb10dd_1427x636.png) # 處理器 每個cpu都有一套可執行的專門指令集,所以x86的處理器不能執行ARM程序,而ARM處理器不能處理X86程序 **寄存器** 除了用來保存變量和臨時結果的通用寄存器之外,多數計算機還有一些對程序員可見的專用寄存器.其中之一是**程序計數器**,它保存了將要取出的下一條指令的內存地址,在指令取出之后,程序計數器就被更新以便指向后繼的指令 另一個寄存器是**堆棧指針**,它指向內存中當前棧的頂端,該棧包含了每個執行過程的棧幀.一個過程的棧幀中保存了有關的輸入參數,局部變量以及那些沒有保存在寄存器中的臨時變量 當前還有**程序狀態字**寄存器,這個寄存器包含了條件碼位(由比較指令設置),cpu優先級,模式(用戶態和內核態),以及各種其他控制位,用戶程序通常讀入整個psw,但是只對其中少量的字段寫入.在系統調用和I/O中,psw很重要 無論32位的寄存器,還是64位的寄存器,他們存儲容量都小于1kb 為了改善性能,cpu設計師早就放棄了同時讀取,解碼和執行一條指令的簡單模型.許多現代cpu具有同時取出多條指令的機制 比流水線更先進的設計是超標量的cpu ![](https://box.kancloud.cn/32c336e1f12cc1399c3783074587b4d8_927x357.png) 除了在嵌入式系統中非常簡單的cpu之外,多數cpu有2種模式,前面提到的內核態和用戶態 psw有一個二進制位控制這2個模式,當在內核態運行時,cpu可以執行指定集中的每一條指令,并且使用硬件的每種功能 用戶程序在用戶態下運行,僅允許執行整個指令集的一個子集和訪問所有功能的一個子集,當然將psw模式位設置為內核態也是禁止的 從操作系統中獲得服務,用戶程序必須使用系統調用(system call)以陷入內核態并調用操作系統,TRAP指令把用戶態切換成內核態,并啟用操作系統,操作完成切換為用戶態 # 超線程 ![](https://box.kancloud.cn/a82f7ea8b361e7cec970a498c7faa60c_1417x888.png) # GPU 其實在絕對數目方面,沒什么能跑贏現代的GPU.GPU指的是由成千上萬個微核組成的處理器.他們擅長處理大量并行的簡單計算,比如在圖像應用中渲染多邊形.他們不太能勝任串行任務,并且很難編程.雖然CPU對操作系統很有用(比如加密或處理網絡傳輸),當操作系統本身不太可能運行在GPU上 # 高速緩存 高速緩存命中,緩存滿足了請求,就不需要通過總線把訪問請求送往主存. 高速緩存命中通常需要2個時鐘周期.高速緩存沒有命中就要訪問主存了,這需要付出大量的時間代價 由于高速緩存價格昂貴,所以大小有限,有些機器具有2級甚至3級高速緩存,每一級緩存比前一級慢并且容量大 現代cpu設置了2個緩存,第一級稱為L1緩存,總是在cpu中,用來將已解碼的指令調入cpu的執行引擎.對于那些頻繁使用的數據字,多數芯片安排有第二個L1緩存,典型的L1緩存大小為16kb,另外,往往還設計有二級緩存稱為L2緩存,用來存放進來使用過的若干兆字節的內存字,L1和L2緩存之間的差別在于時序.對于L1緩沖的訪問,不存在任何延遲,而對于L2緩存的訪問,則會延遲1或2個時鐘 # 磁盤 磁盤結構 ![](https://box.kancloud.cn/a0f436b7d2be9372aea52310c1896a47_1429x652.png) 最近流行的固態硬盤,叫閃存,如果閃存擦除的次數過多,就被磨損了 # 總線 ![](https://box.kancloud.cn/72886c6f8872178ffd2942573824baf6_723x519.png) # posix
                  <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>

                              哎呀哎呀视频在线观看