成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

NFV關鍵技術:x86架構基礎(下篇)

開發 開發工具
標準服務器技術是網絡功能虛擬化(NFV)實現的一個關鍵因素,了解一些x86架構的基礎知識對大家后續了解電信云關鍵技術,尤其是掌握虛擬化技術原理和關鍵優化方案是必須具備的。本文接著上篇從x86架構的中斷和異常、IO架構等部分進行闡述講解。

Labs 導讀

標準服務器技術是網絡功能虛擬化(NFV)實現的一個關鍵因素,了解一些x86架構的基礎知識對大家后續了解電信云關鍵技術,尤其是掌握虛擬化技術原理和關鍵優化方案是必須具備的。本文接著上篇從x86架構的中斷和異常、IO架構等部分進行闡述講解。

[[418634]]

1、中斷與異常

程序的執行往往不只是按順序執行那么簡單,一些異常和中斷會打斷順序執行的程序流,轉而進入一條完全不同的執行路徑。中斷提供給外部設備一種“打斷CPU當前執行任務,并響應自身服務”的手段。中斷(interrupt)是異步的事件,典型的比如由I/O設備觸發;異常(exception)是同步的事件,典型的比如處理器執行某條指令時發現出錯了等等,其實異常的本質就是同步中斷。

中斷通常被定義為一個打斷CPU芯片指令執行的事件,該事件對應到CPU芯片內部或者外部的電路產生的電子信號。

中斷信號可以被劃分為同步中斷和異步中斷:

  • 同步中斷,該類型中斷由CPU的控制單元在執行指令的時候產生,并且是在當前指令執行完畢下一個指令執行之前產生。
  • 異步中斷,該類型中斷由其他硬件設備在任意的時間產生,并且遵循CPU的時鐘信號傳遞給CPU。

對于Intel的CPU而言,它將同步中斷稱作異常,而將異步中斷稱作中斷。

通常中斷(即異步中斷)由時鐘定時器或者其他I/O設備產生,如鍵盤接收到敲擊某個按鍵的信號后產生的中斷信號。而異常(即同步中斷)則通常由于編程錯誤或者由CPU檢測到異常條件需要內核進行處理而產生,如上面講到的Page Fault Exception(缺頁異常),異常可以由程序通過int或者sysenter指令主動產生。

對于Intel x86 CPU而言,它將中斷和異常進行了如下歸類:

中斷,即異步中斷,中斷信息隨著CPU的時鐘信號傳遞到CPU內部。中斷分為可屏蔽中斷和不可屏蔽中斷兩類。

  • 可屏蔽中斷,所有由I/O設備產生的IRQ請求都被歸為可屏蔽中斷。一個可屏蔽中斷可以有兩種狀態,屏蔽或者不屏蔽,當一個中斷被屏蔽時,該中斷信號將被對應的控制單元所忽略。
  • 不可屏蔽中斷,即控制單元無法忽略該類型的中斷信號,CPU肯定會接收到該類型的中斷,一般對應到一些緊要的事件,比如硬件錯誤。

異常,即同步中斷,中斷信號在CPU執行完某個指令后產生并接收到。處理器檢測到的異常,即當CPU執行指令的時候檢測到硬件上存在一些異常條件的時候就會產生該信號。這種類型的異常根據產生時在內核堆棧中保存的EIP寄存器的值(即異?;謴秃驝PU重新執行的位置)進行細分:

  • Faults,該異常可以被內核正確糾正,并且糾正后重新執行引起該異常的指令時不會造成程序的中斷或者功能的異常。這時候保存到EIP寄存器的值是引起異常的指令的地址,故異?;謴偷臅r候會重新執行該指令,如Page Fault Exception(缺頁異常),當訪問的內存地址沒有被映射到物理內存時,產生異常,內核分配新的物理內存頁并建立映射關系,然后異常處理完畢后,CPU重新訪問該地址,即可訪問到正確的物理內存。
  • Traps,該異常發生時,內核堆棧EIP寄存器保存的地址指向引起該異常的指令的下一條指令,即當該異常處理返回后會繼續程序的執行,而不是重新執行引起異常的指令。x86 CPU的硬件虛擬化功能就是利用陷入(Traps)再模擬的方法,當CPU執行虛擬機指令的時候,如果執行的是敏感指令,就會觸發Traps類型的異常,讓VMM(Virtual Machine Monitor)對該敏感指令進行模擬,然后繼續恢復虛擬機的運行。
  • Aborts,當發生嚴重的錯誤時,CPU已經無法保證內核堆棧中EIP寄存器存放的值是引起該異常的指令的地址。該異常用于匯報嚴重的錯誤,如硬件錯誤或者是內存的不一致性。該異常信號讓CPU切換到相應的abort exception handler,該處理函數由于無法確認錯誤,只能結束當前進程。

我們在寫程序時,經常會在容易產生錯誤的地方進行異常拋出,然后針對拋出的異常定義執行策略。這類編程產生的異常,由程序主動執行int或者int3之類的指令產生。CPU像處理Traps一樣處理這些程序主動產生的異常,該類異常通常被稱為軟件中斷(software interrupt)。這類異常主要有兩種用途:實現系統調用和通知某個debugger特定的事件發生。

這些異?;蛑袛嘤?~255的數字唯一標識,也就是經常說的中斷信號量。對于不可屏蔽中斷和異常來說,相應的中斷信號量是固定的,而可屏蔽中斷對應的中斷信號量則可以通過設置中斷控制器來更改。

2、x86系統的I/O架構

計算機所處理的任務其實只有兩種:CPU運算和I/O操作。這部分內容是后續學習計算虛擬化中I/O虛擬化的基礎。I/O(輸入/輸出)是CPU訪問外部設備的方法。設備通常通過寄存器和設備RAM將自身功能展現給CPU,CPU通過讀/寫這些寄存器和RAM完成對設備的訪問及其他操作。按訪問方式的不同,x86架構的I/O分為如下兩類:

2.1 端口I/O(后文簡稱為Port I/O)

即通過I/O端口訪問設備寄存器。x86有65536個8位的I/O端口,編號為0x0~0xFFFF。CPU將端口號作為設備端口的地址,進而對設備進行訪問。這65536個端口構成了64KB的I/O端口地址空間。I/O端口地址空間是獨立的,不是線性地址空間或物理地址空間的一部分。需要使用特定的操作命令IN/OUT對端口進行訪問,此時CPU通過一個特殊的芯片管腳標識這是一次I/O端口訪問,于是芯片組知道地址線上的地址是I/O端口號并相應地完成操作。此外,2個或4個連續的8位I/O端口可以組成16位或32位的I/O端口。

2.2 內存映射I/O(Memory Map I/O,后文簡稱為MMIO)

即通過內存訪問的形式訪問設備寄存器或設備RAM。MMIO要占用CPU的物理地址空間,它將設備寄存器或設備RAM映射到物理地址空間的某段地址,然后使用MOV等訪存指令訪問此段地址,即可訪問到映射的設備。MMIO方式訪問設備也需要進行線性地址到物理地址的轉換,但是這個轉換過程中的MMIO地址不可緩存到TLB中。MMIO是一種更普遍、更先進的I/O訪問方式,很多CPU 架構都沒有Port I/O,采用統一的MMIO方式。

3、DMA技術

直接內存訪問(Direct Memory Access,后文簡稱為DMA)是所有現代計算機的重要特色。DMA允許設備繞開CPU直接向內存中復制或讀取數據。如果設備向內存復制數據都經過CPU,則CPU會有大量中斷負載,中斷過程中,CPU對其他任務來講無法使用,不利于系統性能的提高。通過DMA,CPU只負責初始化這個傳輸動作,而傳輸動作本身由DMA 控制器(簡稱為DMAC)來實行和完成。在實現DMA傳輸時,由DMAC直接控制總線,在DMA傳輸前,CPU要把總線控制權交給DMAC,結束DMA傳輸后,DMAC立即把總線控制權交回給CPU。

一個完整的DMA 傳輸過程的基本流程如下:

  • DMA請求:CPU對DMAC進行初始化,并向I/O端口發出操作命令,I/O端口提出DMA請求。
  • DMA響應:DMAC對DMA請求進行優先級判別和屏蔽判別,然后向總線控制芯片提出總線請。CPU執行完當前總線周期后釋放總線控制權。此時,總線控制芯片發出總線應答,表示DMA請求已被響應,并通過DMAC通知I/O端口開始DMA傳輸。
  • DMA傳輸:DMAC獲得總線控制權后,CPU即可掛起或只執行內部操作,由DMAC發出讀/寫命令,直接控制RAM與I/O端口進行DMA傳輸。
  • DMA結束:當完成規定的成批數據傳送后,DMAC釋放總線控制權,并向I/O端口發出結束信號。當I/O端口接收到結束信號后,停止I/O設備的工作并向CPU提出中斷請求,使CPU執行一段檢查本次DMA傳輸操作正確性判斷的代碼,并從不介入的狀態退出。

由此可見,DMA無須CPU直接控制傳輸,也沒有中斷處理方式那樣保留現場和恢復現場的過程,通過硬件(DMAC)為RAM與I/O設備開辟了一條直接傳送數據的通路,極大地提高了CPU效率。需要注意的是,DMA操作訪問的必須是連續的物理內存。DMA 傳輸的過程如下圖所示。

 

DMA技術

 

4、進程、線程和協程

4.1 什么是進程和線程

進程是什么呢?大白話講,進程就是應用程序的啟動實例。比如我們運行一個游戲,打開一個軟件,就是開啟了一個進程。進程擁有代碼和打開的文件資源、數據資源、獨立的內存空間。

線程又是什么呢?線程從屬于進程,是程序的實際執行者。一個進程至少包含一個主線程,也可以有更多的子線程。線程擁有自己的??臻g。

 

進程示意圖

 

對操作系統來說,線程是最小的執行單元,進程是最小的資源管理單元。無論進程還是線程,都是由操作系統所管理的。線程一般具有五種狀態:初始化>>>可運行>>>運行中>>>阻塞>>>銷毀。線程不同狀態之間的轉化均需要CPU開銷來完成。

4.2 什么是協程

協程英文Coroutines,是一種比線程更加輕量級的存在。正如一個進程可以擁有多個線程一樣,一個線程也可以擁有多個協程。最重要的是,協程不是被操作系統內核所管理,而完全是由程序所控制(也就是在用戶態執行)。這樣帶來的好處就是性能得到了很大的提升,不會像線程切換那樣消耗資源。

 

協程示意圖

 

在Python語言中有個生成器的概念,里面有個關鍵字yield,當程序執行到yield關鍵字時,會暫停在那一行,等到主線程調用send方法發送了數據,協程才會接到數據繼續執行。但是,yield讓程序暫停,和線程的阻塞是有本質區別的。通過yield關鍵字的暫停完全由程序控制,線程的阻塞狀態是由操作系統內核來進行切換。大家可以在Python腳本中寫入如下代碼并執行體驗下:

  1. def consume(): 
  2.     while True
  3.           # consume等待接收數據 
  4.           number = yield 
  5.           print("我要執行啦。。。。開始計數:",number) 
  6.  
  7.  consumer = consume() 
  8.  
  9.  next(consumer)  
  10.  
  11. for num in range(0,100): 
  12.     print("開始執行:",num) 
  13.     consumer.send(num)  

協程Python代碼

NFV關鍵技術:X86架構基礎(上篇)

【本文為51CTO專欄作者“移動Labs”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

 

責任編輯:未麗燕 來源: 移動Labs
相關推薦

2021-08-20 11:12:31

NFVX86架構地址

2023-02-22 09:53:55

架構芯片

2021-05-17 14:57:22

NFV虛擬化數據

2010-03-09 09:57:00

VMware CEO英特爾x86架構

2009-12-07 10:13:00

2010-05-13 18:25:24

x86ex5system x

2009-04-08 16:52:42

Nehalem-EX發RISC架構

2011-09-14 13:19:14

AndroidX86架構英特爾

2009-06-29 10:01:56

Linux移動終端

2013-06-24 14:16:50

云計算

2020-03-31 09:22:05

軟件x86鯤鵬

2021-06-17 13:28:20

NFV虛擬化服務器

2022-04-12 14:11:27

存儲虛擬化軟件定義服務器

2023-04-03 09:16:47

CPUARM架構

2014-08-27 14:07:17

Unity引擎Intel x86

2009-04-08 20:49:09

nehalem英特爾

2016-12-12 15:43:30

IEx86架構電網

2012-12-04 10:23:37

ARM架構x86處理器市場

2012-05-09 10:00:04

Powerx86

2018-04-18 10:51:37

服務器市場兩極化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91视频网址| 成年人免费看 | 日韩精品一区二区三区 | 蜜桃视频成人 | 羞羞视频免费观 | 91精品国产91久久久久久最新 | 日韩在线视频免费观看 | 久久久成人网 | 久草精品视频 | 欧美性影院 | 午夜在线 | 欧美精品一二三 | 精品国产一区二区三区日日嗨 | 激情综合五月 | 久久a久久 | 夜夜爽99久久国产综合精品女不卡 | 日韩成人在线观看 | 福利精品 | 一级片av| a级片www| 久草视| 国产精品一区视频 | 欧美在线一区二区三区 | 久久久91 | 操久久| 中文字幕精品视频在线观看 | 久久在线 | 久久成人国产 | 一区二区三区国产精品 | 羞羞视频网站免费观看 | 精品精品视频 | 97成人免费 | 羞羞视频免费观 | 久久免费观看视频 | 国产精品久久久久久久久免费樱桃 | 日韩二区 | 暖暖成人免费视频 | www.五月婷婷.com | 国产高清免费 | 日本欧美在线观看视频 | 欧美日一区二区 |