【正文】
域的所有進程就可以立刻看到其中的內(nèi)容。這塊共享虛擬內(nèi)存的頁面,出現(xiàn)在每一個共享該頁面的進程的頁表中。但是它不需要在所有進程的虛擬內(nèi)存中都有相同的虛擬地址。 內(nèi)存管理利用虛擬文件系統(tǒng)支持交換,交換進程(swapd)定期由調(diào)度程序調(diào)度,這也是內(nèi)存管理依賴于進程調(diào)度的唯一原因。當(dāng)一個進程存取的內(nèi)存映射被換出時,內(nèi)存管理向文件系統(tǒng)發(fā)出請求,同時,掛起當(dāng)前正在運行的進程。,信號燈和條件變量等,分析以上幾種同步方式可在什么場合下使用。 Mutex互斥量,用于操作某個臨界資源時對該資源上鎖,以實現(xiàn)互斥地對獨占資源的使用。(3分)Semophore信號燈,信號燈內(nèi)有一計數(shù)器,可以用于對多個同類資源的分配。當(dāng)資源用完時,申請資源的線程會在信號量上睡眠,有線程釋放資源時,再將該線程喚醒繼續(xù)運行。(3分)Condition條件變量,條件變量用于等待信號。當(dāng)一個線程需要等待某個信號時,就可到條件變量上等待,當(dāng)信號具備時,系統(tǒng)會喚醒該線程繼續(xù)運行。(4分),需要采用的通信方式?本地:共享內(nèi)存+信號量, 適合于大量數(shù)據(jù)傳輸。Linux支持系統(tǒng)V和POSIX的共享內(nèi)存和信號量。(5分)遠(yuǎn)程:Socket+應(yīng)用協(xié)議。適合于跨網(wǎng)絡(luò)的(大量)數(shù)據(jù)傳輸。Linux支持BSD的socket。應(yīng)用層協(xié)議需要自行設(shè)計。,進程,線程有何區(qū)別和聯(lián)系 程序是編譯后形成的可執(zhí)行代碼,是靜止的。進程是程序的一次執(zhí)行,是活動的。線程是進程的可執(zhí)行單元,同一進程的不同線程共享進程的資源和地址空間。,線程間同步有幾種實現(xiàn)方法,分別都是什么? 兩種,一種是繼承Thread,另外一種是實現(xiàn)接口Runnable。 同步的實現(xiàn)方法有兩種,分別是synchronized, wait與notify。用synchronized可以對一段代碼、一個對象及一個方法進行加鎖。用wait與notify可以使對象處于等待及喚醒方式導(dǎo)致同步,因為每個對象都直接或間接的繼承了Object類。: 1)正在執(zhí)行的進程運行完畢;(2)正在執(zhí)行的進程調(diào)用阻塞原語將自己阻塞起來進入等待狀態(tài);(3)正在執(zhí)行的進程調(diào)用了P原語操作,從而因資源不足而被阻塞;或調(diào)用了V原語操作激活了等待資源的進程隊列;(4)執(zhí)行中的進程提出I/O請求后被阻塞;(5)系統(tǒng)分配的時間片已經(jīng)用完;以上都是CPU為不可剝奪方式下的引起進程調(diào)度的原因。在CPU方式是可剝奪時,還有下面的原因:(6)就緒隊列中的某個進程的優(yōu)先級變得高于當(dāng)前運行進程的優(yōu)先級,從而也將引起進程調(diào)度。編程題:1.,。:pr1: gcc –o pr1 : gcc –c –o : gcc –c –o 2. (1) 編寫Makefile文件,最終的目標(biāo)文件為hello,交叉編譯器為armlinuxgcc hello: gcc o prog : gcc c o : gcc c o : gcc c o : gcc c o clean: rm hello *.o(2) 在目標(biāo)上上通過網(wǎng)絡(luò)文件系統(tǒng)掛載/mnt到宿主機上的/home/arm目錄。mount –t nfs –o noclock :/home/armtest/hello /mnt3. 在Linux操作系統(tǒng)下,編程實現(xiàn)以下功能(1)(打印HELLO WORLD)(2)。(3)(聲明message函數(shù))(4)(打印“This is a message!”): include include include include int main (int argc,char *argv[]){printf(Hello World!\n)。 message()。 return 0。} : void message(void)。 : include void message (void){ printf(This is a message!\n) }4. 閱讀下面的shell程序,寫出執(zhí)行結(jié)果Tom is my friend。 Jack is my friend Harry is my friend5. 對下列shell程序加注釋,并說明程序的功能和調(diào)用方法。(1)程序注釋!/bin/sh 定義實用的shell /etc/,凡是以星號開始的行均為注釋行。 Start/stop/restart the Apache web server. To make Apache start automatically at boot, make this file executable: chmod 755 /etc/case $1 in case結(jié)構(gòu)開始,判斷“位置參數(shù)”決定執(zhí)行的操作。本程序攜帶一個“位置參數(shù)”,即$1 39。start39。) 若位置參數(shù)為start/usr/sbin/apachectl start 。 啟動d進程39。stop39。) 若位置參數(shù)為stop/usr/sbin/apachectl stop 。 關(guān)閉d進程39。restart39。) 若位置參數(shù)為stop/usr/sbin/apachectl restart 。 重新啟動d進程*) 若位置參數(shù)不是start、stop或restart時echo usage $0 start|stop|restart 。 顯示命令提示信息:程序的調(diào)用方法esac case結(jié)構(gòu)結(jié)束(2)程序的功能是啟動,停止或重新啟動d進程(3)程序的調(diào)用方式有三種:啟動,停止和重新啟動。,判斷一個文件是不是字符設(shè)備文件,如果是將其復(fù)制到、dev目錄下。!/bin/sh FILENAME= echo “Input file name:” read FILENAME if [ c $FILENAME ] then cp $FILENAME /dev fi7. 用shell編程,求兩個數(shù)之和/bin/bash typeset first secondread p Input t e first number: firstread p Input the second number: secondon個result=$[$first+$second] echo result is : $result exit 0設(shè)計一個Shell程序,在/userdata目錄下建立50個目錄,即user1user50,并沒有設(shè)置每個目錄的權(quán)限,其中其他用戶的權(quán)限為:讀;文件所有者的權(quán)限為:讀,寫,執(zhí)行、文件所有者所在組的權(quán)限為:讀,執(zhí)行。!/bin/sh i=1while [ i le 50 ] doif [ d /userdata ]。then mkdir p /userdata/user$ichmod 754 /userdata/user$i echo user$ilet i = i + 1 (或i=$(($i+1)) elsemkdir /userdata mkdir p /userdata/user$i chmod 754 /userdata/user$iecho user$i let i = i + 1 (或i=$(($i+1))Fi Done ,完成動態(tài)配置10個struct test空間 include struct test { int a[10]。 char b[20]。 } int main(){struct test *ptr=calloc(sizeof(struct test),10)?!9.編寫一個程序,利用mmap()來讀取/etc/passwd文件的內(nèi)容 includesys/ includesys/ include include includesys/ main() { int fd。 void *start。 struct stat sb。fd=open(“/etc/passwd”,O_RDONLY)。fstat(fd,amp。sb)。 start=mmap(NULL,PROT_READ,MAP_PRIVATE,fd,0)。if(start= = MAP_FAILED) return。 printf(“%s”,start)。munma(start,)。 closed(fd)?!10. ,實現(xiàn)以下功能。(1)打開當(dāng)前目錄下的文件“”,如果沒有則創(chuàng)建該文件,并使其具有讀寫屬性Void main(void){int fid。 fid = open(“./”,O_RDWR|O_CREAT)。 if(fid==1){ Printf(“open or create error \n”)。 exit(0)。 }Close(fid)。 }(2)編寫一個makefile實現(xiàn)自動編譯,生成可執(zhí)行文件mainobjects = exec = main all:$(objects) gcc –o $(exec) $(objects): gcc –c clean: rm –r $(exec) $(objects),實現(xiàn)把一個文件的內(nèi)容復(fù)制到另一個文件