1 shell編程參考模板_第1頁(yè)
1 shell編程參考模板_第2頁(yè)
1 shell編程參考模板_第3頁(yè)
1 shell編程參考模板_第4頁(yè)
1 shell編程參考模板_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 Linux操作系統(tǒng)作業(yè)報(bào)告學(xué) 號(hào): 110410430 姓 名: 孫宏碩 任課教師: 閆健恩 1 / 111 shell編程1)編寫(xiě)shell腳本,針對(duì)指定源目錄,對(duì)所有的文件進(jìn)行移動(dòng)到指定目的目錄的操作,每個(gè)文件都要提示用戶是否要移動(dòng);10分2)編寫(xiě)一個(gè)shell腳本,刪除指定目下所有的文件夾(如子文件夾不為空也要?jiǎng)h除);10分3)編寫(xiě)一個(gè)腳本,可以完成多個(gè)網(wǎng)卡(每次配置一塊,分多次配置)的ip地址、網(wǎng)關(guān)、dns、掩碼的設(shè)置,并立即使其生效。10分(1) :#! /bin/bashif -d $1 thenfor i in ls $1doif -d $i thenecho $icd $1e

2、cho "move $i ?(Y or N)"read jcase $j in y)mv $i $2; n)echo "next"esac elsecd $1echo "move $i ?(Y or N) "read jcase $j iny)mv $i $2;n)echo "next" EsacFidoneElseecho "ERROR"fi#end(2) :#!/bin/bashcd $1for i in ls $1doif -d $i thenrm -rf $ielif -f $i the

3、nrm $ielseecho "ERROR"fidone#end(3) :#!/bin/bashnum=$ ifconfig -a | egrep -o "eth0-9|inet addr:0-9+.0-9+.0-9+.0-9+" | sed "s/inet addr:/t/g"echo your new network card ip are below:echo $numifconfig eth0 $1 netmask $2 uproute add default gw $3echo $4 >>/ect/resolv.

4、confnum2=$ ifconfig -a | egrep -o "eth0-9|inet addr:0-9+.0-9+.0-9+.0-9+" | sed "s/inet addr:/t/g"echo $num2二 ext2文件系統(tǒng)原理Ext2是 GNU/Linux 系統(tǒng)中標(biāo)準(zhǔn)的文件系統(tǒng),其特點(diǎn)為存取文件的性能極好,對(duì)于中小型的文件更顯示出優(yōu)勢(shì),這主要得利于其簇快取層的優(yōu)良設(shè)計(jì)。現(xiàn)已經(jīng)有ext3,ext4等。相比于windows支持的FAT16 FAT32 及NTFS文件系統(tǒng),ext2文件系統(tǒng)支持鏈接文件。在ext2文件系統(tǒng)中,文件由inode(包含有

5、文件的所有信息)進(jìn)行唯一標(biāo)識(shí)。一個(gè)文件可能對(duì)應(yīng)多個(gè)文件名,只有在所有文件名都被刪除后,該文件才會(huì)被刪除。此外,同一文件在磁盤(pán)中存放和被打開(kāi)時(shí)所對(duì)應(yīng)的inode是不同的,并由內(nèi)核負(fù)責(zé)同步。ext2文件系統(tǒng)采用三級(jí)間接塊來(lái)存儲(chǔ)數(shù)據(jù)塊指針, 并以塊(block,默認(rèn)為1KB)為單位分配空間。其磁盤(pán)分配策略是盡可能將邏輯相鄰的文件分配到磁盤(pán)上物理相鄰的塊中,并盡可能將碎片分配給盡量少的 文件,以從全局上提高性能。ext2文件系統(tǒng)將同一目錄下的文件(包括目錄)盡可能的放在同一個(gè)塊組中,但目錄則分布在各個(gè)塊組中以實(shí)現(xiàn)負(fù)載均衡。在擴(kuò)展文件時(shí),會(huì)盡量一次性擴(kuò)展8個(gè)連續(xù)塊給文件(以預(yù)留空間的形式實(shí)現(xiàn))。 由以下

6、幾部分組成: 1 超級(jí)快(存儲(chǔ)了該文件系統(tǒng)最基本的信息,如塊大小,塊組中的塊數(shù)目等) 2 塊組描述符(描述了所有塊的屬性) 3 塊位圖和inode位圖 塊位圖和inode位圖的每一位分別指出塊組中對(duì)應(yīng)的那個(gè)塊或inode是否被使用。 4 inode表 inode表用于跟蹤定位每個(gè)文件,包括位置、大小等(但不包括文件名),一個(gè)塊組只有一個(gè)inode表。5、數(shù)據(jù)塊 數(shù)據(jù)塊中存放文件的內(nèi)容,包括目錄表、擴(kuò)展屬性、符號(hào)鏈接等。三 linux內(nèi)核源碼安裝Linux內(nèi)核(kernel),是linux最核心的部分,實(shí)現(xiàn)管理存儲(chǔ)器,文件,外設(shè),和系統(tǒng)資源等。 (1)下載linux內(nèi)核源碼 https:/www

7、./在該網(wǎng)站下載linux源代碼,在ubuntu9.10版本中內(nèi)核版本為2.6.31-14可以再/usr/src中查看而linux-headers-2.6.31-14-generic是我們ubuntu使用的源碼文件,進(jìn)入該目錄然后使用 make menuconfig配置內(nèi)核然后使用make命令生成鏡像使用make modules生成模塊 完成安裝后,編譯好的內(nèi)核模塊會(huì)從內(nèi)核源代碼目錄拷貝至/lib/modules下面。最后使用mkinitrd lnitrd-2.6.31-14Linux內(nèi)存管理物理地址 用于內(nèi)存芯片級(jí)的單元尋址,與處理器和CPU連接的地址總線相對(duì)應(yīng)。這個(gè)概念

8、應(yīng)該是這幾個(gè)概念中最好理解的一 個(gè),但是值得一提的是,雖然可以直接把物理地址理解成插在機(jī)器上那根內(nèi)存本身,把內(nèi)存看成一個(gè)從0字節(jié)一直到最大空量逐字節(jié)的編號(hào)的大數(shù)組,然后把這個(gè)數(shù) 組叫做物理地址,但是事實(shí)上,這只是一個(gè)硬件提供給軟件的抽像,內(nèi)存的尋址方式并不是這樣。所以,說(shuō)它是“與地址總線相對(duì)應(yīng)”,是更貼切一些,不過(guò)拋開(kāi)對(duì) 物理內(nèi)存尋址方式的考慮,直接 把物理地址與物理的內(nèi)存一一對(duì)應(yīng),也是可以接受的。也許錯(cuò)誤的理解更利于形而上的抽像。虛擬內(nèi)存這是對(duì)整個(gè)內(nèi)存(不要與機(jī)器上插那條對(duì)上號(hào))的抽像描述。它是相對(duì)于物理內(nèi)存來(lái)講的,可以直接理解成“不直實(shí)的”,“假的”內(nèi)存,例如,一個(gè)0x08000000內(nèi)存

9、地址,它并不對(duì)就物理地址上那個(gè)大數(shù)組中0x08000000 - 1那個(gè)地址元素;之所以是這樣,是因?yàn)楝F(xiàn)代操作系統(tǒng)都提供了一種內(nèi)存管理的抽像,即虛擬內(nèi)存(virtual memory)。進(jìn)程使用虛擬內(nèi)存中的地址,由操作系統(tǒng)協(xié)助相關(guān)硬件,把它“轉(zhuǎn)換”成真正的物理地址。這個(gè)“轉(zhuǎn)換”,是所有問(wèn)題討論的關(guān)鍵。有了這樣的抽 像,一個(gè)程序,就可以使用比真實(shí)物理地址大得多的地址空間。(拆東墻,補(bǔ)西墻,銀行也是這樣子做的),甚至多個(gè)進(jìn)程可以使用相同的地址。不奇怪,因?yàn)檗D(zhuǎn)換 后的物理地址并非相同的。可以把連接后的程序反編譯看一下,發(fā)現(xiàn)連接器已經(jīng)為程序分配了一個(gè)地址,例如,要調(diào)用某個(gè)函數(shù)A,代碼不是call A,而

10、是call0x0811111111 ,也就是說(shuō),函數(shù)A的地址已經(jīng)被定下來(lái)了。沒(méi)有這樣的“轉(zhuǎn)換”,沒(méi)有虛擬地址的概念,這樣做是根本行不通的。對(duì)任何一個(gè)普通進(jìn)程來(lái)講,它都會(huì)涉及到5種不同的數(shù)據(jù)段。包含有“程序代碼段”、“程序數(shù)據(jù)段”、“程序堆棧段”等。代碼段:代碼段是用來(lái)存放可執(zhí)行文件的操作指令,也就是說(shuō)是它是可執(zhí)行程序在內(nèi)存中的鏡像。代碼段需要防止在運(yùn)行時(shí)被非法修改,以只準(zhǔn)許讀取操作,而不允許寫(xiě)入操作它是不可寫(xiě)的。數(shù)據(jù)段:數(shù)據(jù)段用來(lái)存放可執(zhí)行文件中已初始化全局變量,換句話說(shuō)就是存放程序靜態(tài)分配的變量和全局變量。BSS段:BSS段包含了程序中未初始化的全局變量,在內(nèi)存中 bss段全部置零。堆:堆是

11、用于存放進(jìn)程運(yùn)行中被動(dòng)態(tài)分配的內(nèi)存段,它的大小并不固定,可動(dòng)態(tài)擴(kuò)張或縮減。當(dāng)進(jìn)程調(diào)用malloc等函數(shù)分配內(nèi)存時(shí),新分配的內(nèi)存就被動(dòng)態(tài)添加到堆上(堆被擴(kuò)張);當(dāng)利用free等函數(shù)釋放內(nèi)存時(shí),被釋放的內(nèi)存從堆中被剔除(堆被縮減)棧:棧是用戶存放程序臨時(shí)創(chuàng)建的局部變量,也就是說(shuō)我們函數(shù)括弧“”中定義的變量(但不包括static聲明的變量,static意味著在數(shù)據(jù)段中存放變量)。除此以外,在函數(shù)被調(diào)用時(shí),其參數(shù)也會(huì)被壓入發(fā)起調(diào)用的進(jìn)程棧中,并且待到調(diào)用結(jié)束后,函數(shù)的返回值也會(huì)被存放回棧中。由于棧的先進(jìn)先出特點(diǎn),所以棧特別方便用來(lái)保存/恢復(fù)調(diào)用現(xiàn)場(chǎng)。從這個(gè)意義上講,我們可以把堆??闯梢粋€(gè)寄存、交換臨時(shí)

12、數(shù)據(jù)的內(nèi)存區(qū)。進(jìn)程內(nèi)存空間Linux操作系統(tǒng)采用虛擬內(nèi)存管理技術(shù),使得每個(gè)進(jìn)程都有各自互不干涉的進(jìn)程地址空間。該空間是塊大小為4G的線性虛擬空間,用戶所看到和接觸到的都是該虛擬地址,無(wú)法看到實(shí)際的物理內(nèi)存地址。利用這種虛擬地址不但能起到保護(hù)操作系統(tǒng)的效果(用戶不能直接訪問(wèn)物理內(nèi)存),而且更重要的是,用戶程序可使用比實(shí)際物理內(nèi)存更大的地址空間(具體的原因請(qǐng)看硬件基礎(chǔ)部分)。 第一、4G的進(jìn)程地址空間被人為的分為兩個(gè)部分用戶空間與內(nèi)核空間。用戶空間從0到3G(0xC0000000),內(nèi)核空間占據(jù)3G到4G。用戶進(jìn)程通常情況下只能訪問(wèn)用戶空間的虛擬地址,不能訪問(wèn)內(nèi)核空間虛擬地址。只有用戶進(jìn)程進(jìn)行系統(tǒng)

13、調(diào)用(代表用戶進(jìn)程在內(nèi)核態(tài)執(zhí)行)等時(shí)刻可以訪問(wèn)到內(nèi)核空間。第二、用戶空間對(duì)應(yīng)進(jìn)程,所以每當(dāng)進(jìn)程切換,用戶空間就會(huì)跟著變化;而內(nèi)核空間是由內(nèi)核負(fù)責(zé)映射,它并不會(huì)跟著進(jìn)程改變,是固定的。內(nèi)核空間地址有自己對(duì)應(yīng)的頁(yè)表(init_mm.pgd),用戶進(jìn)程各自有不同的頁(yè)表。 第三、每個(gè)進(jìn)程的用戶空間都是完全獨(dú)立、互不相干的。Linux進(jìn)程調(diào)度Linux的進(jìn)程管理由進(jìn)程控制塊、進(jìn)程調(diào)度、中斷處理、任務(wù)隊(duì)列、定時(shí)器、bottom half隊(duì)列、系統(tǒng)調(diào)用、進(jìn)程通信等等部分組成。進(jìn)程調(diào)用分為實(shí)時(shí)進(jìn)程調(diào)度和非實(shí)時(shí)進(jìn)程調(diào)度兩種。前者調(diào)度時(shí),可以采用基于動(dòng)態(tài)優(yōu)先級(jí)的輪轉(zhuǎn)法(RR),也可以采用先進(jìn)現(xiàn)出算法(FIFO)。

14、 后者調(diào)度時(shí),一律采用基于動(dòng)態(tài)優(yōu)先級(jí)的輪轉(zhuǎn)法。某個(gè)進(jìn)程采用何種調(diào)度算法由改進(jìn)程的進(jìn)程控制塊中的某些屬性決定,沒(méi)有專(zhuān)門(mén)的系統(tǒng)用來(lái)處理關(guān)于進(jìn)程調(diào)度的相 關(guān)事宜。 Linux的進(jìn)程調(diào)度由schedule()函數(shù)負(fù)責(zé),任何進(jìn)程,當(dāng)它從系統(tǒng)調(diào)用返回時(shí),都會(huì)轉(zhuǎn)入schedule(),而中斷處理函數(shù)完成它們的響應(yīng)任 務(wù)以后,也會(huì)進(jìn)入schedule()。進(jìn)程控制塊數(shù)據(jù)結(jié)構(gòu)Linux系統(tǒng)的進(jìn)程控制塊用數(shù)據(jù)結(jié)構(gòu)task_struct表示,這個(gè)數(shù)據(jù)結(jié)構(gòu)占用1680個(gè)字節(jié),具體的內(nèi)容不在這里介紹。進(jìn)程調(diào)度Linux進(jìn)程調(diào)度由schedule()執(zhí)行,其任務(wù)是在run-queue隊(duì)列中選出一個(gè)就緒進(jìn)程。每個(gè)進(jìn)程都有一

15、個(gè)調(diào)度策略,在它的task_struct中規(guī)定(policy屬性),或?yàn)镾CHED_RR,SCHED_FIFO,或?yàn)镾CHED_OTHER。前兩種為實(shí)時(shí)進(jìn)程調(diào)度策略,后一種為普通進(jìn)程調(diào)度策略。用戶進(jìn)程由do_fork()函數(shù)創(chuàng)建,它也是fork系統(tǒng)調(diào)用的執(zhí)行者。do_fork()創(chuàng)建一個(gè)新的進(jìn)程,繼承父進(jìn)程的現(xiàn)有資源,初始化進(jìn)程時(shí)鐘、信號(hào)、時(shí)間等數(shù)據(jù)。完成子進(jìn)程的初始化后,父進(jìn)程將它掛到就緒隊(duì)列,返回子進(jìn)程的pid。在支持多進(jìn)程的系統(tǒng)中,理想情況下,各個(gè)進(jìn)程應(yīng)該是根據(jù)其優(yōu)先級(jí)公平地占有CPU。而不會(huì)出現(xiàn)“誰(shuí)運(yùn)氣好誰(shuí)占得多”這樣的不可控的情況。linux進(jìn)程調(diào)度中最基本的數(shù)據(jù)結(jié)構(gòu)是struct

16、runqueue;有關(guān)于此結(jié)構(gòu)的隊(duì)列在kernel/sched.c,此隊(duì)列包含了處理器的所有可執(zhí)行進(jìn)程的信息。 每個(gè)運(yùn)行隊(duì)列都有兩個(gè)優(yōu)先級(jí)數(shù)組,一個(gè)活躍的和一個(gè)過(guò)期的,此數(shù)組也是在kernel/sched.c中含有。 schedule函數(shù)定義也是在kernel/sched.c中。每個(gè)CPU均有兩個(gè)具有優(yōu)先級(jí)的隊(duì)列。一個(gè)“活動(dòng)”隊(duì)列,一個(gè)“過(guò)期”隊(duì)列?;顒?dòng)隊(duì)列中包含所有映射于該CPU并具有時(shí)間片的任務(wù)。而過(guò)期隊(duì)列包含所有已 經(jīng)使用完時(shí)間片的任務(wù)(依然是一個(gè)有序隊(duì)列)?;顒?dòng)隊(duì)列和過(guò)期隊(duì)列不能直接訪問(wèn),而是通過(guò)每個(gè)CPU的運(yùn)行隊(duì)列結(jié)構(gòu)中的兩個(gè)指針來(lái)訪問(wèn)。調(diào)度程序不需每次 都掃描所有的任務(wù),而是在一個(gè)任務(wù)變成就緒狀態(tài)時(shí)將其放到“活動(dòng)”的隊(duì)列中。當(dāng)調(diào)度程序運(yùn)行時(shí),只選擇活動(dòng)隊(duì)列中最有利的任務(wù)來(lái)執(zhí)行。這樣,調(diào)度可以在一 個(gè)恒定的時(shí)間里完成。當(dāng)任務(wù)執(zhí)行時(shí),它會(huì)得到一個(gè)時(shí)間片,或者在其轉(zhuǎn)到另一線程之前得到一段時(shí)間的CPU使用權(quán)。當(dāng)時(shí)間片用完后,任務(wù)會(huì)被轉(zhuǎn)移到“過(guò)期” 的隊(duì)列中。在該隊(duì)列中,任務(wù)會(huì)根據(jù)其優(yōu)先級(jí)進(jìn)行排序。 當(dāng)活動(dòng)隊(duì)列中的任務(wù)均被運(yùn)行完時(shí),我們就交換兩個(gè)指針,從而使得先前的過(guò)期隊(duì)列成為活動(dòng)隊(duì)列,同樣先前空閑的活動(dòng)隊(duì)列將轉(zhuǎn)變?yōu)檫^(guò)期隊(duì)列。因此,可以看得出 來(lái),“活動(dòng)”隊(duì)列中總是排好了順序的任務(wù)隊(duì)列,如

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論