導航:首頁 > 物理學科 > 頁表為什麼放在物理內存中

頁表為什麼放在物理內存中

發布時間:2022-10-05 10:13:26

A. 在操作系統中 存儲頁表的作用是什麼

頁表實際上就是進程的虛存空間與系統中的物理存儲空間的一個映射關系。

因為每個進程都有自己獨立的虛存空間,所以操作系統需要為每個進程保存一個頁表。

進程切換的時候操作系統就會把即將調度運行的那個進程的頁表載入MMU,完成地址空間的切換。
在頁式管理中,頁表的作用是實現從頁號到物理塊號的地址映射,存儲頁表的作用是記錄內存頁面的分配情況。

B. 關於虛擬內存中頁目錄與頁表在物理內存中載入的問題

我對Linux操作系統的具體情況不是很熟,回答僅供參考。

首先,物理內存無所謂內核區用戶區,所有地址都一樣。虛擬的地址空間才分內核區用戶區。
處理器通過查看頁目錄和頁表,把虛擬地址換算成物理地址。用戶區與內核區的兩個不同的虛擬地址對應同一個物理地址也不要緊。
內核區與用戶區的真正區別在於普通進程能不能訪問該區域中的地址。
在正常情況下,操作系統肯定會把頁目錄和頁表保護起來,可以把它們看作存放在內核區的東西。

編寫操作系統時,頁目錄確實可以放在物理內存中的任何地方(當然偏移必須是1000h的倍數),只要把偏移量填進CR3的高20位就可以了。
Linux內核的頁目錄放在物理地址0h處,頁表緊隨其後。0.11版Linux中,所有用戶進程和內核用的都是這張頁目錄。切換進程時,改改頁目錄項就行了。新版的Linux內核我不太了解,抱歉……
每個頁目錄項有4位元組,高20位儲存頁表的物理地址,低12位儲存頁表的屬性。

一張頁表4KB,這4KB必須是連續的。但是各張頁表之間不必連續。Linux創建新進程時,僅僅調用了get_free_page找到一頁空內存,把進程頁表塞進去而已。
頁表不能被普通進程直接訪問。訪問用戶區虛擬地址是看不到進程頁表的。
內核的頁表前面提到過。它就在內核頁目錄的後面,物理地址為1000h,虛擬地址為C0001000h。訪問用戶區的虛擬地址不會看到它。

個人不大擅長表述,恐怕解釋得不是很清楚。歡迎追問。

C. Linux存儲管理方式

這種方式中,將用戶程序的地址空間,注意,是 用戶程序的地址空間 分為若干個固定大小的區域,成為「頁」或「頁面」。我們可以知道,這也頁其實是不存在的,只是一種劃分內存空間的方法。也就是說,這種方式將用戶的程序 「肢解」 了,分成很多個小的部分,每個部分稱為一個「頁」。

將邏輯地址的前n位作為頁號,後面32-n位作為頁內偏移量。

由於進程的最後一頁經常裝不滿一個塊,從而形成了不可利用的碎片,稱之為 「頁內碎片」

作用:實現頁號到物理號的地址映射。

頁表是記錄邏輯空間(虛擬內存)中每一頁在內存中對應的物理塊號。但並非每一頁邏輯空間都會實際對應著一個物理塊,只有實際駐留在物理內存空間中的頁才會對應著物理塊。

系統會為每一個進程建立一張頁表,頁表是需要一直駐留在物理內存中的(多級頁表除外),另外頁表的起址和長度存放在 PCB(Process Control Block)進程式控制制結構體中。

可以在頁表的表項中設置相關的許可權控制欄位,例如設置存取控制欄位,用於保護該存儲塊的讀寫;若存取控制欄位為2位,則可以設置讀/寫、只讀和只執行等存取方式。

物理塊是實實在在存在於內存中的:

由於執行頻率高,要求效率比較高,需要使用硬體實現。

在系統中設置一個 頁表寄存器(PTR) ,其中存放頁表在內存的起始地址和頁表的長度。平時進程未執行的時候,頁表的起始地址和頁表長度放在本進程的PCB中。當調度程序調度到某個進程的時候,才將這兩個數據裝入 頁表寄存器

變換過程:

快表的變換機構

為了提高地址變換速度,可在地址變換機構中增設一個具有並行查詢能力的特殊高速緩沖寄存器,又稱為"聯想寄存器"或者「快表」。俗稱TLB。

快表與頁表的功能類似,其實就是將一部分頁表存到 CPU 內部的高速緩沖存儲器 Cache。CPU 定址時先到快表查詢相應的頁表項形成物理地址,如果查詢不到,則到內存中查詢,並將對應頁表項調入到快表中。但,如果快表的存儲空間已滿,則需要通過演算法找到一個暫時不再需要的頁表項,將它換出內存。

由於成本的關系,快表不可能做得很大,通常只存放 16~512 個頁表項,這對中、小型作業來說,已有可能把全部頁表項放在快表中;但對於大型作業而言,則只能將其一部分頁表項放入其中。由於對程序和數據的訪問往往帶有局限性,因此,據統計,從快表中能找到所需頁表項的概率可達 90% 以上。這樣,由於增加了地址變換機構而造成的速度損失可減少到 10% 以下,達到了可接受的程度。

我們可以採用這樣兩個方法來解決這一問題:

① 對於頁表所需的內存空間,可採用離散分配方式,以解決難以找到一塊連續的大內存空間的問題;

只將當前需要的部分頁表項調入內存,其餘的頁表項仍駐留在磁碟上,需要時再調入。

二級頁表的頁表項:

過程:

在採用兩級頁表結構的情況下,對於正在運行的進程,必須將其外層頁表調入內存,而對於內頁表則只需調入一頁或幾頁。為了表徵某頁的頁表是否已經調入內存,還應在外層頁表項中增設一個狀態位 S,其值若為 0,表示該頁表分頁不在內存中,否則說明其分頁已調入內存。進程運行時,地址變換機構根據邏輯地址中的 P1去查找外層頁表;若所找到的頁表項中的狀態位為 0,則產生一個中斷信號,請求 OS 將該頁表分頁調入內存。

多級頁表和二級頁表類似。多級頁表和二級頁表是為了節省物理內存空間。使得頁表可以在內存中離散存儲。(單級頁表為了隨機訪問必須連續存儲,如果虛擬內存空間很大,就需要很多頁表項,就需要很大的連續內存空間,但是多級頁表不需要。)

為什麼引入分段存儲管理?

引入效果:

它將用戶程序的地址空間分為若干個大小不同的的段,每個段可以定義一組完整的信息。

段號表示段名,每個段都從0開始編址,並且採用一段連續的地址空間。

在該地址結構中,允許一個作業最長有64K個段,每個段的最大長度為64KB。

在分段式存儲管理系統中,為每一個分段分配一個連續的分區。進程的各個段,可以離散地裝入內存中不同的分區中。

作用:實現從邏輯地址到物理內存區的映射。

為了保證程序能夠正常運行,就必須能夠從物理內存中找出每個邏輯段所對應的位置。為此在系統中會為每一個進程建立一張 段表 。每個段在表中有一個表項,其中記錄了該段在內存中的起始地址和段的長度。一般將段表保存在內存中。

在配置了段表之後,執行的過程可以通過查找段表,找到每一個段所對應的內存區。

為了實現進程從邏輯地址到物理地址的變換功能,在系統設置了段表寄存器,用於存放段表的起始地址和段表長度TL。

在進行地址變換時,系統將邏輯地址中的段號與段表長度TL 進行比較。若 S > TL,表示段號太大,是訪問越界,於是產生越界中斷信號。若未越界,則根據段表的始址和該段的段號,計算出該段對應段表項的位置,從中讀出該段在內存的起始地址。然後,再檢查段內地址 d 是否超過該段的段長 SL。若超過,即 d>SL,同樣發出越界中斷信號。若未越界,則將該段的基址 d 與段內地址相加,即可得到要訪問的內存。

分頁和分段系統相似之處:兩者都採用離散分配方式,且都是通過地址映射機構實現地址變換。

但在概念上兩者完全不同,主要表現在下述三個方面:

分頁系統以頁面作為內存分配的基本單位,能有效地提高內存利用率,而分段系統以段作為內存分配的基本單位,它能夠更好地滿足用戶多方面的需要。

段頁式地址結構由段號、段內頁號及頁內地址三部分所組成

段頁式系統的基本原理是分段和分頁原理的結合,即先將用戶程序分成若干個段,再把每個段分成若干個頁,並為每一個段賦予一個段名。如下圖展示了一個作業地址空間的結構。該作業有三個段:主程序段、子程序段和數據段;頁面大小為 4 KB:

在段頁式系統中,為了實現從邏輯地址到物理地址的變換,系統中需要同時配置段表和頁表。段表的內容與分段系統略有不同,它不再是內存始址和段長,而是頁表始址和頁表長度。下圖展示出了利用段表和頁表進行從用戶地址空間到物理(內存)空間的映射。

在段頁式系統中,為了便於實現地址變換,須配置一個段表寄存器,其中存放段表始址和段長 TL。進行地址變換時,首先利用段號 S,將它與段長 TL 進行比較。若 S < TL,表示未越界,於是利用段表始址和段號來求出該段所對應的段表項在段表中的位置,從中得到該段的頁表始址,並利用邏輯地址中的段內頁號 P 來獲得對應頁的頁表項位置,從中讀出該貝所在的物理塊號 b,再利用塊號 b 和頁內地址來構成物理地址。

在段頁式系統中,為了獲得一條指令或數據,須三次訪問內存。第一次訪問是訪問內存中的段表,從中取得頁表始址;第二次訪問是訪問內存中的頁表,從中取出該頁所在的物理塊號,並將該塊號與頁內地址一起形成指令或數據的物理地址;第三次訪問才是真正從第二次訪問所得的地址中取出指令或數據。

顯然,這使訪問內存的次數增加了近兩倍。為了提高執行速度,在地址變換機構中增設一個高速緩沖寄存器。每次訪問它時,都須同時利用段號和頁號去檢索高速緩存,若找到匹配的表項,便可從中得到相應頁的物理塊號,用來與頁內地址一起形成物理地址:若未找到匹配表項,則仍需第三次訪問內存。

參考鏈接:

D. 磁碟緩存,虛擬內存,頁面文件,和物理內存的關系

如果它不存在,但是你能看見它 -- 它是虛擬的(IBM宣傳虛擬內存之用語)。虛擬內存技術是計算機發展史上的一項重要的技術,它幫助應用程序擺脫了「體積」的限制。

記得上大學時,有一本書好像叫做「計算機網路 - 自頂向下」,全名記不太清了。書中從人們接觸最多也最熟悉的「應用層」開始講,一直講到「物理層」,看完這本書後感覺效果不錯。所以按照這種方法我也嘗試著自上而下的去學習「虛存」,從我們最熟悉的C庫介面調用說起,一直談到底層的硬體支持設施。

1、初學者的疑惑
初學者往往都會寫出以下這樣的例子程序來學習malloc和free的使用。
int main() {
int *p = malloc(10000);
printf("p's address is 0x%p\n", p);
free(p);
return 0;
}
但往往結果讓這些初學者們感到疑惑。比如上述的例子,在SUN SPARC 64編譯後其輸出如下:
p's address is 0x100100dc0
看到這樣的結果,初學者往往心裡嘀咕,「這台機器物理內存才4G,其地址空間總共才4294967296(dec),而0x100100dc0轉換十進制為4296019392(dec),這個地址明顯已經超出了我的物理內存的限制,這是怎麼回事呢?」。其實這里的解釋很簡單:因為我們看到的都是「虛擬內存地址」。

2、「堆」為何物
malloc是個極其常見的內存分配介面函數,它主要負責運行時在「堆」上為程序動態分配內存空間。我們總是在口頭上談論著「堆」,那麼「堆」到底為何物呢?我們已經知道了有「虛擬地址」這個東西的存在,想必「堆」和「虛擬地址」有著千絲萬縷的聯系^_^。我們來翻看一些經典書籍中的描述。在CS.APP[注1]中的描述是這樣的:「堆是進程地址空間中的一段「虛擬地址」空間。在大多數的Unix系統中,堆是映射「二進制零區域(demand-zero)」實現的。其位置在bss段後,其增長方向為高地址方向」。

3、內存映射
前面談到「demand-zero」這個新名詞,那麼什麼叫「映射到demand-zero」呢?這里蘊含著一個極其重要的概念「內存映射」。內存映射好似一道橋梁,將放在物理磁碟上的對象和一段進程「虛擬地址」空間連接起來。磁碟上的對象,主要指的就是文件,在多數Unix的實現中支持兩種文件的內存映射,分別為Regular File和匿名文件(如demand-zero)。映射的過程大致為將文件分成若干「虛擬內存基本單元(頁)」大小存於「交換區」,直到CPU指令第一次訪問到某個單元時,這個單元才真正被載入到物理內存中。

4、虛擬內存,何方神聖
看到這是不是有些「雲里霧里」的感覺亞^_^。其實對於用戶進程來說,它是看不到CPU和OS是如何相互配合完成內存管理的。它只認為它面前的是一個這樣的情景:「一個完全被我擁有的CPU、一個從擁有M地址空間的物理內存(M = 2的n次方,n為地址匯流排寬度)...」。這里的用戶進程眼中的「物理內存」實際就是「虛擬內存」。虛擬意味著假象,我們知道一個用戶進程運行時可能僅僅佔用的物理內存的一小部分。看來用戶進程被欺騙了。而這個騙局是由操作系統和CPU共同布置的。為了讓這個騙局一直維持下去,CPU和OS還是做了很多工作的,究竟有哪些工作呢?我們一一來看看。

1) 交換區(swap)
為了支持虛擬內存,操作系統在物理內存、磁碟之間交換數據的基本單元為「頁」。頁的大小是固定的,其因操作系統而異。這樣一個用戶進程在被載入之前首先要被分成若干個「頁」,這些頁存儲在磁碟上。那麼是不是進程啟動後所有的頁都被載入到物理內存中呢?答案是NO。在當前的Unix操作系統中,都有一個叫「交換區」的地方,「交換區」在磁碟上,它存儲的是「已分配的虛擬內存頁」。又有些糊塗是吧,什麼叫已分配的頁呢?一個進程虛擬內存頁的載入流程大致是這樣的:一旦用戶進程一虛擬頁需要被載入,則操作系統會在「交換區」中為該頁分配一個頁,一旦CPU訪問的虛擬地址落入該頁地址空間,則該頁才被換入到物理內存中。在這個過程中虛擬頁有多個狀態,分別如下:
未分配的 - 進程虛擬頁未得到載入指令,仍安靜的待在磁碟上;
未緩存的 - OS為該進程虛擬頁在交換區分配了一個空間,但是該虛擬頁還未被引用;
已緩存的 - 該虛擬頁被引用,被載入到物理內存中。

2) 換入換出
物理內存容量有限,當物理內存無空間存儲新的內存頁的時候,就需要將某些內存頁從物理內存中移出以為新頁騰出空間。這個過程對於那些被移出的頁來說,就叫「換出」;相反對於那些新加入到物理內存中的頁來說就叫做「換入」。

5、從緩存角度看虛存
現代計算機的存儲體系是呈金字塔狀的。越接近頂層,速度越快,容量越小,價格越貴;越接近底層,速度越慢,容量越大,價格越低。這樣就形成了一個逐級緩存的機制。第K層設備永遠是第K+1層設備的緩存。按照這種說法,在早期計算機中,主存是磁碟的緩存,CPU內的高級Cache是主存的緩存。現代計算機基本都支持虛擬內存機制,而虛存頁是存儲在磁碟上的,虛存頁在主存中換入換出。按照緩存的概念,虛存屬於容量大,速度慢的第K+1層,而處於第K層的主存就可以看作是虛擬內存的緩存。那麼一切緩存理論就都可以應用在虛存和物理內存之間了,比如換入換出演算法等。

6、硬體支持
在支持虛擬內存機制的計算機中,CPU都是以虛擬地址形式生成指令地址或者數據地址的,而這個虛擬地址對於物理內存來說是不可見的,那麼是誰來屏蔽這個差異的呢?答案是MMU(Memory Management Unit)。MMU負責將CPU發出的虛擬地址轉換成相應的物理內存地址。MMU不是孤立工作的,OS為其提供了很好的支持,OS在物理內存中為MMU維護著一張全局的頁表,來幫助MMU找到正確地物理內存地址。

E. 每個進程的內核頁表為什麼單獨分配存儲空間

問題沒太看懂。

你是指每個進程為何有獨立的地址空間嗎?
操作系統開啟分頁後,每個進程有自己獨立的頁目錄與頁表,cpu操作內存會自動將當前線性地址轉換為物理地址(MMU負責),然後再放在地址匯流排上。所以每個進程即使訪問相同的線性地址會最終對應到不同的物理地址,因為他們的pde與pte不同。

F. 關於計算機操作系統頁表項大小的疑問

操作系統中的分頁存儲管理系統的實現需要頁表。
首先,頁表存放在內存中
其次,頁表中記錄了頁號(程序在內存中被分成好多頁)和其對應的物理內存的塊號,等等
最後,一個頁號及其對應的塊號等等就被稱為一個頁表項,他們在內存的占據的比特位數或者字數就稱為頁表項大小。
可能你又會問幹嘛知道頁表項大小,這就要結合用戶程序的相對地址轉化絕對地址來理解了

G. 頁表的相關概念

當然是需要的進程才駐留物理內存,如果所有進程都駐留內存的話,那還要頁表干什麼?頁表的作用就是建立起進程佔用的頁號和物理地址的對應關系,在用戶層面只能看見邏輯地址看不見真實的物理地址。當某個進程需要的某頁不在內存中時,CPU就需暫停工作,置換掉內存中的某一頁,然後將需要的頁從驅動器置換到內存里,這個過程就叫缺頁中斷。Windows的虛擬內存就是這一原理

H. 內存管理

在一段時間內,程序的執行僅限於某個部分,相應地,它所訪問的存儲空間也局限於某個區域。

局部性原理的 分類

將編譯後的目標模塊裝配成一個可執行程序。

可執行程序以 二進制可執行文件 的形式存儲在磁碟上。

鏈接程序的 任務

程序的鏈接,可劃分為:

重定位 :將邏輯地址(相對地址)轉換為物理地址(絕對地址)的過程。

物理地址 = 邏輯地址 + 程序在內存中的起始地址

程序的裝入,可劃分為:

任何時刻主存儲器 最多隻有一個作業

每個分區 大小固定不變 :分區大小相等、分區大小不等。

每個分區可以且 僅可以裝入一個作業

使用 下限寄存器 上限寄存器 來保存當前作業的起始位置和結束位置。

使用 固定分區說明表 區分各分區的狀態。

分區 大小不是預先固定的 ,而是按作業(進程)的實際需求來劃分的。

分區 個數也不是預先固定的 ,而是由裝入的作業數決定的。

使用 空閑分區表 說明空閑分區的位置。

使用 空閑分區鏈 說明空閑分區的位置。

首次適應演算法的 過程

外部碎片:空閑內存 沒有在 分配的 進程 中。

內部碎片:空閑內存 分配的 進程 中。

上次找到的 空閑分區的 下一個 空閑分區開始查找。

優點:空閑區分布均勻、查找開銷較小。

缺點:缺乏大空閑區。

最佳適應演算法的 過程

優點:提高內存利用率。

注意點:每次在進行空閑區的修改前,需要先進行 分區大小遞增 的排序。

:將一個 進程 邏輯地址空間 分成若干個 大小相等

頁框 :將 物理內存空間 分成與頁大小相同的若干個 存儲塊

分頁存儲 :將進程的若干 分別裝入多個 可以不相鄰 頁框 中。

頁內碎片 :進程 最後一頁 一般裝不滿一個頁框,形成 頁內碎片

頁表 :記錄描述頁的各種數據,實現從 頁號 頁框號 的映射。

注意: 頁內偏移量 的單位是 位元組

分頁地址變換指是: 邏輯地址 通過 地址變換機構 變換為 物理地址

分頁地址變換的 過程

操作系統在修改或裝入頁表寄存器的值時,使用的是 特權級 指令。

頁大小:512B ~ 4KB,目前的計算機系統中,大多選擇 4KB 大小的頁。

頁大小的 選擇因素

快表也稱為「轉換後援緩沖」,是為了提高CPU訪問速度而採用的專用緩存,用來存放 最近被訪問過的頁表項

英文縮寫:TLB。

組成: 鍵和值

在TLB中找到某一個頁號對應的頁表項的百分比稱為 TLB命中率

在TLB中找到所需要的頁表項時:

有效訪問時間 = 一次訪問TLB 的時間 + 一次訪問內存 的時間(訪問內存讀寫數據或指令)

不能 在TLB中找到所需要的頁表項時:

有效訪問時間 = 一次訪問TLB 的時間 + 兩次訪問內存 的時間(一次訪問內存頁表,一次訪問內存讀寫數據或指令)

將頁表再分頁,形成兩級或多級頁表,將頁表離散地存放在物理內存中。

在進程切換時,要運行的進程的頁目錄表歧視地址被寫入 頁表寄存器

在二級分頁系統中,為頁表再建立一個頁目錄表的目的是為了能在地址映射時得到頁表在物理內存中的地址,在頁目錄表的表項中存放了每一個 頁表 在物理內存中所在的 頁框號

虛擬存儲器 :是指具有 請求調入功能 置換功能 ,能 從邏輯上對內存容量進行擴充 的一種存儲系統。

請求調入 :就是說,先將進程一部分裝入內存,其餘的部分什麼時候需要,什麼時候請求系統裝入。

置換 :如果請求調入時,沒有足夠的內存,則由操作系統選擇一部分內存中的進程內容移到外存,以騰出空間把當前需要裝入的內存調入。

為了實現請求分頁,需要:

保證進程正常運行的所需要的最小頁框數。

最小頁框數與進程的大小沒有關系,它與計算機的 硬體結構 有關,取決於 指令的格式、功能和定址方式

內存不夠時,從進程本身選擇淘汰頁,還是從系統中所有進程中選擇?:

採用什麼樣的演算法為不同進程分配頁框?:

常用的兩種 置換策略 局部置換 全局置換

從分配給進程的頁框數量上看,常使用的兩種 分配策略 固定分配 可變分配

用新調入的頁替換 最長時間沒有訪問 的頁面。

找到 未來最晚被訪問 的那個頁換出。

,P為缺頁率。

有效訪問時間與缺頁率成 正比 ,缺頁率越高,有效訪問時間越長,訪問效率越低。

工作集 :某段時間間隔里,進程實際要訪問的頁的集合。

引入工作集的 目的 :降低缺頁率,提高訪問內存效率。

抖動 :運行進程的大部分時間都用於頁的換入換出,幾乎不能完成任何有效果工作的狀態。

抖動的 產生原因

抖動的 預防方法

在分段存儲管理的系統中,程序使用 二維 的邏輯地址,一個數用來表示 ,另一個數用來表示 段內偏移量

引入分段的 目的

引入分段的 優點

進程的地址空間被劃分成 若干個段

每個段定義了一組邏輯信息,每個段的大小由相應的邏輯信息組的長度確定, 段的大小不一樣 ,每個段的邏輯地址從0開始,採用一段 連續的地址空間

系統為每個段分配一個 連續的物理內存區域 ,各個 不同的段可以離散 地放入物理內存不同的區域。

系統為 每個進程建立一張段表 ,段表的每一個表項記錄的信息包括: 段號、段長和該段的基址 ,段表存放在內存中。

分段的 邏輯地址結構

段表是由操作系統維護的用於支持分段存儲管理 地址映射 的數據結構。

每個進程有一個段表,段表由段表項構成。每個段表項包括: 段號、段長(段的大小)和該段的基址(段的起始地址)

若已知邏輯單元的地址為 S:D (段號:段內偏移量),求相應物理地址的步驟如下:

相同點 :分頁和分段都屬於 離散 分配方式,都要通過數據結構與硬體的配合來實現 邏輯地址到物理地址 的映射。

不同點

將用戶進程的邏輯空間 先劃分為若干個段 每個段再劃分成若干個頁

進程以頁為單位在物理內存中 離散 存放,每個段中被離散存放的頁具有 邏輯相關性

為了實現地址映射,操作系統為 每個進程建立一個段表 ,再為 每個段建立一個頁表

進程段表的段表項組成:

滿足以下條件的兩個塊稱為 夥伴

I. 頁表放是在內存上還是磁碟上,為什麼

你說的頁表指的是什麼,如果是一般文件,在沒保存之前是放在內存上,保存之後則在磁碟,因為沒保存的時候是臨時文件

閱讀全文

與頁表為什麼放在物理內存中相關的資料

熱點內容
word中化學式的數字怎麼打出來 瀏覽:740
乙酸乙酯化學式怎麼算 瀏覽:1406
沈陽初中的數學是什麼版本的 瀏覽:1353
華為手機家人共享如何查看地理位置 瀏覽:1045
一氧化碳還原氧化鋁化學方程式怎麼配平 瀏覽:886
數學c什麼意思是什麼意思是什麼 瀏覽:1411
中考初中地理如何補 瀏覽:1300
360瀏覽器歷史在哪裡下載迅雷下載 瀏覽:703
數學奧數卡怎麼辦 瀏覽:1388
如何回答地理是什麼 瀏覽:1025
win7如何刪除電腦文件瀏覽歷史 瀏覽:1058
大學物理實驗干什麼用的到 瀏覽:1487
二年級上冊數學框框怎麼填 瀏覽:1701
西安瑞禧生物科技有限公司怎麼樣 瀏覽:976
武大的分析化學怎麼樣 瀏覽:1250
ige電化學發光偏高怎麼辦 瀏覽:1339
學而思初中英語和語文怎麼樣 瀏覽:1653
下列哪個水飛薊素化學結構 瀏覽:1425
化學理學哪些專業好 瀏覽:1488
數學中的棱的意思是什麼 瀏覽:1059