• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業
    • 60秒人工響應
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償
    您的位置: 網站首頁 > 幫助中心>文章內容

    Linux操作系統自如的裝卸內核模塊

    發布時間:  2012/8/26 18:30:15
    Linux是單內核結構,也就是說, 它是一個大程序,其中任一函數都可以訪問公共數據結構和其它函數調用。 (作為操作系統)另外一種可能的結構是多核式的, 各功能塊自成一體, 相互之間由嚴格的通信機制相連。單核結構在添加新模塊時,一種方法是重新調整設置,所以非常費時。 比如,你想在內核中加一個NCR 810 SCSI的驅動程序, 你必須重新設置, 重建內核。這也有另外一個辦法,Linux 允許動態裝載和卸掉模塊. Linux 模塊是一段可以在機器起動后任意時間被動態連接的代碼. 在不需要時, 它們可以被從內核中卸掉. 大多數Linux 模塊是設備驅動程序或偽設備驅動程序, 如網絡驅動程序, 文件系統等。

     

     
      你可以使用 insmod 和 rmmod 命令來裝載和卸掉 Linux 模塊, 內核自己也可以調用內核駐留程序(Kerneld) 來按需要裝載和卸掉模塊。

     

      按需動態裝載模塊可以使內核保持最小, 并更具靈活性. 我現在的 Intel 內核由于大量使用動態裝載模塊, 只有 406 K 字節. 例如, 我很少用到 VFAT 文件系統, 所以我讓 Linux 內核只在我裝載 VFAT 分區時, 才自動上載 VFAT 文件系統. 當我卸掉 VFAT 分區時, 內核會檢測到, 并自動卸掉 VFAT 文件系統. 當測試新程序時, 你如果不想每次都重建內核, 動態裝載模塊是非常有用的. 但是, 運用模塊會多消耗一些內存, 并對速度有一定影響. 并且模塊裝載程序是一段代碼, 它的數據將占用一部份內存. 這樣還會造成不能直接訪問內核資源, 效率不高的問題.

      一旦 Linux 模塊被裝載后, 它就和一般內核代碼一樣, 對其它內核代碼, 享受同樣的訪問權限。換句話說, Linux 內核模塊可以像其它內核代碼, 或驅動程序一樣使系統崩潰。模塊可以使用內核資源,但首先它需知道怎樣調用. 例如, 一個模塊要調用 Kmalloc() (內核內存分配程序). 但在模塊建立時, 它并不知道到哪兒去找 Kmalloc(), 所以在它被裝載時, 內核必須先設定模塊中所有 Kmalloc() 調用的函數指針. 內核有一張所有資源調用的列表, 在模塊被裝載時, 內核重設所有資源調用的函數指針. Linux 允許棧式模塊, 即一個模塊調用另一個模塊的函數. 例如, 由于 VFAT 文件系統可以看成是 FAT 文件系統的超集, 所以 VFAT 文件系統模塊需要調用 FAT 文件系統提供的服務。一個模塊調用另一模塊的資源與調用內核資源很相似。唯一的不同是被調用的模塊需被先載入。一個模塊被載入后,內核將修改它的內核符號表(KERAEL SYMOBOL TABLE),加入新載入模塊提 供的所有資源和符號。所以另一個模塊被載入時, 它就可以調用所有已載入模塊提供的服務。

      當卸掉一模塊時,內核先確定該模塊不會再被調用,然后通過某種方式通知它。在該模塊被內核卸掉以前,該模塊須釋放所有占用的系統資源。例如,內存或中斷,當模塊被卸掉后,內核從內核符號表中刪除所有該模塊提供的資源。

      如果模塊代碼不嚴謹,它將使整個操作系統崩潰。另一個問題,如果你載入的是為其它版本服務的模塊,那怎么辦?例如,一個模塊凋用一個內函數,但提供了錯誤的輸入參數,這將導致運行錯誤。但內核可以在模塊被載入時選擇性地通過嚴格版本檢查來杜絕這種現象。

      載入模塊有兩種方法。第一種是通過INSTALL 命令來載入;另一種更聰明的方法是在模塊被調用時自動載入,這叫所需載入(DEMAND LOADING)。例如,當用戶在裝一個不在內核中的文件系統,內核會自動調用內核駐 留程序(KERNELD)來載入對應的處理模塊。

      內核駐留程序是一個具有超級用戶極限的普通用戶程序。當它被啟動時(通常在系統啟動時),它將打開一個和內核之間的進程間通信管道(IPC CHANNEL)。 內核將利用這條管道來通知進程駐留程序去完成各種任務。內核駐留程序的主要任務是載入和卸掉模塊,它也能完成其她一些任務。如按需打開和關掉一條通過串口的 DDD LINK。KERNELD 自己并不完成這些任務。它將調用如INSMOD 這樣的命令來完成,KERNELD 只是一個內核的代理,協調完成各項任務。


    本文出自:億恩科技【www.vbseamall.com】

    服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      1
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線