作業系統儲存管理和oracle資料庫(第二篇)
在之前分享過第一篇 關於作業系統儲存管理和oracle資料庫 http://blog.itpub.net/23718752/viewspace-1359146/
感覺對自己來說是邁出了艱難的一步,作業系統的概念有時候確實感覺枯燥,但是細細品來,都是前車之鑑,很多的方法或者改進都是在碰到很多問題之後總結琢磨出來的,所以從某種程度上來說,作業系統的基礎是很多學科的基石,oracle也在不斷的改進,從它的發展中也能看到各種改進的痕跡,這一點和作業系統都是異曲同工的效果,這也是我嘗試來從作業系統為主線聯絡資料的一個主要原因。
之前討論過固定分割槽和可變分割槽管理的一些情況,它們的主要缺點就是主存使用的低效率和儲存分配釋放的低速。 固定分割槽是分割槽內部的碎片造成主存利用率低,而可變分割槽是分割槽外部的碎片,往往小到無法使用,從而主存利用率不高。對於這個問題,分頁是一種很有效的方法。
分頁技術主要是把主存分為許多同樣大小的儲存塊,並以這種儲存塊作為儲存分配單位。oracle資料庫中物理儲存單位有段,區,資料塊,這個時候所說的資料塊和作業系統資料塊存在著一點的對映,一般都比作業系統塊要大。資料庫中預設為8K.資料的儲存都是以8K的基本單位來儲存的。如果把這一點繼續延伸,oracle中的區(extent)就和分頁技術中所說的頁很類似。
分頁儲存中的基本實現過程,有以下幾點
1)把主存分為相同大小的儲存塊,叫做頁架,頁架從0開始,編號依次是0,1,2....
2)使用者邏輯地址的分頁,使用者邏輯地址可以劃分為和頁架大小相同的部分,叫做頁。頁號從0開始,依次為0,1,2...
3)邏輯地址的表示,既然說到了邏輯地址,表示方法也很重要。每一個邏輯地址都是相對地址,用一個數對(p,d)來表示,p代表頁號,d代表邏輯地址在也好為p的頁中相對的地址,也叫偏移量。
聽起來挺枯燥啊,可以簡單舉個例子,我們常看的書就是一個很好的例子,書有很多大小,四開,八開,十六開,可以理解為頁架,書中的每一頁就是我們所說的頁,邏輯地址可以這麼理解,一本書有很多章節,小結,比如第二章第3頁,我們就能夠很快找到,這個時候,頁號就是2,偏移量就是3,用(p,d)來表示就是(2,3)
舉一個嚴謹的例子,比如給定一個虛地址3456,假設頁面大小為1000B,則第0頁對應的地址為0-999,第1頁為1000-1999,則虛地址3456=(3,456)
這一點和Oracle中建立表空間時指定的extent management管理方式很相似,比如我們建立一個表空間test指定分割槽大小為1M,表空間大小為100M,則語句如下:
create tablespace test add datafile '/u01/app/db/test01/data01/test01.dbf' size 100M extent management local uniform size 1M ;
這樣我們指定分割槽大小為1M,如果儲存了100M的資料,這樣100M就會分為100個分割槽。如果資料大於分割槽1M,則可以儲存在相應的分割槽上,不一定連續。
可以用下面的圖表來說明。
對應到每個程式對應的地址,就是我們所說的邏輯地址,比如程式1對應的邏輯地址就是
0-999
1000-1999
2000-3999
所以在分頁思想中的難點就是對於地址的表示,我們已經說使用(p,d)來表示,但是這個數在機器指令的地址場中表示還有不同,首先會把地址分為兩部分,一部分表示頁號,一部分表示頁內地址。
雖讓說了用觸發,但是每次訪問一個主存單元都用一次除法得到頁號和頁內地址就很繁瑣,實際上效率要更差。這個時候相比前人也是考慮了很多招數,最後還是使用二進位制來搞定,指定頁面尺寸是2的冪,這樣就會省去很多額外的轉換。
最後一個例子很關鍵,如果看懂了說明你對分頁思想算是明白了。
假設頁的大小為1KB,計算邏輯地地址為4101的頁號,頁內地址。
按照二進位制的思想,4101可以這樣表示 4101=2^12+2^1+2^1+2^0
用0,1來表示就是
0001000000000101
頁的大小是1KB=2^10,則在二進位制串中,後10位就是對應的頁內地址,二進位制0101代表的是5,表示頁內地址為5
0001000000000101
頁號對應的二進位制串000100表示頁號為4
所以4101對應的邏輯地址表示為(4,5)
這種方法可以省去除法運算,硬體層面會自動把邏輯地址拆分為兩部分,對應頁號和頁內地址。
問題來了,地址能夠表示了,那使用的時候是怎麼轉換的呢,首先會把邏輯地址抽取出來,像上面的例子,頁號是4,然後根據頁號為索引找到該頁存放的主存頁架號。比如存放的地址為2000-2999,則頁架號為2,然後把頁架號取代邏輯地址,和右邊的頁內地址組成了最終的實體地址去訪問記憶體。
這種思想還是需要些時間去消化一下,優點也是很明顯的,基本上沒有頁內碎片,同時也不會存在小到無法再用的頁外碎片。因為每個碎片都是頁架的整數倍。
分頁中使用的二進位制方式處理地址是一種很值得借鑑的方式,可以減少很多額外的開銷,和oracle中的rowid儲存方式也很類似。
感覺對自己來說是邁出了艱難的一步,作業系統的概念有時候確實感覺枯燥,但是細細品來,都是前車之鑑,很多的方法或者改進都是在碰到很多問題之後總結琢磨出來的,所以從某種程度上來說,作業系統的基礎是很多學科的基石,oracle也在不斷的改進,從它的發展中也能看到各種改進的痕跡,這一點和作業系統都是異曲同工的效果,這也是我嘗試來從作業系統為主線聯絡資料的一個主要原因。
之前討論過固定分割槽和可變分割槽管理的一些情況,它們的主要缺點就是主存使用的低效率和儲存分配釋放的低速。 固定分割槽是分割槽內部的碎片造成主存利用率低,而可變分割槽是分割槽外部的碎片,往往小到無法使用,從而主存利用率不高。對於這個問題,分頁是一種很有效的方法。
分頁技術主要是把主存分為許多同樣大小的儲存塊,並以這種儲存塊作為儲存分配單位。oracle資料庫中物理儲存單位有段,區,資料塊,這個時候所說的資料塊和作業系統資料塊存在著一點的對映,一般都比作業系統塊要大。資料庫中預設為8K.資料的儲存都是以8K的基本單位來儲存的。如果把這一點繼續延伸,oracle中的區(extent)就和分頁技術中所說的頁很類似。
分頁儲存中的基本實現過程,有以下幾點
1)把主存分為相同大小的儲存塊,叫做頁架,頁架從0開始,編號依次是0,1,2....
2)使用者邏輯地址的分頁,使用者邏輯地址可以劃分為和頁架大小相同的部分,叫做頁。頁號從0開始,依次為0,1,2...
3)邏輯地址的表示,既然說到了邏輯地址,表示方法也很重要。每一個邏輯地址都是相對地址,用一個數對(p,d)來表示,p代表頁號,d代表邏輯地址在也好為p的頁中相對的地址,也叫偏移量。
聽起來挺枯燥啊,可以簡單舉個例子,我們常看的書就是一個很好的例子,書有很多大小,四開,八開,十六開,可以理解為頁架,書中的每一頁就是我們所說的頁,邏輯地址可以這麼理解,一本書有很多章節,小結,比如第二章第3頁,我們就能夠很快找到,這個時候,頁號就是2,偏移量就是3,用(p,d)來表示就是(2,3)
舉一個嚴謹的例子,比如給定一個虛地址3456,假設頁面大小為1000B,則第0頁對應的地址為0-999,第1頁為1000-1999,則虛地址3456=(3,456)
這一點和Oracle中建立表空間時指定的extent management管理方式很相似,比如我們建立一個表空間test指定分割槽大小為1M,表空間大小為100M,則語句如下:
create tablespace test add datafile '/u01/app/db/test01/data01/test01.dbf' size 100M extent management local uniform size 1M ;
這樣我們指定分割槽大小為1M,如果儲存了100M的資料,這樣100M就會分為100個分割槽。如果資料大於分割槽1M,則可以儲存在相應的分割槽上,不一定連續。
可以用下面的圖表來說明。
地址 | 程式 | 頁號 |
0-999 | 程式1 | 0 |
1000-1999 | 程式1 | 1 |
2000-2999 | 程式2 | 0 |
3000-3999 | 程式3 | 0 |
4000-4999 | 程式2 | 1 |
5000-5999 | 程式1 | 2 |
對應到每個程式對應的地址,就是我們所說的邏輯地址,比如程式1對應的邏輯地址就是
0-999
1000-1999
2000-3999
所以在分頁思想中的難點就是對於地址的表示,我們已經說使用(p,d)來表示,但是這個數在機器指令的地址場中表示還有不同,首先會把地址分為兩部分,一部分表示頁號,一部分表示頁內地址。
雖讓說了用觸發,但是每次訪問一個主存單元都用一次除法得到頁號和頁內地址就很繁瑣,實際上效率要更差。這個時候相比前人也是考慮了很多招數,最後還是使用二進位制來搞定,指定頁面尺寸是2的冪,這樣就會省去很多額外的轉換。
最後一個例子很關鍵,如果看懂了說明你對分頁思想算是明白了。
假設頁的大小為1KB,計算邏輯地地址為4101的頁號,頁內地址。
按照二進位制的思想,4101可以這樣表示 4101=2^12+2^1+2^1+2^0
用0,1來表示就是
0001000000000101
頁的大小是1KB=2^10,則在二進位制串中,後10位就是對應的頁內地址,二進位制0101代表的是5,表示頁內地址為5
0001000000000101
頁號對應的二進位制串000100表示頁號為4
所以4101對應的邏輯地址表示為(4,5)
這種方法可以省去除法運算,硬體層面會自動把邏輯地址拆分為兩部分,對應頁號和頁內地址。
問題來了,地址能夠表示了,那使用的時候是怎麼轉換的呢,首先會把邏輯地址抽取出來,像上面的例子,頁號是4,然後根據頁號為索引找到該頁存放的主存頁架號。比如存放的地址為2000-2999,則頁架號為2,然後把頁架號取代邏輯地址,和右邊的頁內地址組成了最終的實體地址去訪問記憶體。
這種思想還是需要些時間去消化一下,優點也是很明顯的,基本上沒有頁內碎片,同時也不會存在小到無法再用的頁外碎片。因為每個碎片都是頁架的整數倍。
分頁中使用的二進位制方式處理地址是一種很值得借鑑的方式,可以減少很多額外的開銷,和oracle中的rowid儲存方式也很類似。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1440453/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 作業系統儲存管理和oracle資料庫(第三篇)作業系統Oracle資料庫
- 作業系統儲存管理和oracle資料庫(第一篇)作業系統Oracle資料庫
- 細說Oracle資料庫與作業系統儲存管理二三事Oracle資料庫作業系統
- 作業系統(8)儲存器管理作業系統
- 作業系統儲存器管理筆記作業系統筆記
- 檔案系統儲存與oracle資料庫儲存對比Oracle資料庫
- 【作業系統筆記】動態儲存管理作業系統筆記
- 作業系統程式、儲存和I/O作業系統
- 儲存與資料庫系統資料庫
- 統信作業系統下資料庫管理利器作業系統資料庫
- [資料庫系統]儲存和檔案結構資料庫
- 利用oracle儲存過程執行作業系統命令Oracle儲存過程作業系統
- Oracle資料庫適配哪些國產作業系統?Oracle資料庫作業系統
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-關於資料庫儲存結構Oracle資料庫
- linux和windows作業系統下完全刪除oracle資料庫LinuxWindows作業系統Oracle資料庫
- 作業系統重灌後Oracle資料庫的恢復作業系統Oracle資料庫
- 管理資料庫儲存結構資料庫
- oracle資料庫系統管理(轉)Oracle資料庫
- 理解作業系統之儲存管理作業系統
- 作業系統——c++實現頁式虛擬儲存管理作業系統C++
- 麒麟作業系統下管理國內外主流資料庫作業系統資料庫
- 什麼是大資料系統儲存及管理?大資料
- 大資料的儲存和管理大資料
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-執行常見的資料庫儲存任務Oracle資料庫
- 作業系統ENDIAN(位元組儲存次序)作業系統
- 作業系統儲存管理實驗:最近最少使用LRU(Least Recently Used)作業系統AST
- 分散式系統技術:儲存之資料庫分散式資料庫
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-管理還原資料Oracle資料庫
- Oracle學習系列—Window作業系統下Oracle資料庫的手工建立Oracle作業系統資料庫
- 配置作業系統重啟後,Oracle資料庫和監聽自動啟動作業系統Oracle資料庫
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-關於其它儲存結構Oracle資料庫
- 資源管理與作業系統作業系統
- 庫存管理系統
- Oracle學習系列—Window作業系統下Oracle資料庫的手工建立(zt)Oracle作業系統資料庫
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-關於管理還原資料Oracle資料庫
- 面試資料-作業系統面試作業系統
- 使用自動儲存管理 (ASM)建立資料庫ASM資料庫
- 關於資料庫作業系統的討論資料庫作業系統