蘇嵌作業6 1

2021-08-15 19:39:00 字數 1925 閱讀 2817

訊息佇列,    訊號量, 共享記憶體

1.訊息佇列的概念:

訊息佇列就是乙個訊息的鍊錶。可以把訊息看作乙個記錄,具有特定的格式及特定的優先順序。對訊息佇列有寫許可權的程序可以像中按照一定的規則新增新訊息,對訊息佇列有讀許可權的程序則可以從訊息佇列讀走訊息,訊息佇列是隨核心持續的。

2.訊息佇列的基礎理論:

struct kern_ipc_perm

key_t key;

uid_t uid;

gid_t gid;

uid_t cuid;

gid_t cgid;

more_t mode;

unsigned long seq;

3.訊息佇列的使用:

(1)開啟或建立訊息佇列

(2)讀寫操作

struct msgbuf

long mtype;

char mtext[1];

(3)獲得或設定訊息佇列屬性

4.訊息佇列api

(1)ftok 函式

key = ftok(path_ptr, 'a');

ipc_id = ipc(msgget, (int)key, flags, 0, null, 0);

...(2)msgget 函式

建立訊息佇列

(3)msgrcv 函式

讀出訊息佇列

(4)msgsnd 函式

往訊息佇列寫入資料

(5)msgctl 函式

控制訊息佇列

5.訊號燈概念:

提供對程序間共享資源訪問控制機制。相當於記憶體中的標誌,程序可以根據它判斷是否能夠訪問某些資源,同時程序

也可以修改該標誌。除了訪問控制還可以用於程序同步。

二種分類:

(1)二值訊號燈

(2)計算訊號燈

6.核心實現原理

struct sem

int semval;

int sempid;

7.實現訊號燈

(1)開啟或建立訊號燈

(2)訊號燈值操作

(3)獲得或設定訊號燈屬性

8.訊號燈api

(1)semget用於配置訊號燈

(2)semop用於訊號燈處理

(3)semctl用於控制訊號燈

9.記憶體共享一

mmap()

fd = open(name, flag, mode);

if(fd < 0)

ptr = mmap(null, len, prot_read | prot_write | rprot_write, map_shared, fd, 0);

10.記憶體共享二

shmat()

struct shmid_kernel

struct kern_ipc_perm            shm_perm;

struct file *                            shm_file;

int                                         id;

unsigned long                      shm_nattch;

unsigned long                      shm_segsz;

time_t                                   shm_atim;

time_t                                   shm_dtim;

time_t                                   shm_ctim;

pid_t                                     shm_cprid;

pid_t                                     shm_lprid;

蘇嵌學習日誌

姓名 盧元玉 日期 2018.7.12.今日學習任務 1.完成老師布置的31 道嵌入式 linux 開發工具篇問題整理 2.完成4個c 語言編寫。今日任務完成情況 1.基本能完成老師給我門布置的三十多道複習題目 2.對程式編寫還存在一定的難度,不過有老師和同學的幫助,最終能順利完成任務。今日開發中出...

蘇嵌學習日誌

學習日誌 姓名 於慧 日期 2018.7.23 今日學習任務 軟體安裝環境 stm32的簡單介紹 了解stm32f4xx的gpio暫存器 用暫存器點亮乙個led燈 了解韌體庫 建立基礎模板 今日任務完成情況 詳細說明本日任務是否按計畫完成,開發的 量 完成軟體安裝 了解了stm32的一些簡單知識 實...

蘇嵌學習日誌

學習日誌 姓名 於慧 日期 2018.7.25 今日學習任務 gpio 時鐘systick系統定時器 今日任務完成情況 詳細說明本日任務是否按計畫完成,開發的 量 使用韌體庫點亮led燈 部分 include bsp led.h include stm32f4xx.h int main void i...