當(dāng)前位置:首頁 > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]來自:后端技術(shù)學(xué)堂 過去的一周有點(diǎn)魔幻,有印象的有三個(gè)新聞:天貓總裁緋聞事件,蘑菇街裁員,不可能打工的周某也放出來了。三件事,兩件和互聯(lián)網(wǎng)行業(yè)相關(guān),好像外面的世界很是精彩啊!吃瓜歸吃瓜,學(xué)習(xí)還是不能落下。 連續(xù)寫了兩周的「微服務(wù)」有點(diǎn)膩,不過

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!

來自:后端技術(shù)學(xué)堂

過去的一周有點(diǎn)魔幻,有印象的有三個(gè)新聞:天貓總裁緋聞事件,蘑菇街裁員,不可能打工的周某也放出來了。三件事,兩件和互聯(lián)網(wǎng)行業(yè)相關(guān),好像外面的世界很是精彩啊!吃瓜歸吃瓜,學(xué)習(xí)還是不能落下。

連續(xù)寫了兩周的「微服務(wù)」有點(diǎn)膩,不過這個(gè)系列還會(huì)繼續(xù)寫。今天來帶大家研究一下Linux內(nèi)存管理。

對(duì)于精通 CURD 的業(yè)務(wù)同學(xué),內(nèi)存管理好像離我們很遠(yuǎn),但這個(gè)知識(shí)點(diǎn)雖然冷門(估計(jì)很多人學(xué)完根本就沒機(jī)會(huì)用上)但絕對(duì)是基礎(chǔ)中的基礎(chǔ)。

這就像武俠小說中的內(nèi)功修煉,學(xué)完之后看不到立竿見影的效果,但對(duì)你日后的開發(fā)工作是大有裨益的,因?yàn)槟阏镜母吡恕?/p>

文中所有示例圖都是我親手畫的,畫圖比碼字還費(fèi)時(shí)間,但大家看圖理解比文字更直觀,所以還是畫了。需要高清示例圖片的同學(xué),文末有獲取方式自取。

再功利點(diǎn)的說,面試的時(shí)候不經(jīng)意間透露你懂這方面知識(shí),并且能說出個(gè)一二三來,也許能讓面試官對(duì)你更有興趣,離升職加薪,走上人生巔峰又近了一步。

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!

前提約定:本文討論技術(shù)內(nèi)容前提,操作系統(tǒng)環(huán)境都是 x86架構(gòu)的 32 位 Linux系統(tǒng)。

虛擬地址

即使是現(xiàn)代操作系統(tǒng)中,內(nèi)存依然是計(jì)算機(jī)中很寶貴的資源,看看你電腦幾個(gè)T固態(tài)硬盤,再看看內(nèi)存大小就知道了。

為了充分利用和管理系統(tǒng)內(nèi)存資源,Linux采用虛擬內(nèi)存管理技術(shù),利用虛擬內(nèi)存技術(shù)讓每個(gè)進(jìn)程都有4GB 互不干涉的虛擬地址空間。

進(jìn)程初始化分配和操作的都是基于這個(gè)「虛擬地址」,只有當(dāng)進(jìn)程需要實(shí)際訪問內(nèi)存資源的時(shí)候才會(huì)建立虛擬地址和物理地址的映射,調(diào)入物理內(nèi)存頁。

打個(gè)不是很恰當(dāng)?shù)谋确?,這個(gè)原理其實(shí)和現(xiàn)在的某某網(wǎng)盤一樣。假如你的網(wǎng)盤空間是1TB,真以為就一口氣給了你這么大空間嗎?那還是太年輕,都是在你往里面放東西的時(shí)候才給你分配空間,你放多少就分多少實(shí)際空間給你,但你和你朋友看起來就像大家都擁有1TB空間一樣。

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!

虛擬地址的好處

  • 避免用戶直接訪問物理內(nèi)存地址,防止一些破壞性操作,保護(hù)操作系統(tǒng)
  • 每個(gè)進(jìn)程都被分配了4GB的虛擬內(nèi)存,用戶程序可使用比實(shí)際物理內(nèi)存更大的地址空間

4GB 的進(jìn)程虛擬地址空間被分成兩部分:「用戶空間」和「內(nèi)核空間」

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!

用戶空間內(nèi)核空間

物理地址

上面章節(jié)我們已經(jīng)知道不管是用戶空間還是內(nèi)核空間,使用的地址都是虛擬地址,當(dāng)需進(jìn)程要實(shí)際訪問內(nèi)存的時(shí)候,會(huì)由內(nèi)核的「請(qǐng)求分頁機(jī)制」產(chǎn)生「缺頁異?!拐{(diào)入物理內(nèi)存頁。

把虛擬地址轉(zhuǎn)換成內(nèi)存的物理地址,這中間涉及利用MMU 內(nèi)存管理單元(Memory Management Unit ) 對(duì)虛擬地址分段和分頁(段頁式)地址轉(zhuǎn)換,關(guān)于分段和分頁的具體流程,這里不再贅述,可以參考任何一本計(jì)算機(jī)組成原理教材描述。

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!
段頁式內(nèi)存管理地址轉(zhuǎn)換

Linux 內(nèi)核會(huì)將物理內(nèi)存分為3個(gè)管理區(qū),分別是:

ZONE_DMA

DMA內(nèi)存區(qū)域。包含0MB~16MB之間的內(nèi)存頁框,可以由老式基于ISA的設(shè)備通過DMA使用,直接映射到內(nèi)核的地址空間。

ZONE_NORMAL

普通內(nèi)存區(qū)域。包含16MB~896MB之間的內(nèi)存頁框,常規(guī)頁框,直接映射到內(nèi)核的地址空間。

ZONE_HIGHMEM

高端內(nèi)存區(qū)域。包含896MB以上的內(nèi)存頁框,不進(jìn)行直接映射,可以通過永久映射和臨時(shí)映射進(jìn)行這部分內(nèi)存頁框的訪問。

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!
物理內(nèi)存區(qū)劃分

用戶空間

用戶進(jìn)程能訪問的是「用戶空間」,每個(gè)進(jìn)程都有自己獨(dú)立的用戶空間,虛擬地址范圍從從 0x000000000xBFFFFFFF 總?cè)萘?G 。

用戶進(jìn)程通常只能訪問用戶空間的虛擬地址,只有在執(zhí)行內(nèi)陷操作或系統(tǒng)調(diào)用時(shí)才能訪問內(nèi)核空間。

進(jìn)程與內(nèi)存

進(jìn)程(執(zhí)行的程序)占用的用戶空間按照「 訪問屬性一致的地址空間存放在一起 」的原則,劃分成 5個(gè)不同的內(nèi)存區(qū)域。訪問屬性指的是“可讀、可寫、可執(zhí)行等 。

  • 代碼段

    代碼段是用來存放可執(zhí)行文件的操作指令,可執(zhí)行程序在內(nèi)存中的鏡像。代碼段需要防止在運(yùn)行時(shí)被非法修改,所以只準(zhǔn)許讀取操作,它是不可寫的。

  • 數(shù)據(jù)段

    數(shù)據(jù)段用來存放可執(zhí)行文件中已初始化全局變量,換句話說就是存放程序靜態(tài)分配的變量和全局變量。

  • BSS段

    BSS段包含了程序中未初始化的全局變量,在內(nèi)存中 bss 段全部置零。

  • heap

    堆是用于存放進(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)存從堆中被剔除(堆被縮減)

  • stack

    棧是用戶存放程序臨時(shí)創(chuàng)建的局部變量,也就是函數(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),所以棧特別方便用來保存/恢復(fù)調(diào)用現(xiàn)場(chǎng)。從這個(gè)意義上講,我們可以把堆棧看成一個(gè)寄存、交換臨時(shí)數(shù)據(jù)的內(nèi)存區(qū)。

上述幾種內(nèi)存區(qū)域中數(shù)據(jù)段、BSS 段、堆通常是被連續(xù)存儲(chǔ)在內(nèi)存中,在位置上是連續(xù)的,而代碼段和棧往往會(huì)被獨(dú)立存放。堆和棧兩個(gè)區(qū)域在 i386 體系結(jié)構(gòu)中棧向下擴(kuò)展、堆向上擴(kuò)展,相對(duì)而生。別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!

你也可以在linux下用size 命令查看編譯后程序的各個(gè)內(nèi)存區(qū)域大?。?/p>

[lemon ~]# size /usr/local/sbin/sshd text data bss dec hex filename1924532 12412 426896 2363840 2411c0 /usr/local/sbin/sshd

內(nèi)核空間

x86 32 位系統(tǒng)里,Linux 內(nèi)核地址空間是指虛擬地址從 0xC0000000 開始到 0xFFFFFFFF 為止的高端內(nèi)存地址空間,總計(jì) 1G 的容量, 包括了內(nèi)核鏡像、物理頁面表、驅(qū)動(dòng)程序等運(yùn)行在內(nèi)核空間 。

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!
內(nèi)核空間細(xì)分區(qū)域.

直接映射區(qū)

直接映射區(qū) Direct Memory Region:從內(nèi)核空間起始地址開始,最大896M的內(nèi)核空間地址區(qū)間,為直接內(nèi)存映射區(qū)。

直接映射區(qū)的896MB的「線性地址」直接與「物理地址」的前896MB進(jìn)行映射,也就是說線性地址和分配的物理地址都是連續(xù)的。內(nèi)核地址空間的線性地址0xC0000001所對(duì)應(yīng)的物理地址為0x00000001,它們之間相差一個(gè)偏移量PAGE_OFFSET = 0xC0000000

該區(qū)域的線性地址和物理地址存在線性轉(zhuǎn)換關(guān)系「線性地址 = PAGE_OFFSET + 物理地址」也可以用 virt_to_phys()函數(shù)將內(nèi)核虛擬空間中的線性地址轉(zhuǎn)化為物理地址。

高端內(nèi)存線性地址空間

內(nèi)核空間線性地址從 896M 到 1G 的區(qū)間,容量 128MB 的地址區(qū)間是高端內(nèi)存線性地址空間,為什么叫高端內(nèi)存線性地址空間?下面給你解釋一下:

前面已經(jīng)說過,內(nèi)核空間的總大小 1GB,從內(nèi)核空間起始地址開始的 896MB 的線性地址可以直接映射到物理地址大小為 896MB 的地址區(qū)間。

退一萬步,即使內(nèi)核空間的1GB線性地址都映射到物理地址,那也最多只能尋址 1GB 大小的物理內(nèi)存地址范圍。

請(qǐng)問你現(xiàn)在你家的內(nèi)存條多大?快醒醒都 0202 年了,一般 PC 的內(nèi)存都大于 1GB 了吧!別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!

所以,內(nèi)核空間拿出了最后的 128M 地址區(qū)間,劃分成下面三個(gè)高端內(nèi)存映射區(qū),以達(dá)到對(duì)整個(gè)物理地址范圍的尋址。而在 64 位的系統(tǒng)上就不存在這樣的問題了,因?yàn)榭捎玫木€性地址空間遠(yuǎn)大于可安裝的內(nèi)存。

動(dòng)態(tài)內(nèi)存映射區(qū)

vmalloc Region 該區(qū)域由內(nèi)核函數(shù)vmalloc來分配,特點(diǎn)是:線性空間連續(xù),但是對(duì)應(yīng)的物理地址空間不一定連續(xù)。vmalloc 分配的線性地址所對(duì)應(yīng)的物理頁可能處于低端內(nèi)存,也可能處于高端內(nèi)存。

永久內(nèi)存映射區(qū)

Persistent Kernel Mapping Region 該區(qū)域可訪問高端內(nèi)存。訪問方法是使用 alloc_page (_GFP_HIGHMEM) 分配高端內(nèi)存頁或者使用kmap函數(shù)將分配到的高端內(nèi)存映射到該區(qū)域。

固定映射區(qū)

Fixing kernel Mapping Region 該區(qū)域和 4G 的頂端只有 4k 的隔離帶,其每個(gè)地址項(xiàng)都服務(wù)于特定的用途,如 ACPI_BASE 等。

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!
內(nèi)核空間物理內(nèi)存映射

回顧一下

上面講的有點(diǎn)多,先別著急進(jìn)入下一節(jié),在這之前我們?cè)賮砘仡櫼幌律厦嫠v的內(nèi)容。如果認(rèn)真看完上面的章節(jié),我這里再畫了一張圖,現(xiàn)在你的腦海中應(yīng)該有這樣一個(gè)內(nèi)存管理的全局圖。

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!
內(nèi)核空間用戶空間全圖

內(nèi)存數(shù)據(jù)結(jié)構(gòu)

要讓內(nèi)核管理系統(tǒng)中的虛擬內(nèi)存,必然要從中抽象出內(nèi)存管理數(shù)據(jù)結(jié)構(gòu),內(nèi)存管理操作如「分配、釋放等」都基于這些數(shù)據(jù)結(jié)構(gòu)操作,這里列舉兩個(gè)管理虛擬內(nèi)存區(qū)域的數(shù)據(jù)結(jié)構(gòu)。

用戶空間內(nèi)存數(shù)據(jù)結(jié)構(gòu)

在前面「進(jìn)程與內(nèi)存」章節(jié)我們提到,Linux進(jìn)程可以劃分為 5 個(gè)不同的內(nèi)存區(qū)域,分別是:代碼段、數(shù)據(jù)段、BSS、堆、棧,內(nèi)核管理這些區(qū)域的方式是,將這些內(nèi)存區(qū)域抽象成vm_area_struct的內(nèi)存管理對(duì)象。

vm_area_struct是描述進(jìn)程地址空間的基本管理單元,一個(gè)進(jìn)程往往需要多個(gè)vm_area_struct來描述它的用戶空間虛擬地址,需要使用「鏈表」和「紅黑樹」來組織各個(gè)vm_area_struct。

鏈表用于需要遍歷全部節(jié)點(diǎn)的時(shí)候用,而紅黑樹適用于在地址空間中定位特定內(nèi)存區(qū)域。內(nèi)核為了內(nèi)存區(qū)域上的各種不同操作都能獲得高性能,所以同時(shí)使用了這兩種數(shù)據(jù)結(jié)構(gòu)。

用戶空間進(jìn)程的地址管理模型:

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!
wm_arem_struct

內(nèi)核空間動(dòng)態(tài)分配內(nèi)存數(shù)據(jù)結(jié)構(gòu)

在內(nèi)核空間章節(jié)我們提到過「動(dòng)態(tài)內(nèi)存映射區(qū)」,該區(qū)域由內(nèi)核函數(shù)vmalloc來分配,特點(diǎn)是:線性空間連續(xù),但是對(duì)應(yīng)的物理地址空間不一定連續(xù)。vmalloc 分配的線性地址所對(duì)應(yīng)的物理頁可能處于低端內(nèi)存,也可能處于高端內(nèi)存。

vmalloc 分配的地址則限于vmalloc_startvmalloc_end之間。每一塊vmalloc分配的內(nèi)核虛擬內(nèi)存都對(duì)應(yīng)一個(gè)vm_struct結(jié)構(gòu)體,不同的內(nèi)核空間虛擬地址之間有4k大小的防越界空閑區(qū)間隔區(qū)。

與用戶空間的虛擬地址特性一樣,這些虛擬地址與物理內(nèi)存沒有簡(jiǎn)單的映射關(guān)系,必須通過內(nèi)核頁表才可轉(zhuǎn)換為物理地址或物理頁,它們有可能尚未被映射,當(dāng)發(fā)生缺頁時(shí)才真正分配物理頁面。

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!
動(dòng)態(tài)內(nèi)存映射

總結(jié)一下

Linux內(nèi)存管理是一個(gè)非常復(fù)雜的系統(tǒng),本文所述只是冰山一角,從宏觀角度給你展現(xiàn)內(nèi)存管理的全貌,但一般來說,這些知識(shí)在你和面試官聊天的時(shí)候還是夠用的,當(dāng)然也希望大家能夠通過讀書了解更深層次的原理。

本文可以作為一個(gè)索引一樣的學(xué)習(xí)指南,當(dāng)你想深入某一點(diǎn)學(xué)習(xí)的時(shí)候可以在這些章節(jié)里找到切入點(diǎn),以及這個(gè)知識(shí)點(diǎn)在內(nèi)存管理宏觀上的位置。

本文創(chuàng)作過程我也畫了大量的示例圖解,可以作為知識(shí)索引,個(gè)人感覺看圖還是比看文字更清晰明了,你可以在我公眾號(hào)「后端技術(shù)學(xué)堂」后臺(tái)回復(fù)「內(nèi)存管理」獲取這些圖片的高清原圖。

老規(guī)矩,感謝各位的閱讀,文章的目的是分享對(duì)知識(shí)的理解,技術(shù)類文章我都會(huì)反復(fù)求證以求最大程度保證準(zhǔn)確性,若文中出現(xiàn)明顯紕漏也歡迎指出,我們一起在探討中學(xué)習(xí)。今天的技術(shù)分享就到這里,我們下期再見。

原創(chuàng)不易,看到這里,如果在我這有一點(diǎn)點(diǎn)收獲,就動(dòng)動(dòng)手指「轉(zhuǎn)發(fā)」和「在看」是對(duì)我持續(xù)創(chuàng)作的最大支持。

Reference

《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)(原書第3版)》

Linux內(nèi)存管理 https://cloud.tencent.com/developer/article/1515762

linux 內(nèi)存管理初探 https://cloud.tencent.com/developer/article/1005671

linux內(nèi)存管理源碼分析 - 頁框分配器 https://www.cnblogs.com/tolimit/p/4551428.html

Linux內(nèi)核--內(nèi)核地址空間分布和進(jìn)程地址空間 https://my.oschina.net/wuqingyi/blog/854382

Linux內(nèi)存管理 http://gityuan.com/2015/10/30/kernel-memory/

Linux Used內(nèi)存到底哪里去了?http://blog.yufeng.info/archives/2456

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!

長(zhǎng)按訂閱更多精彩▼

別再說你不懂Linux內(nèi)存管理了,10張圖給你安排的明明白白!

如有收獲,點(diǎn)個(gè)在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉