www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > Linux閱碼場
[導讀]作者簡介甄建勇,高級架構(gòu)師(某國際大廠),十年以上半導體從業(yè)經(jīng)驗。主要研究領(lǐng)域:CPU/GPU/NPU架構(gòu)與微架構(gòu)設(shè)計。感興趣領(lǐng)域:經(jīng)濟學、心理學、哲學。概?述愛因斯坦在他的相對論中告訴我們,沒有絕對的時間和空間,在一定條件下時間和空間是可以相互轉(zhuǎn)化的,是否我們的世界有一天能夠把...

作者簡介


甄建勇,高級架構(gòu)師(某國際大廠),十年以上半導體從業(yè)經(jīng)驗。主要研究領(lǐng)域:CPU/GPU/NPU架構(gòu)與微架構(gòu)設(shè)計。感興趣領(lǐng)域:經(jīng)濟學、心理學、哲學。

概  述



愛因斯坦在他的相對論中告訴我們,沒有絕對的時間和空間,在一定條件下時間和空間是可以相互轉(zhuǎn)化的,是否我們的世界有一天能夠把空間與時間轉(zhuǎn)化回到歷史的時期?

唐代詩仙李白也曾有云:“夫天地者,萬物之逆旅;光陰者,百代之過客”。是對空間和時間的另外一種表述。在人們一般的印象中,空間,不會隨著之間的變化而變大或變??;時間,也不會因為空間的變化而變慢或變快。時間和空間,看似毫不相關(guān)的兩個事物,卻又時時刻刻聯(lián)系在一起。其實在計算機領(lǐng)域的很多方面都可以體現(xiàn)時間和空間的關(guān)系,比如,芯片面積和處理速度的置換就是其中之一,此外還有CPU中的存儲器組織的設(shè)計時運用的時間局部性和空間局部性原理,也可以認為是時空互換的經(jīng)典應用。馮諾依曼結(jié)構(gòu)與他之前的結(jié)構(gòu)的最大不同就在于在計算機中引入了存儲部件,也正是這個存儲部件是計算機的設(shè)計進入了一個全新時代。也正是由于存儲部件在計算機體系結(jié)構(gòu)中的重要地位,無論是過去還是現(xiàn)在,無論是體系結(jié)構(gòu)設(shè)計中,還是在操作系統(tǒng)設(shè)計中,存儲組織的設(shè)計與管理一直是研究熱點。在前面介紹了CPU的數(shù)據(jù)通路和控制通路之后,本章,我們將介紹舉足輕重的存儲器組織。
TLB與cache簡介



對于computerarchitecture,除了流水線(pipelining)之外,存儲器層次組織(memoryhierarchy)是另外一個重要的部分。軟件方面,對linuxkernel的研究中,MMU是篇幅最多,也是最復雜的一部分。硬件方面,TLB和cache這兩個詞就比較常見了。這一小節(jié)就回憶一下這兩個概念吧。首先,為什么要有memeryhierarchy?(1)填補core和mainmemory之間的速度鴻溝。(2)填補SDRAM和mainmemory之間的cost鴻溝。(3)為了實現(xiàn)VirtualMemory其次,為什么實現(xiàn)Virtual Memory?歷史上,有兩個原因:其一,實現(xiàn)多個程序間高效的共享使用內(nèi)存,  其二,避免對小內(nèi)存系統(tǒng)編寫程序的難度?,F(xiàn)在主要是第一個原因。最后是memory hierarchy內(nèi)在原理,是局部性原理(principleof locality)這包括時間局部性(Temporallocality (locality in time))和空間局部性(Spatiallocality (locality in space))。 在介紹TLB 和 cache之前首先要明確幾點:(1)匯編完的程序里用到的內(nèi)存地址是虛擬地址。也就是說core執(zhí)行的load/stor指令中的內(nèi)存地址是虛擬地址。(2)對于多進程(線程)代碼,編譯時,操作系統(tǒng)會給每個進程分配不同的虛擬地址空間。(3)內(nèi)存是按頁(page)來管理和使用的,典型值是4K bytes。根據(jù)馮諾依曼體系結(jié)構(gòu),一切數(shù)據(jù)都來自內(nèi)存。所以就需要訪存(memoryaccess)。訪問內(nèi)存需要幾步?大體上需要兩步:(1)將虛擬地址轉(zhuǎn)換成物理地址。(2)讀/寫這個物理地址的內(nèi)容。詳細步驟:將虛擬地址轉(zhuǎn)換成物理地址,就需要虛擬地址到物理地址的一個映射表(具體映射方法有直接映射,組相聯(lián),全相聯(lián))。這個表,就是頁表(pagetable),頁表由很多項組成,每一項叫一個頁表項,由操作系統(tǒng)維護。創(chuàng)建進程的時候生成這個進程執(zhí)行過程中用到的所有的頁表項,其中一部分加載到內(nèi)存中,另外一部分放在硬盤上,即,交換區(qū)(swapspace)。由于訪存動作很多,所以虛擬地址到物理地址的轉(zhuǎn)換動作就很多,也就是訪問頁表的次數(shù)很多,所以根據(jù)局部性原理,就把一部分頁表項放到一個地方,這個地方就是TLB(translation-lookasidebuffer)。現(xiàn)在,物理地址知道了,那就可以讀/寫內(nèi)存對應的這個地址了。由于訪存操作很多,所以根據(jù)局部性原理,就把經(jīng)常訪問的地址的數(shù)據(jù)放到一個地方,這樣就不用每次都訪問內(nèi)存了,可以直接訪問這個地方。這個地方,就是cache。由于TLB里面只有一部分頁表項,所以有的就虛擬地址就在TLB里找不到對應的物理地址,這時,對于MIPS來說,會產(chǎn)生一個TLB miss的異常,然后由操作系統(tǒng)從內(nèi)存中找到對應的頁表項,然后將這個頁表項放到TLB里面(注意,更新算法),然后讓產(chǎn)生TLBmiss異常的那條指令重新執(zhí)行一遍,這時TLB里已經(jīng)有那一項了,也就能完成虛擬地址到物理地址的轉(zhuǎn)換了。如果,操作系統(tǒng)點兒背,內(nèi)存里也沒有對應的頁表項,那就只能從硬盤上的swapspace里找了(交換區(qū)里肯定有),然后把它放到TLB里,然后讓產(chǎn)生TLB miss異常的那條指令重新執(zhí)行一遍,這時TLB里已經(jīng)有那一項了,也就能完成虛擬地址到物理地址的轉(zhuǎn)換了。對于cache,有讀,寫之分。先說讀,如果cache里面有,直接把cache里面的數(shù)據(jù)返回,即,讀操作完成了。由于cache里面只有內(nèi)存數(shù)據(jù)的一部分,所以有的數(shù)據(jù)cache里面沒有,這時就只能產(chǎn)生讀內(nèi)存的地址信號,然后從數(shù)據(jù)線上取數(shù)據(jù)。然后更新cache(注意,更新算法)。再說寫,如果cache里面有,有兩種方式:通寫(write-through),寫返回(write-back)。由于cache里面只有內(nèi)存數(shù)據(jù)的一部分,所以有的數(shù)據(jù)cache里面沒有,這時就只能產(chǎn)生寫內(nèi)存的地址信號,然后把數(shù)據(jù)放到數(shù)據(jù)線上。然后更新cache。 數(shù)據(jù),可分為指令和普通數(shù)據(jù)。如果取指令和取普通數(shù)據(jù)各自使用一套memoryhierarchy,就有了ITLB,DTLB,icache,dcache。這就有點哈佛體系結(jié)構(gòu)的意思了。即core內(nèi)部采用哈佛體系結(jié)構(gòu),core外部采用馮-諾依曼體系結(jié)構(gòu)。下面是整體的流程。
圖1 TLB與cache的整體流程TLBMMU(memorymanagement unit),無論對于computerarchitecture designer還是OSdesigner,都是至關(guān)重要的部分,設(shè)計和使用的好壞,對性能影響比較大。MMU,是硬件和軟件配合最密切的部分之一,對于RISCCPU而言,更是這樣。前面,我們對or1200的整體memoryhierarchy做了簡單分析,了解了cache的映射方式,替換策略,寫策略,以及cache的優(yōu)化等等背景知識,并對or1200的具體實現(xiàn)做了分析。在現(xiàn)實中,cache往往和MMU緊密合作,完成CPU的訪存操作。本小節(jié)就來分析一下or1200的MMU模塊。研究一個東西,首先要了解其來龍去脈,MMU也不例外,我們在分析MMU的工作機制之前先介紹一下MMU的產(chǎn)生原因。當時,主要由兩方面的因素導致了MMU的產(chǎn)生:(1)從安全角度出發(fā),確保多進程程序在執(zhí)行時相互不影響。(2)從程序員的角度出發(fā),采用MMU可以讓程序員在編程時少受內(nèi)容容量的限制。現(xiàn)在而言,第一個原因占主要。在分析or1200的MMU實現(xiàn)之前,我們有必要先了解MMU的工作機制。為了更清晰的了解MMU的工作過程,我假設(shè)了一個具體的例子,通過這個例子來說明其詳細的工作步驟。比如,我們編寫了一個簡單的應用層程序: 代碼清單 1 一個簡單的應用層程序
1. /*demo process, base on OS*/ 2. int main() 3. { 4. int test; 5. test = 0x12345678; 6. } (1假設(shè)其進程名稱為demo。(2)假設(shè)片外SDRAM(內(nèi)存)大小為32MB。其中內(nèi)核空間16MB,用戶空間16MB。(3)假設(shè)OS的內(nèi)存管理方式是單級頁式管理(還可能是段式,或頁段式),虛擬地址和物理地址均為32-bit。既然ps是8KB,也就是說最多需要的PTE的數(shù)量是:pte_num=32MB/8KB=4K。假設(shè)每個PTE是4Bytes,那么存放這些PTE一共需要的內(nèi)存大小是:4Bytes X4K=16KB。(4)假設(shè)OS在執(zhí)行進程demo之前,給她分配的地址空間大小為6頁(page size= 8KB),也就是48K。這48KB是連續(xù)的,其起始物理地址第0x801頁,也就是{19'h801,13'h01}。所以其地址空間是0x801頁,0x802頁,0x803頁,0x804頁,0x805頁,0x806頁,共6頁。既然其進程空間是48KB,每頁是8K,也就是說OS需要給demo進程生成6個PTE(pagetable entry,頁表項)。(5)假設(shè)這6個PTE存放在kernel空間的第0x600個頁,即進程demo的PTE存放開始物理地址是0x600000,虛擬地址假設(shè)是0x12345000。 (6)假設(shè)這進程這6頁的地址空間的分配方式是:代碼段,1頁;bss段,1頁;棧,1頁;堆,1頁;數(shù)據(jù)段,2頁。 (7)假設(shè)進程demo中的變量test的地址在棧段,并且其頁內(nèi)偏移為0x1。(8)假設(shè)OS給進程demo中變量test分配的虛擬地址為0x2001,物理地址為:0x1006001。(9)假設(shè)TLB的cacheentry數(shù)量是64,映射方式是直接映射,也就是說通過VPN進行模運算就可以得到TLB的索引地址。有了上面的假設(shè),那么MMU是如何工作的呢?MMU的功能主要是虛實地址轉(zhuǎn)換,PTE的cache(也就是TLB)。其具體過程,如下圖所示:圖 2 MMU工作的具體過程 其工作過程如下:為了實現(xiàn)虛實地址轉(zhuǎn)換,OS為每頁創(chuàng)建了一個頁表項(PTE,pagetable entry,由PPN域和管理域組成),每個虛擬地址也分成了兩部分,分別是VPN和INDEX,通過VPN的低6位(因為TLBcache是64 entry)定位到TLB的偏移量。如果相應的偏移量處TLB hit,那么就可以直接得到對應的PTE,有了PTE,我們就可以得到PTE中的PPN,PPN和INDEX組合在一起,就是物理地址。如果相應的偏移量處TLB miss或者頁面異常,那么MMU產(chǎn)生一個TLB miss或者page fault異常,交給OS完成異常的處理(TLB的更新,和其它操作)。對于本演示例子來說,變量test的虛擬地址是0x2001,可見其TLB entry偏移量是0x2,頁內(nèi)偏移量是0x1;VPN是0x2。那么,MMU是如何將這個虛擬地址換換成物理地址的呢?首先,OS會根據(jù)進程demo的進程號(PID,OR也有CID(contextID)保存,DTLBWMR中的CID域),和DMMUCR(DMMU 控制寄存器)中的PTBP(pagetable base pointer),得到進程demo的頁表的存放的開始地址(0x600000),然后得到對應的PTE的地址(0x600008)根據(jù)TLB的偏移0x2,查看對應的TLB的第2個cacheline,如果匹配,則進一步和MR(machregister)中的VPN比較,如果也匹配,好,恭喜你,TLB hit,并將對應的PTE(pte_2)的PPN(0x803)和INDEX(13'b0_0000_0000_0001)組合成物理地址(0x1006001),傳給qmem模塊,sb模塊,biu模塊,經(jīng)dbus_arbiter,memorycontroller,最終實現(xiàn)讀寫SDRAM的對應地址。如果TLB miss(對應的pte_2),那么OS查看異常寄存器,得到具體的異常信息,并最終將pte_2更新到TLB中,重新執(zhí)行MMU操作,則TLB hit,完成轉(zhuǎn)換過程。上面的過程,如果用一幅圖來展示的話,如下所示:圖 3  虛實地址轉(zhuǎn)換 上面介紹的OS的頁表是單級的,這樣的話,在搜索對應的PTE時需要依次遍歷所有的PTE表項,顯然比較慢,為了加快搜索速度,linux采用了兩級PTE頁表。其基本思想是將所有的PTE進行分組,每一組由一個PTD(PT directory,我自己給起的名字),每個PTD項對應一組PT。這樣,在搜索時,先確定其所在的頁表目錄,然后只需要遍歷本目錄中的PTE就可以了。其操作過程和單級頁表相似,如下圖所示:圖4      兩級頁表的虛實地址轉(zhuǎn)換 上面通過一個例子,說明了MMU的工作機制,大體可概括如下:(1)根據(jù)進程ID寄存器(這個寄存器的值是OS在進行進程切換時填進去的)和VPN得到存放對應頁表項的PTE的地址,主要使用CID和PTBP得到頁表目錄或頁表的存放的開始地址。并根據(jù)VPN得到具體頁表項的地址,從而獲得對應的頁表項(PTE)。(2)從PTE中得到PPN(3)PPN與INDEX組合,得到物理地址(4)從上面的分析,可以看出,CPU對PTE的訪問是非常頻繁的,為了加快速度,將部分PTE放到cache里面,這個cache就是TLB。TLB 這個cache的映射方式一般采用directmapped,而不是fullyassociative,和setassociative。因為TLB一般都很小,前面章節(jié)我們提到如果cache很小的時候才用直接映射,延遲小,電路簡單。(5)上面描述的過程是一帆風順的情況,實際可不如此,如果出現(xiàn)TLBmiss,如何處理呢?硬件提供OS事先設(shè)置的當前進程的頁表存放的起始地址,頁表項的偏移地址,OS利用這些信息找到對應的PTE,并將PTE中的信息取出來分別存放到匹配寄存器和轉(zhuǎn)換寄存器的對應位置,完成TLB的更新。從中可以看出,整個處理過程,需要軟件硬件的巧妙的,天衣無縫的配合才行,那么具體是怎么處理的呢?我們通過查CPU的手冊可知,比如DTLB miss的異常入口地址是0x900,那么基于某個CPU的linux是如何實現(xiàn)的呢?參考head.S中相關(guān)代碼(soc-design\linux\arch\openrisc\kernel)。說到這里,你可能有一個疑問,“你一直說,如果出現(xiàn)TLB miss,OS計算出對應的PTE的地址,然后取出內(nèi)容,更新TLB”,既然TLB miss之后需要訪問內(nèi)存獲得對應的PTE,那么訪問這個PTE時,PTE的地址也不在TLB中怎么辦呢?!這個你不用擔心,原因就是所有的頁表項都存放在內(nèi)存的kseg0段,而這段內(nèi)存的訪問是是不用MMU的。kseg0段除了放這些PTE外,也是存放異常處理程序的地方,你想啊,如果產(chǎn)生了一個異常,假設(shè)這個異常的處理入口地址是0x900,這個0x900肯定是物理地址,是不需要MMU的,如果這個0x900也經(jīng)過MMU處理就亂套了,物理地址轉(zhuǎn)虛擬地址,虛擬地址轉(zhuǎn)物理地址,是一個相向的過程,系統(tǒng)要想正常運行,必須要有一個起源,而物理地址就是起源,虛擬地址只不過是為了達到某種效果而引進的一種手段而已。其實,對于一些內(nèi)存地址空間,是不能用MMU的,比如kernel使用的存放PTE的地方,還有就是異常/中斷處理程序的入口,這些是不能使用MMU的。原因是如下:如果PTE的存放地址也使用MMU的話,一但出現(xiàn)TLB miss,kernel需要訪問這些PTE,而這些PTE的地址也是經(jīng)過MMU的,就有可能再次產(chǎn)生TLB miss,這就出現(xiàn)了異常的嵌套,而且嵌套深度是無法確定的。如果存放異常向量的地址使用MMU,那么一旦出現(xiàn)一個異常之后,PC需要從這個地址取值,但是這個地址經(jīng)過MMU時,也可能出現(xiàn)TLB miss,也會有異常嵌套的問題。所以,我們平時所說的某個異常入口地址是0x200,這個‘0x200’是物理地址,是不需要虛實轉(zhuǎn)換的。MMU,cache確實有它的好處,其重要性也是有目共睹,但并不是適用于所有方面,上面所說的內(nèi)核空間的kseg0段是禁止MMU的,除此之外,kseg1段,MMU和cache都是禁止的。從這個角度來看,無論是什么事情,都要‘有所為有所不為’,不要跟風,不要認為是好東西就可以隨便用,要取其長,補己短,該出手時才出手。
代碼清單 2        DTLB miss異常入口
1. /* ---[ 0x900: DTLB miss exception ]------------------------------------- */2. .org 0x900 3. l.j boot_dtlb_miss_handler 4. l.nop 代碼清單 3          DTLB miss 異常處理
1. /* ---[ boot dtlb miss handler ]----------------------------------------- */2. 3. boot_dtlb_miss_handler: 4. 5. /* mask for DTLB_MR register: - (0) sets V (valid) bit, 6. *                            - (31-12) sets bits belonging to VPN (31-12) 7. */ 8. #define DTLB_MR_MASK 0xfffff001 9. 10./* mask for DTLB_TR register: - (2) sets CI (cache inhibit) bit, 11. *                - (4) sets A (access) bit, 12. *                            - (5) sets D (dirty) bit, 13. *                            - (8) sets SRE (superuser read) bit 14. *                            - (9) sets SWE (superuser write) bit 15. *                            - (31-12) sets bits belonging to VPN (31-12) 16. */ 17.#define DTLB_TR_MASK 0xfffff332 18. 19./* These are for masking out the VPN/PPN value from the MR/TR registers... 20. * it's not the same as the PFN */ 21.#define VPN_MASK 0xfffff000 22.#define PPN_MASK 0xfffff000 23. 24. 25. EXCEPTION_STORE_GPR6 26. 27.#if 0 28. l.mfspr r6,r0,SPR_ESR_BASE     // 29. l.andi  r6,r6,SPR_SR_SM            // are we in kernel mode ? 30. l.sfeqi r6,0                       // r6 == 0x1 --> SM 31. l.bf    exit_with_no_dtranslation  // 32. l.nop 33.#endif 34. 35. /* this could be optimized by moving storing of 36. * non r6 registers here, and jumping r6 restore 37. * if not in supervisor mode 38. */ 39. 40. EXCEPTION_STORE_GPR2 41. EXCEPTION_STORE_GPR3 42. EXCEPTION_STORE_GPR4 43. EXCEPTION_STORE_GPR5 44. 45. l.mfspr r4,r0,SPR_EEAR_BASE        // get the offending EA 46. 47.immediate_translation: 48. CLEAR_GPR(r6) 49. 50. l.srli  r3,r4,0xd                  // r3 <- r4 / 8192 (sets are relative to page size (8Kb) NOT VPN size (4Kb) 51. 52. l.mfspr r6, r0, SPR_DMMUCFGR 53. l.andi  r6, r6, SPR_DMMUCFGR_NTS 54. l.srli  r6, r6, SPR_DMMUCFGR_NTS_OFF 55. l.ori   r5, r0, 0x1 56. l.sll   r5, r5, r6  // r5 = number DMMU sets 57. l.addi  r6, r5, -1      // r6 = nsets mask 58. l.and   r2, r3, r6  // r2 <- r3 % NSETS_MASK 59. 60. l.or    r6,r6,r4                   // r6 <- r4 61. l.ori   r6,r6,~(VPN_MASK)          // r6 <- VPN :VPN .xfff - clear up lo(r6) to 0x**** *fff 62. l.movhi r5,hi(DTLB_MR_MASK)        // r5 <- ffff:0000.x000 63. l.ori   r5,r5,lo(DTLB_MR_MASK)     // r5 <- ffff:1111.x001 - apply DTLB_MR_MASK 64. l.and   r5,r5,r6                   // r5 <- VPN :VPN .x001 - we have DTLBMR entry 65. l.mtspr r2,r5,SPR_DTLBMR_BASE(0)   // set DTLBMR 66. 67. /* set up DTLB with no translation for EA <= 0xbfffffff */ 68. LOAD_SYMBOL_2_GPR(r6,0xbfffffff) 69. l.sfgeu  r6,r4                     // flag if r6 >= r4 (if 0xbfffffff >= EA) 70. l.bf     1f                        // goto out 71. l.and    r3,r4,r4                  // delay slot :: 24 <- r4 (if flag==1) 72. 73. tophys(r3,r4)                      // r3 <- PA 74.1: 75. l.ori   r3,r3,~(PPN_MASK)          // r3 <- PPN :PPN .xfff - clear up lo(r6) to 0x**** *fff 76. l.movhi r5,hi(DTLB_TR_MASK)        // r5 <- ffff:0000.x000 77. l.ori   r5,r5,lo(DTLB_TR_MASK)     // r5 <- ffff:1111.x330 - apply DTLB_MR_MASK 78. l.and   r5,r5,r3                   // r5 <- PPN :PPN .x330 - we have DTLBTR entry 79. l.mtspr r2,r5,SPR_DTLBTR_BASE(0)   // set DTLBTR 80. 81. EXCEPTION_LOAD_GPR6 82. EXCEPTION_LOAD_GPR5 83. EXCEPTION_LOAD_GPR4 84. EXCEPTION_LOAD_GPR3 85. EXCEPTION_LOAD_GPR2 86. 87. l.rfe                              // SR <- ESR, PC <- EPC 88. 89.exit_with_no_dtranslation: 90. /* EA out of memory or not in supervisor mode */ 91. EXCEPTION_LOAD_GPR6 92. EXCEPTION_LOAD_GPR4 93. l.j _di



本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

休斯頓2022年6月30日 /美通社/ -- 行業(yè)領(lǐng)先的集成數(shù)字解決方案提供商Lummus Digital宣布與Lotte Chemical USA Corpora...

關(guān)鍵字: MMU AC DIGITAL AN

關(guān)注、星標嵌入式客棧,干貨及時送達 [導讀] 本文從內(nèi)存管理的發(fā)展歷程角度層層遞進,介紹 MMU 的誕生背景,工作機制。而忽略了具體處理器的具體實現(xiàn)細節(jié),將 MMU 的工作原理從概念上比較清晰的梳理了一遍。 MMU 誕生...

關(guān)鍵字: MMU

一、S3C2440存儲控制器如果大家寫過S3C2440的ARM裸機程序都應該知道通常SDRAM的起始地址是0X30000000,但是大家有沒有想過為什么呢?下面我將給大家做一個簡要的介紹。查S3C

關(guān)鍵字: MMU S3C2440 存儲控制器 CPU

【導讀】騰博(R)今日公布了一項融合通信網(wǎng)關(guān) (Unified Communications Gateway) 技術(shù),并演示了與微軟 Office Communicator R2 之間的高清視頻互操作性,從而進一步鞏固了...

關(guān)鍵字: COM MMU OFFICE 微軟

Ammunition工作室負責的Beats耳機外觀設(shè)計工作,將在未來幾個月內(nèi)過渡到新東家蘋果公司接管。Ammunition的創(chuàng)始人,前蘋果首席設(shè)計師羅伯特·布倫納在博客中表示,他對蘋果與BeatsElectronics和...

關(guān)鍵字: 蘋果 BEATS MMU TI

4月22日晚間消息(岳明)物聯(lián)網(wǎng)、社交媒體、大數(shù)據(jù)分析、云服務(wù)、OTT和跨平臺播放被視為2014年最值得關(guān)注的一些重大趨勢,與之相應的是移動設(shè)備應用的蓬勃發(fā)展。數(shù)據(jù)顯示,亞太地區(qū)的移動設(shè)備應用流量將在2017年超越

關(guān)鍵字: ASIA COM MMU 新加坡

近年來,過渡金屬催化的C-H鍵官能化反應因其具有很好的原子經(jīng)濟性受到科學家的廣泛關(guān)注。與傳統(tǒng)的方法相比,這類反應具有底物不需要預活化、底物適應性廣泛、合成路線短、產(chǎn)生的廢棄物少等多種突出優(yōu)點,在有機合成特

關(guān)鍵字: 金屬 COM MMU AN

LED半導體照明網(wǎng)訊:在Gadget Show Live 2014上,一款名為Commuter X4 的可穿戴式背掛LED車尾燈和肩帶組合被評為英國發(fā)明家獎項(British Inventors Proj...

關(guān)鍵字: LED COM MMU TE

在Gadget Show Live 2014上,一款名為Commuter X4 的可穿戴式背掛LED車尾燈和肩帶組合被評為英國發(fā)明家獎項(British Inventors Project)的第二名。 對于喜歡在夜間騎...

關(guān)鍵字: LED COM MMU TE

金屬-有機框架化合物(MOFs)具有較高的比表面積、可控的孔道大小和可修飾的孔表面,在吸附、分離、催化、熒光和質(zhì)子傳輸?shù)阮I(lǐng)域展現(xiàn)出了廣泛應用前景。利用柔性的配體(形如氨基酸、多肽、蛋白質(zhì)等)與金屬離子自組裝

關(guān)鍵字: 金屬 COM MMU SoC

Linux閱碼場

174 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉