Linux系統核心驅動之位操作

來源:互聯網
上載者:User

Linux系統核心驅動之位操作 atomic_t 類型在進行整數算術時是不錯的。 但是, 它無法工作的好, 當你需要以原子方式操作單個位時。 為此, 核心提供了一套函數來原子地修改或測試單個位。 因為整個操作在單步內發生, 沒有中斷(或者其他處理器)能干擾。  www.2cto.com    原子位操作非常快, 因為它們使用單個機器指令來進行操作, 而在任何時候低層平台做的時候不用禁止中斷。 函數是體系依賴的並且在 中聲明。 它們保證是原子的, 即便在 SMP 電腦上, 並且對於跨處理器保持一致是有用的。  不幸的是, 鍵入這些函數中的資料也是體系依賴的。 nr 參數(描述要操作哪個位)常常定義為 int, 但是在幾個體系中是 unsigned long. 要修改的地址常常是一個 unsigned long 指標, 但是幾個體系使用 void * 代替。  各種位操作是:  void set_bit(nr, void *addr);  設定第 nr 位在 addr 指向的資料項目中。  void clear_bit(nr, void *addr);  清除指定位在 addr 處的無符號長型資料。 它的語義與 set_bit 的相反。  void change_bit(nr, void *addr);  翻轉這個位。  test_bit(nr, void *addr);  這個函數是唯一一個不需要是原子的位操作; 它簡單地返回這個位的當前值。  int test_and_set_bit(nr, void *addr);  int test_and_clear_bit(nr, void *addr);  int test_and_change_bit(nr, void *addr);  原子地動作如同前面列出的, 除了它們還返回這個位以前的值。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.