色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

KVM并不是想象中那么難

Linux閱碼場 ? 來源:Linuxer ? 作者:沈丹 ? 2020-09-16 13:51 ? 次閱讀

那些不能銘記過去的人注定要重蹈覆轍。你還記得當(dāng)年用Windows隱藏文件夾藏片嗎?

作為一個屌絲,虛擬化技術(shù)確實意義非常重大。這個最顯著的作用顯然就是藏片,作為一個程序員,如果還用Windows文件隱藏功能來藏片,這實在是污辱自己和女朋友的智商,讓廣大碼農(nóng)抬不起頭來做人。最早可以幫你實質(zhì)藏片的手段來自VMware。
VMware這個名字就是一種牛逼,VM就是virtual machine,ware是取自Software中的ware,1999年VMware發(fā)布了它的第一款產(chǎn)品VMware Workstation,在那個賽揚333和白衣飄飄的時代。

上面一幅圖看起來比較嗨皮,但是技術(shù)含量確實不低。你想在一個電腦上面,虛擬出來一個“假”電腦,但是一定要“假”到什么程序呢?就是蒼老師在跑的時候,她意識不到這是個“假”電腦。造假從來都不是那么容易的事情。會面臨來自CPU、內(nèi)存、I/O的全方位障礙。

先說CPU方面,為了避免應(yīng)用弄死整個系統(tǒng),除了一些裸奔的RTOS(實時操作系統(tǒng))以外,現(xiàn)代操作系統(tǒng)一般借助CPU的不同模式來將操作系統(tǒng)內(nèi)運行的軟件切割為用戶態(tài)和內(nèi)核態(tài)。用戶態(tài)只能執(zhí)行常規(guī)的CPU指令如運算,但凡涉及到訪問特定的硬件,如MMU、I/O等,用戶態(tài)的應(yīng)用就需要陷入內(nèi)核態(tài),調(diào)用內(nèi)核的系統(tǒng)服務(wù)來完成。

比如下面最簡單一段程序:

int main(int argc, char **argv)
{
int i;

for(i=0;i<10000;i++);?
write(1, “hello ”, 6);
for(i=0;i<10000;i++);

return 0;
}

其中for(i=0;i<10000;i++);這樣的語句是在用戶態(tài)執(zhí)行的,而write(1, “hello ”, 6);則通過系統(tǒng)調(diào)用陷入到內(nèi)核態(tài)。?
這個陷入,不僅是軟件的一種變化,也是硬件模式的一種跨越。X86的處理器模式也從ring3非特權(quán)模式切換到了ring0特權(quán)模式了。非特權(quán)這樣的模式,可以保證用戶空間想干壞事也干不了,干了壞事就現(xiàn)場被抓。

那么問題就來了,沒有虛擬機guest的情況下,ring0只有主機操作系統(tǒng)一個人玩,這個是絲毫沒有什么問題的。有多個guest OS的情況下,guest OS的內(nèi)核也想在ring0玩(至少它要覺得自己在ring0玩),但是事實上是它不能占據(jù)ring0,否則就變成了宋哲,控制了不該控制的資源。這個時候,我們必須給guest OS做“特權(quán)解除(De-privileging)”,比如把guest OS的kernel放入權(quán)限更低的ring1。但是,我們必須給它模擬出還是在ring3和ring0跑的樣子,因為OS原本是這樣理解的,全虛擬化的本質(zhì)讓它感知不到被虛擬化了,就是追求這個等價性。既然蒼老師喜歡看到guest OS的內(nèi)核在ring0建設(shè)社會主義的樣子,我們就要把蒼老師給蒙騙過去。

模擬出還是ring0和3的樣子,這個事情還真的是不簡單。現(xiàn)在guest OS用戶態(tài)和內(nèi)核態(tài)分別運行在CPU的ring3和ring1,然后蒼老師在的Windows的內(nèi)核想讀CPU的一個寄存器知道CPU現(xiàn)在在什么狀態(tài),假設(shè)這個指令叫做ABC,由于現(xiàn)在雖然蒼老師Windows在內(nèi)核態(tài),但是CPU實際處于ring1,所以她讀到的是ring1,這顯然不符合應(yīng)有的期待,虛擬化后蒼老師應(yīng)該讀到ring0才對!

ABC這樣的指令關(guān)乎到系統(tǒng)全局資源的狀態(tài)讀取或者設(shè)置,我們一般稱呼這樣的指令為敏感指令(Sensitive instruction)。假設(shè)ABC這條敏感指令同時也是一條特權(quán)指令(Privilege instruction,在非特權(quán)模式執(zhí)行的時候會引發(fā)硬件陷入特權(quán)模式的ring0),那么蒼老師讀CPU的狀態(tài)的時候,陷入ring0,我們在ring0的VMM(virtual machine monitor)代碼里面?zhèn)卧煲粋€ring0值給蒼老師就萬事大吉了,這就是典型的“陷入-模擬”。只要能陷入,咱們就能模擬,就能制造幻覺。

如果所有的敏感指令都是特權(quán)指令,我們顯然是可以完美通過這種“陷入-模擬”的方法來實現(xiàn)虛擬化的。實際上,大部分敏感指令確實是特權(quán)指令。但是,無論是早期的X86,還是ARM,都有些敏感指令不是可以陷入的特權(quán)指令,我們稱呼它們?yōu)榕R界指令(critical instruction)。不陷入就無法模擬,又關(guān)乎系統(tǒng)資源的讀取和設(shè)置,系統(tǒng)資源就像全局變量,主機看虛擬機也看,這個虛擬機看,那個虛擬機也看,你看我也看,那么顯然是無法實現(xiàn)邏輯上的隔離了。我們顯然需要把跨機器的全局變量變成虛擬機內(nèi)的模塊級變量才靠譜。

早期為了解決上述問題,人們一般采用2種辦法:

半虛擬化(para-virtualization)

直接在guest OS里面把無法虛擬化的部分代碼改掉,把ABC指令替換成一個陷入ring0的系統(tǒng)調(diào)用,既然你不陷入,哥就強行拉你下水。這顯然就不是全部的虛擬化了,這種叫做半虛擬化(para-virtualization)。

二進(jìn)制翻譯( binary translation )

不改代碼,比如看到ABC這樣的指令,提前插入斷點來截獲之,交由 VMM 解釋執(zhí)行,我們就把它強行翻譯為別的東西。其實這個也有那么一點類似半虛擬化,你可以認(rèn)為半虛擬化的改代碼在編譯前,而二進(jìn)制翻譯的改代碼在運行時。

通常我們認(rèn)為運行時候改,會比編譯前改,逼格要高那么一點點。

由于半虛擬化需要系統(tǒng)內(nèi)核的深度修改,在生產(chǎn)環(huán)境中,半虛擬化在技術(shù)支持和維護(hù)上會有很大的問題,早期的Xen就是用的這種方法。而早期的VMware用的手段則是進(jìn)行二進(jìn)制翻譯( binary translation ),把這些指令翻譯執(zhí)行,不讓它的實際指令執(zhí)行。翻譯的意思,就是類似明明我干的就是ABC,它替換為xxxx,yyyy,zzzz,然后欺騙蒼老師現(xiàn)在是ring0:

這是虛擬化的訴求,也是歷史的痛苦。當(dāng)然現(xiàn)在已經(jīng)不是蒼老師的時代了,遙想公謹(jǐn)當(dāng)年,蒼天有井獨自空,星落天川遙映瞳。小溪流泉映花彩,松江孤島一葉楓。哎,時代的車輪滾滾向前,碾壓著每一個屌絲。房子永遠(yuǎn)越來越貴,家庭成本越來越高,碼農(nóng)越來越老,外企個個在跑,每每念及此處,心里孤單又寂寞。

現(xiàn)在無論是X86還是ARM,都通過修改CPU架構(gòu),解決了上述問題。Intel Virtualization Technology (VT-x) 和AMD’s AMD-V這樣的硬件虛擬化技術(shù),在CPU引入一個新的模式VMX Root Mode。

Guest OS運行于non-root下的ring0,Guest OS上面的應(yīng)用運行于non-root模式下的ring3,而host OS的內(nèi)核和VMM則運行于root模式下。這樣做的一個好處是,對guest OS和app而言,它的軟件是透明的,內(nèi)核感覺自己是ring0, APP感覺自己是ring3,看起來沒有執(zhí)行“特權(quán)解除”一樣,也不用再去執(zhí)行前面的實際在ring1,而要假裝在ring0的樣子。

root模式之下,也分為ring0-ring3。VMM和HOST OS運行在RING0, HOST APPs運行在ring3。當(dāng)guest OS退出(VMExit)的時候,會進(jìn)入root;VMM調(diào)度guest OS運行的時候,會進(jìn)入guest OS(VMEntry)。

顯然,non-root模式之下的ring 0,不具備root模式下ring0同樣的特權(quán)。所以root模式下的ring0是fully privileged ring 0,而non-root模式下的ring0是less privileged ring 0。一些non-root下的異常、I/O訪問、指令和特定寄存器的訪問,將引發(fā)從non-root到root的切換事件。比如在non-root下執(zhí)行INVD — Invalidate Internal Caches指令,就會引發(fā)VMExit事件。

而ARM處理器也引入了類似的技術(shù),在ARM的非安全模式之下,分為EL0這個level跑guest APP,EL1這個level跑GUEST OS,而EL2這個level跑VMM,完成各個guest OS的切換。

除了CPU以外,內(nèi)存也是一個大問題,主機OS在跑的時候,它通過CPU的MMU完成虛擬地址到物理地址的轉(zhuǎn)化。對于主機而言,它看到的物理內(nèi)存是整個內(nèi)存條。但是對于主機上面運行的虛擬機里面的guest OS而言,它顯然不能直接看到物理的內(nèi)存條。因為虛擬化的核心是把物理的東西邏輯化。所以蒼老師看到的物理地址,在她的眼里依然是連續(xù)的,但是它顯然不能是內(nèi)存條最終真正的物理地址。現(xiàn)代CPU一般通過提供第2級轉(zhuǎn)換來完成,一級是guest OS里面虛擬地址(VA)到guest OS的物理地址(PA),另外一級是guest OS里面的物理地址到真實內(nèi)存條的地址(MA)。第2級的PA->MA的轉(zhuǎn)化由VMM來維護(hù)。對guest OS里面運行的app而言,VA是連續(xù)的,實際上PA是非連續(xù);對于guest OS里面運行的kernel而言,PA是連續(xù)的,實際上MA是非連續(xù)的。總之,不在乎是否真的連續(xù),只在乎你覺得是連續(xù)的就行!前面我已經(jīng)反復(fù)強調(diào),虛擬化本質(zhì)上是一種幻覺。在沒有內(nèi)存虛擬化支持的時代,VMM一般是通過給guest OS的進(jìn)程再維護(hù)一個guest OS虛擬地址到最終機器物理地址的影子頁表來完成地址轉(zhuǎn)換的。

CPU、內(nèi)存以外,接下來的大問題就是I/O外設(shè)的一系列模擬。大家玩過VMware、Virtualbox的話,都知道我們可以在guest OS里面加假硬盤、假光驅(qū)、假網(wǎng)卡。

這些假的東西怎么造呢?需要進(jìn)行硬件的行為模擬。比如虛擬機guest OS里面有一個網(wǎng)卡X,它有如下寄存器序列來發(fā)包:

write(reg1, 0xFF)
write(reg2, 0xF0)
write(reg3, 0x1)

為了模擬這個網(wǎng)卡,我們也需要捕獲上述的IO操作并進(jìn)行模擬,由于所有的IO操作都會引發(fā)異常,最終陷入VMM,而VMM可以借由host OS之上運行的一個應(yīng)用進(jìn)行行為級模擬并最終調(diào)用Host OS的系統(tǒng)調(diào)用來完成最后的操作。在VMware workstation中,這一步驟就由VMdriver、VMM和VMApp來協(xié)同完成。

一個典型的guest里面的網(wǎng)絡(luò)發(fā)包流程如下,顯然VMM上下文給了VMDriver,之后VMApp獲得I/O請求,VMApp弄清楚情況后,最終通過syscall調(diào)主機的服務(wù)把包通過主機的網(wǎng)卡發(fā)出去:

相似的,KVM 在 IO 虛擬化方面,就是使用 QEMU 這個應(yīng)用軟件的方式來模擬 IO 設(shè)備。

KVM是個什么鬼?

KVM(Kernel-based Virtual Machine)最初是由一個以色列的創(chuàng)業(yè)公司Qumranet開發(fā)的,KVM的開發(fā)人員并沒有選擇從底層開始新寫一個Hypervisor,而是選擇了基于Linux kernel,通過加載新的模塊從而使linux Kernel本身變成一個Hypervisor。從Linux kernel 2.6.20開始就包含在Linux內(nèi)核代碼之中,可以重用Linux kernel的生態(tài)鏈和現(xiàn)有基礎(chǔ)設(shè)施。
KVM運行于帶硬件虛擬化支持的處理器,所以我們假定硬件里面的CPU虛擬化擴展、內(nèi)存虛擬化擴展等都是存在的。
KVM架構(gòu)中涉及到3個重要組件:

Guest:客戶機系統(tǒng),運行在虛擬的CPU(vCPU)、內(nèi)存、虛擬的IO設(shè)備(Console、網(wǎng)卡、I/O 設(shè)備驅(qū)動等)。

KVM:運行在Linux內(nèi)核空間,成為內(nèi)核模塊,提供CPU 和內(nèi)存的虛級化,以及客戶機的 I/O 攔截。Guest 的 I/O 被KVM 攔截后,交給 QEMU 處理。KVM驅(qū)動給用戶空間的QEMU提供了/dev/kvm字符設(shè)備。

QEMU:修改過的為 KVM虛擬機使用的 QEMU 代碼(稱為qemu-kvm),運行在用戶空間,除了提供硬件 I/O 設(shè)備的模擬,還通過對/dev/kvm設(shè)備執(zhí)行IOCTL來和 KVM 交互執(zhí)行創(chuàng)建虛擬機、vCPU等對guest的控制操作。

如果要把VMware Workstation與KVM進(jìn)行一個對比的話,VMdriver、VMM有點類似KVM內(nèi)核模塊,而VMApp有點類似QEMU。

QEMU提供了guest管理的功能、I/O轉(zhuǎn)換的功能。

在ARM處理器上,KVM內(nèi)核組件的運行情況如下圖:

而ARM V8.1 VHE支持后,則可以變成:

QEMU通過ioctl發(fā)出KVM_CREATE_VM、KVM_CREATE_VCPU等這種虛擬機、vCPU的創(chuàng)建指令,讓guest投入運行。之后QEMU執(zhí)行KVM_RUN這樣的IOCTL,如果這個IOCTL返回,意味著VMexit。qemu根據(jù)返回的情況,確定是否是guest OS發(fā)生IO的動作,如果是,則進(jìn)行IO模擬以及執(zhí)行主機的系統(tǒng)調(diào)用來完成IO動作,偽代碼類似:

open(“/dev/kvm”)
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)

for (;;) {
exit _reason = ioctl(KVM_RUN)
switch (exit_reason) {
case KVM_EXIT_IO: /* … */
case KVM_EXIT_HLT: /* … */
}
}

Guest OS對設(shè)備寄存器的讀寫的地址、size和數(shù)據(jù)都可以傳遞給QEMU里面的設(shè)備驅(qū)動,QEMU再進(jìn)行行為級模擬即可,比如Guest OS想讀addr位置的一個寄存器:

static int xche_ioport_read(struct kvm_io_device *this, gpa_t addr, int len, void *data)
{
/根據(jù)不同的地址執(zhí)行不同的操作/
switch (addr) {
case:
break;

}
/*將數(shù)據(jù)拷貝到讀取的數(shù)據(jù)地址/
memcpy(data, (char *)&ret, len);
return 0;
}

第一次的運行

我們把KVM以及一些相關(guān)的管理工具都安裝了:
sudo apt-get install qemu-kvm qemu-system libvirt-bin bridge-utils virt-manager
然后跑一個最小的Linux- Tinycore。從http://tinycorelinux.net/downloads.html下載這個最小Linux,或者直接在Ubuntu中
wgethttp://tinycorelinux.net/7.x/x86/release/TinyCore-current.iso
運行之:
qemu-system-x86_64 -smp 2 –enable-kvm –cdrom /mnt/hgfs/Downloads/TinyCore-current.iso
這樣我們會發(fā)現(xiàn)Tinycore Linux跑起來了:

在模擬的qemu窗口中按下ctrl+alt 2,運行info kvm,發(fā)現(xiàn)KVM已經(jīng)啟動:

這個時候我們會在host OS里面看到一個qemu的進(jìn)程:

baohua@ubuntu:~$ ps -ef | grep qemu
baohua 101655 42512 14 10:34 pts/3 0005 qemu-system-x86_64 -smp 2 –enable-kvm –cdrom /mnt/hgfs/Downloads/TinyCore-current.iso

由此可見,每個虛擬機在主機里面就是一個普通的Linux進(jìn)程。

工具和易用性的解決

用qemu-system-x86_64 -smp 2 –enable-kvm –cdrom /mnt/hgfs/Downloads/TinyCore-current.iso這樣的原始命令來運行KVM畢竟有些naive,我們需要一套強大的工具來方便KVM的部署。

這個時候,我們就不得不提libvirt,libvirt是一套免費、開源的支持Linux下主流虛擬化工具的C函數(shù)庫。其旨在為包括Xen、KVM、Virtualbox、VMware等在內(nèi)的各種虛擬化工具提供一套方便、可靠的編程接口。所以libvirt可以認(rèn)為是管理工具和具體虛擬機之間的一個紐帶。

Libvirtd是一個daemon進(jìn)程,virsh、virt-manager等工具呼叫l(wèi)ibvirtd,而Libvirtd則調(diào)用qemu-kvm操作虛擬機。

前面的Tinycore Linux,我們同樣可以在virt-manager里面進(jìn)行創(chuàng)建、啟動和停止。一路如下:

創(chuàng)建好后,啟動Tinycore:

我們用virsh工具來觀察一下這個虛擬機:

baohua@ubuntu:~$ virsh list –all
Id Name State
3 linux running

我們現(xiàn)在強行用”virsh destroy linux”這個命令銷毀這個虛擬機:

用virsh start再次啟動它:

少年不管,流光如箭,因循不覺韶光換。至如今,始惜月滿、花滿、酒滿。扁舟欲解垂楊岸,尚同歡宴。日斜歌闋將分散。倚蘭橈,望水遠(yuǎn)、天遠(yuǎn)、人遠(yuǎn)。

想念那個《仙劍奇?zhèn)b傳98柔情》的時代,虛擬化啟蒙的年代。

原文標(biāo)題:KVM最初的2小時——KVM從入門到放棄

文章出處:【微信公眾號:Linuxer】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • VMware
    +關(guān)注

    關(guān)注

    1

    文章

    298

    瀏覽量

    21669
  • KVM
    KVM
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    12960

原文標(biāo)題:KVM最初的2小時——KVM從入門到放棄

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    用ADS1299-FE評估版測試時,在測試的時候VREFP是-2.45,并不是設(shè)計所說的4.5v,為什么?

    在用ADS1299-FE評估版測試時 采用內(nèi)部參考,雙電源供電模式 ,-2.5-2.5,但是在測試的時候 VREFP是-2.45,并不是設(shè)計所說的4.5v? 在提供的LABview測試時總得不到想看到的結(jié)果,想請問一下是什么問題呢? 是10uF電容擊穿了?
    發(fā)表于 12-16 06:43

    LMP90100將寄存器配置為通道掃描模式3的時候,CHO-CH3并不是逐次掃描的,為什么?

    大家好,我用了LMP90100四個差分通道 配置CH0--CH3,現(xiàn)在發(fā)現(xiàn)將寄存器配置為通道掃描模式3的時候,CHO-CH3并不是逐次掃描的 結(jié)果就是CH0數(shù)據(jù)采集了5次,CH1可能采集3次,CH可能采集1次,CH3通道還是0次,請問是怎么回事
    發(fā)表于 12-02 07:56

    不是,電容ESR寄生電阻并不是越低越好!

    、電源硬件文章精選華為海思軟硬件開發(fā)資料 原文標(biāo)題:不是,電容ESR寄生電阻并不是越低越好
    的頭像 發(fā)表于 11-20 15:27 ?314次閱讀

    在FPGA接收ADC的DCLKP和DCLKM引腳,DCLK信號會出現(xiàn)規(guī)律性持續(xù)為0,在有DCLK信號時波形并不是恒定的,為什么?

    你好,我在FPGA接收ADC的DCLKP和DCLKM引腳(也即接收DCLK信號),用ILA抓出來的波形如下圖所示,可以發(fā)現(xiàn)DCLK信號會出現(xiàn)規(guī)律性持續(xù)為0,且在有DCLK信號的時候,他的波形并不是
    發(fā)表于 11-19 08:08

    ADS1299將CLKSEL拉為高電平,CONFIG1的CLK_EN位設(shè)置為1,示波器上顯示的頻率并不是2.048MHz,為什么?

    我將CLKSEL拉為高電平,CONFIG1的CLK_EN位設(shè)置為1,示波器上顯示的頻率并不是2.048MHz,這會是什么原因造成的呢?
    發(fā)表于 11-14 06:58

    工業(yè)相機的幀率是不是越高越好

    工業(yè)相機的幀率并不是越高越好,而是需要根據(jù)具體應(yīng)用場景來選擇。在選擇相機時,需要綜合考慮幀率、分辨率、成本、數(shù)據(jù)量處理等因素,以找到最適合自己應(yīng)用場景的相機。
    的頭像 發(fā)表于 10-28 11:02 ?284次閱讀
    工業(yè)相機的幀率是<b class='flag-5'>不是</b>越高越好

    KVM顯示器的使用方法

    KVM(Keyboard, Video, Mouse)是一種允許用戶通過單一的鍵盤、顯示器和鼠標(biāo)來控制多臺計算機的設(shè)備。KVM切換器可以節(jié)省空間、成本和復(fù)雜性,同時提高工作效率。 一、KVM切換器
    的頭像 發(fā)表于 10-17 09:40 ?704次閱讀

    kvm切換器鼠標(biāo)鍵盤怎么設(shè)置

    KVM切換器(Keyboard, Video, Mouse switch)是一種硬件設(shè)備,允許用戶通過一套鍵盤、鼠標(biāo)和顯示器來控制多臺計算機。這種設(shè)備對于需要管理多臺服務(wù)器或計算機的用戶來說非常
    的頭像 發(fā)表于 10-17 09:38 ?864次閱讀

    INA333輸出為一紋波電壓,并不是平滑的電壓,為什么?

    我最近在歐時購買了TI的INA333芯片,輸入的差分電壓為32MV,共模電壓為2.5V,VREF為2.5V,供電電壓為5V,增益設(shè)置為60,輸出為一紋波電壓,并不是平滑的電壓,不知道是為什么。
    發(fā)表于 08-13 07:57

    如何使用PSoC 5LP實現(xiàn)鎖定放大器?

    ,但并不是想象的直流信號。 在下面的圖片中,你可以看到我的電路原理圖、代碼和每個元件的配置。 希望得到幫助。
    發(fā)表于 07-03 07:17

    逆變器交流能耗少嗎,不是那么

    選擇合適的節(jié)能星形額定交流電。逆變器交流的缺點是什么?逆變器交流的缺點逆變器空調(diào)的成本通常比同等級的典型交流電高出近20-25%。因此,除非用戶不是很重或電費不是那么高,否則可能需要長達(dá)5-7年
    的頭像 發(fā)表于 05-07 09:28 ?544次閱讀
    逆變器交流能耗少嗎,<b class='flag-5'>不是</b><b class='flag-5'>那么</b>高

    STM32L496 DMA收集到數(shù)據(jù)一半產(chǎn)生中斷,但是仿真時發(fā)現(xiàn)并不是數(shù)據(jù)的一半,為什么?

    在使用定時器觸發(fā)ADC+DMA,做數(shù)據(jù)采集發(fā)現(xiàn),DMA收集到數(shù)據(jù)一半產(chǎn)生中斷,但是仿真時發(fā)現(xiàn)并不是數(shù)據(jù)的一半。
    發(fā)表于 04-12 06:46

    KVM矩陣技術(shù)的前沿應(yīng)用:實現(xiàn)多服務(wù)器環(huán)境的集中控制

    隨著信息技術(shù)的快速發(fā)展,數(shù)據(jù)中心的規(guī)模和復(fù)雜性也在不斷增加。在這樣的背景下,KVM矩陣技術(shù)以其高效、靈活的特點,成為了實現(xiàn)多服務(wù)器環(huán)境集中控制的前沿技術(shù)。本文將探討KVM矩陣技術(shù)在多服務(wù)器環(huán)境
    的頭像 發(fā)表于 02-18 14:53 ?450次閱讀

    KVM矩陣在遠(yuǎn)程辦公場景的應(yīng)用:實現(xiàn)靈活的服務(wù)器訪問與控制

    矩陣在遠(yuǎn)程辦公場景的應(yīng)用,以及如何實現(xiàn)靈活的服務(wù)器訪問與控制。 一、KVM矩陣在遠(yuǎn)程辦公的優(yōu)勢 KVM矩陣通過集中管理和控制多臺服務(wù)器,為遠(yuǎn)程辦公提供了極大的便利。它允許員工通過一
    的頭像 發(fā)表于 02-18 14:49 ?516次閱讀

    將TC397的QSPI模塊的CPOL設(shè)置為1,為什么示波器顯示時鐘引腳輸出信號的空閑狀態(tài)并不是高電平?

    將TC397的QSPI模塊的CPOL設(shè)置為1,但是示波器顯示時鐘引腳輸出信號的空閑狀態(tài)并不是高電平,請問是為什么?在debug狀態(tài)發(fā)現(xiàn)其CPOL寄存器確實是?1 ? ?
    發(fā)表于 02-01 08:34
    主站蜘蛛池模板: 久久视频在线视频观品15 | 睡觉被偷偷进入magnet| 蜜桃最新网址| 久久青青草原综合伊人| 好吊妞国产欧美日韩视频| 国产日韩欧美三级| 国产免费变态视频网址网站 | 欧美三级不卡在线观线看| 蜜桃狠狠色伊人亚洲综合网站| 久久亚洲成a人片| 噜噜噜狠狠夜夜躁精品| 麻豆XXXX乱女少妇精品| 美女的隐私蜜桃传媒免费看| 免费高清在线影片一区| 末班车动漫无删减免费| 免费三级播放器| 欧美色妞AV重囗味视频| 奇米色偷偷| 日韩av国产av欧美天堂社区| 日韩欧美1区| 无码人妻精品一区二区蜜桃色| 小小水蜜桃视频高清在线播放| 亚洲va在线va天堂XX xX| 亚洲三级视频在线观看| 与子敌伦刺激对白亂輪亂性| 综合伊人久久| 99热久久视频只有精品6国产| japansemature护士| 国产AV果冻传奇麻豆| 国产精品96久久久久久AV不卡| 国产日韩高清一区二区三区| 国家产午夜精品无人区| 久久99国产精品一区二区| 领导边摸边吃奶边做爽在线观看| 免费高清国产| 日韩精品专区在线影院重磅| 熟女人妻AV五十路六十路| 亚洲AV日韩AV欧美在线观看网| 亚洲中文无码永久免费| 999久久国产精品免费人妻| 成片免费观看视频大全|