在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ARM架構和總線協議如何支持Linux原子操作?

Linux閱碼場 ? 來源:未知 ? 作者:易水寒 ? 2018-08-18 10:57 ? 次閱讀

這篇文章探討ARM架構和總線協議如何來支持的。對于某款ARM處理器和總線CCI,CCN和CMN產品的具體實現,屬于實現層面的微架構,一般需要NDA,這里不予討論。

順便提一下,在ARMv8 架構下對應的是LDXR (load exclusive register 和STXR (store exclusiveregister)及其變種指令,另外,在ARMv8.1架構中引入atomic instruction, 例如LDADD (Atomic add),CAS(Compare and Swap)等。

Exclusive monitor

首先,作為一個愛問為什么的工程師,一定會想到LDXR/ STXR和一般的LDR/STR有什么區別。這個區別就在于LDXR除了向memory發起load請求外,還會記錄該memory所在地址的狀態(一般ARM處理器在同一個cache line大小,也就是64 byte的地址范圍內共用一個狀態),那就是Open和Exclusive。

我們可以認為一個叫做exclusive monitor的模塊來記錄。根據CPU訪問內存地址的屬性(在頁表里面定義),這個組件可能在處理器 L1 memory system, 處理器cluster level, 或者總線,DDR controller上。

下面是Arm ARM架構 [1] 文檔定義的狀態轉換圖

實例說明:

1)CPU1發起了一個LDXR的讀操作,記錄當前的狀態為Exclusive

2)CPU2發起了一個LDXR的讀操作,當前的狀態為Exclusive,保持不變

3)CPU2發起了一個STXR的寫操作,狀態從Exclusive變成Open,同時數據回寫到DDR

4)CPU1發起了一個STXR的寫操作,因為當前的exclusive monitor狀態為Open,寫失敗(假如程序這時用STR操作來寫,寫會成功,但是這個不是原子操作函數的本意,屬于編程錯誤)

假如有多個CPU,同時對一個處于Exclusive的memory region來進行寫,CPU有內部邏輯來保證串行化。

Monitor的狀態除了STXR會清掉,從Exclusive變成Open之外,還有其他因素也可以導致monitor的狀態被清掉,所以軟件在實現spinlock的時候,一般會用一個loop循環來實現,所謂“spin”。

Exclusive monitor實現所處的位置

根據LDXR/STXR 訪問的memory的屬性,需要的monitor可以在CPU內部,總線,也可以DDR controller(例如ARM DMC-400 [2]在每個memory interface 支持8個 exclusive access monitors)。

一般Memory屬性配置為 normal cacheable, shareable,這種情形下,CPU發起的exclusive access會終結在CPU cluster內部,對外的表現,比如cacheline fill和line eviction和正常的讀寫操作產生的外部行為是一樣的。具體實現上,需要結合local monitor的狀態管理和cache coherency 的處理邏輯,比如MESI/MOESI的cacheline的狀態管理來。

為方便大家理解,下面劃出一個monitor在一個假象SOC里面的邏輯圖(在一個真實芯片里面,不是所有monitor都會實現,需要和SOC vendor確認)

External exclusive monitor

對于normal non-cacheable,或者Device類型的memory屬性的memory地址,cpu會發出exclusive access的AXI 訪問(AxLOCK signals )到總線上去,總線需要有對應的External exclusive monitor支持,否則會返回錯誤。例如, 假如某個SOC不支持外部global exclusivemonitor,軟件把MMU disabled的情況下,啟動SMP Linux,系統是沒法啟動起來的,在spinlock處會掛掉。

AMBA AXI/ACE 規范

The exclusive access mechanism can provide semaphore-type operations without requiring the bus to remain dedicated to a particular master for the duration of the operation. This means the semaphore-type operations do not impact either the bus access latency or the maximum achievable bandwidth.

The AxLOCK signals select exclusive access, and the RRESP and BRESP signals indicate the success or failure of the exclusive access read or write respectively.

The slave requires additional logic to support exclusive access. The AXI protocol provides a mechanism to indicate when a master attempts an exclusive access to a slave that does not support it.

Atomic指令的支持

處理器,支持cache coherency協議的總線,或者DDR controller可以增加了一些簡單的運算,比如,在讀寫指令產生的memory訪問的過程中一并把簡單的運算給做了。

AMBA 5 [3] 里面增加了對Atomic transactions的支持:

AMBA 5 introduces Atomic transactions, which perform more than just a single access, and have some form of operation that is associated with the transaction.

Atomic transactions are suited to situations where the data is located a significant distance from the agent that must perform the operation. Previously, performing an operation that is atomically required pulling the data towards the agent, performing the operation, and then pushing the result back.

Atomic transactions enable sending the operation to the data, permitting the operation to be performed closer to where the data is located.

The key advantage of this approach is that it reduces the amount of time during which the data must be made inaccessible to other agents in the system.

支持4種Atomic transaction:AtomicStore ,AtomicLoad,AtomicSwap 和AtomicCompare

QA

1) Local monitor和Global monitor的使用場景

* Local monitor適用于訪問的memory屬為normal cacheable, shareable或者non-shareable的情況.

* Global monitor ,準確來說,external global exclusive monitor (處理器之外,在外部總線上)用于normal noncacheable或者device memory類型。比如可以用于一個Cortex-A處理器和一個Cortex-M 處理器(沒有內部cache)之間的同步。

2)多CPU下,多個LDREX,和STREX的排他性實現

* 各個處理器和總線的實現不同,可以從軟件上理解為和data coherency實現相結合,比如M(O)ESI協議[5],這是一種Invalidate-basedcache coherence protocol, 其中的key point就是當多個CPU在讀同一個cacheline的時候,在每個CPU的內部cache里面都有cacheline allocation, cacheline的狀態會變成Shared;但是當某個CPU做寫的時候,會把其它CPU里面的cacheline數據給invalidate掉,然后寫自己的cacheline數據,同時設置為Modified狀態,從而保證了數據的一致性。

* LDREX,本質上是一個LDR,CPU1做cache linefill,然后設置該line為E狀態(Exclusive),額外的一個作用是設置exclusive monitor的狀態為Exclusive;其他cpu做LDREX,該line也會分配到它的內部cache里面,狀態都設置為Shared ,也會設置本CPU的monitor的狀態。當一個CPU 做STREX時候,這個Write操作會把其它CPU里面的cacheline數據給invalidate掉。同時也把monitor的狀態清掉,從Exclusive變成Open的狀態,這個MESI協議導致cachline的狀態在多CPU的變化,是執行Write操作一次性改變的。這樣在保證數據一致性的同時,也保證了montitor的狀態更新同步改變。

3)比如舉一個多核的場景,一個核ldrex了,如果本核的local monitor會發生什么,外部的global monitor發生什么,開不開mmu,cache不cache,區別和影響是什么。

Ldrex/strex本來就是針對多核的場景來設計的,local monitor的狀態發生改變,不會影響外部的global monitor狀態。但是external global monitor的狀態發生改變,可以告訴處理器,把local monitor的狀態清掉。

Data coherency是通過硬件來支持的。對于normal cacheable類型的memory, MMU和DCache必須使能,否則CPU會把exclusive類型的數據請求發出處理器,這時需要外部monitor的支持。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9321

    瀏覽量

    375376
  • Linux
    +關注

    關注

    87

    文章

    11469

    瀏覽量

    212895
  • 總線
    +關注

    關注

    10

    文章

    2953

    瀏覽量

    89404

原文標題:羅玉平: 關于ARM Linux原子操作的底層支持

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    X86和ARM中的指令集支持原子操作

    裸機開發與RTOS開發一個非常重要的區別在于多線程之間的消息傳遞和數據共享問題,然而在這中間變量的原子操作是一個非常重要的話題,不同的處理器架構和編譯選項都可能生成不同的指令,從而影響到變量的
    發表于 07-06 16:10 ?2290次閱讀
    X86和<b class='flag-5'>ARM</b>中的指令集<b class='flag-5'>支持</b><b class='flag-5'>原子</b><b class='flag-5'>操作</b>

    工程師深談ARM+FPGA的設計架構

    控制器等,在ARM端直接對相關的SPI通信控制器操作就可以了。而FPGA這一端可作為SPI從,按照SPI協議的時序寫好從設備接口,這個工作量沒有多大,所以相對都比較容易。[/url]另一種是數據量
    發表于 01-12 19:00

    ARM架構是什么

    從單片機轉到ARM,主要需要學習ARM架構,ARM相比單片機多了一些外設和總線。在僅僅是裸奔的情況下,如果熟悉了
    發表于 07-01 09:23

    ARM架構簡單介紹

    ARM架構簡單介紹市場上成百上千種的 ARM 芯片,如果我們去看它們的內核,卻只有不多的幾種。從時間上來看,從1985年設計的 26 位地址總線的 ARMv1, 到 ARMv2, 一直
    發表于 12-06 07:29

    SOC芯片之互聯總線協議相關資料分享

    1、對APB總線的理解之前,說了片上互聯總線,但是光有總線可是不行的,還需要片上總線協議支持才行
    發表于 07-18 16:26

    設備仿真模擬軟件 QEMU 8.0 發布:改進對 ARM / RISC-V 架構支持

    和 HPPA 平臺帶來各種新功能和改進。 QEMU (Quick Emulator)是業界主流的設備仿真模擬軟件之一,可以在一種架構(如 X86 PC)的物理機上運行支持其它架構操作
    發表于 05-05 09:48

    基于嵌入式系統異構總線原子協議錐匹配

    針對異構總線嵌入系統難以進行部件移植和接口互換問題,提出基于嵌入系統異構總線原子協議錐匹配方法,分析接口協議
    發表于 04-20 08:50 ?15次下載

    Linux環境下實現ARM9的CAN總線通信

    Linux環境下實現ARM9的CAN總線通信 1.  引言CAN(Controller Area Network)總線最早是由德國BOSCH公司提出,實現汽車環境中的微控制
    發表于 11-02 15:06 ?1054次閱讀
    <b class='flag-5'>Linux</b>環境下實現<b class='flag-5'>ARM</b>9的CAN<b class='flag-5'>總線</b>通信

    手機支持Linux操作系統

    手機支持Linux操作系統   Linux系統:Linux系統是一個源代碼開放的
    發表于 01-28 17:07 ?1898次閱讀

    ARM+Linux設計的CAN總線和MiniGUI的虛擬儀表

    ARM+Linux設計的CAN總線和MiniGUI的虛擬儀表技術 摘  要: 基于ARM+Linux架構,通過CAN總線獲得數
    發表于 05-06 17:24 ?1916次閱讀

    ARM架構應用實例_操作系統

    ARM嵌入式應用程序架構設計實例精講--ARM架構應用實例03操作系統
    發表于 07-08 11:08 ?0次下載

    淺談鴻蒙內核源碼的原子操作

    ARMv6架構引入了LDREX和STREX指令,以支持對共享存儲器更縝密的非阻塞同步。由此實現的原子操作能確保對同一數據的“讀取-修改-寫入”操作
    的頭像 發表于 04-25 16:05 ?1450次閱讀
    淺談鴻蒙內核源碼的<b class='flag-5'>原子</b><b class='flag-5'>操作</b>

    使用Linux原子操作實現互斥點燈

    Linux原子操作是指不能再進一步分割的操作,一般原子操作用于變量或者位
    的頭像 發表于 04-13 15:07 ?1119次閱讀
    使用<b class='flag-5'>Linux</b><b class='flag-5'>原子</b><b class='flag-5'>操作</b>實現互斥點燈

    Emulex HBA CLI ARM架構上的Linux發行說明

    電子發燒友網站提供《Emulex HBA CLI ARM架構上的Linux發行說明.pdf》資料免費下載
    發表于 08-10 16:28 ?0次下載
    Emulex HBA CLI <b class='flag-5'>ARM</b><b class='flag-5'>架構</b>上的<b class='flag-5'>Linux</b>發行說明

    arm架構和x86架構區別 linux是x86還是arm

    ARM架構和x86架構是兩種不同的計算機處理器架構,它們在體系結構、指令集、應用領域等方面有著明顯的區別。Linux
    的頭像 發表于 01-30 13:46 ?2.2w次閱讀
    主站蜘蛛池模板: 国产又大又黄又粗又爽 | 久久99久久精品国产只有 | 1024手机免费看片 | 天堂va欧美ⅴa亚洲va一国产 | 伊人久久大香线蕉观看 | 亚洲精品中文字幕乱码三区一二 | 奇米影视婷婷 | 日本黄色小视频网站 | 国产3p在线播放 | 欧美大黄 | 夜夜操狠狠操 | 91黄视频在线观看 | 高清欧美一级在线观看 | 欧美成人自拍视频 | 男人和女人做a免费视频 | 天天综合色一区二区三区 | 年轻护士3的滋味 | 精品美女在线观看 | 成人亚洲网站 | 久久婷婷色一区二区三区 | jk黑色丝袜美腿老师啪啪 | 亚洲欧美综合一区二区三区四区 | 日韩av线观看 | 激情午夜婷婷 | 一级a毛片免费观看 | 特级黄视频 | 国产精品免费一级在线观看 | 大学生一级特黄的免费大片视频 | 成人永久免费视频网站在线观看 | 手机看片免费永久在线观看 | 在线小毛片 | 爱草视频 | 天天综合天天综合色在线 | 午夜三级成人三级 | 曰本福利写真片视频在线 | 国产资源站 | 国产一二三区精品 | 欧美日一区 | 抽搐一进一出gif免费男男 | 欧美专区欧美吧 | 波多野结衣在线观看一区二区 |