版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年腫瘤類(lèi)生物制品項(xiàng)目建議書(shū)
- 2025幼兒園采購(gòu)合同協(xié)議書(shū)
- 2025年甲基丙烯酸甲酯合作協(xié)議書(shū)
- 地鐵隧道維修加固合同
- 2025年皮革、毛皮及其制品項(xiàng)目合作計(jì)劃書(shū)
- 辦公樓入駐企業(yè)健康篩查承諾書(shū)
- 體育賽事現(xiàn)場(chǎng)急救聘用合同醫(yī)生
- 工廠消防設(shè)施安裝合同范本
- 酒店綠化維修合同
- 化工企業(yè)實(shí)驗(yàn)室研究員聘用合同
- 高考語(yǔ)文新題型+“文學(xué)短評(píng)”相關(guān)寫(xiě)作(真題+技法+練習(xí))
- 2023年小學(xué)五年級(jí)數(shù)學(xué)上學(xué)期期末水平測(cè)試試卷(天河區(qū))
- 中考數(shù)學(xué)計(jì)算題100道
- 集團(tuán)資產(chǎn)重組實(shí)施方案
- GB/T 33195-2016道路交通事故車(chē)輛速度鑒定
- (職高)高一語(yǔ)文期末測(cè)試題及答案解析
- GB/T 15176-1994插入式電子元器件用插座及其附件總規(guī)范
- GB/T 14383-2008鍛制承插焊和螺紋管件
- 紅色簡(jiǎn)約大氣年會(huì)晚會(huì)節(jié)目單
- 李孟潮個(gè)體心理咨詢(xún)的操作
- 三九企業(yè)集團(tuán)商標(biāo)權(quán)資產(chǎn)評(píng)估報(bào)告書(shū)
評(píng)論
0/150
提交評(píng)論