freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linu進(jìn)程間通信(完整版)

2025-01-25 01:06上一頁面

下一頁面
  

【正文】 位置。 – type小于 0,返回其類型值小于或等于 type參數(shù)的絕對值的消息中類型值最小的第一個消息。第三個參數(shù)忽略不用。 ? 信號量相當(dāng)是一個全局的整數(shù)變量 ,這個變量只能用原子操作來改變值 ? 信號燈與其它進(jìn)程間通信方式有所不同,它主要用于進(jìn)程間同步。 /* of semaphores in set */ – time_t sem_otime。 /* awaiting semval = 0 */ – }。操作為:釋放一個被占用的資源(把信號量加 1),如果發(fā)現(xiàn)有被阻塞的進(jìn)程,則選擇一個喚醒之 – V原語的操作過程 ? sem加 1; ? 若相加結(jié)果大于零,則進(jìn)程繼續(xù)執(zhí)行; ? 若相加結(jié)果小于或等于零,則從該信號的等待隊列中喚醒一等待進(jìn)程,然后再返回原進(jìn)程繼續(xù)執(zhí)行或轉(zhuǎn)進(jìn)程調(diào)度。如果不是創(chuàng)建一個信號燈集,而只是訪問已存在的集合,則該參數(shù)可以指定為 0。到時就可斷定該信號燈已經(jīng)被初始化,而且對它初始化的進(jìn)程已成功完成 semop調(diào)用。 ? nops參數(shù)指出結(jié)構(gòu)數(shù)組中元素的個數(shù)。若指定了 IPC_NOWAIT,則調(diào)用線程不會睡眠,返回 EAGAIN。 Linux 培 訓(xùn) semop的調(diào)用問題 ? semop采用復(fù)雜的信號燈集做參數(shù) ,因此造成程序調(diào)用變得復(fù)雜 . ? 信號燈的值加 1,或值減 1都在 semop完成 ,相當(dāng)于加鎖或解鎖都是有一個函數(shù)完成 ,這也是與其它互質(zhì)量等其它同步機(jī)制不一樣的地方 ? 一般是將其封裝成 P,V原語的函數(shù)來操作 /* 申請資源 ,用 P原語 */ int semaphore_wait_p(int sem_id) { struct sembuf sb。 = 0。 ? semnum標(biāo)識某個信號燈, semnum僅僅用于 GETVAL、 SETVAL、GETNCNT、 GETZCNT和 GETPID命令。 Linux 培 訓(xùn) semop命令選項 ? GETVAL:把 semval的當(dāng)前值作為函數(shù)返回值返回。函數(shù)本身返回值為 0。 ? IPC_STAT:通過 semid_ds結(jié)構(gòu)。 /* incore attached */ – time_t shm_atime。 ? shmdt()調(diào)用用來解除進(jìn)程對共享內(nèi)存區(qū)域的映射 – int shmdt(const void *shmaddr)。 Linux 培 訓(xùn) shmat函數(shù) ? include sys/ ? void * shmat(int shmid, const void *shmaddr, int flag)。 LBA代表“低端邊界地址 (lower boundary address)”。 shm_ctime的值用當(dāng)前時間替換。對于像管道和消息隊列等通信方式,則需要在內(nèi)核和用戶空間進(jìn)行四次的數(shù)據(jù)拷貝,而共享內(nèi)存則只拷貝兩次數(shù)據(jù) [1]:一次從輸入文件到共享內(nèi)存區(qū),另一次從共享內(nèi)存區(qū)到輸出文件。 len 映射的字節(jié) prot 對映射存儲區(qū)的保護(hù)要求 flag flag標(biāo)志位 filedes 要被映射文件的描述符 , 在映射該文件到一個地址空間之前,先要打開該文件。此標(biāo)志指定存儲操作修改映射文件。 參數(shù): addr 指向映射存儲區(qū)的起始地址 len 映射的字節(jié) prot flags 返回值: 若成功則返回 0,若出錯則返回 1 Linux 培 訓(xùn) posix共享內(nèi)存 ? posix共享內(nèi)存區(qū)涉及兩個步驟: – 指定一個名字參數(shù)調(diào)用 shm_open,以創(chuàng)建一個新的共享內(nèi)存區(qū)對象或打開一個以存在的共享內(nèi)存區(qū)對象。也就是說,一個進(jìn)程創(chuàng)建了一個信號燈,這個進(jìn)程結(jié)束后,這個信號燈還存在,并且信號燈的值也不會改變。但 sem_init的第一個參數(shù)是一個指向某個 sem_t變量的指針,該變量由調(diào)用者分配,然后由 sem_init函數(shù)初始化。posix基于內(nèi)存的信號燈的持續(xù)性卻是不定的,如果基于內(nèi)存的信號燈是由單個進(jìn)程內(nèi)的各個線程共享的,那么該信號燈就是隨進(jìn)程持續(xù)的,當(dāng)該進(jìn)程終止時它也會消失。當(dāng)持有某個信號燈鎖的進(jìn)程沒有釋放它就終止時,內(nèi)核并不給該信號燈解鎖。傳遞給 shm_open的名字參數(shù)隨后由希望共享該內(nèi)存區(qū)的任何其他進(jìn)程使用。所有后來對該映射區(qū)的引用都是引用該副本,而不是原始文件。 off 要映射字節(jié)在文件中的起始偏移量 ,通常將其設(shè)置為 0。系統(tǒng) V則是通過映射特殊文件系統(tǒng) shm中的文件實現(xiàn)進(jìn)程間的共享內(nèi)存通信。 Linux 培 訓(xùn) 關(guān)于 System V的維護(hù)命令 ? 可以用 ipcs命令查看 system V對象 ? 用 ipcrm可以刪除 system V 對象 – ipcrm sem 196632 ?刪除 semid 為 196632的信號量 – ipcrm shm 12395 ?刪除 shmid 為 12395的共享內(nèi)存 – ipcrm msg 234 ?刪除 msgid為 234的消息隊列 Company name Linux 培 訓(xùn) 主講人:肖勇軍 桂 電 嵌入式交流群 :156619189 Linux 培 訓(xùn) 兩大類應(yīng)用接口區(qū)別 ? System V IPC存在時間比較老 ,許多系統(tǒng)都支持 ,而 Posix IPC是新出的標(biāo)準(zhǔn) .很多嵌入式平臺只支持System V 的接口 ? System V的接口相對復(fù)雜 ,而 POSIX比較簡單 ,優(yōu)先選擇后者 . – 參見 system V的信號量和 Posix信號量的操作比較 ? POSIX IPC是線程安全的 ? System V內(nèi)置在 glibc中 ,因此所有使用 glibc庫的環(huán)境都可以使用 ,POSIX IPC的使用必須鏈接 ,(即使用 lrt參數(shù) ) Linux 培 訓(xùn) POSIX 消息隊列 接口名稱 目的 mq_open(3RT) 連接到以及創(chuàng)建(可選)命名消息隊列 mq_close(3RT) 結(jié)束到開放式消息隊列的連接 mq_unlink(3RT) 結(jié)束到開放式消息隊列的連接,并在最后一個進(jìn)程關(guān)閉此隊列時將其刪除 mq_send(3RT) 將消息放入隊列 mq_receive(3RT) 在隊列中接收(刪除)最早且優(yōu)先級最高的消息 mq_notify(3RT) 通知進(jìn)程或線程消息已存在于隊列中 mq_setattr(3RT), mq_getattr(3RT) 設(shè)置或獲取消息隊列屬性 Linux 培 訓(xùn) POSIX消息隊列使用 ? 使用頭文件 ? 隊列數(shù)據(jù)結(jié)構(gòu) mqd_t ? 打開隊列 – mqd_t mq_open(const char *name, int oflag, /* unsigned long mode, mq_attr attr */ ...)。 Linux 培 訓(xùn) shmdt函數(shù) ? include sys/ ? int shmdt(const void *shmaddr)。 ? shmid是 shmget的返回值。 Linux 培 訓(xùn) shmget函數(shù) ? include sys/ ? int shmget(key_t key, size_t size, int oflag)。 /* last shmdt time */ – time_t shm_ctime。 Company name Linux 培 訓(xùn) 主講人:肖勇軍 桂 電 嵌入式交流群 :156619189 Linux 培 訓(xùn) 共享內(nèi)存數(shù)據(jù)表示 ? 對于每個 System V共享內(nèi)存區(qū),內(nèi)核維護(hù)如下的信息結(jié)構(gòu): – struct shmid_ds { – struct ipc_perm shm_perm。 ? SETALL:設(shè)置所指定信號燈集中每個成員的 semval值。如果操作成功,那么相應(yīng)信號燈在所在進(jìn)程中的調(diào)整值 (semadj)將被置為 0。它是一個聯(lián)合: – union semun { – int val。 = SEM_UNDO。 = 1。如果 semval大于或等于 sem_op的絕對值,則從 semval中減掉 sem_op的絕對值,如果指定了 SEM_UNDO,那么 sem_op的絕對值就加到相應(yīng)信號燈的 semadj值上。特定的信號燈由 sem_num指定; sem_op指定特定的操作; sem_flg指定非阻塞 (IPC_NOWAIT)、恢復(fù)等標(biāo)志。 ? 這樣將會造成程序相當(dāng)復(fù)雜 Linux 培 訓(xùn) semop函數(shù) ? include sys/ ? int semop(int semid, struct sembuf *opsptr, size_t nops)。 ? 當(dāng)實際操作為創(chuàng)建一個新的信號燈集時, semid_ds結(jié)構(gòu)的以下成員將被初始化: – sem_perm結(jié)構(gòu)的 uid和 cuid被設(shè)置為調(diào)用進(jìn)程的有效用戶 ID, gid和 cgid被設(shè)置為調(diào)用進(jìn)程的有效組 ID; – oflag參數(shù)中的讀寫權(quán)限存入 ; – sem_otime被設(shè)置為 0, sem_ctime被置為當(dāng)前時間; – sem_nsems被置為 nsems參數(shù)的值; – 與該集合中每個信號燈關(guān)聯(lián)的各個 sem結(jié)構(gòu)并不初始化。 return (semop(semid,sops,1))。為阻塞原語,負(fù)責(zé)把當(dāng)前進(jìn)程由運行狀態(tài)轉(zhuǎn)換為阻塞狀態(tài),直到另外一個進(jìn)程喚醒它。 /* last change time */ – }。每個信號燈都有一個值,可以用來表示當(dāng)前該信號燈代表的共
點擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1