版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)說(shuō)明課程名稱 操作系統(tǒng)課程設(shè) 業(yè):物聯(lián)網(wǎng)工 班級(jí) 2012級(jí)2設(shè)計(jì)人 2012010519102015116一、課程設(shè)計(jì)題目:Linux二、設(shè)計(jì)原始資料:1OperatingSystemConceptAbrahamSilberschatz 5、Linux六、命題發(fā)出日期: 設(shè)計(jì)要 總 proc偽文件系統(tǒng)及CMOS實(shí)時(shí)信 設(shè)計(jì)要 總 使用seq-file機(jī)制proc進(jìn)程信 設(shè)計(jì)要 總 設(shè)計(jì)要 總 設(shè)計(jì)要 總 總 1、通過(guò)完成一個(gè)簡(jiǎn)單的Linux內(nèi)核模塊的添加和運(yùn)行工作,了解并21、完成kello.c2kello.cMakefile3、完成kello.ko456kello.c代碼的修改,使其能夠在用戶界面上輸出信息,以及一定1、用gedit編輯工具完成kello.c2kello.cMakefile與普通C語(yǔ)言撰寫的應(yīng)用程序o.c相比,內(nèi)核模塊的編譯比較復(fù)雜,這是因?yàn)樵诰幾g的過(guò)需要當(dāng)前內(nèi)核模塊的支持。我們需要首先編寫一個(gè)Makefile文件,與kello.c的編寫一樣,可以vi工具或者gedit代碼撰寫完成后,文件保存為Makefile與kello.c文件放置在同一個(gè)文件夾下?,F(xiàn)在我們可以開(kāi)始LKM的編譯了。首先執(zhí)行l(wèi)s命令,查看并確認(rèn)kello.c和Makefile存在當(dāng)期工作 下,然后運(yùn)行make指令。 sudoinsmodkello.ko sudormmoddmesg4、LKMkello.cMakefile文件。其內(nèi)容如下:obj-:=KDIR:=/lib/modules/$(suname-r)/build:=$(spwd)$(MAKE)-C$(KDIR)SUBDIRS=$(PWD)rm-r-f.tmp_versions*.mod.c.*.cmd*.o*.symvers對(duì)該文件的解釋是這樣的:KERNELRELEASEMakefile中定義的一個(gè)變量,在第一次執(zhí)行此Makefile時(shí),KERNELRELEASE沒(méi)有被定義,所以make將執(zhí)行else之后的內(nèi)容。如果make的目標(biāo)是clean,直接執(zhí)行clean操作,然后結(jié)束。當(dāng)沒(méi)有make的目標(biāo)時(shí),make執(zhí)行默認(rèn)操作,即default后的指令,此時(shí)-C$(KDIR)指明跳轉(zhuǎn)到內(nèi)核源 下那里的=$(PWD)表明需要返回到當(dāng)前 繼續(xù)讀入、執(zhí)行當(dāng)前的Makefile。當(dāng) 返回時(shí),KERNELRELEASE已被定義,kbuild也被啟動(dòng)去解析kbuild語(yǔ)法的語(yǔ)句,make將繼續(xù)else之前的內(nèi)容。else之前的內(nèi)容為kbuild語(yǔ)法的語(yǔ)句,指明模塊源碼中各文件的依賴關(guān)系,以及要生成的目標(biāo)模塊名,obj-m:=kello.o表示編譯連接后將生成kello.o模塊,而kello.o文件默認(rèn)則是由kello.c文件編譯生成的。5在內(nèi)核中定義了0~7總計(jì)8staticchar*log_level[]={KERN_EMERG0,表示等級(jí)最高。此時(shí)調(diào)用printkprintk(“<0>o,studentsfromSDUST!Thisisinkernelspace!\n"printk(KERN_EMERG"\no,studentsfromSDUST!Thisisinkernelspace!\n");6、intk函數(shù)還可以輸出相關(guān)參數(shù),例如如下printk(KERN_DEBUG"Wearehere:%s:%dat%s()/n",FILE ,LINE ,FUNCTION 其中FILE 表示源代碼文件,以絕對(duì)路徑的方式出現(xiàn),LINE 表示這行printk允許在這個(gè)源代碼文件中的第幾行,這是一個(gè)很好的給出調(diào)測(cè)點(diǎn)位置的信息。這個(gè)同樣可以用在用戶程序。另外DATE 和TIME也是經(jīng)常使用用的兩個(gè)。這4個(gè)宏,在debug中會(huì)經(jīng)常使用。還有一個(gè)常用的是FUNCTION 表示處在哪個(gè)函數(shù)中,也是比較好的定位方式。這些宏均可以在用戶程序中使用,對(duì)debug非常有幫7kello.c代碼的修改,使其能夠在用戶界面上輸出信息,以及一定運(yùn)行結(jié)果及分1、用gedit編輯工具完成kello.c2kello.c代碼對(duì)應(yīng)的Makefile上述代碼撰寫完成后,文件保存為Makefile與kello.c文件放置在同一個(gè)文件夾下。現(xiàn)在我們可以開(kāi)始LKM的編譯了。首先執(zhí)行l(wèi)s命令,查看并確認(rèn)kello.c和Makefile存在當(dāng)期工作 下,然后運(yùn)行make指3、完成kello.ko4printk(“<0>o,studentsfromSDUST!Thisisinkernelspace!\n"printk(KERN_EMERG"\no,studentsfromSDUST!Thisisinkernelspace!\n");5kello.c代碼的修改,使其能夠在用戶界面上輸出信息,以及總本次設(shè)計(jì)的重點(diǎn)有兩個(gè)的c庫(kù)。MakefileMakefile文件的撰寫是內(nèi)核編程必要的procCMOS1LKM機(jī)制添加系統(tǒng)功能,并支持應(yīng)用程序使用該功2Linuxmycatproc3LKM模塊,并對(duì)比,更深刻地理解內(nèi)核模塊編1、在Linux中有一個(gè)應(yīng)用非常廣泛令:cat,它的作用很多,其中一個(gè)2mycat.c代碼的編輯,$gccmycat.c-o文件編譯成功后,按著文件中說(shuō)明的方法運(yùn)行$./mycat<filename>可以是mycat.cpp或其他文件的名稱。請(qǐng)觀察命令3、對(duì)照代碼、結(jié)合操作系統(tǒng)課程內(nèi)容、以及圖2.1,4、運(yùn)行本節(jié)命令,5、代碼編輯完成后,請(qǐng)保存為cmos.c。然后在相同文件夾下編輯Makefile文件,內(nèi)容如下:Makefile保存后,在同一 下運(yùn)行make;如果報(bào)錯(cuò),請(qǐng)根據(jù)錯(cuò)誤提示修改;如果一切順利,那么就生成了cmos.ko文件,可以使用ls命令查看。這表示初步的編譯已經(jīng)通過(guò)了。確認(rèn)cmos.ko生成后,可以通過(guò)如下命令來(lái)添加該LKM模塊:$sudoinsmodcmos內(nèi)核源文件,Makfile6cmos.ko內(nèi)核模塊,cat、mycat應(yīng)用程序進(jìn)1$cat$cat$cat$cat$cat$cat$cat$cat2、完成如下代碼的撰寫,mycat.c#include<fcntl.h>//foropen()#include<stdio.h>//forperror()#include<unistd.h>//forread(),write(),close()intmain(intargc,char*argv[]){inti,fd,ch;//declarelocalvariablesfor(i=1;i<argc;i++){fd=open(argv[i],O_RDONLYif(fd<0){perror(argv[i]);continue;while(read(fd,&ch,1)==1)write(STDOUT_FILENO,&ch,1);close(fd);}}文件保存后,可以按著文件頭部注釋中說(shuō)明的方法進(jìn)行編譯,$gccmycat.c-o文件編譯成功后,按著文件中說(shuō)明的方法運(yùn)行$./mycat<filename>mycat.cpp或其他文件的名稱。觀察命令運(yùn)行后的3、運(yùn)行本節(jié)命令,查看輸出結(jié)果。$catproc/cpuinfoCPU(型號(hào),,緩存大小等)$cat/proc/modules-$cat/proc/meminfo-$cat/proc/iomemIO$cat/proc/self/maps-cat$cat/proc/devices-$cat/proc/filesystems-$cat/proc/version-4、代碼編輯完成后,cmos.c。然后在相同文件夾下編輯obj-m:=cmos.oKDIR:=/lib/modules/$(suname-r)/buildPWD:=$(spwd)$(MAKE)-C$(KDIR)SUBDIRS=$(PWD)rm-r-f.tmp_versions*.mod.c.*.cmd*.o*.symversMakefile保存后,在同一下運(yùn)行make;如果報(bào)錯(cuò),請(qǐng)根據(jù)錯(cuò)誤提示修改;如果一切順利,cmos.ko文件,ls命令查看。這表示初步的編譯已經(jīng)通過(guò)了。確認(rèn)cmos.ko生成后,可以通過(guò)如下命令來(lái)添加該LKM模塊:$sudoinsmod 下查看是否生成了cmos偽文件,也可以使用dmesg來(lái)查看內(nèi)核日志中的模塊添加信息。一切順利沒(méi)有問(wèn)題,我們可以運(yùn)行如下命令來(lái)RTC信息了:$cat/proc/cmos你的顯示器上的輸出結(jié)果是什么?是不是RTC信息不斷的在刷屏?按<Ctrl>+C組合鍵,可以停止刷屏。查看我們的cmos.c內(nèi)核源文件,可以確認(rèn)我們確實(shí)是只想輸出一次RTC信息啊,但為什么一直在不斷的輸出呢?現(xiàn)在再嘗試使用我們自己開(kāi)發(fā)的mycat應(yīng)用程序來(lái)查看RTC輸出:$./mycat5、“新內(nèi)核新特性:ubuntu14.04LTSproc特性”刪除了老內(nèi)核環(huán)境支持的多個(gè)版本的proc創(chuàng)建方法。目前3.13.0proc_create,其函數(shù)原型為staticinlinestructproc_dir_entry*proc_create(constchar*name,umode_tmode,structproc_dir_entry*parent,conststructfile_operations*proc_fops){returnproc_create_data(name,mode,parent,proc_fops,}該函數(shù)是一個(gè)內(nèi)聯(lián)函數(shù)(inline),proc_creat_dataproc_creat-data的原型如下externstructproc_dir_entry*proc_create_data(constchar*,umode_t,structproc_dir_entry*,conststructfile_operations*,void*);所以嚴(yán)格的說(shuō),在版本的Linux內(nèi)核中,proc偽文件事實(shí)上只有一新版本的Linux內(nèi)核刪除了在ubuntu12.04LTS(Linux3.2.0內(nèi)核)經(jīng)常使用的proc直接讀和寫的函數(shù)。也就是說(shuō),在ubuntu12.04LTS中我們使用一個(gè)proc自定義的讀函數(shù)就可以正確的讀出相關(guān)信息了。為此,在新版Linuxprocseq_file機(jī)制綁定在一起了。也就是說(shuō),在Linux新版本的內(nèi)核中proc偽文件的讀寫等操作都是根據(jù)seq_file機(jī)制來(lái)進(jìn)行的。運(yùn)行結(jié)果及分1、$cat$cat$cat$cat$cat$cat$cat$cat2、$sudoinsmod3、嘗試使用自己開(kāi)發(fā)的mycat應(yīng)用程序來(lái)查看RTC$./mycat總/proc偽文件系統(tǒng)提供了一個(gè)基于文件形式的Linux內(nèi)部接口。它可些狀態(tài)往往都是處于內(nèi)核空間的,對(duì)程序員來(lái)說(shuō)是作系統(tǒng)隔絕開(kāi)的。通過(guò)本次設(shè)計(jì),我們可以看到為了解決應(yīng)用程序與內(nèi)核數(shù)據(jù)的問(wèn)題,也即我們不可能讓一個(gè)類似于cat的應(yīng)用程序直接去讀CMOS中的RTC信息,我們添加了一個(gè)cmos.ko內(nèi)核模塊,該模塊創(chuàng)建了一個(gè)名為cmos的proc偽文件,通過(guò)這個(gè)偽文件我們就可以直接從硬件設(shè)備CMOS中RTC信息了。當(dāng)用戶程序,比如cat,要打開(kāi)/proc/cmos偽文件或者/proc/cmos的信息時(shí),cat程序中的標(biāo)準(zhǔn)庫(kù)函數(shù)把相應(yīng)的操作參數(shù)傳遞給操作系統(tǒng)內(nèi)核對(duì)應(yīng)的LKM模塊,也即我們編寫的cmos.ko,由cmos.ko調(diào)用相應(yīng)的內(nèi)核操作函數(shù)打開(kāi)該設(shè)備或者相關(guān)信息,然后把操作結(jié)果返1、通過(guò)使用seq-file機(jī)制proc進(jìn)程信息,了解seq_file機(jī)制,理解Linux重要的內(nèi)核數(shù)據(jù)結(jié)構(gòu)task_struct;2、通過(guò)利用seq_fileproc偽文件,Linux內(nèi)核task_structPCB(ProcessControlBlock)的信息。1、了解seq_file2、實(shí)現(xiàn)procseq_file32步輸出結(jié)果進(jìn)行分析,查看并分析查看/proc/tasklist的信息4、重新編輯編輯代碼并運(yùn)試新的tasklist模塊,并用mycat和cat命1、編輯tasklist.c內(nèi)核代碼,添加到當(dāng)前內(nèi)核中運(yùn)行,并且通過(guò)mycat和cat命令查看/proc/tasklist的信息。實(shí)現(xiàn)proc偽文件與seq_file機(jī)制的綁定,通過(guò)proc偽文件tasklist當(dāng)前系統(tǒng)中進(jìn)程的pid、狀態(tài)、進(jìn)程名稱等信 在my_proc_entryproc_create(modname0NULL&my_proc);中傳遞了參數(shù)&my_proc作為定義的proc偽文件tasklist的操作函數(shù),它的具體staticconststructfile_operationsmy_proc{.owner= = = =.release=其中my_open函數(shù)是自己寫的,但是只有一句就是調(diào)用seq_open函數(shù)。seq_open通常在打開(kāi)文件的時(shí)候使用;seq_read,seq_lseek和seq_releaseread,llseekrelease,由頭文件seq_file.h定義,在seq_file.c中實(shí)現(xiàn)。2、查看/proc/tasklist的信息,3、重新編輯代碼并運(yùn)試新的tasklist模塊,并用mycat和cat命令分1是否存在差異,并分析。運(yùn)行結(jié)果及分11procseq_file機(jī)制是這樣綁定在一起的文件級(jí)別的操作綁定。proc在創(chuàng)建后,seq_file機(jī)制支持的打開(kāi)、讀、寫(seq_open、seq_read、seq_write)等函數(shù)進(jìn)行文件級(jí)別的操作;工作,那么我們就需要自己重寫這些函數(shù),這些函數(shù)都需要在file_operations結(jié)構(gòu)體中,并在proc文件創(chuàng)建時(shí)作為參數(shù)傳遞進(jìn)去,即proc_create中記錄級(jí)別的遍歷操作。如果在遍歷seq_file對(duì)象時(shí)需要完成我們自己的工作,那么就需要定義我們自己的遍歷操作函數(shù),即:start、next、stop和show四個(gè)函數(shù),并且把相關(guān)的操作函數(shù)放在seq_operations結(jié)構(gòu)體中,這個(gè)結(jié)構(gòu)體需要作為參數(shù)在proc偽文件打開(kāi)時(shí)傳遞進(jìn)去,即seq_open的22通過(guò)重寫cmos內(nèi)核代碼,讓其不再刷屏,mycat函數(shù)能夠33./mycat/proc/tasklist1中,讀一次相當(dāng)于調(diào)用上面的四個(gè)函數(shù),之前自己寫的procread065,所以會(huì)一直讀,會(huì)刷屏。Mycat1,而myprocread直接返回總在使用seq-file機(jī)制proc進(jìn)程信息的設(shè)計(jì)中通過(guò)創(chuàng)建一個(gè)內(nèi)核模塊,利用proc偽文件系統(tǒng)以及seq_file機(jī)制,我學(xué)會(huì)了怎樣去查看進(jìn)程的信息。在這其中比較困惑的是proc怎樣和seq_file機(jī)制綁定在一起的。概括來(lái)說(shuō),procseq_open、seq_read、seq_write等函數(shù)來(lái)進(jìn)行操作,所以創(chuàng)建proc文件時(shí)要在proc_create中傳入需要使file_operations作為參數(shù),其中的操作函數(shù)可以自己重新定義。在遍歷proc文件中的每個(gè)記錄時(shí)需要使用seq_operations中指定的四個(gè)操作函數(shù)(必須指定,而且也只有四個(gè)):start、show、next和stop,這個(gè)結(jié)構(gòu)體需要在打開(kāi)proc文件時(shí)作為參數(shù)傳遞給seq_open函數(shù)。事實(shí)上,在本章實(shí)驗(yàn)中我們遍歷進(jìn)程Linux進(jìn)程控制塊結(jié)構(gòu)task_struct時(shí)其實(shí)使用的是task_struct鏈表自帶的遍歷機(jī)制,比如宏定義next_task、初始位置init_task等。1、通過(guò)POSIX多線程創(chuàng)建,了解基于POSIX多線程編程下加鎖和不加鎖兩種情況的區(qū)別,理解并掌握POSIX多線程環(huán)境下利用同步機(jī)制解2、通過(guò)Linux多線程創(chuàng)建,了解基于Linux多線程編程下加鎖和不加鎖兩種情況的區(qū)別,理解并掌握Linux多線程環(huán)境下利用同步機(jī)制解決多1、掌握基于POSIX會(huì)IEEE開(kāi)發(fā)的標(biāo)準(zhǔn)族,部分已經(jīng)被ISO接受為國(guó)際標(biāo)準(zhǔn)。IEEEStd.1003.1-1990或POSIX.1為操作系統(tǒng)的服務(wù)例程提供了源代碼級(jí)別的C2、掌握基于Linux雖然Linux支持POSIX的多線程編程,但是Linux也有自己一套用于基于POSIX多線程編1、基于POSIX在主線創(chuàng)建一個(gè)新的線程,完成一個(gè)從1到UPPER(指定的累加2、基于POSIX在主線創(chuàng)建兩個(gè)新線程,合作完成一個(gè)從1到UPPER(指定的累3、基于POSIX常見(jiàn)的機(jī)制是同步機(jī)制在主線創(chuàng)建兩個(gè)新線程使用基于互斥鎖的同步機(jī)制合作完成一個(gè)從1到UPPER(指定的累加次數(shù)上限)的累加工作,1、基于Linux定次數(shù)的累加工作,指定累加次數(shù)為upper。也就是說(shuō)最終累加結(jié)果為:2、基于Linux多線程編程:TestAndSet在主線創(chuàng)建四個(gè)新的進(jìn)程,分別使用臨界區(qū)模型完成對(duì)一個(gè)共享變量counterupper。3、基于Linux線程主動(dòng)放棄CPUintnanospleep(conststructtimespec*req,structtimespec一行則是用于說(shuō)明使用的tsStruct結(jié)構(gòu)體timespecStructtime_ttv_sec;/*seconds秒Longinttv_nsec;/*nanoseconds納秒}nanosleep函數(shù)功能是暫停某個(gè)線程直到規(guī)定的時(shí)間后恢復(fù),參數(shù)seq就是要暫停的時(shí)間其中req->tv_sec是以秒為單位而tv_nsec以納秒為單位,范圍是[0, ]。由于調(diào)用nanosleep是使用線程進(jìn)入TASK_RUNNING狀態(tài),這就意味著有可能會(huì)沒(méi)有等到規(guī)定的時(shí)間就因?yàn)楫?dāng)然是在rem不為空的情況下。運(yùn)行結(jié)果及分12345、TestAndSet6總本次多線程環(huán)境下的競(jìng)爭(zhēng)條件與同步機(jī)制設(shè)計(jì)對(duì)Linux支持的線程創(chuàng)建機(jī)制進(jìn)行了一個(gè)簡(jiǎn)單的對(duì)比分析。其中pthread函數(shù)庫(kù)支持用戶級(jí)的線mutexspinlocksemaphoreLinuxLinuxclone的線程由內(nèi)核實(shí)現(xiàn)調(diào)度。根據(jù)內(nèi)核數(shù)據(jù)的粒度不同、范圍不同,Linux同步機(jī)制同樣有的選擇,包括原子操作、內(nèi)存屏障、自旋鎖、信號(hào)量1、通過(guò)對(duì)進(jìn)程控制塊task_struct中的mm_struct變量mm的操作,了棧、以及引入的動(dòng)態(tài)庫(kù)等。2、通過(guò)mm中的vm_struct變量mmap的操作,了解每個(gè)段的運(yùn)行情1mm.cMakefile21mm.cMakefile圖5.1是Operatingsystemconcepts中的一個(gè)關(guān)于內(nèi)存地址映射的基本示意圖。它說(shuō)明了在In IA32結(jié)構(gòu)中從邏輯地址到物理地址的映0MAX-1,MAXpagingpaging
圖 兩線程使用互斥鎖同步完成一個(gè)計(jì)數(shù)工selector1613TIIA328k8kRPL。段寄存
16位16位段基地址全局段表寄全局段表寄存5.2從邏輯地址到線性地址(虛擬地址)5.2·CPUselector:offset”·在段寄存器中裝入段選擇符,同時(shí)把32位地址偏移量裝入某個(gè)寄存器·根據(jù)選擇符中的索引值、TI及RPL值,再根據(jù)相應(yīng)描述符表中的段地址和段界限,進(jìn)行一系列檢查;如果該段無(wú)問(wèn)題,就取出相應(yīng)的描述·將描述符中的32位段址和放在ESI、EDI等中的32位有效地址相32page頁(yè)頁(yè)0圖5.3 Linux線性空間在32位平臺(tái)上為4GB的固定大小。linux內(nèi)核將這4G字節(jié)的空間分為兩部分。內(nèi)核使用最高的1G字節(jié)(從虛地址0xC 0xFFFFFFFF,地址0x 因?yàn)槊總€(gè)進(jìn)程可以通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核,因此,Linux內(nèi)核空間由系統(tǒng)內(nèi)的所有進(jìn)程共享。于是,從具體進(jìn)程的角度看,每個(gè)進(jìn)程可以擁有4G(0~3G,在系統(tǒng)啟動(dòng)時(shí),Linux內(nèi)核映像被裝入到物理地址0x 地方,即1MB開(kāi)始區(qū)間前面1M空間留做他用。Linux內(nèi)核映像應(yīng)該在虛內(nèi)存的內(nèi)核空間中,所以程序在內(nèi)映像時(shí)在所有的符號(hào)地址加上一個(gè)偏移量0xC 對(duì)比較簡(jiǎn)單的。給定一個(gè)虛地址X,其對(duì)應(yīng)的物理地址為“X-PAGE_OFFSET”;反之,給定一個(gè)物理地址Y,則其對(duì)應(yīng)的虛地址為“Y+PAGE_OFFSET相對(duì)于內(nèi)核空間而言,Linux形成的空洞(holes)則可以放入動(dòng)態(tài)文件。盡管每個(gè)用戶進(jìn)程可以擁3GBLinux每個(gè)Linux進(jìn)程都需要?jiǎng)?chuàng)建多個(gè)段,這些段對(duì)應(yīng)不同的虛擬區(qū)域。一個(gè)虛存區(qū)域是虛存空間中的續(xù)區(qū)域,在這個(gè)區(qū)域中的信息具有相同的操作和特性。Linuxtaskstructstructvolatile unsigned structmm_struct structthread_struct /*其他省略task_struct被稱為進(jìn)程控制塊PCB,因?yàn)樗涗浢恳粋€(gè)進(jìn)程所mmstruct,被稱為“內(nèi)存描述符”。mmstructLinux在Linux系統(tǒng)中,進(jìn)程控制塊task_struct是內(nèi)核中的數(shù)據(jù)結(jié)mmmm_struc
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 代理商團(tuán)隊(duì)建設(shè)方案
- QZT-63型塔吊基礎(chǔ)施工方案
- 2023年臺(tái)州溫嶺市第一人民醫(yī)院招聘醫(yī)學(xué)衛(wèi)生類人才筆試真題
- 2023年內(nèi)江市大學(xué)生鄉(xiāng)村醫(yī)生專項(xiàng)計(jì)劃招聘筆試真題
- 防校園欺凌應(yīng)急預(yù)案
- ICU病情評(píng)估管理制度
- 機(jī)電專業(yè)技術(shù)個(gè)人工作總結(jié)
- 初中語(yǔ)文教師2024年終工作總結(jié)
- 木門廠規(guī)章制度
- 六年級(jí)語(yǔ)文老師發(fā)言稿
- 婚禮流程婚禮籌備計(jì)劃(表格)
- 60歲以上老年補(bǔ)助表(一)
- 籌備成立行業(yè)協(xié)會(huì)、商會(huì)申請(qǐng)表
- 一例火龍罐治療痛風(fēng)疼痛病人的護(hù)理個(gè)案
- 三位數(shù)乘兩位數(shù)立豎式排版計(jì)算練習(xí)題300道
- 江蘇省南京市部分校2023-2024學(xué)年六年級(jí)第一學(xué)期數(shù)學(xué)期中階段抽測(cè)試卷一【試卷+答案】
- 《辛亥革命》(共31張)
- 小學(xué)校本課程-【傳統(tǒng)文化】百世之師教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 人教版(新插圖)三年級(jí)上冊(cè)數(shù)學(xué) 第5課時(shí) 解決問(wèn)題 教學(xué)課件
- 檔案整理及數(shù)字化服務(wù)方案(技術(shù)標(biāo) )
- 蘇教版四年級(jí)數(shù)學(xué)上冊(cè)《一 升和毫升 第2課時(shí) 認(rèn)識(shí)毫升》課堂教學(xué)課件PPT公開(kāi)課
評(píng)論
0/150
提交評(píng)論