南陽理工13級高級編程復習范圍_第1頁
南陽理工13級高級編程復習范圍_第2頁
南陽理工13級高級編程復習范圍_第3頁
南陽理工13級高級編程復習范圍_第4頁
南陽理工13級高級編程復習范圍_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

進程是一個具有一定獨立功能的程序的一次運行活動。內核空間與用戶空間是程序執(zhí)行的兩種不同狀態(tài),通過系統(tǒng)調用和_硬件中斷能夠完成從用戶空間到內核空間的轉移。嵌入式Linux應用中,主要的存儲設備為Flash和RAM。linux中有四種常見的文件類型,分別是普通文件,目錄文件,設備文件,鏈接文件。使用alarm函數(shù)可以在進程中設置一個定時器,當定時器指定的時間到時,它就向進程發(fā)送SIGALARM信號。connect函數(shù)函數(shù)是客戶端用來同服務端連接的,成功時返回0。TCP/IP協(xié)議族的網(wǎng)絡模型包括網(wǎng)絡接口層、傳輸層、網(wǎng)絡層和應用層四個層次。嵌入式Linux系統(tǒng)由Linux內核和文件系統(tǒng)兩部分構成,兩者缺一不可。Flash作為嵌入式系統(tǒng)的主要存儲媒介,主要有NOR和NAND兩種技術。進程的運行環(huán)境包括:代碼段,數(shù)據(jù)段,堆,棧,環(huán)境變量,系統(tǒng)數(shù)據(jù)。10.在嵌入式系統(tǒng)中,通常沒有像BIOS那樣的固件程序,因此整個系統(tǒng)的加載啟動任務就完全由BootLoader來完成。利用lseek函數(shù)的返回值為文件的長度的函數(shù)調用是lseek(fd,0,SEEK_END)進程中訪問臨界資源的那段程序代碼稱為臨界區(qū)。Linux中的網(wǎng)絡編程通過Socket接口實現(xiàn),它是一種文件描述符。Linux引入虛擬文件系統(tǒng)VFS(VirtualFileSystem)為各類文件系統(tǒng)提供一個統(tǒng)一的應用編程接口。人工創(chuàng)建字符設備節(jié)點文件/dev/test,主設備號為250,次設備號為0的命令為mknod/dev/testc2500ARMLinux啟動過程分為四步,分別是啟動引導程序,加載內核,加載根文件系統(tǒng),啟動用戶應用程序。1下列基于Arm開發(fā)板的內核制作步驟錯誤的是:(B)A.makedistcleanB.makemanuconfigC.makemenuconfigARCH=armD.makeuImageARCH=armCROSS_COMPILE=arm-linux-2.下列主要使用NAND型flash的文件系統(tǒng)的是:(B)JFFS2B.YaffsC.CramfsD.NFS3.如果把bootloader的啟動過程分為stag1和stag2,那么下邊哪一項不是stage1完成的工作:( B)A、基本硬件初始化。 B、加載內核映像和根文件系統(tǒng)映像。C、跳轉到stage2的C語言入口點 。 D、設置堆棧指針SP,為執(zhí)行C語言代碼做準備。4.關于Linux中的鏈接文件,下列說法不正確的是(C)A、linux系統(tǒng)中鏈接文件分為硬鏈接和軟鏈接兩種。 B、軟鏈接又稱為符號鏈接,類似于Windows中的“快捷方式”。C、硬鏈接文件相當于建立一個新文件。D、軟鏈接文件相當于建立一個新文件。5.關于無名管道,下列說法錯誤的是:(D)A.它只能用于具有親緣關系進程之間的通信B.它是一個半雙工的通信模式,具有固定的讀端和寫端。C.通常先使用pipe函數(shù)創(chuàng)建一個管道,再通過fork函數(shù)創(chuàng)建一個子進程,該子進程繼承父進程所創(chuàng)建的管道,父子進程關閉相應不用的端口就可以建立通信的管道。D.管道可以看作為普通的文件,是文件系統(tǒng)中的一種。6.linux內核中加載模塊的命令是哪個?(C)A.lsmod B.modinfo C.insmod D.rmmod7.關于信號下列說法錯誤的是:(B)A.發(fā)送信號的函數(shù)主要有kill()、raise()、alarm()以及pause()

。B.raise既可以向自身發(fā)送信號,也可以向其他進程發(fā)送信號。C.a(chǎn)larm也稱為鬧鐘函數(shù),一個進程只能有一個鬧鐘時間。D.當系統(tǒng)捕捉到某個信號時,可以忽略該信號或是使用指定的處理函數(shù)來處理。8.關于說法錯誤的是:(C)A.UDP提供不可靠的非連接型傳輸層服務,它允許在源和目的地之間傳送數(shù)據(jù)。B.TCP是重要的傳輸層協(xié)議,目的是允許數(shù)據(jù)同網(wǎng)絡上的其他節(jié)點進行可靠的交換。C.UDP協(xié)議具有嚴格的內裝差錯檢驗算法確保數(shù)據(jù)的完整性。D.UDP是無連接的,不可靠的傳輸服務,它執(zhí)行速度比TCP快。9.下列關于字符設備和塊設備說法錯誤的是:(C)A.字符設備是一種按字節(jié)來訪問的設備。B.塊設備只能以塊為單位接受輸入和返回輸出。C.字符設備對于I/O請求要求有對應的緩沖區(qū)。D.字符設備只能被順序讀寫,而塊設備可以隨機訪問。10.關于驅動程序,下列說法錯誤的是(C)A、通過驅動程序可以對設備進行初始化和釋放。B、通過驅動程序可以把數(shù)據(jù)從內核傳送給對應的硬件設備。C、驅動程序運行在用戶空間。 D、通過驅動程序可以從對應的硬件設備讀取數(shù)據(jù)。11.下列說法錯誤的是:(C)A.exec啟動一個新進程,替換原有的進程,因此進程的PID不變。B.exec函數(shù)組的參數(shù)傳遞有逐個列舉和將整個參數(shù)構成指針數(shù)組傳遞兩種方式。C.exec函數(shù)組第六位為p,表示指定當前進程所使用的環(huán)境變量。D.exec函數(shù)組中argv和envp數(shù)組忘記以NULL結尾了,此時errno被設置為EFAULT。12.下列(B)函數(shù)是動態(tài)分配一個主設備號。A.intregister_chrdev_region(dev_tfirst,unsignedintcount,char*name);B.intalloc_chrdev_region(dev*dev,unsignedintfirstminor,unsignedintcount,char*name);C.voidunregister_chrdev_region(dev_tfirst,unsignedintcount);D.void*kmalloc(size_tsize,intflags);13.設備驅動程序中動態(tài)開辟內存時,調用函數(shù)(C)A.malloc() B.realloc() C.kmalloc() D.ksizeof()14.下列說法錯誤的是:(D)A.循環(huán)服務器在同一個時刻只可以響應一個客戶端的請求B.并發(fā)服務器在同一個時刻可以響應多個客戶端的請求C.UDP循環(huán)服務器對于每一個客戶機的請求總是能夠滿足。D.TCP循環(huán)服務器一次能處理多個客戶端的請求。15.下面對于塊設備和字符設備的說法中不正確的是(C)A、塊設備以塊為單位接收輸入和返回輸出,而字符設備以字節(jié)為單位。B、塊設備對于I/O請求有對應的緩沖區(qū),因此它們可以選擇以什么順序進行響應,字符設備無需緩沖且可被直接讀寫。C、字符設備沒有次設備號。D、字符設備只能順序讀寫,而塊設備可以隨機訪問。16.關于設備驅動說法錯誤的是:(C)A.Linux用戶程序通過設備文件來使用驅動程序操作字符設備和塊設備。B.主設備號用來標示與設備文件相連的驅動程序;C.使用MINOR(Dev_tdev)分解出主設備號。D.字符設備和塊設備都有主、次設備號。17.下列哪一項不是匿名管道的特點(C)A、匿名管道中的數(shù)據(jù)是單向流動的。B、匿名管道沒有名字。C、匿名管道存在于文件系統(tǒng)中。 D、只能通過寫端口向匿名管道中寫入數(shù)據(jù)。18.Kill函數(shù)原型為intkill(pid_tpid,intsigno);當?shù)谝粋€參數(shù)pid<-1時,表示(C)A發(fā)送信號給進程ID為pid的進程;B發(fā)送信號給進程組ID和該進程相同的進程;C發(fā)送信號給進程組內進程ID為pid的絕對值的進程;D發(fā)送信號給系統(tǒng)的所有進程;pid:可能選擇有以下四種:1.pid大于零時,pid是信號欲送往的進程的標識。

2.pid等于零時,信號將送往所有與調用kill()的那個進程屬同一個使用組的進程。

3.pid等于-1時,信號將送往所有調用進程有權給其發(fā)送信號的進程,除了進程1(init)。

4.pid小于-1時,信號將送往以-pid為組標識的進程。19.下面關于vfork()與fork()的說法錯誤的是(B)A.vfork()產(chǎn)生的子進程一定比父進程先運行。B.fork()產(chǎn)生的子進程一定比父進程先運行 。C.vfork()產(chǎn)生的子進程完全共享父進程的地址空間。 D.fork()產(chǎn)生的子進程完全共享父進程的地址空間。20.下列關于互斥鎖的說法中不正確的是(D)A、互斥鎖是用一種簡單的加鎖方法來控制對共享資源的原子操作。B、互斥鎖只有兩種狀態(tài),也就是上鎖和解鎖,可以把互斥鎖看作某種意義上的全局變量。C、互斥鎖可以分為快速互斥鎖、遞歸互斥鎖和檢錯互斥鎖。D、在同一時刻可以有多個線程掌握某個互斥鎖,擁有上鎖狀態(tài)的線程能夠對共享資源進行操作。21.下面哪種通信方式適用于不同機器之間的進程通信。(D)A.消息隊列 B.共享內存 C.信號量 D.套接字22.函數(shù)getppid()的作用是什么(A)A得到父進程ID B得到當前進程ID C有效用戶ID D組ID23.下列哪種進程間通信機制是在軟件層次上對中斷機制的模擬(C)A、匿名管道。 B、消息隊列。C、信號。 D、共享內存。24.當父進程調用wait或waitpid后不可能發(fā)生:(A)A、該父進程下所有正在運行的子進程立即終止運行。B、如果一個子進程已經(jīng)終止,正等待父進程獲取其終止狀態(tài),則取得該子進程的終止狀態(tài)立即返回。C、如果沒有任何子進程,則立即出錯返回。 D、如果所有子進程都在運行,則父進程阻塞。25.當一個線程的detachstate屬性設置為(B),該線程結束時立即釋放它所占有的系統(tǒng)資源。A、PTHREAD_CREATE_JOINABLEB、PTHREAD_CREATE_DETACHEDC、PTHREAD_SCOPE_SYSTEMD、PTHREAD_SCOPE_PROCESS26.下面哪種通信方式只能用于具有血緣關系的進程間通信。(B)A、共享內存 B、匿名管道 C、信號量 D、套接字27.創(chuàng)建或打開消息隊列的函數(shù)為(A)A、msgget() B、msgsnd() C、msgrcv() D、msgctl()28.配置arm平臺內核的命令(A)A.makemenuconfigB.makemenuconfigARCH=armC.makebzImageD.makeuImageARCH=armCROSS_COMPILE=arm-linux-29.加載驅動程序模塊的命令為(A)A.insmod B.rmmod C.lsmod D.modinfo30.將交叉編譯工具arm-linux-gcc-4.3.2.tar.gz解壓到/目錄下的命令是(A)A.tarxvzfarm-linux-gcc-4.3.2.tar.gz–C/B.tarxjvfarm-linux-gcc-4.3.2.tar.gz–C/C.tarxvfarm-linux-gcc-4.3.2.tar.gz–C/D.tarxjvfarm-linux-gcc-4.3.2.tar.gz31.下列關于條件變量的說法中不正確的是(C)A、通常條件變量和互斥鎖同時使用。B、條件變量是利用線程間共享的全局變量進行同步的一種機制。C、條件變量不用進行初始化操作就可以直接使用。D、條件變量必須進行初始化操作才能使用。32.在linux文件系統(tǒng)中,下列哪個目錄中的內容只保存在內存中,而不占用外存空間(CA./bin B./etc C./proc D./boot33.下列說法錯誤的是(D)A.Flash存儲器的擦寫次數(shù)是有限的,NAND閃存還有特殊的硬件接口和讀寫時序。B.Jffs2主要用于NOR型flash,可讀寫、支持數(shù)據(jù)壓縮的日志型文件系統(tǒng)。C.yaffs/yaffs2是專為NAND型flash而設計的一種日志型文件系統(tǒng)。D.Cramfs是一種可讀寫的壓縮文件系統(tǒng),運行時解壓縮,并要求被拷到RAM里去。CRAMFS文件系統(tǒng)是專門針對閃存設計的只讀壓縮的文件系統(tǒng)34.linux內核中加載模塊的命令是哪個?(C)A.lsmod B.modinfo C.insmod D.rmmod35.Kill函數(shù)原型為intkill(pid_tpid,intsigno);當?shù)谝粋€參數(shù)pid>0時,表示(B)A.發(fā)送信號給進程組ID和該進程相同的進程;B.發(fā)送信號給進程ID為pid的進程;C.發(fā)送信號給進程組內進程ID為pid的絕對值的進程;D.發(fā)送信號給系統(tǒng)的所有進程36.關于進程間通信下列說法錯誤的是(B)A.無名管道只能用于具有親緣關系的進程之間的通信。B.無名管道是一個全雙工的通信模式,兩端都可以讀寫。C.管道也可以看成是一種特殊的文件,對于它的讀寫也可以使用普通的read、write等。D.數(shù)據(jù)被一個進程讀出后,將被從管道中刪除,其它讀進程將不能再讀到這些數(shù)據(jù)。37.關于信號下列說法錯誤的是:(B)A.發(fā)送信號的函數(shù)主要有kill()、raise()、alarm()以及pause()

。B.raise既可以向自身發(fā)送信號,也可以向其他進程發(fā)送信號。C.a(chǎn)larm也稱為鬧鐘函數(shù),一個進程只能有一個鬧鐘時間。D.當系統(tǒng)捕捉到某個信號時,可以忽略該信號或是使用指定的處理函數(shù)來處理。38.關于消息隊列下列說法錯誤的是(D)A.消息隊列就是一個消息的列表,可以從中添加消息、讀取消息等。B.消息隊列中創(chuàng)建或打開消息隊列使用的函數(shù)是msgget。C.添加消息使用的函數(shù)是msgsnd函數(shù),它把消息添加到已打開的消息隊列末尾。D.從消息隊列讀取消息與FIFO相同的是,也遵循先進先出原則。39.關于驅動程序,下列說法錯誤的是(D)A.驅動程序提供對設備初始化和釋放的功能。 B.通過驅動程序可以把數(shù)據(jù)從內核傳送給對應的硬件設備。C.通過驅動程序可以檢測和處理硬件設備出現(xiàn)的錯誤。 D.當用戶進程調用驅動程序時,系統(tǒng)仍然運行在用戶態(tài)。40.下列(A)選項可以分解出主設備號。A.MAJOR(dev_tdev)B.MINOR(dev_tdev)C.MKDEV(major,minor)D.MINOR(inode->i_rdev)41.關于說法錯誤的是(D)A.UDP提供不可靠的非連接型傳輸層服務。B.TCP能提供端口編號的譯碼,以識別主機的應用程序,而且完成數(shù)據(jù)的可靠傳輸。C.TCP協(xié)議具有嚴格的內裝差錯檢驗算法確保數(shù)據(jù)的完整性。D.TCP執(zhí)行速度比UDP快。42.下列哪個命令可以查看已安裝的設備的主設備號(A)Acat/proc/devicesBls/dev/testCcat/etc/passwdDcat/etc/profile43.下列說法錯誤的是:(C)A.循環(huán)服務器在同一個時刻只可以響應一個客戶端的請求。B.并發(fā)服務器在同一個時刻可以響應多個客戶端的請求。C.TCP循環(huán)服務器一次能處理多個客戶端的請求。D.UDP循環(huán)服務器對于每一個客戶機的請求總是能夠滿足。44.下面對于塊設備和字符設備的說法中不正確的是(C)A.塊設備以塊為單位接收輸入和返回輸出,而字符設備以字節(jié)為單位。B.塊設備對于I/O請求可以選擇以什么順序進行響應。C.字符設備是以字節(jié)為單位進行輸入輸出的,可以隨機訪問。D.字符設備和塊設備都有主、次設備號。45.intselect(intmaxfd,fd_set*readfds,fd_set*writefds,fe_set*exceptfds,conststructtimeval*timeout),下列說法錯誤的是(D)A.maxfd必須至少比待檢測的最大文件描述符大1。B.參數(shù)exceptfds指定了被例外條件監(jiān)控的文件描述符集。C.正常情況下,返回值為滿足要求的文件描述符個數(shù)。D.經(jīng)過了timeout等待后仍無文件滿足要求,返回值為-1。46.將交叉編譯工具arm-linux-gcc-4.3.2.tar.gz解壓到/目錄下的命令是(A)A.tarxvzfarm-linux-gcc-4.3.2.tar.gz–C/B.tarxjvfarm-linux-gcc-4.3.2.tar.gz–C/C.tarxvfarm-linux-gcc-4.3.2.tar.gz–C/D.tarxjvfarm-linux-gcc-4.3.2.tar.gz47.編譯arm平臺內核的命令(C)A.makemenuconfigB.makemenuconfigARCH=armC.makebzImageD.makeuImageARCH=armCROSS_COMPILE=arm-linux-48.下列主要使用NAND型flash的文件系統(tǒng)的是:(B)A.JFFS2B.YaffsC.CramfsD.NFS49.關于內核配置,下類說法錯誤的是(C)A.makeconfig:基于文本模式的交互式配置。B.makemenuconfig:基于文本模式的菜單型配置。C.makeoldconfig:使用已有的配置文件(.config),不會詢問新增的配置選項。D.makexconfig:圖形化的配置(需安裝圖形化系統(tǒng))。50.關于內核模塊下類說法錯誤的是(D)A.內核模塊本身并被編譯進內核文件(zImage或者bzImage)。B.模塊加載函數(shù)通過module_init宏來指定。C.模塊卸載函數(shù)通過module_exit宏來指定。D.加載模塊的命令是rmmod,卸載模塊的命令是insmod,顯示模塊的命令是lsmod。51.關于無名管道,下列說法錯誤的是:(B)A.它只能用于具有親緣關系進程之間的通信。B.它是一個全雙工的通信模式,兩端都可以讀寫。C.使用pipe函數(shù)創(chuàng)建管道,再通過fork函數(shù)創(chuàng)建子進程,該子進程繼承父進程所創(chuàng)建的管道,父子進程關閉相應不用的端口就可以建立通信的管道。D.數(shù)據(jù)被一個進程讀出后,將被從管道中刪除,其它讀進程將不能再讀到這些數(shù)據(jù)。52.關于信號下列說法錯誤的是:(C)A.發(fā)送信號的函數(shù)主要有kill()、raise()、alarm()以及pause()

.B.Kill既可以向自身發(fā)送信號,也可以向其他進程發(fā)送信號。C.a(chǎn)larm也稱為鬧鐘函數(shù),一個進程可以有多個鬧鐘時間。D.當系統(tǒng)捕捉到某個信號時,可以忽略該信號或是使用指定的處理函數(shù)來處理該信號。53.關于消息隊列下列說法錯誤的是(C)A.消息隊列就是一個消息的列表,用戶可以從消息隊列種添加消息、讀取消息等。B.消息隊列中創(chuàng)建或打開消息隊列使用的函數(shù)是msgget。C.讀取消息使用的函數(shù)是msgrcv,與FIFO相同的是,也遵循先進先出原則。D.添加消息使用的函數(shù)是msgsnd函數(shù),它把消息添加到已打開的消息隊列末尾。54.關于多線程下列說法錯誤的是(B)A.編寫Linux下的多線程程序,需要使用頭文件pthread.h,連接時需要使用庫libpthread.aB.hello.c是一個多線程的程序,編譯命令為gcchello.c-ohelloC.線程自己調用pthread_exit函數(shù)正常退出。D.線程的正常退出方式包括線程從啟動例程中返回。55.關于說法錯誤的是:(C)A.UDP提供不可靠的非連接型傳輸層服務,它允許在源和目的地之間傳送數(shù)據(jù)。B.TCP是重要的傳輸層協(xié)議,目的是允許數(shù)據(jù)同網(wǎng)絡上的其他節(jié)點進行可靠的交換。C.UDP協(xié)議具有嚴格的內裝差錯檢驗算法確保數(shù)據(jù)的完整性。D.UDP是無連接的,不可靠的傳輸服務,它執(zhí)行速度比TCP快。56.下列說法錯誤的是:(D)A.循環(huán)服務器在同一個時刻只可以響應一個客戶端的請求B.并發(fā)服務器在同一個時刻可以響應多個客戶端的請求C.UDP循環(huán)服務器對于每一個客戶機的請求總是能夠滿足。D.TCP循環(huán)服務器一次能處理多個客戶端的請求。57.關于設備驅動說法錯誤的是:(C)A.Linux用戶程序通過設備文件來使用驅動程序操作字符設備和塊設備。B.主設備號用來標示與設備文件相連的驅動程序;C.使用MINOR(Dev_tdev)分解出主設備號。D.字符設備和塊設備都有主、次設備號。58.下列(A)函數(shù)是靜態(tài)申請一個主設備號。A.intregister_chrdev_region(dev_tfirst,unsignedintcount,char*name);B.intalloc_chrdev_region(dev*dev,unsignedintfirstminor,unsignedintcount,char*name);C.voidunregister_chrdev_region(dev_tfirst,unsignedintcount);D.void*kmalloc(size_tsize,intflags);59.下列關于字符設備和塊設備說法錯誤的是:(C)A.字符設備是一種按字節(jié)來訪問的設備。B.塊設備只能以塊為單位接受輸入和返回輸出。C.字符設備對于I/O請求要求有對應的緩沖區(qū)。D.字符設備只能被順序讀寫,而塊設備可以隨機訪問。60.下面關于vfork()與fork()的說法錯誤的是(B)A.vfork()產(chǎn)生的子進程一定比父進程先運行。B.fork()產(chǎn)生的子進程一定比父進程先運行 。C.vfork()產(chǎn)生的子進程完全共享父進程的地址空間。D.fork()產(chǎn)生的子進程復制父進程的代碼段和堆棧段。名詞解釋及簡答:BootLoaderBootLoader就是在操作系統(tǒng)內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用操作系統(tǒng)內核準備好正確的環(huán)境。什么是共享內存?共享內存實現(xiàn)的兩個步驟是什么?共享內存是被多個進程共享的一部分物理內存。共享內存是進程間共享數(shù)據(jù)的一種最快的方法,一個進程向共享內存區(qū)域寫入了數(shù)據(jù),共享這個內存區(qū)域的所有進程就可以立刻看到其中的內容。共享內存實現(xiàn)分為兩個步驟:(1)創(chuàng)建共享內存,使用shmget函數(shù);(2)映射共享內存,將這段共享內存映射到具體的進程空間去,使用shmat函數(shù)。簡述tcp服務器和客戶端的編程步驟?;赥CP-服務器:(1)創(chuàng)建一個socket,用函數(shù)socket();(2)綁定IP地址、端口等信息到socket上,用函數(shù)bind();(3)設置允許的最大連接數(shù),用函數(shù)listen();(4)接收客戶端上來的連接,用函數(shù)accept();(5)收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write()(6)關閉網(wǎng)絡連接。基于TCP-客戶端:(1)創(chuàng)建一個socket,用函數(shù)socket();(2)設置要連接的對方的IP地址和端口等屬性;(3)連接服務器,用函數(shù)connect();(4)收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();(5)關閉網(wǎng)絡連接。VFS(VirtualFilesystem)是一個內核軟件層,用來處理與UNIX標準文件系統(tǒng)相關的所有系統(tǒng)調用,其強壯性表現(xiàn)在能為各種文件系統(tǒng)提供一個通用的接口。通過這組接口,用戶就可以將系統(tǒng)中的文件視為統(tǒng)一的VFS文件,而不必關心其具體的文件系統(tǒng)是什么樣的。有了進程為什么還要引入多線程?(1)和進程相比,它是一種非?!肮?jié)儉”的多任務操作方式。在Linux系統(tǒng)下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數(shù)據(jù)表來維護它的代碼段、堆棧段和數(shù)據(jù)段,這是一種“昂貴”的多任務工作方式。(2)程間方便的通信機制。對不同進程來說,它們具有獨立的數(shù)據(jù)空間,要進行數(shù)據(jù)的傳遞只能通過進程間通信的方式進行,這種方式不僅費時,而且很不方便。線程則不然,由于同一進程下的線程之間共享數(shù)據(jù)空間,所以一個線程的數(shù)據(jù)可以直接為其它線程所用,這不僅快捷,而且方便。除了以上所說的優(yōu)點外,多線程程序作為一種多任務、并發(fā)的工作方式,有如下優(yōu)點:(3)使多CPU系統(tǒng)更加有效。操作系統(tǒng)會保證當線程數(shù)不大于CPU數(shù)目時,不同的線程運行于不同的CPU上。(4)改善程序結構。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利于理解和修改。程序分析題:#include<stdio.h>#include<unistd.h>intmain(){ printf("using_exit....\n");printf("canyouseethis?"); _exit(0);//若改為exit()}答案:using_exit....(三) #include<stdio.h>#include<unistd.h>#include<stdlib.h>intmain(intargc,char*argv[]){ intnum=2; intpid; pid=fork(); if(pid<0) { printf("forkerror!\n"); return0; }elseif(pid==0) { printf("num:%d\n",++num); exit(0);}else {sleep(2);printf("num:%d",num); return0;}答案:num:3num:2(四) #include<pthread.h>#include<stdio.h>#include<stdlib.h>voidcleanup(void*arg){ printf("cleanup:%s\n",(char*)arg);}void*thr_fn(void*arg){pthread_cleanup_push(cleanup,"threadfirstpush"); pthread_cleanup_push(cleanup,"threadsecondpush"); pthread_cleanup_pop(1); pthread_cleanup_pop(1);}intmain(){ pthread_ttid; void*tret; pthread_create(&tid,NULL,thr_fn,(void*)1); pthread_join(tid,&tret); return0;}答案:clea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論