linux核心IPC機制

2021-08-09 23:15:54 字數 1287 閱讀 8494

未完,待續...

【摘要】

本文將從乙個例項出發,逐步剖析linux核心是如何實現訊號量機制的.

【正文】訊號量使用例項

1 訊號量建立例項

void sem_create_test(void)

int key_fd,key_value;

int sem_id;

union semun sem_args;

unsigned short array[2]=;

key_fd = open("/mnt/key",o_rdwr|o_create,s_iread|s_iwrite);

if(key_fd < 0)

close(key_fd);

key_value = ftok("/mnt/key",1);

printf("key = 0x%x\n",key_value);

/* 建立2個訊號量,這兩個訊號量key_t值都是key_value,id都是sem_id */

sem_id = semget(key_value,2,ipc_create|0660);

初始化上面建立的id為sem_id的2個訊號量的值為array[0],array[1];

其中setall和1表示要設定2個訊號量 ;此處也可以使用setval對每個訊號量分別初始化sem_args.val.

sem_args.array = array;

semctl(sem_id,1,setall,sem_args);

【其他】

檢視系統中訊號量:

cat /proc/sysvipc/sem

key_value = ftok("/mnt/key",1);

printf("key = 0x%x\n",key_value);

/* 建立2個訊號量,這兩個訊號量key_t值都是key_value,id都是sem_id */

sem_id = semget(key_value,2,ipc_create|0660);

初始化上面建立的id為sem_id的2個訊號量的值為array[0],array[1];

其中setall和1表示要設定2個訊號量 ;此處也可以使用setval對每個訊號量分別初始化sem_args.val.

sem_args.array = array;

semctl(sem_id,1,setall,sem_args);

【其他】

檢視系統中訊號量:

cat /proc/sysvipc/sem

linux核心鎖機制

核心鎖的討論 為什麼需要核心鎖?多核處理器下,會存在多個程序處於核心態的情況,而在核心態下,程序是可以訪問所有核心資料的,因此要對共享資料進行保護,即互斥處理 有哪些核心鎖機制?1 原子操作 atomic t資料型別,atomic inc atomic t v 將v加1 原子操作比普通操作效率要低,...

IPC機制和實現

1 管道 pipe 管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。2 命名管道 named pipe 命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令mkf...

RTT的IPC機制篇 IPC通訊總結

總結1 rtt通訊方式總結 2018年12月29日 10 47 ipc inter process communication 1,rtt的通訊機制 訊息佇列 郵箱 訊號量 互斥量 事件。2.我又按照其傳輸的內容分為 資料類和非資料類通訊。非資料類,執行緒間 執行緒與中斷傳輸非資料類資訊,實現執行緒...