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

正文內(nèi)容

四川大學linux第4章unix進程管理及進程通信-wenkub.com

2025-03-07 20:18 本頁面
   

【正文】 } filedes[0]=open(filename, O_RDONLY)。 { int filedes[2]。 include sys/ include char filename[] = ./myfifo。 filedes為需要關閉的有名管道的文件描述符。 其中: path為文件名; flags為打開類型,按 POSIX標準包括: O_RDONLY(只讀)、 O_WRONLY(只寫)、 O_RDWR(讀寫)、O_APPEND、 O_CREAT、 O_EXCL、 O_NOCTTY、O_NONBLOCK、 O_TRUNC。 ? 為了加快訪問效率,有名管道同樣利用了文件索引節(jié)點的直接地址塊作為文件塊。 ? 用系統(tǒng)函數(shù) mknod()創(chuàng)建一個有名管道,內(nèi)核為管道文件分配一個索引節(jié)點并在索引節(jié)點中設置該文件類型是有名管道。 ? 有名管道利用系統(tǒng)函數(shù) mknod()建立,通過系統(tǒng)函數(shù) read()和 write()對管道進行讀和寫訪問。 close(filedes[0])。 /*讀之前先關閉管道寫端 */ sleep(3)。 close(filedes[1])。 exit(2)。 char inbuf[256]。 } 管道 程序執(zhí)行的結果是打印出: wele to unnamed pipe 管道 例 下面的程序是父子進程通過管道進行通信。 read(filedes[0],inbuf,23)。 exit(1)。 include include include char string []=wele to unnamed pipe。 char buf[]。 其中: filedes[1]為寫入管道的描述符; buf是要寫入管道的數(shù)據(jù); size是寫入的數(shù)據(jù)位組長度。 ? 如果管道中無空間存放要寫入的數(shù)據(jù)時,寫進程要睡眠等待,直到讀進程將數(shù)據(jù)讀出將其喚醒后才能再寫入數(shù)據(jù)。 ? 當一個進程要讀的數(shù)據(jù)量大于管道內(nèi)的數(shù)據(jù)量時,讀進程會在讀完管道中的所有數(shù)據(jù)后進入睡眠,等待寫進程寫入后再次讀。 ? 當一個進程正在寫管道,要寫的字節(jié)數(shù)與管道中已有的字節(jié)數(shù)之和大于管道容量時,則內(nèi)核會對索引節(jié)點作相應標記,并讓寫進程進入睡眠等待,直到有讀進程將數(shù)據(jù)讀出后,再喚醒該寫進程繼續(xù)寫。 ? 當一個進程正在寫管道,如果寫的字節(jié)數(shù)與管道中已有的字節(jié)數(shù)之和小于或等于管道容量,根據(jù)管道先進先出原則,從管道中讀出數(shù)據(jù)。 管道 ? 必須通過文件描述符 filedes[0]和 filedes[1]來訪問管道,只有創(chuàng)建管道的進程或其子進程才能使用文件描述符。 管道 2. 無名管道 創(chuàng)建無名管道的函數(shù)為 pipe(),其語法格式如下: int pipe(filedes)。 ? 可用于所有進程之間的通信。 無名管道( Unnamed Pipes) ? 無名管道利用系統(tǒng)函數(shù) pipe()建立,管道文件是無名臨時文件,用 pipe()返回的文件描述符來標識該文件。 ? 管道的實現(xiàn)機理是在進程之間利用了共享文件作為中介,發(fā)送進程將通信數(shù)據(jù)寫入文件,接收進程從文件讀出數(shù)據(jù)。 } 信號 $sigexer2 i=1 pid=14587 i=2 pid=14588 i=3 pid=14589 i=4 pid=14590 sleeping... i=5 pid=14591 exiting... 管道 1. 管道 ? 管道( pipes)是 Linux支持的 Unix進程通信機制之一。 sleep(3)。 i6。父進程發(fā)送信號 SIGINT給子進程,子進程收到該信號后自我終止。 exit(0)。 i++) { signal(SIGINT,signalint)。\n ,signum)。 /***** This program is signal int, the program39。 sleep(2)。 = 。 sigaction(SIGVTALRM,act,NULL)。 } void init_sigaction() { struct sigaction act。 } 信號 這兩個進程都處于死循環(huán)中,在接收到對方發(fā)送來的信號之前,都在暫停等待中( pause),直到對方發(fā)來的一個信號到達。 sleep(1)。 } break。 for(。 /* 設置父進程的 SIGUSR1 */ signal(SIGUSR1,p_catch)。 程序建立了兩個進程,通過向對方發(fā)送信號 SIGUSR1實現(xiàn)這兩個進程的同步。即使為 sa_sigaction指定了信號處理函數(shù),如果不設置 SA_SIGINFO,信號處理函數(shù)同樣不能得到信號傳遞過來的數(shù)據(jù),在信號處理函數(shù)中對這些信息的訪問都將導致段錯誤( Segmentation fault)。 sa_mask指定在信號處理程序執(zhí)行過程中,哪些信號應當被阻塞。 /* 信號值,是一個聯(lián)合數(shù)據(jù)結構,可以為一個整數(shù)(由 si_int標示,也可以為一個指針,由 si_ptr標示) */ oid * si_addr。 /* 發(fā)送進程的真實用戶 ID */ int si_status。 /* 信號值 */ int si_errno。 void (*_sa_sigaction)(int,struct siginfo *, void *); }_u sigset_t sa_mask; unsigned long sa_flags; void (*sa_restorer)(void); } 信號 在 union數(shù)據(jù)結構中 : _sa_handler和 *_sa_sigaction為用戶指定的信號處理函數(shù) ,也可以為 SIG_DFL(采用缺省的處理方式 ),也可以為SIG_IGN(忽略信號)。 SIGKILL及 SIGSTOP這兩個信號單獨定義自己的處理函數(shù); 第二個參數(shù)是指向結構 sigaction的一個實例的指針,在結構sigaction的實例中,指定了對特定信號的處理、信號所傳遞的信息、信號處理函數(shù)執(zhí)行過程中應屏蔽掉哪些函數(shù)等等。 信號 ( 2) sigaction() 函數(shù) sigaction()用于改變進程接收到特定信號后的行為,支持信號傳遞參數(shù)。 ( 1) signal() 函數(shù) signal()不支持信號傳遞信息,主要用于前 32種非實時信號的安裝。 該函數(shù)無返回值。 /* microseconds */ }。 /* next value */ struct timeval it_value。經(jīng)過指定的時間后,內(nèi)核將發(fā)送 SIGALRM信號給本進程; ITIMER_VIRTUAL:設定程序執(zhí)行時間。 進程調(diào)用 alarm后,任何以前的 alarm()調(diào)用都將無效。調(diào)用成功返回 0;否則,返回 1。 ? 同樣, sig的值為 0,表示不發(fā)送信號。 }sigval_t。 例 用命令 kill將信號 SIGUSR2送到進程 129。 ? 因此,利用發(fā)送 0信號可以檢查接收進程是否存在,或當前進程是否具有向接收進程發(fā)送信號的權限。 信號 ( 1) kill() 函數(shù) kill()函數(shù)用于發(fā)送信號,其語法格式如下: int kill(pid_t pid,int sig)。 信號 2. 信號的發(fā)送 ? 信號發(fā)送是發(fā)送進程調(diào)用發(fā)送函數(shù),通過核心向一個或一組進程發(fā)送信號。 ? Linux進程對信號的響應有三種方式: ( 1)忽略信號:對信號不做任何處理。 BSD為了實現(xiàn)可靠信號機制,又能夠統(tǒng)一對外接口,用 sigaction函數(shù)重新實現(xiàn)了 signal函數(shù))。 信號 表 Red hat 編號 信號名稱 編號 信號名稱 編號 信號名稱 編號 信號名稱 1 SIGHUP 2 SIGINT 3 SIGQUIT 4 SIGILL 5 SIGTRAP 6 SIGABRT 7 SIGBUS 8 SIGFPE 9 SIGKILL 10 SIGUSR1 11 SIGSEGV 12 SIGUSR2 13 SIGPIPE 14 SIGALRM 15 SIGTERM 17 SIGCHLD 18 SIGCONT 19 SIGSTOP 20 SIGTSTP 21 SIGTTIN 22 SIGTTOU 23 SIGURG 24 SIGXCPU 25 SIGXFSZ 26 SIGVTALRM 27 SIGPROF 28 SIGWINCH 29 SIGIO 30 SIGPWR 31 SIGSYS 32 SIGRTMIN 33 SIGRTMIN+1 34 SIGRTMIN+2 35 SIGRTMIN+3 36 SIGRTMIN+4 37 SIGRTMIN+5 38 SIGRTMIN+6 39 SIGRTMIN+7 40 SIGRTMIN+8 41 SIGRTMIN+9 42 SIGRTMIN+10 43 SIGRTMIN+11 44 SIGRTMIN+12 45 SIGRTMIN+13 46 SIGRTMIN+14 47 SIGRTMIN+15 48 SIGRTMAX15 49 SIGRTMAX14 50 SIGRTMAX13 51 SIGRTMAX12 52 SIGRTMAX11 53 SIGRTMAX10 54 SIGRTMAX9 55 SIGRTMAX8 56 SIGRTMAX7 57 SIGRTMAX6 58 SIGRTMAX5 59 SIGRTMAX4 60 SIGRTMAX3 61 SIGRTMAX2 62 SIGRTMAX1 63 SIGRTMAX 信號 ? Linux操作系統(tǒng)繼承了 UNIX操作系統(tǒng)的信號機制,并在UNIX不可靠信號(由于 UNIX操作系統(tǒng)中的信號不支持排隊,容易丟失,所以是不可靠的信號。如果有信號到達,則中斷正在執(zhí)行的程序并轉向與信號相對應的處理程序,執(zhí)行對異常事件的處理。 信號 ? 在操作系統(tǒng)應用中,當系統(tǒng)運行某進程時,如果發(fā)現(xiàn)進程運行有問題,操作系統(tǒng)提供了按下鍵盤上的 CtrlC來停止進程的運行。 ? 接收進程事先并不知道什么時候信號到達,當接收到信號后,會按照通信雙方事先約定的信息處理方式進行處理。 進程間通信 ? 由于 Linux系統(tǒng)是多進程并發(fā),所以,進程與進程之間需要相互交換數(shù)據(jù),即進程間通信。 ? 對于先來先服務調(diào)度策略,實時優(yōu)先級高的進程,更緊迫,可優(yōu)先分配 CPU。但是,用戶可以通過系統(tǒng)函數(shù)調(diào)用改變該值。 ? 當一個普通進程的時間片用完以后,并不馬上用 priority對 counter進行賦值,直到所有處于就緒狀態(tài)的普通進程的時間片都用完了以后,才令 counter等于 priority,并對counter重新賦值,這時普通進程才有了再次被調(diào)度的機會。 進程調(diào)度 動態(tài)優(yōu)先級進程調(diào)度 ? 對于普通進程, Linux采用的是基于動態(tài)優(yōu)先級的時間片多級隊列進程調(diào)度。在進程運行過程中, counter不斷減少,而 priority保持不變,以便在進程用完所有分配的時間片, counter變?yōu)?0的時候, priority再對 counter重新賦值。 進程調(diào)度 counter:進程剩余的時間片,可以看作是進程的動態(tài)優(yōu)先級。 進程調(diào)度 ? 進程調(diào)度準則以 CPU的時間片為單位,并根據(jù)進程相關參數(shù) policy、 priority、 counter、 rt_priority的值進行調(diào)度。 關于系統(tǒng)函數(shù) exit和 waitpid的具體應用,參見第 。 ? 子進程使用的所有資源將釋放。 ? 如果當前進程是進程組的領導進程,還需要終止所有相關進程。 ? 根據(jù)參數(shù) pid(進程標識號)的數(shù)值的不同,該系統(tǒng)函數(shù)調(diào)用會向不同的進程或進程組發(fā)送信號。 進程控制 ? 在 Linux核心中,結束進程的源代碼程序為linux/kernel/。 進程控制 結束進程 ? 進程代碼運行結束或進程中有系統(tǒng)函數(shù)調(diào)用 exit都會結束進程。 ? 由于 fork函數(shù)運行在系統(tǒng)核心空間,因此,在 序中, linux的核心程序 (位于 linux/kernel/)用于處理內(nèi)核出錯。 進程控制 系統(tǒng)函數(shù) fork的實現(xiàn)步驟為: (1)如果有足夠資源,為新進程創(chuàng)建進程標識符( pid)和進程描述符,并將其組織到進程表或鏈接到進程隊列; (2)創(chuàng)建新進程在內(nèi)核執(zhí)行所需要的新內(nèi)核空間; (3)將父進程描述符拷貝到新進程描述符; (4)修改新進程描述符:將新進程標
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1