




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、2009nLinux實驗環(huán)境n系統(tǒng)調(diào)用n其他問題n實驗講解n系統(tǒng)常用命令n編輯器n編譯器n調(diào)試器n顯示目錄文件 lsn執(zhí)行格式: ls -atFlgR name (name可為文件或目錄名稱)例: ls 顯示出當前目錄下的文件ls -a 顯示出包含隱藏文件的所有文件ls -t 按照文件最后修改時間顯示文件 ls -F 顯示出當前目錄下的文件及其類型ls -l 顯示目錄下所有文件的許可權(quán)、擁有者、文件大 小、修改時間及名稱ls -lg 同上ls -R 顯示出該目錄及其子目錄下的文件 n建新目錄 mkdirn執(zhí)行格式: mkdir directory-name例: mkdir dir1新建一個名字
2、為dir1的目錄n刪除目錄rmdirn執(zhí)行格式: rmdir directory-name 或 rm directory-name例:rmdir dir1 刪除目錄dir1,但它必須是空目錄,否則無法刪除rm -r dir1 刪除目錄dir1及其下所有文件及子目錄rm -rf dir1 不管是否空目錄,統(tǒng)統(tǒng)刪除,而且不給出提示,使用時要小心n改變工作目錄位置 cdn執(zhí)行格式: cd name 例: cd 改變目錄位置至用戶login時的working directorycd dir1 改變目錄位置,至dir1目錄cd user 改變目錄位置,至用戶的working directorycd .
3、改變目錄位置,至當前目錄的上層目錄cd ./user 改變目錄位置,至上一級目錄下的user目錄cd /dir-name1/dir-name2 改變目錄位置,至絕對路徑cd - 回到進入當前目錄前的上一個目錄n顯示當前所在目錄 pwdn執(zhí)行格式: pwd刪除文件 rm執(zhí)行格式: rm filename 例: rm file 刪除名字為file的文件n復制文件 cpn執(zhí)行格式: cp -r source destination 例: cp file1 file2 將file1復制成file2cp file1 dir1 將file1復制到目錄dir1cp /tmp/file1 將file1復制到當
4、前目錄cp /tmp/file1 file2 將file1 復制到當前目錄名為 file2cp r dir1 dir2 (recursive copy)復制整個目 錄。 n移動或更改文件、目錄名稱 mvn執(zhí)行格式: mv source destination例: mv file1 file2 將文件file1,更名為file2mv file1 dir1 將文件file1,移到目錄dir1 下mv dir1 dir2 將目錄dir1,更名為dir2n查看系統(tǒng)目前的進程 ps n執(zhí)行格式: ps -aux例: ps 或ps -x 查看系統(tǒng)中屬于自己的processps -au 查看系統(tǒng)中所有使用者
5、的processps -aux 查看系統(tǒng)中包含系統(tǒng)內(nèi)部及所有使用者 的processps -aux|grep apache 找出系統(tǒng)中運行的所有名稱 中帶有“apache”串的 processn結(jié)束或終止進程 killn執(zhí)行格式: kill -9 PID (PID為利用ps命令所查出的process ID)例: kill 456kill -9 456 終止process ID 為456的processn命令在線幫助 mann執(zhí)行格式: man command例: man ls 查詢ls這個指令的用法nvi的全稱是visual editor,它是在Unix/Linux 上被廣泛使用的中英文編輯器
6、。n啟動vivi 進入vi編輯器界面,沒有為 所編輯的文件命名vi filename 進入vi編輯器界面,并將所 編輯的文件命名為filename vi提供三種工作模式:n輸入編輯模式支持:輸入文本信息n命令編輯模式支持:進行刪除、修改等操作信息n命令模式支持:進行存盤、退出等操作注意:使用者進入vi后,即處在命令模式下,要輸入信息,則要切換至輸入模式。命令編輯模式下:在命令模式下:ngedit是Unix/Linux系統(tǒng)下的另一種中英文文本編輯器,支持窗口模式,更加方便快捷。n啟動gedit:gedit 進入gedit編輯器界面, 沒有為所編輯的文件命名gedit filename 進入ged
7、it編輯器界面, 并將所編輯的文件命名為 filenamenLINUX上可用的C編譯器是GNU C編譯器(GCC),一般的Unix下使用的是CC編譯器n通常后跟一些選項和文件名來使用GCC編譯器?;居梅ㄈ缦拢?gcc options filenamesn通過命令行選項指定編譯過程中的具體操作GCC常用選項nGCC有超過100個的編譯選項可用,這些選項中的許多可能永遠都不會用到,但一些主要的選項將會頻繁使用。很多的GCC選項包括一個以上的字符,因此必須為每個選項指定各自的連字符,并且就像大多數(shù)LINUX 命令一樣不能在一個單獨的連字符后跟一組選項。例如,下面的命令是不同的: gcc -p -g
8、 test.c gcc -p test.c 第一條命令告訴GCC編譯test.c時為prof命令建立剖析(profile)信息并且把調(diào)試信息加入到可執(zhí)行文件里。第二條命令告訴GCC只為gprof命令建立剖析信息。GCC常用選項n當不用任何選項編譯一個程序時,GCC將建立(假定編譯成功)一個名為a.out的可執(zhí)行文件。例如, gcc test.c 編譯成功后,當前目錄下就產(chǎn)生了一個a.out文件。n也可用-o選項來為即將產(chǎn)生的可執(zhí)行文件指定一個文件名來代替a.out。例如: gcc o count count.c 此時得到的可執(zhí)行文件就不再是a.out,而是count。執(zhí)行文件 n格式: ./可
9、執(zhí)行文件名例:./a.out ./countnLINUX包含了一個叫gdb的GNU調(diào)試程序。gdb是一個用來調(diào)試C和C+程序的強有力調(diào)試器。它使你能在程序運行時觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存的使用情況。它具有以下一些功能:監(jiān)視程序中變量的值;設置斷點以使程序在指定的代碼行上停止執(zhí)行;一行行的執(zhí)行代碼。n為了使gdb正常工作,必須使你的程序在編譯時包含調(diào)試信息。調(diào)試信息里包含你程序里的每個變量的類型和在可執(zhí)行文件里的地址映射以及源代碼的行號。gdb利用這些信息使源代碼和機器碼相關聯(lián)。n在編譯時用 g 選項打開調(diào)試選項。n調(diào)試命令應用舉例(1)設有一源程序 test.c(2)編譯,gcc -ggdb o
10、 greet greet.c(3)gdb greet ,出現(xiàn)提示符(gdb),此時可在提示符下輸入gdb的命令了,如:(gdb)run(gdb)list(4)退出調(diào)試狀態(tài),返回系統(tǒng)提示符下, (gdb)quitn字面上講,系統(tǒng)調(diào)用(也稱為“syscall”)就是一條類似于“add”或者“jump”的指令。從更高的層面上講,系統(tǒng)調(diào)用是用戶級程序要求操作系統(tǒng)為它做某些事情的途徑。n首先,用戶程序為系統(tǒng)調(diào)用設置參數(shù)。其中一個參數(shù)是系統(tǒng)調(diào)用編號(稍后對此進行詳述)。注意,所有這些都是由庫函數(shù)自動完成的,除非您是使用匯編編程。參數(shù)設置完成后,程序執(zhí)行“系統(tǒng)調(diào)用”指令。這個指令會導致一個異常:產(chǎn)生一個事件
11、,這個事件會致使處理器跳轉(zhuǎn)到一個新的地址,并開始執(zhí)行那里的代碼。 舉例說明:1.fork( ) 創(chuàng)建進程 stdio.h 2.2.waitwait( )等待子進程運行結(jié)束 stdio.h3.3.exitexit( )終止進程的執(zhí)行 stdio.h4.4.lockf(files,function,size) lockf(files,function,size) 鎖定文件 unistd.h 5.5.kill( ) kill( ) 發(fā)送信號發(fā)送信號 signal.h signal.h 6.6.signal( ) signal( ) 預置對信號的處理方式預置對信號的處理方式 signal.hsigna
12、l.h 注意:程序中用到系統(tǒng)調(diào)用的時候,要包含相關的頭文件如: #include fork( ) #include pid_t fork(void); n創(chuàng)建一個新進程。 n系統(tǒng)調(diào)用格式: pid=fork( )n參數(shù)定義:int fork( )nfork( )返回值意義如下:0:在子進程中,pid變量保存的fork( )返回值為0,表示當前進程是子進程。0:在父進程中,pid變量保存的fork( )返回值為子進程的id值(進程唯一標識符)。-1:創(chuàng)建失敗。n如果fork( )調(diào)用成功,它向父進程返回子進程的PID,并向子進程返回0,即fork( )被調(diào)用了一次,但返回了兩次。此時OS在內(nèi)存中
13、建立一個新進程,所建的新進程是調(diào)用fork( )父進程(parent process)的副本,稱為子進程(child process)。子進程繼承了父進程的許多特性,并具有與父進程完全相同的用戶級上下文。父進程與子進程并發(fā)執(zhí)行。核心為fork( )完成以下操作:n為新進程分配一進程表項和進程標識符 進入fork( )后,核心檢查系統(tǒng)是否有足夠的資源來建立一個新進程。若資源不足,則fork( )系統(tǒng)調(diào)用失敗;否則,核心為新進程分配一進程表項和唯一的進程標識符。n檢查同時運行的進程數(shù)目 超過預先規(guī)定的最大數(shù)目時,fork( )系統(tǒng)調(diào)用失敗。n拷貝進程表項中的數(shù)據(jù) 將父進程的當前目錄和所有已打開的數(shù)
14、據(jù)拷貝到子進程表項中,并置進程的狀態(tài)為“創(chuàng)建”狀態(tài)。n子進程繼承父進程的所有文件 對父進程當前目錄和所有已打開的文件表項中的引用計數(shù)加1。n為子進程創(chuàng)建進程上、下文 進程創(chuàng)建結(jié)束,設子進程狀態(tài)為“內(nèi)存中就緒”并返回子進程的標識符。n子進程執(zhí)行 雖然父進程與子進程程序完全相同,但每個進程都有自己的程序計數(shù)器PC(注意子注意子進程的進程的PC開始位置開始位置),然后根據(jù)pid變量保存的fork( )返回值的不同,執(zhí)行了不同的分支語句。wait( )#include n等待子進程運行結(jié)束。如果子進程沒有完成,父進程一直等待。wait( )將調(diào)用進程掛起,直至其子進程因暫?;蚪K止而發(fā)來軟中斷信號為止。
15、如果在wait( )前已有子進程暫停或終止,則調(diào)用進程做適當處理后便返回。n系統(tǒng)調(diào)用格式:int wait(status)int *status;n其中,status是用戶空間的地址。它的低8位反應子進程狀態(tài),為0表示子進程正常結(jié)束,非0則表示出現(xiàn)了各種各樣的問題;高8位則帶回了exit( )的返回值。exit( )返回值由系統(tǒng)給出。核心對wait( )作以下處理:n首先查找調(diào)用進程是否有子進程,若無,則返回出錯碼;n若找到一處于“僵死狀態(tài)”的子進程,則將子進程的執(zhí)行時間加到父進程的執(zhí)行時間上,并釋放子進程的進程表項;n若未找到處于“僵死狀態(tài)”的子進程,則調(diào)用進程便在可被中斷的優(yōu)先級上睡眠,等
16、待其子進程發(fā)來軟中斷信號時被喚醒。exit( )n終止進程的執(zhí)行。n系統(tǒng)調(diào)用格式:void exit(status)int status;n其中,status是返回給父進程的一個整數(shù),以備查考。n為了及時回收進程所占用的資源并減少父進程的干預,UNIX/LINUX利用exit( )來實現(xiàn)進程的自我終止,通常父進程在創(chuàng)建子進程時,應在進程的末尾安排一條exit( ),使子進程自我終止。exit(0)表示進程正常終止,exit(1)表示進程運行有錯,異常終止。n如果調(diào)用進程在執(zhí)行exit( )時,其父進程正在等待它的終止,則父進程可立即得到其返回的整數(shù)。 核心須為exit( )完成以下操作:n關閉
17、軟中斷n回收資源n寫記帳信息n置進程為“僵死狀態(tài)”lockf(files,function,size)n用鎖定文件的某些段或者整個文件。n本函數(shù)的頭文件為 #include unistd.hn系統(tǒng)調(diào)用格式:int lockf(files,function,size)int files,function;long size;n其中:files是文件描述符;function是鎖定和解鎖:1表示鎖定,0表示解鎖。size是鎖定或解鎖的字節(jié)數(shù),為0,表示從文件的當前位置到文件尾。kill( ) #include n系統(tǒng)調(diào)用格式int kill(pid,sig)int pid,sig;n其中,pid是一
18、個或一組進程的標識符,參數(shù)sig是要發(fā)送的軟中斷信號。(1)pid0時,核心將信號發(fā)送給進程pid。(2)pid=0時,核心將信號發(fā)送給與發(fā)送進程同組的所有進程。(3)pid=-1時,核心將信號發(fā)送給所有用戶標識符真正等于發(fā)送進程的有效用戶標識號的進程。signal( )n預置對信號的處理方式,允許調(diào)用進程控制軟中斷信號。n系統(tǒng)調(diào)用格式signal(sig,function)int sig;void (*func) ( )n其中sig用于指定信號的類型,sig為0則表示沒有收到任何信號,其它信號類型見下頁表格 n內(nèi)容:編寫一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個子進程,再用系統(tǒng)調(diào)用sign
19、al( )讓父進程捕捉鍵盤上來的中斷信號(即按ctrl+c鍵),當捕捉到中斷信號后,父進程用系統(tǒng)調(diào)用kill( )向兩個子進程發(fā)出信號,子進程捕捉到信號后,分別輸出下列信息后終止: Child process 1 is killed by parent! Child process 2 is killed by parent! 父進程等待兩個子進程終止后,輸出以下信息后終止: Parent process is killed!n實驗要求:(1) 運行程序并分析結(jié)果。(2) 在程序中什么位置用了系統(tǒng)調(diào)用wait()和exit(),為什么?n知識要點:進程的創(chuàng)建;父進程和子進程的關系;信號的種類;
20、自定義信號處理函數(shù);信號的發(fā)送;進程終止。n系統(tǒng)調(diào)用:fork, signal, kill, wait, exitsleep, pausen示例程序:n進程創(chuàng)建過程l子進程是父進程的復制品。例如,子進程獲得父進程數(shù)據(jù)空間、堆和棧的復制品。lfork該函數(shù)被調(diào)用一次,但返回兩次。兩次返回的區(qū)別是子進程的返回值是0,而父進程的返回值則是新子進程的進程I D。l將子進程I D返回給父進程的理由是:因為一個進程的子進程可以多于一個,所以沒有一個函數(shù)使一個進程可以獲得其所有子進程的進程I D。f o r k使子進程得到返回值0的理由是:一個進程只會有一個父進程,所以子進程總是可以調(diào)用g e t p p
21、i d以獲得其父進程的進程I D。n父進程和子進程的關系:進程樹結(jié)構(gòu) (pstree命令)nfork系統(tǒng)調(diào)用:#include #include pid_t fork(void);返回:子進程中為0,父進程中為子進程I D,出錯為-1n例子 apue8-1.c$ a . o u ta write to stdoutbefore forkpid = 430, glob = 7, var = 89 子 進 程 的變量值改變了pid = 429, glob = 6, var = 88 父 進 程 的變量值沒有改變l說明:子進程復制了父進程數(shù)據(jù)空間、堆和棧。注意,這是子進程所擁有的拷貝拷貝。父、子進程
22、并不共享這些存儲空間部分。(如果正文段是只讀的,則父、子進程共享正文段。)n進一步測試,當將標準輸出重新定向到一個文件時:$ a.out temp.out$ cat temp.outa write to stdoutbefore forkpid = 432, glob = 7, var = 89before forkpid = 431, glob = 6, var = 88n說明:l子進程繼承父進程重定向之后的輸出文件;l得到p r i n t f輸出行兩次。其原因是,如果標準輸出連到終端設備則它是行緩存的,否則它是全緩存的。l在f o r k之前調(diào)用了p r i n t f一次,但當調(diào)用f
23、o r k時,該行數(shù)據(jù)仍在緩存中,然后在父進程數(shù)據(jù)空間復制到子進程中時,該緩存數(shù)據(jù)也被復制到子進程中。于是那時父、子進程各自有了帶該行內(nèi)容的緩存。在e x i t之前的第二個p r i n t f將其數(shù)據(jù)添加到現(xiàn)存的緩存中。當每個進程終止時,其緩存中的內(nèi)容被寫到相應文件中。(兩次)n在重新定向父進程的標準輸出時,子進程的標準輸出也被重新定向。實際上, f o r k的一個特性是所有由父進程打開的描述符都被復制到子進程中。父、子進程每個相同的打開描述符共享一個文件表項。nf o r k有兩種用法:l(1) 一個父進程希望復制自己,使父、子進程同時執(zhí)行不同的代碼段。這在網(wǎng)絡服務進程中是常見的父進程
24、等待委托者的服務請求。當這種請求到達時,父進程調(diào)用f o r k,使子進程處理此請求。父進程則繼續(xù)等待下一個服務請求。l(2) 一個進程要執(zhí)行一個不同的程序。這對s h e l l是常見的情況。在這種情況下,子進程在從f o r k返回后立即調(diào)用e x e c。n某些操作系統(tǒng)將( 2 )中的兩個操作( f o r k之后執(zhí)行e x e c )組合成一個,并稱其為s p a w n。U N I X將這兩個操作分開,因為在很多場合需要單獨使用f o r k,其后并不跟隨e x e c。另外,將這兩個操作分開,使得子進程在f o r k和e x e c之間可以更改自己的屬性。如I / O重新定向、用
25、戶I D、信號排列等。進程有三種正常終止法及兩種異常終止法。n(1) 正常終止:l(a) 在m a i n函數(shù)內(nèi)執(zhí)行r e t u r n語句。如在7 . 3節(jié)中所述,這等效于調(diào)用e x i t。l(b) 調(diào)用e x i t函數(shù)。此函數(shù)由ANSI C定義,其操作包括調(diào)用各終止處理程序,然后關閉所有標準I / O流等。 (c) 調(diào)用_ e x i t系統(tǒng)調(diào)用函數(shù)。此函數(shù)由e x i t調(diào)用,它處理U N I X特定的細節(jié)。_ e x i t是由P O S I X . 1說明的。n(2) 異常終止:l(a) 調(diào)用a b o r t。它產(chǎn)生S I G A B RT信號,所以是下一種異常終止的一種特例
26、。l(b) 當進程接收到某個信號時。(第1 0章將較詳細地說明信號。)進程本身(例如調(diào)用a b o r t函數(shù))、其他進程和內(nèi)核都能產(chǎn)生傳送到某一進程的信號。例如,進程越出其地址空間訪問存儲單元,或者除以0,內(nèi)核就會為該進程產(chǎn)生相應的信號。 #include void exit(int status);n終止進程能夠通知其父進程它是如何終止的。對于e x i t和_ e x i t,這是依靠傳遞給它們的退出狀態(tài)( exit status)參數(shù)來實現(xiàn)的。在異常終止情況,內(nèi)核(不是進程本身)產(chǎn)生一個指示其異常終止原因的終止狀態(tài)( termination status)。n在任意一種情況下,該終止進
27、程的父進程都能用w a i t或w a i t p i d函數(shù)(在下一節(jié)說明)取得其終止狀態(tài)。n但是如果父進程在子進程之前終止,則將如何呢?其回答是對于其父進程已經(jīng)終止的所有進程,它們的父進程都改變?yōu)閕 n i t進程。我們稱這些進程由i n i t進程領養(yǎng)。#include #include pid_t wait(int s t* a t l o c) ;n調(diào)用w a i t或w a i t p i d的進程可能會:l阻塞阻塞(如果其所有子進程都還在運行)。 l帶子進程的終止狀態(tài)立即返回(如果一個子進程已終止,正等待父進程存取其終止狀態(tài))。l出錯立即返回(如果它沒有任何子進程)。n控制終端l
28、如果一個對話期有一個控制終端,則它有一個前臺進程組,其他進程組則為后臺進程組。l 無論何時鍵入中斷鍵(常常是D E L E T E或C t r l - C)或退出鍵(常常是C t r l - ),就會造成將中斷信號或退出信號送至前臺進程組的所有進程送至前臺進程組的所有進程。l 如果終端界面檢測到調(diào)制解調(diào)器已經(jīng)脫開連接,則將掛斷信號送至控制進程(對話期首進程。)信號n信號是軟件中斷。很多比較重要的應用程序都需處理信號。信號提供了一種處理異步事件的方法:終端用戶鍵入中斷鍵,則會通過信號機構(gòu)停止一個程序。n每個信號都有一個名字。這些名字都以三個字符S I G開頭。nsignumber.h - Sig
29、nal number definitions. Linux version.#define SIGHUP 1 /* Hangup (POSIX). */#define SIGINT 2 /* Interrupt (ANSI). */#define SIGQUIT 3 /* Quit (POSIX). */#define SIGILL 4 /* Illegal instruction (ANSI). */#define SIGTRAP 5 /* Trace trap (POSIX). */#define SIGABRT 6 /* Abort (ANSI). */#define SIGIOT 6
30、/* IOT trap (4.2 BSD). */#define SIGBUS 7 /* BUS error (4.2 BSD). */#define SIGFPE 8 /* Floating-point exception (ANSI). */#define SIGKILL 9 /* Kill, unblockable (POSIX). */#define SIGUSR1 10 /* User-defined signal 1 (POSIX). */#define SIGSEGV 11 /* Segmentation violation (ANSI). */#define SIGUSR2 1
31、2 /* User-defined signal 2 (POSIX). */n很多條件可以產(chǎn)生一個信號。l 當用戶按某些終端鍵時,產(chǎn)生信號。在終端上按D E L E T E鍵通常產(chǎn)生中斷信號(S I G I N T)。l 硬件異常產(chǎn)生信號:除數(shù)為0、無效的存儲訪問等等。這些條件通常由硬件檢測到,并將其通知內(nèi)核。然后內(nèi)核為該條件發(fā)生時正在運行的進程產(chǎn)生適當?shù)男盘?。例如,對?zhí)行一個無效存儲訪問的進程產(chǎn)生一個S I G S E G V。l 進程用k i l l ( 2 )函數(shù)可將信號發(fā)送給另一個進程或進程組。自然,有些限制:接收信號進程和發(fā)送信號進程的所有者必須相同,或發(fā)送信號進程的所有者必須是超級
32、用戶。l 用戶可用k i l l ( 1 )命令將信號發(fā)送給其他進程。此程序是k i l l函數(shù)的界面。常用此命令終止一個失控的后臺進程。n信號是異步事件異步事件的經(jīng)典實例。產(chǎn)生信號的事件對進程而言是隨機出現(xiàn)的。進程不能只是測試一個變量(例如e r r n o )來判別是否發(fā)生了一個信號,而是必須告訴內(nèi)核“在此信號發(fā)生時,請執(zhí)行下列操作在此信號發(fā)生時,請執(zhí)行下列操作”。- 捕捉信號。為了做到這一點要通知內(nèi)核在某種信號發(fā)生時,調(diào)用一個用戶函數(shù)。在用戶函數(shù)中,可執(zhí)行用戶希望對這種事件進行的處理。 #include typedef void (*sighandler_t) (int); sighan
33、dler_t signal( int signum, sighandler_t handler);nk i l l函數(shù)將信號發(fā)送給進程或進程組。#include #include int kill (pid_t p i d, int s i g n o) ; p i d 0 將信號發(fā)送給進程I D為p i d的進程。 p i d = 0 將信號發(fā)送給其進程組I D等于發(fā)送進程的進程組I D,而且發(fā)送進程有許可權(quán)向其發(fā)送信號的所有進程。 pid 0 將信號發(fā)送給其進程組I D等于p i d絕對值,而且發(fā)送進程有許可權(quán)向其發(fā)送信號的所有進程。np a u s e函數(shù)使調(diào)用進程掛起直至捕捉到一個信號
34、。#include int pause(void);nsleep函數(shù)#include unsigned int sleep (unsigned int seconds) ;此函數(shù)使調(diào)用進程被掛起直到:(1) 已經(jīng)過了s e c o n d s所指定的墻上時鐘時間,或者(2) 該進程捕捉到一個信號并從信號處理程序返回。(提早返回)n實驗1 示例程序見 實驗二實驗二 模擬進程調(diào)度算法模擬進程調(diào)度算法n內(nèi)容:實現(xiàn)教材中所描述的短進程優(yōu)先調(diào)度算法(SPF)和時間片輪轉(zhuǎn)調(diào)度算法(RR)。n要求:l進程通過定義一個進程控制塊的數(shù)據(jù)結(jié)構(gòu)(PCB)來表示;l每個進程需要賦予進程ID、進程到達時間、進程需要運行
35、的總時間的屬性;l在RR中,以1為時間片單位;l運行時,輸入5個進程序列,按照進程的ID輸出其執(zhí)行序列。#define PNUM 20struct pcb int pid; int t_arrive; int t_need; ;/struct pcb procsPNUM;/隨機序列生成:srand( (unsigned)getpid() ); /初始化procsi.t_need= rand()%10; / 0.9 time unitn實驗三實驗三 多進程(線程)實現(xiàn)快速排序多進程(線程)實現(xiàn)快速排序l內(nèi)容:編多進程及多線程程序?qū)崿F(xiàn)對10000個隨機數(shù)的快速排序算法。l要求:l產(chǎn)生10000個隨
36、機數(shù),編寫一個多進程(線程)實現(xiàn)快速排序算法; 要求說明你的程序運行的系統(tǒng)資源配置,給出測試結(jié)果并對測試程序和結(jié)果做出說明. 回答用多進程實現(xiàn)和多線程實現(xiàn)體現(xiàn)了什么差異,產(chǎn)生的原因是什么?4實現(xiàn)提示: l每次數(shù)據(jù)分割后產(chǎn)生兩個新的進程(線程)處理分割后的數(shù)據(jù);l每個進程(線程)處理的數(shù)據(jù)小于500以后不再分割l內(nèi)存文件映射mmap()n快速排序:快速排序: void q_sort(int numbers, int left, int right) int pivot, l_hold, r_hold; l_hold = left; r_hold = right; pivot = numbersl
37、eft; while (left = pivot) & (left right) right-; if (left != right) numbersleft = numbersright; left+; while (numbersleft = pivot) & (left right) left+; if (left != right) numbersright = numbersleft; right-; numbersleft = pivot; pivot = left; left = l_hold; right = r_hold; if (left pivot) q_
38、sort(numbers, pivot+1, right);n創(chuàng)建一個線程 nint pthread_create(pthread_t * thread, const pthread_attr_t * attr,void * (*start_routine)(void *), void *arg);參數(shù)參數(shù):lthread - returns the thread id. (unsigned long int defined in bits/pthreadtypes.h)創(chuàng)建線程的IDlattr - Set to NULL if default thread attributes are used. attr指出線程創(chuàng)建時候的屬性,我們用NULL來表明使用缺省屬性lvoid * (*start_routine) - pointer to the function to be threaded. Function has a single argument: pointer to void. start_routine函數(shù)指針是線程創(chuàng)建成功後開始執(zhí)行的函數(shù)l*arg - pointer to argument of function. To pass multiple arguments, send a pointer to a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安徽綠海商務職業(yè)學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- B超肝區(qū)知識課件
- 診療常規(guī)及技術規(guī)范知識培訓
- ccaa服務認證知識課件
- 倉儲物流計件勞動合同
- 晉中學院《熱質(zhì)交換原理與設備》2023-2024學年第一學期期末試卷
- 陜西省藍田縣聯(lián)考2024-2025學年初三下學期二模考試英語試題試卷含答案
- 人教版數(shù)學2.百分數(shù)(二)折扣同步練習六年級下冊含答案
- 2024年八月跨河輸氣管道浮船輔助拆除水流監(jiān)測合同
- 鄭州工業(yè)安全職業(yè)學院《中西醫(yī)結(jié)合內(nèi)科學(一)》2023-2024學年第一學期期末試卷
- 《知識產(chǎn)權(quán)執(zhí)法》課件
- 2024年大學試題(管理類)-港口企業(yè)管理學歷年高頻考點試卷專家薈萃含答案
- 高中化學-分子晶體和原子晶體教學設計學情分析教材分析課后反思
- 橋梁養(yǎng)護風險辨識手冊
- 2021年青海省中考化學試卷(附答案詳解)
- 《曼陀羅繪畫療愈-初三減壓》PPT
- 小學生三好學生競選演講稿PPT幻燈片
- 養(yǎng)老機構(gòu)員工考核評分表
- 北京市海淀區(qū)2022-2023學年高三下學期一??荚嚉v史試卷(含答案)
- 季節(jié)性安全檢查表(四季)
- 2023年貴州省中學生生物學競賽考試(初賽)試題( 含答案解析 )
評論
0/150
提交評論