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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 1.1.?驅動程序的角色 作為一個程序員, 你能夠對你的驅動作出你自己的選擇, 并且在所需的編程時間和結果的靈活性之間, 選擇一個可接受的平衡. 盡管說一個驅動是"靈活"的, 聽起來有些奇怪, 但是我們喜歡這個字眼, 因為它強調了一個驅動程序的角色是提供機制, 而不是策略. 機制和策略的區分是其中一個在 Unix 設計背后的最好觀念. 大部分的編程問題其實可以劃分為 2 部分:" 提供什么能力"(機制) 和 "如何使用這些能力"(策略). 如果這兩方面由程序的不同部分來表達, 或者甚至由不同的程序共同表達, 軟件包是非常容易開發和適應特殊的需求. 例如, 圖形顯示的 Unix 管理劃分為 X 服務器, 它理解硬件以及提供了統一的接口給用戶程序, 還有窗口和會話管理器, 它實現了一個特別的策略, 而對硬件一無所知. 人們可以在不同的硬件上使用相同的窗口管理器, 而且不同的用戶可以在同一臺工作站上運行不同的配置. 甚至完全不同的桌面環境, 例如 KDE 和 GNOME, 可以在同一系統中共存. 另一個例子是 TCP/IP 網絡的分層結構: 操作系統提供 socket 抽象層, 它對要傳送的數據而言不實現策略, 而不同的服務器負責各種服務( 以及它們的相關策略). 而且, 一個服務器, 例如 ftpd 提供文件傳輸機制, 同時用戶可以使用任何他們喜歡的客戶端; 無論命令行還是圖形客戶端都存在, 并且任何人都能編寫一個新的用戶接口來傳輸文件. 在驅動相關的地方, 機制和策略之間的同樣的區分都適用. 軟驅驅動是不含策略的--它的角色僅僅是將磁盤表現為一個數據塊的連續陣列. 系統的更高級部分提供了策略, 例如誰可以存取軟驅驅動, 這個軟驅是直接存取還是要通過一個文件系統, 以及用戶是否可以加載文件系統到這個軟驅. 因為不同的環境常常需要不同的使用硬件的方式, 盡可能對策略透明是非常重要的. 在編寫驅動時, 程序員應當特別注意這個基礎的概念: 編寫內核代碼來存取硬件, 但是不能強加特別的策略給用戶, 因為不同的用戶有不同的需求. 驅動應當做到使硬件可用, 將所有關于如何使用硬件的事情留給應用程序. 一個驅動, 這樣, 就是靈活的, 如果它提供了對硬件能力的存取, 沒有增加約束. 然而, 有時必須作出一些策略的決定. 例如, 一個數字 I/O 驅動也許只提供對硬件的字符存取, 以便避免額外的代碼處理單個位. 你也可以從不同的角度看你的驅動: 它是一個存在于應用程序和實際設備間的軟件層. 驅動的這種特權的角色允許驅動程序員y嚴密地選擇設備應該如何表現: 不同的驅動可以提供不同的能力, 甚至是同一個設備. 實際的驅動設計應當是在許多不同考慮中的平衡. 例如, 一個單個設備可能由不同的程序并發使用, 驅動程序員有完全的自由來決定如何處理并發性. 你能在設備上實現內存映射而不依賴它的硬件能力, 或者你能提供一個用戶庫來幫助應用程序員在可用的原語之上實現新策略, 等等. 一個主要的考慮是在展現給用戶盡可能多的選項, 和你不得不花費的編寫驅動的時間之間做出平衡, 還有需要保持事情簡單以避免錯誤潛入. 對策略透明的驅動有一些典型的特征. 這些包括支持同步和異步操作, 可以多次打開的能力, 利用硬件全部能力, 沒有軟件層來"簡化事情"或者提供策略相關的操作. 這樣的驅動不但對他們的最終用戶好用, 而且證明也是易寫易維護的. 成為策略透明的實際是一個共同的目標, 對軟件設計者來說. 許多設備驅動, 確實, 是與用戶程序一起發行的, 以便幫助配置和存取目標設備. 這些程序包括簡單的工具到完全的圖形應用. 例子包括 tunelp 程序, 它調整并口打印機驅動如何操作, 還有圖形的 cardctl 工具, 它是 PCMCIA 驅動包的一部分. 經常會提供一個客戶庫, 它提供了不需要驅動自身實現的功能. 本書的范圍是內核, 因此我們盡力不涉及策略問題, 應用程序, 以及支持庫. 有時我們談論不同的策略以及如何支持他們, 但是我們不會進入太多有關使用設備的程序的細節, 或者是他們強加的策略的細節. 但是, 你應當理解, 用戶程序是一個軟件包的構成部分, 并且就算是對策略透明的軟件包在發行時也會帶有配置文件, 來對底層的機制應用缺省的動作.
                  <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>

                              哎呀哎呀视频在线观看