歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux系統內核驅動之位操作

Linux系統內核驅動之位操作

日期:2017/3/1 16:32:29   编辑:關於Linux
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);   原子地動作如同前面列出的, 除了它們還返回這個位以前的值。
Copyright © Linux教程網 All Rights Reserved