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

正文內(nèi)容

四川大學(xué)linux第4章unix進(jìn)程管理及進(jìn)程通信(編輯修改稿)

2025-03-27 20:18 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 。 進(jìn)程調(diào)度 先來先服務(wù)和時(shí)間片輪轉(zhuǎn)調(diào)度 ? 對(duì)于實(shí)時(shí)進(jìn)程, Linux采用的是先來先服務(wù)( FCFS)和時(shí)間片輪轉(zhuǎn)( RR)兩種調(diào)度策略。對(duì)應(yīng)這兩種調(diào)度策略,實(shí)時(shí)就緒進(jìn)程被組織成 SCHED_FIFO和 SCHED_RR隊(duì)列。 ? 實(shí)時(shí)進(jìn)程強(qiáng)調(diào)緊迫性,用實(shí)時(shí)優(yōu)先級(jí) (rt_priority)表現(xiàn)進(jìn)程的緊迫程度。 ? 對(duì)于先來先服務(wù)調(diào)度策略,實(shí)時(shí)優(yōu)先級(jí)高的進(jìn)程,更緊迫,可優(yōu)先分配 CPU。在運(yùn)行過程中,如果沒有優(yōu)先級(jí)更高的進(jìn)程則一直運(yùn)行,直到完成;如果有優(yōu)先級(jí)更高的進(jìn)程,則會(huì)被搶占,進(jìn)程放棄 CPU,被放到 SCHED_FIFO隊(duì)列的末尾排隊(duì)。 進(jìn)程調(diào)度 ? 對(duì)于時(shí)間片輪轉(zhuǎn)調(diào)度策略,在實(shí)時(shí)進(jìn)程運(yùn)行過程中,counter為進(jìn)程的剩余時(shí)間片。 ? 只要時(shí)間片沒有用完,進(jìn)程會(huì)一直運(yùn)行,直到有一個(gè)進(jìn)程因 I/O阻塞,或者主動(dòng)釋放 CPU,或者是 CPU被另一個(gè)具有更高 rt_priority的實(shí)時(shí)進(jìn)程搶先,進(jìn)程放棄 CPU,被放到 SCHED_RR隊(duì)列的末尾排隊(duì)。 進(jìn)程間通信 ? 由于 Linux系統(tǒng)是多進(jìn)程并發(fā),所以,進(jìn)程與進(jìn)程之間需要相互交換數(shù)據(jù),即進(jìn)程間通信。 ? Linux進(jìn)程通信繼承了 Unix進(jìn)程通信方式,有信號(hào)、管道、消息、共享存儲(chǔ)區(qū)和信號(hào)量。 信號(hào) 1. 什么是信號(hào) ? 信號(hào)是一種用軟件來模擬中斷方式的異步通信機(jī)制,也被稱為軟中斷( Signal)。 ? 當(dāng)某事件發(fā)生時(shí)進(jìn)程會(huì)向其他相關(guān)進(jìn)程發(fā)出信號(hào),也就是通常所謂的發(fā)出通知。 ? 接收進(jìn)程事先并不知道什么時(shí)候信號(hào)到達(dá),當(dāng)接收到信號(hào)后,會(huì)按照通信雙方事先約定的信息處理方式進(jìn)行處理。 ? 信號(hào)按照發(fā)生的事件不同可分為硬件信號(hào)和軟件信號(hào)。 ? 硬件信號(hào)指通過計(jì)算機(jī)硬件引起信號(hào)發(fā)送,如按下鍵盤的某個(gè)鍵或某個(gè)硬件故障。 ? 軟件信號(hào)指通過系統(tǒng)函數(shù)調(diào)用形式引起信號(hào)發(fā)生,如 kill、raise、 alarm和 setitimer、 sigqueue以及一些非法運(yùn)算操作。 信號(hào) ? 在操作系統(tǒng)應(yīng)用中,當(dāng)系統(tǒng)運(yùn)行某進(jìn)程時(shí),如果發(fā)現(xiàn)進(jìn)程運(yùn)行有問題,操作系統(tǒng)提供了按下鍵盤上的 CtrlC來停止進(jìn)程的運(yùn)行。實(shí)際上,這是相當(dāng)于用戶進(jìn)程通過“ CtrlC”操作向系統(tǒng)的控制進(jìn)程發(fā)送了信號(hào)。系統(tǒng)控制進(jìn)程接收到該信號(hào)后,按事先約定的停止進(jìn)程運(yùn)行方式,控制進(jìn)程的運(yùn)行。 ? 每個(gè)進(jìn)程在運(yùn)行時(shí)都要通過信號(hào)機(jī)制檢查是否有其他進(jìn)程發(fā)送的信號(hào)到達(dá)。如果有信號(hào)到達(dá),則中斷正在執(zhí)行的程序并轉(zhuǎn)向與信號(hào)相對(duì)應(yīng)的處理程序,執(zhí)行對(duì)異常事件的處理。在處理完成后再返回原中斷點(diǎn)繼續(xù)執(zhí)行。信號(hào)對(duì)于進(jìn)程相當(dāng)于中斷對(duì)于處理器。 ? 用命令“ kill –l”可得到 Red hat ,如表 。 信號(hào) 表 Red hat 編號(hào) 信號(hào)名稱 編號(hào) 信號(hào)名稱 編號(hào) 信號(hào)名稱 編號(hào) 信號(hào)名稱 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 信號(hào) ? Linux操作系統(tǒng)繼承了 UNIX操作系統(tǒng)的信號(hào)機(jī)制,并在UNIX不可靠信號(hào)(由于 UNIX操作系統(tǒng)中的信號(hào)不支持排隊(duì),容易丟失,所以是不可靠的信號(hào)。)的基礎(chǔ)上提出了可靠信號(hào)。在 Red hat ,信號(hào)值在 32到 63的信號(hào)為可靠信號(hào)。 ? 除了支持 Unix早期信號(hào)語義函數(shù) signal外, Linux還支持語義符合 sigaction(實(shí)際上,該函數(shù)基于 BSD。 BSD為了實(shí)現(xiàn)可靠信號(hào)機(jī)制,又能夠統(tǒng)一對(duì)外接口,用 sigaction函數(shù)重新實(shí)現(xiàn)了 signal函數(shù))。 ? signal函數(shù)和 sigaction函數(shù)的最大區(qū)別在于,對(duì)所有信號(hào),經(jīng)過 sigaction安裝的信號(hào)都能傳遞信息給信號(hào)處理函數(shù),而經(jīng)過 signal安裝的信號(hào)卻不能向信號(hào)處理函數(shù)傳遞信息。 信號(hào) ? 同樣,對(duì)于信號(hào)發(fā)送函數(shù) kill()和 sigqueue()也是一樣的。即經(jīng)過 sigqueue()發(fā)送的信號(hào)都能傳遞信息給信號(hào)處理函數(shù),而經(jīng)過 kill()發(fā)送的信號(hào)卻不能傳遞給信號(hào)處理函數(shù)。 ? Linux進(jìn)程對(duì)信號(hào)的響應(yīng)有三種方式: ( 1)忽略信號(hào):對(duì)信號(hào)不做任何處理。其中 SIGKILL和SIGSTOP信號(hào)不能忽略; ( 2)捕捉信號(hào):定義信號(hào)處理函數(shù),當(dāng)信號(hào)發(fā)生時(shí),執(zhí)行相應(yīng)的處理函數(shù); ( 3)執(zhí)行缺省操作:對(duì)每種信號(hào)都有默認(rèn)操作。其中,對(duì)實(shí)時(shí)信號(hào)的缺省操作是終止進(jìn)程。 ? 采用何種方式來響應(yīng)信號(hào),取決于傳遞給相應(yīng) API函數(shù)的參數(shù)。 信號(hào) 2. 信號(hào)的發(fā)送 ? 信號(hào)發(fā)送是發(fā)送進(jìn)程調(diào)用發(fā)送函數(shù),通過核心向一個(gè)或一組進(jìn)程發(fā)送信號(hào)。 ? 普通用戶只能向自己的進(jìn)程或同組進(jìn)程發(fā)送信號(hào),超級(jí)用戶可以向系統(tǒng)中的所有進(jìn)程發(fā)送信號(hào)。 ? 信號(hào)發(fā)送后,如果目標(biāo)進(jìn)程正在一個(gè)可被中斷的優(yōu)先級(jí)上睡眠,則核心會(huì)立即將其喚醒。 ? Linux的發(fā)送信號(hào)的函數(shù)有: kill()、 sigqueue()、 raise()、alarm()、 setitimer()和 abort()。 信號(hào) ( 1) kill() 函數(shù) kill()函數(shù)用于發(fā)送信號(hào),其語法格式如下: int kill(pid_t pid,int sig)。 其中, pid是指定信號(hào)發(fā)往的進(jìn)程或進(jìn)程組的標(biāo)識(shí)符,通常: pid為正值,則核心將信號(hào)發(fā)送給直接指定接收信號(hào)的進(jìn)程標(biāo)識(shí)符; pid為 0,則核心將信號(hào)發(fā)送給與發(fā)送進(jìn)程同組的所有進(jìn)程; pid為 1,則核心將信號(hào)發(fā)送給除自身以外的所有進(jìn)程; pid小于 1,則核心將信號(hào)發(fā)送給進(jìn)程組 gid為 pid的所有進(jìn)程; 信號(hào) ? 如果調(diào)用者不允許將信號(hào)傳送到由 pid指定的進(jìn)程,則 kill函數(shù)調(diào)用失敗,函數(shù)返回值為 1,并且設(shè)定錯(cuò)誤信號(hào)errno。 ? 參數(shù) sig指定欲發(fā)送信號(hào)的類型,可以使用信號(hào)的號(hào)碼,也可以使用符號(hào)名。 ? 當(dāng) sig的值為 0時(shí),表示不發(fā)送信號(hào),但是,仍會(huì)進(jìn)行錯(cuò)誤檢查,函數(shù)調(diào)用成功則返回 0。 ? 因此,利用發(fā)送 0信號(hào)可以檢查接收進(jìn)程是否存在,或當(dāng)前進(jìn)程是否具有向接收進(jìn)程發(fā)送信號(hào)的權(quán)限。超級(jí)用戶權(quán)限的進(jìn)程可以向任何進(jìn)程發(fā)送信號(hào)。 信號(hào) 例 將軟件終止信號(hào)(信號(hào)碼為 15)發(fā)送給進(jìn)程 pro1,查得pro1的 pid為 129。 kill(129,15) 或 kill(129,SIGTERM); 另外,在 Shell中也可以用 kill作為命令發(fā)送信號(hào),命令格式為: kill [sig] pid 其中 pid為接收進(jìn)程的標(biāo)識(shí)符。 例 用命令 kill將信號(hào) SIGUSR2送到進(jìn)程 129。 $kill –17 129 信號(hào) ( 2) sigqueue() 函數(shù) 函數(shù) sigqueue()用于發(fā)送具有傳遞參數(shù)的信號(hào),其語法格式如下: int sigqueue(pid_t pid,int sig, const union sigval val)。 其中,第一個(gè)參數(shù)是指定接收信號(hào)的進(jìn)程標(biāo)識(shí)符,第二個(gè)參數(shù)是即將發(fā)送的信號(hào),第三個(gè)參數(shù)是聯(lián)合數(shù)據(jù)結(jié)構(gòu) union sigval,指定了信號(hào)傳遞的參數(shù),即通常所說的 4字節(jié)值,定義如下: typedef union sigval { int sival_int。 void *sival_ptr。 }sigval_t。 如果 sigqueue函數(shù)調(diào)用成功,則返回 0;否則,返回 1。 信號(hào) ? 雖然函數(shù) sigqueue()能夠傳遞更多的信息,功能更加靈活和強(qiáng)大。但是,函數(shù) sigqueue()只能向一個(gè)進(jìn)程發(fā)送信號(hào),不能向一個(gè)進(jìn)程組發(fā)送信號(hào)。 ? 同樣, sig的值為 0,表示不發(fā)送信號(hào)。函數(shù)調(diào)用成功返回0值。 0值信號(hào)可用于檢查 pid的有效性以及當(dāng)前進(jìn)程是否有權(quán)限向目標(biāo)進(jìn)程發(fā)送信號(hào)。 信號(hào) ( 3) raise() ? raise()函數(shù)用于向進(jìn)程本身發(fā)送信號(hào)。調(diào)用成功返回 0;否則,返回 1。 raise()函數(shù)的語法格式如下: int raise(int sig) 參數(shù) sig為即將發(fā)送的信號(hào)值。 信號(hào) ( 4) alarm() 函數(shù) alarm()專門為 SIGALRM信號(hào)而設(shè),在指定時(shí)間后,會(huì)向調(diào)用函數(shù)的進(jìn)程發(fā)送信號(hào) SIGALRM,所以SIGALRM信號(hào)又稱為鬧鐘時(shí)間。 alarm()函數(shù)的語法格式如下: unsigned int alarm(unsigned int seconds) 參數(shù) seconds為鬧鐘時(shí)間(秒)。 進(jìn)程調(diào)用 alarm后,任何以前的 alarm()調(diào)用都將無效。 如果參數(shù) seconds為零,那么進(jìn)程內(nèi)將不再包含任何鬧鐘時(shí)間。 如果調(diào)用 alarm()前,進(jìn)程中已經(jīng)設(shè)置了鬧鐘時(shí)間,則返回上一個(gè)鬧鐘時(shí)間的剩余時(shí)間,否則返回 0。 信號(hào) ( 5) setitimer() 函數(shù) setitimer()比函數(shù) alarm()功能強(qiáng)大,支持 3種類型的定時(shí)器: ITIMER_REAL:設(shè)定鬧鐘的絕對(duì)時(shí)間。經(jīng)過指定的時(shí)間后,內(nèi)核將發(fā)送 SIGALRM信號(hào)給本進(jìn)程; ITIMER_VIRTUAL:設(shè)定程序執(zhí)行時(shí)間。經(jīng)過指定的時(shí)間后,內(nèi)核將發(fā)送 SIGVTALRM信號(hào)給本進(jìn)程; ITIMER_PROF:設(shè)定進(jìn)程執(zhí)行以及內(nèi)核因本進(jìn)程而消耗的時(shí)間和,經(jīng)過指定的時(shí)間后,內(nèi)核將發(fā)送 ITIMER_VIRTUAL信號(hào)給本進(jìn)程; 信號(hào) setitimer()函數(shù)的語法格式如下: int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue))。 該函數(shù)調(diào)用成功返回 0,否則返回 1。其中: 第一個(gè)參數(shù)指定定時(shí)器類型; 第二個(gè)參數(shù)是結(jié)構(gòu) itimerval的一個(gè)實(shí)例,結(jié)構(gòu) itimerval定義如下: struct itimerval { struct timeval it_interval。 /* next value */ struct timeval it_value。 /* current value */ }。 struct timeval { long tv_sec。 /* seconds */ long tv_usec。 /* microseconds */ }。 第三個(gè)參數(shù)可不做處理。 信號(hào) ( 6) abort() 函數(shù) abort()用于向進(jìn)程發(fā)送 SIGABORT信號(hào),默認(rèn)情況下進(jìn)程會(huì)異常退出。其語法格式如下: void abort(void)。 該函數(shù)無返回值。 即使 SIGABORT被進(jìn)程設(shè)置為阻塞信號(hào),調(diào)用 abort()后,SIGABORT仍然能被進(jìn)程接收。 信號(hào) 3. 信號(hào)的安裝和接收 進(jìn)程要能夠接收信號(hào)并作相應(yīng)處理,則必須在進(jìn)程中安裝信號(hào)。用函數(shù) signal()和 sigaction()安裝信號(hào)。 ( 1) signal() 函數(shù) signal()不支持信號(hào)傳遞信息,主要用于前 32種非實(shí)時(shí)信號(hào)的安裝。其語法格式如下:
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1