Linux內(nèi)存管理詳解實(shí)用教案_第1頁(yè)
Linux內(nèi)存管理詳解實(shí)用教案_第2頁(yè)
Linux內(nèi)存管理詳解實(shí)用教案_第3頁(yè)
Linux內(nèi)存管理詳解實(shí)用教案_第4頁(yè)
Linux內(nèi)存管理詳解實(shí)用教案_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、AgendaLinux對(duì)外提供的內(nèi)存對(duì)外提供的內(nèi)存(ni cn)管理接口管理接口linux 內(nèi)存內(nèi)存(ni cn)鏡像圖鏡像圖3 13 23 4Linux 內(nèi)存管理算內(nèi)存管理算法法(sun f)介紹介紹3 3Linux如何防止內(nèi)如何防止內(nèi)存碎片存碎片第1頁(yè)/共25頁(yè)第一頁(yè),共26頁(yè)。Linux Image藍(lán)色字體部分(b fen)可用空間第2頁(yè)/共25頁(yè)第二頁(yè),共26頁(yè)。Linux 如何防止內(nèi)存如何防止內(nèi)存(ni cn)碎片碎片 內(nèi)存碎片內(nèi)存碎片 內(nèi)部碎片內(nèi)部碎片: 系統(tǒng)為了滿足一小段內(nèi)存區(qū)(連續(xù))的需要系統(tǒng)為了滿足一小段內(nèi)存區(qū)(連續(xù))的需要(xyo),不得不分配了一大區(qū)域連續(xù)內(nèi)存給它,從而,

2、不得不分配了一大區(qū)域連續(xù)內(nèi)存給它,從而造成了空間浪費(fèi)造成了空間浪費(fèi) 外部碎片外部碎片系統(tǒng)雖有足夠的內(nèi)存,但卻是分散的碎片,無法滿足對(duì)大塊系統(tǒng)雖有足夠的內(nèi)存,但卻是分散的碎片,無法滿足對(duì)大塊“連續(xù)內(nèi)存連續(xù)內(nèi)存”的需求的需求 第3頁(yè)/共25頁(yè)第三頁(yè),共26頁(yè)。Linux 如何如何(rh)防止內(nèi)存碎片防止內(nèi)存碎片 linux減少外部碎片減少外部碎片 伙伴系統(tǒng)伙伴系統(tǒng)(buddy算法算法)把內(nèi)存塊按大小分組管理,一定程度上減輕了外部碎片把內(nèi)存塊按大小分組管理,一定程度上減輕了外部碎片的危害,因?yàn)轫?yè)框分的危害,因?yàn)轫?yè)框分 配不在盲目,而是按照大小依次有序進(jìn)行,不過伙伴關(guān)系配不在盲目,而是按照大小依次有序

3、進(jìn)行,不過伙伴關(guān)系只是只是(zhsh)減輕了外部碎片,但并未徹底消除減輕了外部碎片,但并未徹底消除 ,但是伙伴系統(tǒng)同時(shí)又帶來很多但是伙伴系統(tǒng)同時(shí)又帶來很多的內(nèi)部碎片的內(nèi)部碎片 linux減少外部碎片減少外部碎片 SLAB,SLUB,SLOB分配器使得一個(gè)頁(yè)面內(nèi)眾多小塊內(nèi)存可獨(dú)立被分配使用,避分配器使得一個(gè)頁(yè)面內(nèi)眾多小塊內(nèi)存可獨(dú)立被分配使用,避免了內(nèi)部分片,節(jié)約了空閑內(nèi)存免了內(nèi)部分片,節(jié)約了空閑內(nèi)存 第4頁(yè)/共25頁(yè)第四頁(yè),共26頁(yè)。Linux 如何防止如何防止(fngzh)內(nèi)存碎片內(nèi)存碎片linux 內(nèi)存內(nèi)存(ni cn)管理層次關(guān)系圖管理層次關(guān)系圖1第5頁(yè)/共25頁(yè)第五頁(yè),共26頁(yè)。Linu

4、x 如何如何(rh)防止內(nèi)存碎片防止內(nèi)存碎片linux 內(nèi)存管理內(nèi)存管理(gunl)層次關(guān)系層次關(guān)系圖圖2第6頁(yè)/共25頁(yè)第六頁(yè),共26頁(yè)。Linux 內(nèi)存管理算法內(nèi)存管理算法(sun f)介紹介紹 Buddy System算法原理算法原理 Buddy System是一種經(jīng)典的內(nèi)存管理是一種經(jīng)典的內(nèi)存管理算法。在算法。在Unix和和Linux操作系統(tǒng)中都有操作系統(tǒng)中都有用到。其作用是減少存儲(chǔ)空間中的空洞、用到。其作用是減少存儲(chǔ)空間中的空洞、減少碎片、增加利用率。避免外碎片的減少碎片、增加利用率。避免外碎片的方法有兩種:方法有兩種: a.利用分頁(yè)單元把一組非連續(xù)的空閑頁(yè)利用分頁(yè)單元把一組非連續(xù)的

5、空閑頁(yè)框映射到連續(xù)的線性地址區(qū)間??蛴成涞竭B續(xù)的線性地址區(qū)間。 b.開發(fā)適當(dāng)?shù)募夹g(shù)來記錄現(xiàn)存的空閑連開發(fā)適當(dāng)?shù)募夹g(shù)來記錄現(xiàn)存的空閑連續(xù)頁(yè)框塊的情況,以盡量避免為滿足對(duì)續(xù)頁(yè)框塊的情況,以盡量避免為滿足對(duì)小塊的請(qǐng)求而把大塊的空閑塊進(jìn)行分割。小塊的請(qǐng)求而把大塊的空閑塊進(jìn)行分割。 基于下面三種原因,內(nèi)核選擇第二種避基于下面三種原因,內(nèi)核選擇第二種避免方法:免方法: a.在某些情況下,連續(xù)的頁(yè)框確實(shí)必要。在某些情況下,連續(xù)的頁(yè)框確實(shí)必要。 b.即使連續(xù)頁(yè)框的分配不是很必要,它即使連續(xù)頁(yè)框的分配不是很必要,它在保持內(nèi)核頁(yè)表不變方面所起的作用也在保持內(nèi)核頁(yè)表不變方面所起的作用也是不容忽視的。假如修改頁(yè)表,則

6、導(dǎo)致是不容忽視的。假如修改頁(yè)表,則導(dǎo)致平均訪存次數(shù)增加,從而頻繁刷新平均訪存次數(shù)增加,從而頻繁刷新TLB。 c.通過通過4M的頁(yè)可以訪問大塊連續(xù)的物理的頁(yè)可以訪問大塊連續(xù)的物理內(nèi)存,相對(duì)內(nèi)存,相對(duì)(xingdu)于于4K頁(yè)的使用,頁(yè)的使用,TLB未命中率降低,加快平均訪存速度。未命中率降低,加快平均訪存速度。第7頁(yè)/共25頁(yè)第七頁(yè),共26頁(yè)。 buddy算法將所有空閑頁(yè)框分組為算法將所有空閑頁(yè)框分組為11個(gè)塊鏈表,每個(gè)塊鏈表分別包含個(gè)塊鏈表,每個(gè)塊鏈表分別包含1,2,4,8,16,32,64,128,256,512,1024個(gè)連續(xù)的頁(yè)框,每個(gè)塊的第一個(gè)頁(yè)框的個(gè)連續(xù)的頁(yè)框,每個(gè)塊的第一個(gè)頁(yè)框的物

7、理地址是該塊大小的整數(shù)倍。如,大小為物理地址是該塊大小的整數(shù)倍。如,大小為16個(gè)頁(yè)框的塊,其起始地址是個(gè)頁(yè)框的塊,其起始地址是16*212的倍數(shù)。的倍數(shù)。 例,假設(shè)要請(qǐng)求例,假設(shè)要請(qǐng)求(qngqi)一個(gè)一個(gè)128個(gè)頁(yè)框的塊,算法先檢查個(gè)頁(yè)框的塊,算法先檢查128個(gè)頁(yè)框的鏈表個(gè)頁(yè)框的鏈表是否有空閑塊,如果沒有則查是否有空閑塊,如果沒有則查256個(gè)頁(yè)框的鏈個(gè)頁(yè)框的鏈 表,有則將表,有則將256個(gè)頁(yè)框的塊分裂兩個(gè)頁(yè)框的塊分裂兩份,一份使用,一份插入份,一份使用,一份插入128個(gè)頁(yè)框的鏈表。如果還沒有,就查個(gè)頁(yè)框的鏈表。如果還沒有,就查512個(gè)頁(yè)框的鏈個(gè)頁(yè)框的鏈表,有的話就分裂為表,有的話就分裂為 1

8、28,128,256,一個(gè),一個(gè)128使用,剩余兩個(gè)插入對(duì)應(yīng)鏈表。使用,剩余兩個(gè)插入對(duì)應(yīng)鏈表。如果在如果在512還沒查到,則返回出錯(cuò)信號(hào)。還沒查到,則返回出錯(cuò)信號(hào)。 回收過程相反回收過程相反第8頁(yè)/共25頁(yè)第八頁(yè),共26頁(yè)。第9頁(yè)/共25頁(yè)第九頁(yè),共26頁(yè)。第10頁(yè)/共25頁(yè)第十頁(yè),共26頁(yè)。 static inline struct page *alloc_pages(gfp_t gfp_mask, unsigned int order) void _free_pages(struct page *page, unsigned int order) 分配內(nèi)存的單位為頁(yè)面數(shù)分配內(nèi)存的單位為頁(yè)面

9、數(shù),分配時(shí)候傳入分配時(shí)候傳入order值值, order 為為0 ,1,2,.,n 分別分配分別分配1,2,4,2n個(gè)頁(yè)面?zhèn)€頁(yè)面 伙伴系統(tǒng)伙伴系統(tǒng)(Buddy算法算法(sun f)分配的頁(yè)面物理上是連續(xù)的分配的頁(yè)面物理上是連續(xù)的,因此使用伙伴因此使用伙伴系統(tǒng)分配的內(nèi)存大小最大為系統(tǒng)分配的內(nèi)存大小最大為210 * PAGESIZE = 4K * 4K = 4M unsigned long _get_free_pages(gfp_t gfp_mask, unsigned int order) void free_pages(unsigned long addr, unsigned int orde

10、r) Buddy算法算法(sun f)雖然能很好的減少外部碎片的產(chǎn)生雖然能很好的減少外部碎片的產(chǎn)生,但是他卻可用導(dǎo)致但是他卻可用導(dǎo)致很多的內(nèi)部碎片很多的內(nèi)部碎片第11頁(yè)/共25頁(yè)第十一頁(yè),共26頁(yè)。slab/slob/slub的作用的作用:以頁(yè)為最小單位分配內(nèi)存對(duì)于內(nèi)核管理系統(tǒng)物理內(nèi)存來說的以頁(yè)為最小單位分配內(nèi)存對(duì)于內(nèi)核管理系統(tǒng)物理內(nèi)存來說的確比較方便,但內(nèi)核自身最常使用確比較方便,但內(nèi)核自身最常使用 的內(nèi)存卻往往是很小的內(nèi)存卻往往是很?。ㄟh(yuǎn)遠(yuǎn)小于一頁(yè))的內(nèi)存塊(遠(yuǎn)遠(yuǎn)小于一頁(yè))的內(nèi)存塊比如存放文件描述符、進(jìn)比如存放文件描述符、進(jìn)程描述符、虛擬內(nèi)存區(qū)域描述符等行為所需的內(nèi)存都不足程描述符、虛擬內(nèi)

11、存區(qū)域描述符等行為所需的內(nèi)存都不足一頁(yè)。這些用來存放描述符的一頁(yè)。這些用來存放描述符的 內(nèi)存相比頁(yè)面而言,就好比內(nèi)存相比頁(yè)面而言,就好比是面包屑與面包。一個(gè)整頁(yè)中可以聚集多個(gè)這種這些小塊是面包屑與面包。一個(gè)整頁(yè)中可以聚集多個(gè)這種這些小塊內(nèi)存;而且這些小塊內(nèi)存塊也和面包屑一樣頻繁地生成內(nèi)存;而且這些小塊內(nèi)存塊也和面包屑一樣頻繁地生成/銷銷毀。毀。為了滿足內(nèi)核對(duì)這種小內(nèi)存塊的需要為了滿足內(nèi)核對(duì)這種小內(nèi)存塊的需要(xyo),Linux系統(tǒng)系統(tǒng)采用了一種被稱為采用了一種被稱為slab分配器的技術(shù)。分配器的技術(shù)。Slab分配器的實(shí)現(xiàn)分配器的實(shí)現(xiàn) 相當(dāng)復(fù)雜,但原理不難,其核心思想就是相當(dāng)復(fù)雜,但原理不難,

12、其核心思想就是“存儲(chǔ)池存儲(chǔ)池”的運(yùn)的運(yùn)用。內(nèi)存片段用。內(nèi)存片段(小塊內(nèi)存小塊內(nèi)存)被看作對(duì)象,當(dāng)被使用完后,并不被看作對(duì)象,當(dāng)被使用完后,并不直接釋放而是被緩存到直接釋放而是被緩存到“存儲(chǔ)池存儲(chǔ)池”里,留做下里,留做下 次使用,這次使用,這無疑避免了頻繁創(chuàng)建與銷毀對(duì)象所帶來的額外負(fù)載。無疑避免了頻繁創(chuàng)建與銷毀對(duì)象所帶來的額外負(fù)載。第12頁(yè)/共25頁(yè)第十二頁(yè),共26頁(yè)。slab 分配器的主要分配器的主要(zhyo)結(jié)構(gòu)結(jié)構(gòu) 第13頁(yè)/共25頁(yè)第十三頁(yè),共26頁(yè)。SLUB 中的中的SLAB內(nèi)存管理代碼將被內(nèi)存管理代碼將被SLUB代替。代替。SLAB是是經(jīng)典的管理內(nèi)核的內(nèi)存的代碼經(jīng)典的管理內(nèi)核的內(nèi)存

13、的代碼,但是但是slab維護(hù)了大維護(hù)了大量的對(duì)象隊(duì)列,這些隊(duì)列雖然可以很快地被分量的對(duì)象隊(duì)列,這些隊(duì)列雖然可以很快地被分 配,配,但是過于復(fù)雜,而且維護(hù)所占用的空間會(huì)隨著系統(tǒng)但是過于復(fù)雜,而且維護(hù)所占用的空間會(huì)隨著系統(tǒng)節(jié)點(diǎn)的增加而急劇增長(zhǎng)。節(jié)點(diǎn)的增加而急劇增長(zhǎng)。 slub就是作為就是作為(zuwi)slab的可替代選項(xiàng)出現(xiàn)的。的可替代選項(xiàng)出現(xiàn)的。slub是一種不使用隊(duì)列的分配器。是一種不使用隊(duì)列的分配器。slub取消了大取消了大量的隊(duì)列和相量的隊(duì)列和相 關(guān)維護(hù)費(fèi)用,獲得了極大的性能和關(guān)維護(hù)費(fèi)用,獲得了極大的性能和伸縮性提高,并在總體上簡(jiǎn)化了伸縮性提高,并在總體上簡(jiǎn)化了slab結(jié)構(gòu),使用了結(jié)構(gòu),

14、使用了基于每基于每CPU的緩存,同時(shí)保留了的緩存,同時(shí)保留了slab的用戶接口,的用戶接口,而且而且slub還提還提 供了強(qiáng)大的診斷和調(diào)試能力供了強(qiáng)大的診斷和調(diào)試能力 第14頁(yè)/共25頁(yè)第十四頁(yè),共26頁(yè)。slobslob是一個(gè)相對(duì)簡(jiǎn)單一些的分配器,主要使用在小型的嵌入式系統(tǒng)。在選擇了是一個(gè)相對(duì)簡(jiǎn)單一些的分配器,主要使用在小型的嵌入式系統(tǒng)。在選擇了CONFIG_EMBEDDED后,就可以選用后,就可以選用CONFIG_SLOB選項(xiàng),使用選項(xiàng),使用SLOB 分配分配器中。器中。slob是一個(gè)經(jīng)典的是一個(gè)經(jīng)典的K&R/UNIX堆分配器堆分配器(想我們目前想我們目前ucos上面的上面的malloc)

15、,其具,其具有一個(gè)有一個(gè)slab模擬層,和被模擬層,和被slab替代的替代的linux原來的原來的kmalloc分配器比較相似,比分配器比較相似,比slab更有空間效率更有空間效率(xio l),尺寸更小,但是依然存在碎片和難于擴(kuò)展,尺寸更小,但是依然存在碎片和難于擴(kuò)展(對(duì)所有對(duì)所有操作都簡(jiǎn)單地上鎖操作都簡(jiǎn)單地上鎖)的問題,只適用于小系統(tǒng)。的問題,只適用于小系統(tǒng)。slob獲得的是已經(jīng)對(duì)齊的對(duì)象。獲得的是已經(jīng)對(duì)齊的對(duì)象。slob在在MIPS上的粒度是上的粒度是4字節(jié)。字節(jié)。slob堆是一個(gè)堆是一個(gè)單向列表,連接了從單向列表,連接了從get_free_page獲得的頁(yè)面,從堆上按照獲得的頁(yè)面,從堆

16、上按照first-fit的原則的原則依照需求增長(zhǎng)和分配。依照需求增長(zhǎng)和分配。 第15頁(yè)/共25頁(yè)第十五頁(yè),共26頁(yè)。l vmallocl 避免外部分片的最終思路還是落到了如何利用不連續(xù)的內(nèi)存塊組合成避免外部分片的最終思路還是落到了如何利用不連續(xù)的內(nèi)存塊組合成“看起來很大的內(nèi)存塊看起來很大的內(nèi)存塊”這里的情況很類似這里的情況很類似 于用戶空間分配虛擬于用戶空間分配虛擬內(nèi)存,內(nèi)存邏輯上連續(xù),其實(shí)影射到并不一定連續(xù)的物理內(nèi)存上。內(nèi)存,內(nèi)存邏輯上連續(xù),其實(shí)影射到并不一定連續(xù)的物理內(nèi)存上。Linux內(nèi)核借用了這個(gè)技術(shù),允許內(nèi)核程序在內(nèi)核地址空間中分配虛擬內(nèi)核借用了這個(gè)技術(shù),允許內(nèi)核程序在內(nèi)核地址空間中分

17、配虛擬地地 址,同樣也利用頁(yè)表(內(nèi)核頁(yè)表)將虛擬地址影射到分散的內(nèi)存頁(yè)址,同樣也利用頁(yè)表(內(nèi)核頁(yè)表)將虛擬地址影射到分散的內(nèi)存頁(yè)上。以此完美地解決了內(nèi)核內(nèi)存使用中的外部分片問題。內(nèi)核提供上。以此完美地解決了內(nèi)核內(nèi)存使用中的外部分片問題。內(nèi)核提供vmalloc函數(shù)分配內(nèi)核虛擬內(nèi)存,該函數(shù)不同于函數(shù)分配內(nèi)核虛擬內(nèi)存,該函數(shù)不同于kmalloc,它可以分,它可以分配較配較Kmalloc大得多的內(nèi)存空間(可遠(yuǎn)大于大得多的內(nèi)存空間(可遠(yuǎn)大于128K,但必須是頁(yè)大小的,但必須是頁(yè)大小的倍數(shù)),但相比倍數(shù)),但相比Kmalloc來來 說說Vmalloc需要對(duì)內(nèi)核虛擬地址進(jìn)行重影需要對(duì)內(nèi)核虛擬地址進(jìn)行重影射,

18、必須更新射,必須更新(gngxn)內(nèi)核頁(yè)表,因此分配效率上要低一些(用空內(nèi)核頁(yè)表,因此分配效率上要低一些(用空間換時(shí)間間換時(shí)間)) 第16頁(yè)/共25頁(yè)第十六頁(yè),共26頁(yè)。l Mips 32bit 存儲(chǔ)器映射存儲(chǔ)器映射(yngsh)圖圖l 在在mips底下使用底下使用,kseg2 1G大小空間大小空間,從從 0 xC000 0000 0 xFFFF FFFF,也就是也就是說說vmalloc返回的地址值返回的地址值,會(huì)落在會(huì)落在0 xC000 0000 0 xFFFF FFFF上上第17頁(yè)/共25頁(yè)第十七頁(yè),共26頁(yè)。 Mips linux使用的是二級(jí)映射將線性地址轉(zhuǎn)換為物理使用的是二級(jí)映射將線性

19、地址轉(zhuǎn)換為物理地址地址 PGD(page direcory),頁(yè)面頁(yè)面(y min)目錄表目錄表,占用占用10bit 每一每一PGD項(xiàng)占用項(xiàng)占用4字節(jié)字節(jié),所以頁(yè)表目錄大小為所以頁(yè)表目錄大小為4KB ,正好正好一頁(yè)一頁(yè) PTE(page table entry),頁(yè)面頁(yè)面(y min)目錄入口表目錄入口表,占用占用10bit 每一每一PTE項(xiàng)占用項(xiàng)占用4字節(jié)字節(jié),所以頁(yè)表所以頁(yè)表(PTE)大小為大小為4KB ,正正好一頁(yè)好一頁(yè) 每一每一PGD項(xiàng)項(xiàng),(需要有一個(gè)頁(yè)表需要有一個(gè)頁(yè)表(PTE)可以映射可以映射 222 = 4MB 的空間的空間 每一每一PGD項(xiàng)項(xiàng),對(duì)應(yīng)一個(gè)對(duì)應(yīng)一個(gè)PTE(page t

20、able entry),頁(yè)面頁(yè)面(y min)目錄入口表目錄入口表第18頁(yè)/共25頁(yè)第十八頁(yè),共26頁(yè)。 Vmalloc:調(diào)用調(diào)用(dioyng)圖圖第19頁(yè)/共25頁(yè)第十九頁(yè),共26頁(yè)。 內(nèi)核提供內(nèi)存管理接口接口內(nèi)核提供內(nèi)存管理接口接口: gfp_mask: GFP_ATOMIC 用來從中斷處理和進(jìn)程上下文用來從中斷處理和進(jìn)程上下文,軟中斷軟中斷,持有自旋鎖以及其他不持有自旋鎖以及其他不能睡眠能睡眠(阻塞阻塞)的地方分配內(nèi)存的地方分配內(nèi)存. 從不睡眠從不睡眠. GFP_KERNEL 內(nèi)核內(nèi)存的正常分配內(nèi)核內(nèi)存的正常分配. 可能睡眠可能睡眠. Slob/slab/slub提供接口提供接口: s

21、tatic struct kmem_cache *skbuff_head_cache _read_mostly;skbuff_head_cache = kmem_cache_create(skbuff_head_cache, sizeof(struct sk_buff), 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL); SLAB_HWCACHE_ALIGN:指定指定cache對(duì)齊對(duì)齊(cache line對(duì)齊對(duì)齊,如如32字節(jié)對(duì)齊字節(jié)對(duì)齊). SLAB_PANIC:指示創(chuàng)建失敗時(shí)候指示創(chuàng)建失敗時(shí)候,系統(tǒng)系統(tǒng)halt 除非你覺得分配的內(nèi)存結(jié)構(gòu)體會(huì)頻繁除非你覺得分配的內(nèi)存結(jié)構(gòu)體會(huì)頻繁(pnfn)地生成地生成/銷毀銷毀,否否則則 請(qǐng)直接使用請(qǐng)直接使用kmalloc分配空間分配空間.第20頁(yè)/共25頁(yè)第二十頁(yè),共26頁(yè)。 除非你覺得分配除非你覺得分配(fnpi)的內(nèi)存結(jié)構(gòu)體會(huì)頻繁地生成的內(nèi)存結(jié)構(gòu)體會(huì)頻繁地生成/銷毀

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論