NWPU計(jì)算機(jī)學(xué)院OS課內(nèi)實(shí)驗(yàn)指導(dǎo)_第1頁(yè)
NWPU計(jì)算機(jī)學(xué)院OS課內(nèi)實(shí)驗(yàn)指導(dǎo)_第2頁(yè)
NWPU計(jì)算機(jī)學(xué)院OS課內(nèi)實(shí)驗(yàn)指導(dǎo)_第3頁(yè)
NWPU計(jì)算機(jī)學(xué)院OS課內(nèi)實(shí)驗(yàn)指導(dǎo)_第4頁(yè)
NWPU計(jì)算機(jī)學(xué)院OS課內(nèi)實(shí)驗(yàn)指導(dǎo)_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

西北工業(yè)大學(xué)計(jì)算機(jī)學(xué)院

計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)

張羽方智毅谷建華編

目錄

一、操作系統(tǒng)課內(nèi)實(shí)驗(yàn)?zāi)康?1-

二、操作系統(tǒng)實(shí)驗(yàn)整體安排和要求-2-

2.1整體安庫(kù)-2-

2.2課內(nèi)實(shí)驗(yàn)考核方案-2-

2.3實(shí)驗(yàn)環(huán)境要求-3-

2.3.1硬件環(huán)境-3-

2.3.2軟件環(huán)境-3-

三、熟悉系統(tǒng)的安裝與使用-4-

3.1實(shí)驗(yàn)一Opensolaris操作系統(tǒng)的安裝及使用-4-

3.1.1實(shí)驗(yàn)?zāi)康?4-

3.1.2實(shí)驗(yàn)預(yù)習(xí)內(nèi)容-4-

3.1.3實(shí)驗(yàn)內(nèi)容及步驟-4-

3.1.4實(shí)驗(yàn)總結(jié)-6-

3.2實(shí)驗(yàn)二vi編輯器的學(xué)習(xí)和使用-7-

3.2.1實(shí)驗(yàn)?zāi)康?7-

3.2.2實(shí)驗(yàn)預(yù)習(xí)內(nèi)容-7-

3.2.3實(shí)驗(yàn)內(nèi)容及步驟-7-

3.2.4實(shí)驗(yàn)總結(jié)…...-8-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)-9-

4.1概述-9-

4.1.1MDB簡(jiǎn)介-9-

4.1.2Dtrace簡(jiǎn)介-11-

4.2實(shí)驗(yàn)三系統(tǒng)調(diào)用(systemcalls)-14-

4.2.1實(shí)驗(yàn)?zāi)康?14-

4.2.2實(shí)驗(yàn)預(yù)習(xí)內(nèi)容-14-

4.2.3實(shí)驗(yàn)內(nèi)容及步驟-14-

4.2.4實(shí)驗(yàn)總結(jié)-17-

4.3實(shí)驗(yàn)四進(jìn)程與線程(processesandthreads)-18-

4.3.1實(shí)驗(yàn)?zāi)康?18-

4.3.2實(shí)驗(yàn)預(yù)習(xí)內(nèi)容-18-

4.3.3實(shí)驗(yàn)內(nèi)容及步驟-18-

4.3.4實(shí)驗(yàn)總結(jié)-28-

4.4實(shí)驗(yàn)五存儲(chǔ)管理(memorymanagement)-29-

4.4.1實(shí)驗(yàn)?zāi)康?29-

4.4.2實(shí)驗(yàn)預(yù)習(xí)內(nèi)容-29-

4.4.3實(shí)驗(yàn)內(nèi)容及步驟-29-

4.4.4實(shí)驗(yàn)總結(jié)-29-

4.5實(shí)驗(yàn)六文件系統(tǒng)與I/O(filesystem&I/O)-33-

4.5.1實(shí)驗(yàn)?zāi)康?33-

4.5.2實(shí)驗(yàn)預(yù)習(xí)內(nèi)容-33-

4.5.3實(shí)驗(yàn)內(nèi)容及步驟-33-

4.5.4實(shí)驗(yàn)總結(jié)-34-

?、操作系統(tǒng)課內(nèi)實(shí)驗(yàn)?zāi)康?/p>

一、操作系統(tǒng)課內(nèi)實(shí)驗(yàn)?zāi)康?/p>

計(jì)算機(jī)操作系統(tǒng)課內(nèi)實(shí)驗(yàn)作為操作系統(tǒng)課堂理論教學(xué)的輔助部分是加強(qiáng)計(jì)

算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)實(shí)踐的重要環(huán)節(jié)之一。由于操作系統(tǒng)自身的龐大和復(fù)雜,造

成學(xué)生在學(xué)過(guò)操作系統(tǒng)課程后,總有一種“霧里看花”的感覺(jué),即只是支離破碎

的了解了一些操作系統(tǒng)局部知識(shí),而很難將這些知識(shí)融會(huì)貫通,對(duì)于運(yùn)用操作系

統(tǒng)知識(shí)從事設(shè)計(jì)和應(yīng)用更是無(wú)從談起。本實(shí)驗(yàn)課的目的就是力圖解決上述問(wèn)題。

本實(shí)驗(yàn)課基于Sunmicrosystem公司的Opensolarisforx86操作系統(tǒng)平臺(tái),通

過(guò)Opensolaris提供的Dtrace工具,對(duì)操作系統(tǒng)的內(nèi)核進(jìn)行動(dòng)態(tài)跟蹤。在一系列

的實(shí)驗(yàn)中,學(xué)生通過(guò)對(duì)操作系統(tǒng)內(nèi)核中的探針(probe)進(jìn)行編程,能清晰地看

到內(nèi)核的動(dòng)態(tài)映像、準(zhǔn)確地檢測(cè)系統(tǒng)的狀態(tài),從而使學(xué)生加深了對(duì)操作系統(tǒng)理論

的理解、提高了學(xué)習(xí)的興趣、加強(qiáng)了實(shí)踐的能力,在一定程度上也培養(yǎng)了學(xué)生自

己動(dòng)手解決操作系統(tǒng)故障的能力。

-1-

:、操作系統(tǒng)實(shí)驗(yàn)整體安排和要求

二、操作系統(tǒng)實(shí)驗(yàn)整體安排和要求

2.1整體安排

課內(nèi)實(shí)驗(yàn)將按以下三個(gè)方面進(jìn)行:對(duì)常用的系統(tǒng)調(diào)用命令的使用方式有一個(gè)

較熟練的掌握;對(duì)典型操作系統(tǒng)的編程基礎(chǔ)知識(shí)和機(jī)制進(jìn)行學(xué)習(xí)和了解;運(yùn)用一

些重要的系統(tǒng)調(diào)用編寫(xiě)程序模塊,對(duì)操作系統(tǒng)中的一些重要概念和典型算法進(jìn)行

實(shí)現(xiàn)或驗(yàn)證。實(shí)驗(yàn)內(nèi)容如下:

第一部分:熟悉系統(tǒng)的安裝與使用

實(shí)驗(yàn)」Opensolaris操作系統(tǒng)的安裝與使用

實(shí)驗(yàn)二vi編輯器的學(xué)習(xí)和使用

第二部分:利用MDB、Dtrace工具對(duì)內(nèi)核進(jìn)行監(jiān)視和跟蹤

實(shí)驗(yàn)三系統(tǒng)調(diào)用(systemcall)

實(shí)驗(yàn)四進(jìn)程與線程(processesandthreads)

實(shí)驗(yàn)五存儲(chǔ)管理(memorymanagement)

實(shí)驗(yàn)六文件系統(tǒng)與I/O(filesystem&I/O)

2.2課內(nèi)實(shí)驗(yàn)考核方案

操作系統(tǒng)課內(nèi)實(shí)驗(yàn)考核按照預(yù)習(xí)報(bào)告30%、上機(jī)實(shí)驗(yàn)35%、實(shí)驗(yàn)報(bào)告35%

的比例進(jìn)行。

預(yù)習(xí)報(bào)告內(nèi)容包括兩部分,?是對(duì)相關(guān)知識(shí)學(xué)習(xí)的書(shū)面總結(jié)(知識(shí)綜述和參

考文獻(xiàn));二是對(duì)本次實(shí)驗(yàn)的分析報(bào)告(主要針對(duì)涉及算法的題目)。實(shí)驗(yàn)報(bào)告內(nèi)

容主要包括本次實(shí)驗(yàn)的上機(jī)結(jié)果(數(shù)據(jù)結(jié)構(gòu)、程序框圖、源程序文檔和運(yùn)行情況)

以及實(shí)驗(yàn)中難點(diǎn)分析和心得。

-2-

:、操作系統(tǒng)實(shí)驗(yàn)整體安排和要求

2.3實(shí)驗(yàn)環(huán)境要求

2.3.1硬件環(huán)境

80386DX以上兼容機(jī),可以使用Intel、AMD系列處理器,主板可以是支持

ISA、ESA或PCI總線結(jié)構(gòu),主存最小要求2MB,建議64MB以上。硬盤(pán)支持

IDE、SCSI接口的控制器,容量最小為500MB,建議2GB以上,顯示器可以使

用VGA、EGA、CGA或SUPERVGA的顯示卡或顯示器,網(wǎng)卡可以使用各種通

用的以太網(wǎng)及局域網(wǎng)卡。

2.3.2軟件環(huán)境

要求操作系統(tǒng)為Solaris8以上。建議使用Solaris10。

實(shí)驗(yàn)工具為dtracejab實(shí)驗(yàn)包。

-3-

三、熟悉系統(tǒng)的安裝與使用

三、熟悉系統(tǒng)的安裝與使用

3.1實(shí)驗(yàn)一Opensolaris操作系統(tǒng)的安裝及使用

3.1.1實(shí)驗(yàn)?zāi)康?/p>

學(xué)習(xí)Opensolaris操作系統(tǒng)的安裝,體會(huì)操作系統(tǒng)為了方便用戶(hù),不斷改進(jìn)

的安裝過(guò)程;熟悉Opensolaris系統(tǒng)的登錄和退出,并熟悉它常用命令的操作使

用方法。

3.1.2實(shí)驗(yàn)預(yù)習(xí)內(nèi)容

Unix/Linux操作系統(tǒng)的發(fā)展歷程,Solaris操作系統(tǒng)的主要發(fā)行版本;對(duì)目前

Unix/Linux/Solaris的主流論壇的了解;認(rèn)真閱讀有關(guān)Solaris安裝資料?,了解磁

盤(pán)分區(qū)的方式,了解Solaris對(duì)硬件(CPU、內(nèi)存和硬盤(pán)空間)的要求、安裝過(guò)

程;進(jìn)入和退出系統(tǒng)的命令,有關(guān)文件系統(tǒng)中的目錄創(chuàng)建、修改和刪除,有關(guān)文

件系統(tǒng)中的文件建立、刪除、編輯、查詢(xún)、歸檔和壓縮等和有關(guān)系統(tǒng)管理等。

3.1.3實(shí)驗(yàn)內(nèi)容及步驟

Solaris操作系統(tǒng)的安裝(SAID自動(dòng)安裝盤(pán)安裝)

1、收集硬件配置資料(硬盤(pán)空間大小、顯卡類(lèi)型、顯存大小、網(wǎng)卡類(lèi)型等

基本信息);

2、使用SAID安裝Solaris,要求磁盤(pán)上已存在一個(gè)Solaris分區(qū)或一塊未分

配、未格式化且可作為主分區(qū)的磁盤(pán)空間。如果目前系統(tǒng)上只安裝了Windows,

那么磁盤(pán)上必須要有--塊未分配的磁盤(pán)空間(大于8GBytes)。因?yàn)镾olaris安裝

程序需要一塊未分配的磁盤(pán)空間來(lái)創(chuàng)建Solaris類(lèi)型的fdisk主分區(qū),用來(lái)存放

Solaris操作系統(tǒng)。如果目前磁盤(pán)上所有空間都已分配,可用pqmagic或其它磁盤(pán)

分區(qū)工具通過(guò)減小或刪除已有分區(qū)來(lái)劃分出一塊未用的磁盤(pán)空間。另外,由于磁

盤(pán)最多只允許有4個(gè)主分區(qū),所以現(xiàn)有主分區(qū)數(shù)量不要多于3個(gè),以預(yù)留一個(gè)主

分區(qū)給Solaris。安裝過(guò)程中,已有的FAT/FAT32/NTFS格式的分區(qū)將被保留,現(xiàn)

有的Windows系統(tǒng)不會(huì)被破壞,而且在安裝完Solaris10后Windows系統(tǒng)仍然能

被正常引導(dǎo)。

3、BIOS設(shè)置:在BIOS中將系統(tǒng)啟動(dòng)方式設(shè)置為光盤(pán)引導(dǎo),保存設(shè)置,重

新啟動(dòng)。

-4-

三、熟悉系統(tǒng)的安裝與使用

4、光盤(pán)安裝:系統(tǒng)以光盤(pán)方式啟動(dòng)后,安裝即自動(dòng)進(jìn)行,無(wú)需人工進(jìn)行任

何干預(yù)(個(gè)別情況下可能會(huì)跳出kdmconfig程序提示對(duì)Xserver進(jìn)行選擇,根據(jù)

提示繼續(xù)即可)安裝結(jié)束后,光盤(pán)自動(dòng)彈出。取出光盤(pán),回車(chē),系統(tǒng)將自動(dòng)重啟。

5、啟動(dòng)Solaris操作系統(tǒng):Solaris通過(guò)使用Grub程序來(lái)支持多系統(tǒng)的引導(dǎo)。

開(kāi)機(jī)自檢過(guò)后,屏幕上將出現(xiàn)Grub引導(dǎo)界面,提示對(duì)操作系統(tǒng)進(jìn)行選擇,分別

是:

SolarisNevadasnv_50X86

Solarisfailsafe

Windows

選擇第一項(xiàng),啟動(dòng)Solaris11。

說(shuō)明:SAID預(yù)置了對(duì)Windows操作系統(tǒng)引導(dǎo)的支持,如果想啟動(dòng)先前安裝

的Windows操作系統(tǒng),可選擇第一項(xiàng),將進(jìn)入原Windows的引導(dǎo)界面(可對(duì)現(xiàn)

有的多個(gè)Windows操作系統(tǒng)進(jìn)行引導(dǎo))。

6、登錄Solaris

以root用戶(hù)登錄,用戶(hù)名:root;密碼:root

Solaris操作系統(tǒng)的使用

(1)登錄、退出和關(guān)閉系統(tǒng);

(2)man命令的使用;

(3)—help命令的使用;

(4)1s命令的使用;

(5)cp命令的使用

(6)ps命令的使用

(7)grep命令的使用

(8)head、tail命令的使用

(9)mv命令的使用

(10)echo命令的使用

(ll)whatis命令的使用;

(12)whereis命令的使用;

-5-

三、熟悉系統(tǒng)的安裝與使用

(13)find命令的使用;

(14)sort命令的使用;

(15)tar命令的使用;

(16)apropos命令的使用

(17)gzip解壓縮歸檔文件命令的使用;

(18)mkdir命令的使用

3.1.4實(shí)驗(yàn)總結(jié)

整理出以上命令的使用手冊(cè)(功能、命令格式、常用參數(shù)說(shuō)明以及命令使用

實(shí)例)。

-6-

三、熟悉系統(tǒng)的安裝與使用

3.2實(shí)驗(yàn)二vi編輯器的學(xué)習(xí)和使用

3.2.1實(shí)驗(yàn)?zāi)康?/p>

通過(guò)對(duì)vi編輯器的學(xué)習(xí)和使用,熟悉Unix類(lèi)環(huán)境下的正文編輯程序及其作

用。

3.2.2實(shí)驗(yàn)預(yù)習(xí)內(nèi)容

認(rèn)真學(xué)習(xí)Linux的正文編輯的相關(guān)基礎(chǔ)知識(shí),了解其編輯方式、插入方式和

命令方式。

3.2.3實(shí)驗(yàn)內(nèi)容及步驟

使用“ESC”鍵在命令模式和插入模式之間進(jìn)行切換。各項(xiàng)操作命令如下:

1、進(jìn)入插入模式

a追加,I插入,。在當(dāng)前行下插入一空行;A在行尾追加,I從行首插入,0

在當(dāng)前行上插入一空行。

2、復(fù)制正文

yy復(fù)制當(dāng)前行,nyy復(fù)制n行,yw復(fù)制一個(gè)詞,y)復(fù)制從光標(biāo)至句末的所

有正文;y}復(fù)制從光標(biāo)至句首的所有正文,nyx復(fù)制類(lèi)型為X。

3、刪除正文

x刪除一個(gè)字符,dd刪除當(dāng)前行,ndd刪除n行,dw刪除一個(gè)單詞(從光

標(biāo)處開(kāi)始),nx刪除n個(gè)字符,Agndd刪除n行正文到緩沖區(qū)g中,AGndd刪除

n行正文追加到緩沖區(qū)g中,c$從當(dāng)前光標(biāo)處刪至行尾,”從當(dāng)前光標(biāo)處刪至行

首,ndw(或dnw)刪除n個(gè)詞。

4、替換正文

P將緩沖區(qū)的內(nèi)容粘貼到當(dāng)前光標(biāo)處,AgP將g緩沖區(qū)里的內(nèi)容粘貼到當(dāng)前

行下,AgP將g緩沖區(qū)的內(nèi)容粘貼到當(dāng)前行上,rn用字符n替換當(dāng)前字符。

5、查找定位

nG將光標(biāo)定位到第n行,AF向前一屏,向后一屏,向下半屏,向

上半屏。

6、文件操作

:w寫(xiě)盤(pán),:wq(或:ZZ)寫(xiě)盤(pán)退出,:q!不存盤(pán)退出,:e!不存盤(pán)不退出,u恢

復(fù)前一步的改變,:efilename編輯文件名,:wfilename寫(xiě)文件名,:w!filename

重寫(xiě)文件名,:!cmd運(yùn)行一個(gè)命令,然后返回,75顯示當(dāng)前文件和行號(hào)。

-7-

三、熟悉系統(tǒng)的安裝與使用

3.2.4實(shí)驗(yàn)總結(jié)

1)說(shuō)明vi的三種主要操作方式。

2)對(duì)上述各vi操作舉例列表說(shuō)明。

-8-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

4.1概述

4.1.1MDB簡(jiǎn)介

MDB(ModularDebugger)是Solaris操作系統(tǒng)自帶的內(nèi)核級(jí)調(diào)試工具。它

為調(diào)試這些程序和方案提供完全可自定義環(huán)境,其中包括動(dòng)態(tài)模塊工具,它可以

讓程序員自己定義調(diào)試命令來(lái)對(duì)執(zhí)行程序進(jìn)行特定的分析。每個(gè)MDB模塊都可

用于在兒種不同的上下文(包括實(shí)時(shí)的和事后的)中檢查程序。Solaris操作系

統(tǒng)包含一組MDB模塊,旨在幫助程序員調(diào)試Solaris內(nèi)核以及相關(guān)的設(shè)備驅(qū)動(dòng)

程序和內(nèi)核模塊。

MDB可提供范圍廣泛的功能集合,用于分析Solaris內(nèi)核和其他目標(biāo)程序。

它可以實(shí)現(xiàn)以下功能:

+查找特定線程分配的所有內(nèi)存

*歹U顯內(nèi)核STREAM的直觀圖

*確定特定地址所引用的結(jié)構(gòu)類(lèi)型

*在內(nèi)核中查找已泄漏的內(nèi)存塊

*分析內(nèi)存以查找棧跟蹤

在Solaris系統(tǒng)中,以共享通用功能的兩個(gè)命令提供MDB:mdb和kmdbo

可以使用mdb命令以交互方式或在腳本中調(diào)試實(shí)時(shí)用戶(hù)進(jìn)程、用戶(hù)進(jìn)程核心轉(zhuǎn)

儲(chǔ)文件、內(nèi)核崩潰轉(zhuǎn)儲(chǔ)、實(shí)時(shí)操作系統(tǒng)、目標(biāo)文件和其他文件。在還需要控制和

停止內(nèi)核執(zhí)行時(shí),可以使用kmdb命令調(diào)試實(shí)時(shí)操作系統(tǒng)內(nèi)核和設(shè)備驅(qū)動(dòng)程序。

-9-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

MDBLanguageMDBModuleAPI

DebuggerEngine

disassemblerlibkvmtarget/proctarget

圖4-1MDB體系結(jié)構(gòu)

在本實(shí)驗(yàn)課中,我們將用MDB來(lái)打印一些內(nèi)核數(shù)據(jù)結(jié)構(gòu)。

mdb中輸入命令的格式是:

expression::dcmd

e.g.0x300acde123::ps

通過(guò)

::dmods-IHess

或者::dcmds

可以找到mdb中的命令。如果需要翻頁(yè)查找,可以在命令后面加上!lesso

如果需要了解一個(gè)命令的參數(shù),輸入

::help命令名

例如,查看ps命令的更多信息:

::helpps

具體的MDB命令使用方法將在具體的實(shí)驗(yàn)中說(shuō)明。

-10-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

4.1.2Dtrace簡(jiǎn)介

DTrace是一個(gè)用于SolarisTM操作系統(tǒng)的動(dòng)態(tài)跟蹤框架。它可用于檢查用戶(hù)

程序和操作系統(tǒng)的行為,可由系統(tǒng)管理員或應(yīng)用程序開(kāi)發(fā)者使用,適用于實(shí)時(shí)生

產(chǎn)系統(tǒng)。DTrace允許用戶(hù)查看系統(tǒng),以便了解其工作方式、在軟件的多個(gè)層之

間跟蹤性能問(wèn)題或找出導(dǎo)致異常行為的原因。用戶(hù)可以使用DTrace來(lái)創(chuàng)建自己

的自定義程序,以便動(dòng)態(tài)地檢測(cè)系統(tǒng),并對(duì)可用Dtrace的編程語(yǔ)言D語(yǔ)言闡明

的任意問(wèn)題做出快速簡(jiǎn)明的回答。

DTrace允許所有Solaris用戶(hù)執(zhí)行以下操作:

*動(dòng)態(tài)地啟用和管理數(shù)以千計(jì)的探測(cè)器

,動(dòng)態(tài)地將邏輯謂詞和操作與探測(cè)器相關(guān)聯(lián)

*動(dòng)態(tài)地管理跟蹤緩沖區(qū)和緩沖區(qū)策略

4顯示和檢查來(lái)自實(shí)時(shí)系統(tǒng)或崩潰轉(zhuǎn)儲(chǔ)的跟蹤數(shù)據(jù)

DTrace允許Solaris開(kāi)發(fā)者和管理員執(zhí)行以下操作:

,實(shí)現(xiàn)使用DTrace工具的自定義腳本

*實(shí)現(xiàn)使用DTrace檢索跟蹤數(shù)據(jù)的分層工具

Dtrace工具的動(dòng)態(tài)跟蹤功能是通過(guò)散布在整個(gè)Solaris系統(tǒng)中的兒萬(wàn)個(gè)probe

(探測(cè)器)來(lái)實(shí)現(xiàn)的。probe類(lèi)似于位于系統(tǒng)中受關(guān)注位置的一些可編程傳感器。

如果要確定系統(tǒng)的狀態(tài),可使用DTrace對(duì)相應(yīng)的傳感器進(jìn)行編程,以便記錄關(guān)

注的信息。當(dāng)每個(gè)probe觸發(fā)時(shí),DTrace便會(huì)從probe中收集數(shù)據(jù)并向用戶(hù)報(bào)告。

如果未對(duì)probe指定任何操作,DTrace將僅記錄probe的每次觸發(fā)。

請(qǐng)注意,每個(gè)probe的名稱(chēng)由四個(gè)部分組成:

表4-1probe各部分的名稱(chēng)含義

名稱(chēng)含義

提供器(provider)發(fā)布此探測(cè)器的DTrace提供器的名稱(chēng)。提供器名稱(chēng)通常與執(zhí)行檢測(cè)過(guò)

程以啟用探測(cè)器的DTrace內(nèi)核模塊的名稱(chēng)相對(duì)應(yīng)。

模塊(module)此探測(cè)器對(duì)應(yīng)于特定的程序位置時(shí),為探測(cè)器所在模塊的名稱(chēng)。該名

稱(chēng)為內(nèi)核模塊的名稱(chēng)或用戶(hù)庫(kù)的名稱(chēng)。

函數(shù)(function)此探測(cè)器對(duì)應(yīng)于特定的程序位置時(shí),為探測(cè)器所在程序函數(shù)的名稱(chēng)。

名稱(chēng)(name)探測(cè)器名稱(chēng)的最后組成部分是一個(gè)有助于您了解探測(cè)器語(yǔ)義的名稱(chēng)

(如BEGIN或END)。

-11-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

寫(xiě)出完整的人工可讀的探測(cè)器名稱(chēng)時(shí),用冒號(hào)分隔列出該名稱(chēng)的所有四個(gè)部

分,如下所示:

#probedescriptions

provider:module:function:name

D語(yǔ)言腳本程序的結(jié)構(gòu)如下:

probedescriptions

/predicate/

(

actionstatements

}

當(dāng)D腳本執(zhí)行時(shí),探測(cè)器描述所指定的probe就會(huì)被打開(kāi)。當(dāng)probe被觸發(fā)

并且predicate(斷言)為真時(shí),聲明的操作就會(huì)執(zhí)行。

用如下命令查看系統(tǒng)中的所有probeo

#dtrace-1

IDPROVIDERMODULEFUNCTIONNAME

1dtraceBEGIN

2dtraceEND

3dtraceERROR

4fasttrapfasttrapfasttrap

5vminfounixpage_reclaimpgrec

6sysinfounixmutex_vector_entermutex_adenters

7schedunixsetkpdqenqueue

8schedunixsetfrontdqenqueue

9schedunixsetbackdqenqueue

10schedunixdispdeqdequeue

11schedunixdispdequeue

省略了許多行

43290lockstatgenunixthreadJockthread-spin

43291lockstatgenunixthread_lock_highthread-spin

-12-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

Dtrace的體系結(jié)構(gòu)如下圖所示:

libdtrace(3LIB)

用戶(hù)級(jí)

dtrace(7D)

一丙核

DTrace

DTrace

圖4-2Dtrace體系結(jié)構(gòu)和組件概覽

Dtrace腳本的運(yùn)行方式,是在終端中輸入“./filename”,如運(yùn)行sleep.d腳本

就是在終端中鍵入"./sleep.d":

#./sleep.d

有些腳本需要帶參數(shù),就直接跟在腳本后面輸入即可,如:

#./syscall.d1516

腳本的退出有兩種情況,一種是自動(dòng)退出,一種是強(qiáng)制退出。

自動(dòng)退出又包含了兩種情況,一種是在執(zhí)行腳本時(shí)遇到了exit語(yǔ)句;另一種

是通過(guò)-c指定了運(yùn)行的命令,命令結(jié)束后,腳本也跟著結(jié)束。

強(qiáng)制退出是使用kill或pkill結(jié)束腳本,也就是另外運(yùn)行一個(gè)shell,然后運(yùn)

行kill或pkill結(jié)束dtrace進(jìn)程?;蛘哂肅ontrol+C強(qiáng)制推出。

-13-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

4.2實(shí)驗(yàn)三系統(tǒng)調(diào)用(systemcalls)

4.2.1實(shí)驗(yàn)?zāi)康?/p>

本實(shí)驗(yàn)從系統(tǒng)調(diào)用入手,讓學(xué)生看到fork。函數(shù)被調(diào)用來(lái)創(chuàng)建進(jìn)程的過(guò)程,

同時(shí)用內(nèi)核跟蹤工具跟蹤新創(chuàng)建的進(jìn)程進(jìn)行系統(tǒng)調(diào)用的過(guò)程,對(duì)系統(tǒng)調(diào)用的調(diào)用

層次和調(diào)用次數(shù)進(jìn)程統(tǒng)計(jì)和打印。

本實(shí)驗(yàn)旨在加深學(xué)生對(duì)進(jìn)程的理解,區(qū)分進(jìn)程和程序的區(qū)別;讓學(xué)生對(duì)操作

系統(tǒng)內(nèi)核以及系統(tǒng)調(diào)用的過(guò)程有一個(gè)最直觀的了解。

4.2.2實(shí)驗(yàn)預(yù)習(xí)內(nèi)容

復(fù)習(xí)進(jìn)程的概念,了解vfork。、forkl()函數(shù)的功能和它們的區(qū)別,熟悉在

Solaris系統(tǒng)中的進(jìn)程管理相關(guān)命令。

4.2.3實(shí)驗(yàn)內(nèi)容及步驟

1、在桌面環(huán)境中打開(kāi)一個(gè)終端(在CDE中右擊鼠標(biāo),選擇工具->終端)。

2、用"#cddtrace」ab”命令進(jìn)入/dtrace」ab文件夾,所有的實(shí)驗(yàn)素材都在

這個(gè)文件夾中。本實(shí)驗(yàn)的腳本在system_calls子目錄中:

#cddtracejab/system__call

#

3、運(yùn)行fork.d腳本,然后從桌面環(huán)境中再打開(kāi)一個(gè)終端,即可看到如下輸

出:

#./fork.d

forkldtexecforkedPID1513

forkldtwmforkedPID1512

vforkdttermforkedPID1514

forkldttermforkedPID1515

第一列顯示的是調(diào)用fork。函數(shù)進(jìn)行進(jìn)程創(chuàng)建的程序名稱(chēng),D語(yǔ)言的腳本中

用內(nèi)置變量execname得到。最后一列是被fork創(chuàng)建的新進(jìn)程的pid,比如pid為

1515的進(jìn)程運(yùn)行是CDE環(huán)境下的偽終端程序dttermo

在新打開(kāi)的終端中運(yùn)行“echo$$"命令,可以看到該終端的進(jìn)程號(hào):

#echo$$

1515

#

-14-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

fork.d腳本的輸出記錄了我們?cè)谧烂嬗覔羧缓蟠蜷_(kāi)一個(gè)終端的過(guò)程中,那些

進(jìn)程被創(chuàng)建了、被創(chuàng)建的進(jìn)程pid是多少。

下圖是這些進(jìn)程的關(guān)系圖:

圖4-3啟動(dòng)??個(gè)終端的過(guò)程

4、在新創(chuàng)建的終端中運(yùn)行g(shù)edit程序,這是一個(gè)可視化的文本編輯器。

#gedit

這時(shí)將出現(xiàn)gedit程序的編輯窗口,如圖4-3所示:

圖4-4gedit文本編輯器

并且運(yùn)行fork.d腳本的終端將有新的輸出:

-15-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

dtexecforkedPID1513

fork1dtwmforkedPID1512

vforkdttermforkedPID1514

fork1

;ork1dttermforkedPID1515

shforkedPID1516

進(jìn)程1516就是剛才啟動(dòng)的gedit對(duì)應(yīng)的進(jìn)程pid號(hào)。

如果中斷fork.d腳本運(yùn)行,它將輸出本次運(yùn)行過(guò)程中進(jìn)程創(chuàng)建的統(tǒng)計(jì)數(shù)據(jù):

WHOWHICHFORKCOUNT

*11

dttermfok1

dttermvf

foo*r12

gnectfo12

shfork*16

bash

該數(shù)據(jù)顯示了每個(gè)程序進(jìn)行進(jìn)程創(chuàng)建的次數(shù)以及用哪個(gè)函數(shù)進(jìn)行創(chuàng)建。

5、接下來(lái),在另一個(gè)終端中運(yùn)行syscall.d腳本,這個(gè)腳本需要一個(gè)參數(shù),

即一個(gè)進(jìn)程的pid,我們用1516這個(gè)進(jìn)程來(lái)實(shí)驗(yàn)(也就是剛才新啟動(dòng)的文本編輯

器gedit的進(jìn)程)。

運(yùn)行腳本"./syscall.d1516",這個(gè)腳本記錄了它跟蹤到的5個(gè)gedit進(jìn)行的

系統(tǒng)調(diào)用,并打印出該系統(tǒng)調(diào)用函數(shù)調(diào)用其它內(nèi)核函數(shù)的調(diào)用次序

#,/syscall.d1516

dtrace:script\/syscalH.d'matched63212probes

CPUFUNCTION

0->sigaction

0->setsigact

0->sigdelq

0<-sigdelq

0->sigdelq

0<-sigdelq

0<-setsigact

0<-sigaction

0<=sigaction

[……]

腳本運(yùn)行結(jié)束時(shí)打印系統(tǒng)調(diào)用和內(nèi)核函數(shù)調(diào)用的次數(shù)統(tǒng)計(jì)情況:

-16-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

——……systemcalls

read2

sigaction1

write2

-kernelcalls

allocbwait2

msgdsize9

releasestr9

getq_noenab10

kmemcachealloc11

apic_setspl18

putnext19

[……]

我們可以去查看一下sigaction()函數(shù)的源代碼,它位于uts/common/syscall

目錄下的sigaction.c文件中。通過(guò)代碼我們也可以驗(yàn)證上面打印出的調(diào)用順序。

請(qǐng)注意,由于dtrace是動(dòng)態(tài)跟蹤工具,而函數(shù)流程可能是分支結(jié)構(gòu),所以打

印出的函數(shù)調(diào)用關(guān)系不是唯一的,每一次所顯示的只是那一次運(yùn)行函數(shù)的調(diào)用關(guān)

系。

如果想一直記錄某個(gè)進(jìn)程的系統(tǒng)調(diào)用情況并查看它對(duì)內(nèi)核函數(shù)的調(diào)用關(guān)系,

可以運(yùn)行syscalll.d腳本,它將一直跟蹤某個(gè)進(jìn)程的函數(shù)調(diào)用情況,記錄了一個(gè)

進(jìn)程所有的系統(tǒng)調(diào)用以及這個(gè)系統(tǒng)調(diào)用進(jìn)行的內(nèi)核函數(shù)調(diào)用。強(qiáng)行退出時(shí)將打印

總的系統(tǒng)調(diào)用次數(shù)。由于輸出很長(zhǎng),這里就不再贅述。

4.2.4實(shí)驗(yàn)總結(jié)

1、通過(guò)實(shí)驗(yàn)結(jié)果解釋一下從CDE桌面啟動(dòng)一個(gè)終端,發(fā)生了哪些進(jìn)程創(chuàng)建

的過(guò)程?

2、觀看syscalLd的打印輸出,然后在源代碼中查看被調(diào)用的函數(shù),了解這

些函數(shù)的功能。

-17-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

4.3實(shí)驗(yàn)四進(jìn)程與線程(processesandthreads)

4.3.1實(shí)驗(yàn)?zāi)康?/p>

通過(guò)實(shí)驗(yàn)查看進(jìn)程的結(jié)構(gòu)proc」的信.息,加深對(duì)進(jìn)程概念的認(rèn)識(shí);查看內(nèi)核

線程被阻塞時(shí)同步對(duì)象的類(lèi)型;查看在TS(分時(shí))調(diào)度等級(jí)隊(duì)列中的內(nèi)核線程

時(shí)間片剩余的情況,體會(huì)時(shí)間片輪轉(zhuǎn)調(diào)度算法;查看進(jìn)程間通信(IPC)機(jī)制中

系統(tǒng)調(diào)用的次序。

通過(guò)以上幾個(gè)實(shí)驗(yàn),加深學(xué)生對(duì)理論知識(shí)的理解,讓學(xué)生對(duì)課堂所學(xué)知識(shí)有

直觀的認(rèn)識(shí)。

4.3.2實(shí)驗(yàn)預(yù)習(xí)內(nèi)容

學(xué)習(xí)Solaris操作系統(tǒng)的兩級(jí)調(diào)度模型,瀏覽內(nèi)核源代碼中proc結(jié)構(gòu)、klwp

結(jié)構(gòu)和kthread結(jié)構(gòu)的定義,了解相關(guān)字段的含義,了解fork函數(shù)的功能,了解

內(nèi)核線程調(diào)度等級(jí)的概念。學(xué)習(xí)IPC的各種機(jī)制模型,如共享內(nèi)存、消息隊(duì)列、

信號(hào)量等。

4.3.3實(shí)驗(yàn)內(nèi)容及步驟

本次實(shí)驗(yàn)分四個(gè)部分,需要的腳本和程序在/dtrace」ab/proc_thread目錄下

1用MDB工具查看進(jìn)程數(shù)據(jù)結(jié)構(gòu)proc_to

1、打開(kāi)一個(gè)終端,鍵入命令"mdb-k”進(jìn)入MDB:

bash-3.00#mdb-k

Loadingmodules:[unixkrtldgenunixspecfsdtraceuppc

pcplusmpufsipsctpusbauhcis1394fctlncalotszfs

randomnfsspppcryptoptmipc]

2、在命令行提示符下輸入命令“ps”,查看當(dāng)前系統(tǒng)中運(yùn)行的進(jìn)程:

-18-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

.>

DHDpGD

SIDSIUIDFLAGSADDRNAME

RoooO

R3ooO00x00000001fec1dd7csched

R2ooO00x00020001d3224278fsflush

R1ooO00x00020001d3224ae0pageout

R:ps119800x42004000d3225348init

Rpl7188378700x42014000d47cd1e8gpdf

89766300x42004000d47cf388mozilla

-8238

R87387

737300x42014000d32130f0dtterm

R740738740740

R53052753053000x42004000d3213958sh

R52852752852800x42004000d320f1c8Xorg

R525152452400x42004000d321c010fbconsole

00x42000000d3217880snmpd

其中倒數(shù)第二列“ADDR”是該進(jìn)程結(jié)構(gòu)proc_t的首地址,我們要使用它來(lái)

查看進(jìn)程結(jié)構(gòu)。

2、我們選擇一個(gè)進(jìn)程,比如pid為738的進(jìn)程(該進(jìn)程運(yùn)行的偽終端dtterm

程序)。在MDB中鍵入如下命令:

>d32130f0::printproc_t

{

p_exec=0xd4e32300

p_as=0xd3162238

pjockp=0xd2996880

p_crlock={

_opaque=[0,0]

p_cred=0xd488d888

p_swapcnt=0

p_stat=*\002,

p_wcode='\0'

p_pidflag=0

p_wdata=0

p_ppid=0x2e1

pjjarent=0xd47d5038

p_child=0xd3213958

p_psibling=0

p_sibling_ns=0

p_child_ns=0

p_next=0xd47d5038

pjDrev=0xd3213958

p_nextofkin=0xd47d5038

p_orphan=0xd3213958

p_nextorph=0

p_sessp=0xd4e36c98

p_pidp=0xd4eab7e8

p_pgidp=0xd4eab7e8

……(還有很多行)

-19-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

這里打印了該進(jìn)程結(jié)構(gòu)proc」的各自段的值,其含義請(qǐng)查閱相關(guān)資料。這里

給出一些比較重要的字段的含義:

表4-1proc_t部分字段

字段含義

p_execvnode指針,指向一個(gè)ELF文件,最終指向磁盤(pán)

上的該進(jìn)程對(duì)應(yīng)的可執(zhí)行文件o

P-as指向該進(jìn)程的進(jìn)程地址空間

P_PPid父進(jìn)程的pid

p_parent指向父進(jìn)程proc_t結(jié)構(gòu)的指針

p_child指向第一個(gè)子進(jìn)程結(jié)構(gòu)的指針

p_next^pjDrev維護(hù)進(jìn)程鏈表的指針,指向前后的進(jìn)程結(jié)構(gòu)

p_orphan孤兒指針,在其子進(jìn)程被kill后,指向其子進(jìn)程

創(chuàng)建的子進(jìn)程。

P_pidp指向一個(gè)pid結(jié)構(gòu)體,里面描述了一些pid信息

pjwpid最近分配給該進(jìn)程的Iwp的id號(hào)

pjwpcnt該進(jìn)程擁有的Iwp數(shù)量

p_utime該進(jìn)程的用戶(hù)態(tài)時(shí)間片

p_stime該進(jìn)程的系統(tǒng)時(shí)間片

P.doorjist該進(jìn)程的door鏈表的首節(jié)點(diǎn)地址

3、可以再繼續(xù)跟蹤一些指針,可以得到豐富的信息,比如我們?cè)俨榭磒_as

指針,它指向了該進(jìn)程地址空間的信息:

>d32130f0::printproc_tp_as|::walkseg|::printstructseg

(

s_base=0x8038000

s_size=0x10000

s_szc=0

s_flags=0

s_as=0xd3162238

s_tree={

avl_child=[0,0]

avl_parent=0xd4d10c94

avl_child_index=0

avl_balance=0

}

s_ops=segvn_ops

s_data=0xd4d11718

)

[……]

這里打印的是管理該進(jìn)程地址空間的一個(gè)段結(jié)構(gòu)的信息,s.base是段的首地

址,s_size是該段的大小,s_data是該段的段地址。如果再跟蹤s_data的話,還

可以看到這個(gè)進(jìn)程運(yùn)行的機(jī)器指令。

關(guān)閉終端,結(jié)束該實(shí)驗(yàn)。

-20-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

2查看阻塞線程的同步對(duì)象類(lèi)型

Solaris操作系統(tǒng)是基于線程的兩級(jí)調(diào)度,最終被處理機(jī)調(diào)度的是內(nèi)核線程

(kthread),在不同的調(diào)度等級(jí)上的調(diào)度策略不同,比如在分時(shí)(TS)等級(jí)上是

基于優(yōu)先級(jí)的搶占式、時(shí)間片輪轉(zhuǎn)調(diào)度。而在系統(tǒng)內(nèi)核中,各線程之間會(huì)由于一

些同步事件而被阻塞,比如進(jìn)程間通信、讀寫(xiě)互斥,條件變量不滿(mǎn)足等,也可能

是用戶(hù)程序造成的等待。

這里用sleep.d腳本跟蹤被阻塞線程的同步對(duì)象類(lèi)型。當(dāng)一個(gè)內(nèi)核線程在同

步對(duì)象上休眠時(shí),將激活該腳本里sched:::sleep探針,此時(shí)系統(tǒng)會(huì)設(shè)置Iwpsinfo

結(jié)構(gòu)的一個(gè)字段pjstype,以表示同步對(duì)象的類(lèi)型,見(jiàn)下表:

表4-2同步對(duì)象類(lèi)型

阻塞類(lèi)型含義

SOBJ_MUTEX內(nèi)核互斥同步對(duì)象

SOBJ_RWLOCK讀寫(xiě)鎖同步對(duì)象

SOBJ_CV條件變量同步對(duì)象

SOBJ_SEMA信號(hào)量同步對(duì)象

SOBJ_USER用戶(hù)級(jí)同步對(duì)象

SOBJ_USER_PI優(yōu)先級(jí)繼承的用戶(hù)級(jí)同步對(duì)象

SOBJ_SHUTLE互動(dòng)同步對(duì)象(與Solaris門(mén)相關(guān))

1、打開(kāi)一個(gè)終端,進(jìn)入/dtrace_lab/proc_thread目錄,運(yùn)行sleep.d腳本:

bash-3.00#./sleep.d

2、再打開(kāi)一個(gè)終端,運(yùn)行,一些程序,如gedit、starsuite(類(lèi)似office的辦公

軟件)。然后按Control+C結(jié)束sleep.d腳本,就可以看到如下結(jié)果(節(jié)選):

bash-3.00#./sleep.d

AC

SOBJCV_ADDRCNT

condvard36c94961

condvard3c622f21

condvarfec7d1b41

kernelmutexd99600001

kernelsemaphored2f251181

kernelsemaphored55dfb401

kernelsemaphored5856d281

user-levellock81336C01

user-levellock876e6881

shuttle052

condvard4cd41f271

condvard5ba251673

condvard531bcf274

condvard566d472110

-21-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

CNTNAMETIDSleeping

On...

1Xorg1

libc.so.1'close+0x15

1automountd1

libc.so.1'_pollsys+0x15

1automountd4

libc.so.1'_Iwp_park+Ox19

1bash1一

Iibc.so.1'_waitid+0x15

r……]

可以看到發(fā)生阻塞得線程號(hào)、線程的地址、阻塞的同步對(duì)象類(lèi)型以及被阻塞

的次數(shù)。在一個(gè)線程的生命周期內(nèi),線程的地址可以看作是這個(gè)線程的唯一標(biāo)識(shí)。

3查看線程調(diào)度中各線程時(shí)間片的剩余情況

TS等級(jí)的線程是按時(shí)間片輪轉(zhuǎn)來(lái)調(diào)度的。內(nèi)核函數(shù)ts」ick()將檢查各線程的

盛譽(yù)時(shí)間片情況。如果一個(gè)線程時(shí)間片用完,則該函數(shù)將阻塞這個(gè)線程。下面是

ts_tick()函數(shù)的定義:

staticvoid

ts_tick(kthread_t*t);

內(nèi)核進(jìn)入該函數(shù)的時(shí)候?qū)⒓せ钜粋€(gè)probe,在這個(gè)probe中我們利用當(dāng)前線

程指針(即ts_tick()函數(shù)的參數(shù))得到該線程剩余的時(shí)間片(請(qǐng)參閱相應(yīng)部分源

代碼)。

1、打開(kāi)一個(gè)終端,運(yùn)行ts.d腳本

bash-3.00#./ts.d

2、在另一個(gè)終端中運(yùn)行一個(gè)計(jì)算質(zhì)數(shù)的程序(這個(gè)程序需要大量地占用

CPU):

bash-3.00#./calculate

-22-

四、內(nèi)核監(jiān)視與動(dòng)態(tài)跟蹤實(shí)驗(yàn)

然后可以看到腳本的輸出如下:

bash-3.00#./ts.d

EXECPIDLWPIDTICKSLEFTCNT

sched751131

sched891121

sched950141

sched11061774

sched11061784

sched5301138

sched5301148

sched5301158

sched5301168

sched5301826

sched112511326

sched112511426

sched112511526

sched112511626

sched530138

sched530138

sched1125138

sched112511038

sched112511138

sched112511238

sched5301439

sched53015

sched112516

sched112517

sched112518

sched11251161

sched11251—

26J

1

sched11251364

sched11251464

sched11251—

以上打印輸出的意思是進(jìn)程號(hào)為PID的進(jìn)程對(duì)應(yīng)的內(nèi)核線程在某個(gè)時(shí)刻還

有TICKSLEFT個(gè)時(shí)間單位剩余。CNT是這種情況出現(xiàn)的次數(shù)。

4進(jìn)程間通信中系統(tǒng)調(diào)用的關(guān)系及通信數(shù)據(jù)的顯示

Solaris系統(tǒng)提供的進(jìn)程間通信(IPC)機(jī)制主要有共享內(nèi)存、信號(hào)量、消息

隊(duì)列以及Solaris門(mén)幾種。我們這里選擇消息隊(duì)列來(lái)進(jìn)行實(shí)驗(yàn)。

消息隊(duì)列是系統(tǒng)內(nèi)核地址空間中的一個(gè)內(nèi)部的鏈表。消息可以按照順序發(fā)送

到隊(duì)列中,也可以以?xún)悍N不同的方式從隊(duì)列中讀取。每一個(gè)消息隊(duì)列用一個(gè)唯一

的IPC標(biāo)識(shí)符表示(消息隊(duì)列不一定是先進(jìn)先出,也可以按消息的類(lèi)型字段取消

息)。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論