[小惡魔的電腦教室] 1-3.CPU進階技術講解,XD、VT、SSE在幹嘛


roosalsa wrote:

64位元之後,記憶體支援的容量「理論上」就高達「170億GB」
是板大算錯了嗎?還是小弟不才,既然32位元有40億GB
但64位元應該是"2的64次方阿!"2(32+32)應該不是1700億GB嗎?
........(恕刪)


roosalsa兄,應該是您看錯了
板大是說32位元的作業系統支援《4GB》
並不是《40億GB》唷!





O.S:01上真的是臥虎藏龍呀!希望能有更多這類的分享文來增加各位板友的知識!
電腦音響系統完成^^ 擴大機:KENWOOD R-7PRO 喇 叭:JAMO 28
JHLX wrote:
..... 真的要算...(恕刪)



SOGA!!!果然是小弟不材..........
dorothy wrote:
MMIO 大致上佔據高位址 0xF0000000 ~ 0xFFFFFFFF 這段位址區大部分都是周邊硬體
和CPU溝通的介面 並不是佔用到磁碟上的虛擬記憶體空間


再請教一下Dorothy兄及各位前輩,
那如果我只用1~2GB or Disable MMIO in BIOS,這時週邊硬體如何跟CPU溝通阿?
我有聽說可以把這段定址搬到更高的一層(4GB以上),有這東西嗎?
還請大家指教了!!
tomjen wrote:
再請教一下Dorot...(恕刪)


MMIO 將周邊硬體的暫存器(Register) 映射到 CPU 的定址空間上
所以CPU並不需要也不能夠將MMIO位址映射到記憶體(DRAM)

舉例來說 我的電腦 網路卡的暫存器映射到 CPU 的定址空間 0xF7FFFC00 ~ 0xF7FFFFFF (1KB)
就表示 CPU 存取 0xF7FFFC00 ~ 0xF7FFFFFF 就是存取網路卡的暫存器
這1KB不能在DRAM位址上,所以如果有4GB DRAM (0x00000000~0xFFFFFFFF)
那這1KB會和DRAM位址重疊,所以這1KB不能給DRAM

網路卡規格書會說明暫存器用途
假設暫存器1可以回傳網路卡的IP位址,那CPU可以使用下面這一段程式碼來抓到

{
...
unsigned int IPAddress;

IPAddress = *(unsigned int *)(0xF7FFFC00);
...
}

通常這種程式碼可以在驅動程式碼中找到,而驅動程式必須以核心模式(Kernel Mode)執行
一般的應用程式是沒有權利執行這類的程式碼

64-bit OS (0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF)就不會有重疊的問題了
像以上的例子,可以將 MMIO 定址到 (0xF.F7FFC00 ~ 0xF.F7FFFFFF)
就不會和 4GB DRAM 位址重疊 了



以下來自 http://en.wikipedia.org/wiki/Memory-mapped_IO
Memory-mapped I/O (MMIO) and port I/O (also called port-mapped I/O or PMIO) are two complementary methods of performing input/output between the CPU and I/O devices in a computer. Another method is using dedicated I/O processors (channels, used in IBM mainframe computers).

Memory-mapped I/O (not to be confused with memory-mapped file I/O) uses the same bus to address both memory and I/O devices, and the CPU instructions used to read and write to memory are also used in accessing I/O devices. In order to accommodate the I/O devices, areas of CPU addressable space must be reserved for I/O rather than memory. This does not have to be permanent, for example the Commodore 64 could bank switch between its I/O devices and regular memory. The I/O devices monitor the CPU's address bus and respond to any CPU access of their assigned address space, mapping the address to their hardware registers.

Port-mapped I/O uses a special class of CPU instructions specifically for performing I/O. This is generally found on Intel microprocessors, specifically the IN and OUT instructions which can read and write a single byte to an I/O device. I/O devices have a separate address space from general memory, either accomplished by an extra "I/O" pin on the CPU's physical interface, or an entire bus dedicated to I/O.
dorothy wrote:
MMIO 將周邊硬體...(恕刪)


感謝Dorothy大撥空回答先。
但是小弟還有點不明白,請各位前輩看看了,
1. 如果Disable MMIO,那麼OS下就可以看到Full 4GB了,但此時CPU就無法透過定址空間來存取週邊的Register,那麼CPU就會直接去找週邊要?這邊觀念對嗎? 那此時寫好在Driver裡的程式碼還可以執行嗎??
2. 再查MMIO時,有看到AMD有一個IOMMU的東西,好像可以把這段定址搬到4GB以上,有前輩可以說一下嗎?
小弟準備拿筆記本抄一下了....
tomjen wrote:
感謝Dorothy大...(恕刪)


--> CPU就會直接去找週邊要?這邊觀念對嗎?
MMIO 就是CPU和周邊溝通的介面之一,就是直接去找週邊要的方式
如果週邊還有其他的溝通方式如 Port IO 就可以不用 MMIO
如果只有MMIO, 那 Disable MMIO 就好像關掉大門 就沒得溝通了

tomjen wrote:
2. 再查MMIO時,有看到AMD有一個IOMMU的東西,好像可以把這段定址搬到4GB以上,有前輩可以說一下嗎?(恕刪)

我剛剛又查了一下,發現在BIOS下用Memory Remapping都可以解決32Bit Windows沒辦法完全用到4GB的記憶體問題,當然這需要現今的MCH來支援!
至於IOMMU也有提到可以Remap address above 4GB,差別在哪,就需要前輩來解釋一下了,當然,如果我查到什麼也會跟各位整理報告一下的!
虛擬技術最近造成一股潮流,虛擬程式的含義十分廣泛,包含輸出/輸入(I/O)、儲存裝置已經其他部分的虛擬化技術,然而最近大家的焦點都放在伺服器的虛擬化--即可以在一台硬體上執行多套作業系統的能力。最近推出的支援虛擬技術的硬體--如Intel的Virtualization Technology (VT)以及AMD的Secure Virtual Machine (SVM)--都可以讓Windows系統在不經修改下,直接在平行虛擬的管理程式,比方Xen上面執行。

VMWare


這圖是我用VMWare做的虛擬作業系統,我的cpu是Intel Core Duo Processor T2300E,T2300E並沒有支援
VT,要T2300的才有VT,但是VMWare還是可以玩,那你會問到底差在那裡... =處理器虛擬化技術
處理器虛擬化技術,透過額外定義的特權層級,「欺騙」作業系統,避免全虛擬化方案耗費系統資源的二進位執行檔轉換.簡單的說就是有VT你的處理器虛擬的作業系統,可以跑的更順
其實虛擬技術這塊大餅人人都想吃..而且虛擬技術現在是進入 三國鼎立 的時代隸屬EMC的VMware、隸屬微軟的Virtual PC、開放源碼的Xen。虛擬技術還有一段路要走,我們消費端還要經歷一場演進的混亂時代啊..

這是虛擬化技術的演進圖,在作業系統的虛擬化這個領域,也有數種不同的方法,可以依他們虛擬的層級來分類。以PowerPC版的軟體Virtual PC為例,是將硬體平台完整地用軟體來模擬,可以讓你執行給別的硬體來使用的作業系統。但這樣會對效能造成相當大的影響。相反地,VMware跟微軟的Virtual Server只虛擬必要的硬體,以讓多個作業系統可以分別執行,但只有為這個硬體設計的作業系統才能順利執行。然而這樣依舊會造成相當的處理負荷。
不過我們可以小心一點,一次玩兩個作業系統就好了,只要不玩上癮一次開十多個作業系統造成電腦罷工.,
除非你的CPU有支援VT-d技術(Vanderpool for Directed I/O),內建轉換DMA位址與中斷DMA/Interrupt Remapping的硬體功能,可將系統I/O裝置動態分配至不同的虛擬機器上,反正實際真正發揮虛擬化精髓還要等上一些時間,現在可以玩簡單的虛擬作業系統就好了,說簡單其實也不簡單了,很好用的了,有玩過VMWare會發現虛擬作業系統很好用,尤其是它的可高度移值性,很多工商業付費軟體,要買受權KEY,有些還鎖網路卡的,他們就抓到VMWare的虛擬網路卡,可以把你做好的VM檔,放在其他電腦上,一樣可移值出去,是不是酷呆了呢....



chicman wrote:
VT是比較泛用的說法...(恕刪)

請問一下
我有顆CPU是AMD X2 4400+
是Brisbane-512 BH-G1
我去查了一下
wiki英文版的
http://en.wikipedia.org/wiki/Athlon_64_X2
寫有支援AMD-V
中文版的卻沒有寫有支援AMD-V
http://zh.wikipedia.org/wiki/Athlon_64_X2
所以不知道大大是不是有經驗
是否了解我這顆CPU有否支援SMV的指令集
slime wrote:
關於 ring -1...(恕刪)


講到虛擬化技術我覺得就要扯到 32位元保護模式,從386(還是 286?) 加入 32bit 保護模式後,x86 cpu 才有執行特權的分級,OS 的 kernel 層都跑在 ring 0,user space 都跑在 ring3,前幾年 server 開始用虛擬技術獲得支持後,x86 cpu 也開始跟進,但是 x86 沉重的歷史包袱又不能亂改架構,就在 ring0 之上再插一個 ring -1(或是廠商說的 vmm,不過我覺得那是在玩文字遊戲),之前 vmware 的虛擬化技術都只是模擬出一台完整的電腦(也很猛了,就跟遊戲機的模擬器差不多),包含 cpu、vga...etc,全部用程式碼去處理,等於是虛擬機器裡跑的程式碼還要再轉過一層 vmware 再轉給真實的 cpu 去跑,所以速度慢;xen 比較不同,它需要修改 OS 的執行特權,把 OS 降到 ring1,xen 自己跑在 ring0,所以之舊的 xen 只能給 Open Source 的 OS 用,效能也跟硬體支援的虛擬機器一樣。
有了 VT 或 pacifica 後,事情就沒那麼麻煩了,在 windows 下,灌上支援虛擬化技術的 vm,現存的 OS 馬上變 host OS,在 vm 裡的 OS 就是 guest OS,而且 guest OS 也可以存取所有 cpu 的資源(但是動不到 host OS 的),速度也快很多,xen 就沒差,只是支援了 vt 後,可以直接支援 windows 這類的商業 OS。
不過 cpu 有了虛擬化,其他 IO 週邊還是都用程式碼去模擬的,但是少掉 x86 to x86 的 transcode 就可以快很多,現在 PCI-E 2.0 好像也把 Virtual IO 放進去了,如果我的理解沒錯+以後 vm 軟體支援的話,應該也可以直接 access 像是 GPU、網卡的資源(目前 vmware 支援 3D 加速是透過虛擬一個特殊的顯示卡,把 DirectX 的呼叫轉給 host OS),不過我覺得虛擬技術給一般人用意義不大,還是 server 的應用比較廣泛...XD
限制級
您即將進入之討論頁 需滿18歲 方可瀏覽。
提醒:內容可能因過於寫實、驚悚而令人感到不舒服,是否繼續觀看?

根據「電腦網路內容分級處理辦法」修正條文第六條第三款規定,已於該限制級網頁,依台灣網站分級推廣基金會規定作標示。
評分
複製連結