當(dāng)前位置:首頁 > 公眾號(hào)精選 > IOT物聯(lián)網(wǎng)小鎮(zhèn)
[導(dǎo)讀]作?者:道哥,10年的嵌入式開發(fā)老兵。公眾號(hào):【IOT物聯(lián)網(wǎng)小鎮(zhèn)】,專注于:C/C、Linux操作系統(tǒng)、應(yīng)用程序設(shè)計(jì)、物聯(lián)網(wǎng)、單片機(jī)和嵌入式開發(fā)等領(lǐng)域。?公眾號(hào)回復(fù)【書籍】,獲取Linux、嵌入式領(lǐng)域經(jīng)典書籍。轉(zhuǎn)?載:歡迎轉(zhuǎn)載文章,轉(zhuǎn)載需注明出處。從16位進(jìn)入到32位8086的1...

作  者:道哥,10 年的嵌入式開發(fā)老兵。


公眾號(hào):【IOT物聯(lián)網(wǎng)小鎮(zhèn)】,專注于:C/C 、Linux操作系統(tǒng)、應(yīng)用程序設(shè)計(jì)、物聯(lián)網(wǎng)、單片機(jī)和嵌入式開發(fā)等領(lǐng)域。 公眾號(hào)回復(fù)【書籍】,獲取 Linux、嵌入式領(lǐng)域經(jīng)典書籍。


轉(zhuǎn)  載:歡迎轉(zhuǎn)載文章,轉(zhuǎn)載需注明出處。


  • 從 16 位進(jìn)入到 32 位


    • 8086 的 16 位模式


    • 80386 的 32 位模式


  • 從實(shí)模式進(jìn)入到保護(hù)模式


    • 如何進(jìn)入保護(hù)模式


    • GDT 全局描述符表


    • GDTR 全局描述符表寄存器


  • 段描述符的查找原理


在之前的7篇文章中,我們一直學(xué)習(xí)的是最原始的8086處理器中的最底層的基本原理,重點(diǎn)是內(nèi)存的尋址方式。


也就是:CPU是如何通過[段地址:偏移地址],來對(duì)內(nèi)存進(jìn)行尋址的。


不知道你是否發(fā)現(xiàn)了一個(gè)問題:


所有的程序都可以對(duì)內(nèi)存中的任意位置的數(shù)據(jù)進(jìn)行讀取和修改,即使這個(gè)位置并不屬于這個(gè)應(yīng)用程序。


這是非常危險(xiǎn)的,想一想那些心懷惡意的黑帽子黑客,如果他們想做一些壞事情,可以說是隨心所欲!


面對(duì)這樣的不安全行為,處理器一點(diǎn)辦法都沒有。


所以,Intel 從80286開始,就對(duì)增加了一個(gè)叫做保護(hù)模式的機(jī)制。


PS: 相應(yīng)的,之前 8086 中的處理器執(zhí)行模式就叫做“實(shí)模式”。


雖然80286沒有形成一定的氣候,但是它對(duì)后來的80386處理器提供了基礎(chǔ),讓386獲得了極大的成功。


這篇文章,我們就從80386處理器開始,聊一聊


保護(hù)模式究竟保護(hù)了誰?


底層是通過什么機(jī)制來實(shí)現(xiàn)保護(hù)模式的?


我們的學(xué)習(xí)目標(biāo),就是弄明白下面這張圖:


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】


從 16 位進(jìn)入到 32 位

8086 的 16 位模式

在8086處理器中,所有的寄存器都是16位的。


也正因?yàn)槿绱耍幚砥鳛榱四軌虻玫?0位的物理地址,需要把段寄存器的內(nèi)容左移4位之后,再加上偏移寄存器的內(nèi)容,才能得到一個(gè)20位的物理地址,最終訪問最大1MB的內(nèi)存空間。


例如:在訪問代碼段的時(shí)候,把 cs 寄存器左移 4 位,再加上 ip 寄存器,就得到 20 位的物理地址了;


20 位的地址,最大尋址范圍就是 2 的 20 次方 = 1 MB 的空間;


還記得我們第1篇文章Linux 從頭學(xué) 01:CPU 是如何執(zhí)行一條指令的?中的寄存器示意圖嗎?


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】以上這些寄存器都是16位的,在這種模式下,對(duì)內(nèi)存的訪問只能分段進(jìn)行。


而且每一個(gè)段的偏移地址,最大只能到64 KB的范圍(2的16次方)。


在訪問代碼段的時(shí)候,使用 cs:ip 寄存器;


在訪問數(shù)據(jù)段的時(shí)候,使用 ds 寄存器;


在訪問棧的時(shí)候,使用 ss:sp 寄存器;


80386 的 32 位模式

進(jìn)入到32位的處理器之后,這些寄存器就擴(kuò)展到32位了:


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】從寄存器的名稱上可以出,在最前面增加了字母E,表示Extend的意思。


這些32位的寄存器,低16位保持與16位處理器的兼容性,也就是可以使用16位的寄存器(例如:AX),也可以使用8位的寄存器(例如:AH,AL)。


注意:高 16 位不可以獨(dú)立使用。


下面這張圖是32位處理器的另外4個(gè)通用寄存器(注意它們是不能按照8位寄存器來使用的):


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】在32位的模式下,處理器中的地址線達(dá)到了32位,最大的內(nèi)存空間可尋址能力達(dá)到4 GB(2 的 32 次方)。


在 32 位處理器中,依然可以兼容 16 位的處理模式,此時(shí)依然使用 16 位的寄存器;


如果不兼容的話,就會(huì)失去很大的市場(chǎng)占有率;


是不是感覺到上面的寄存器示意圖中漏掉了什么東西?


是的,圖中沒有展示出段寄存器(cs, ds, ss等等)。


這是因?yàn)樵?2位模式下,段寄存器依然是16位的長(zhǎng)度,但是對(duì)其中內(nèi)容的解釋,發(fā)生了非常非常大的變化。


它們不再表示段的基地址,而是表示一個(gè)索引值以及其他信息。


通過這個(gè)索引值(或者叫索引號(hào)),到一個(gè)表中去查找該段的真正基地址(有點(diǎn)類似于中斷向量表的查找方式):


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】
有些書上把段寄存器稱之為:段選擇子;


也有一些書上把段寄存器中的值稱之索引值,稱之為選擇子;


不必糾結(jié)于稱呼,明白其中的道理就可以了;


正是因?yàn)樘幚砥饔?2根地址線,可尋址的范圍已經(jīng)非常大了(4 GB),因此理論上它是不需要像8086中那樣的尋址方式(段地址左移4位 偏移地址)。


但是由于x86處理器的基因,在32位模式下,依然要以段為單位來訪問內(nèi)存。


這里請(qǐng)大家不要繞暈了:剛才描述的段寄存器的內(nèi)容時(shí),僅僅是說明如何來找到一個(gè)段的基地址,也即是說:


  1. 對(duì)于 8086 來說,段寄存器中的內(nèi)容左移 4 位之后,就是段的基地址;


  2. 對(duì)于 80386 來說,段寄存器中的內(nèi)容是一個(gè)表的索引號(hào),通過這個(gè)索引號(hào),去查找表中相應(yīng)位置中的內(nèi)容,這個(gè)內(nèi)容中就有段的基地址(如何查找,下文有描述);


找到了這個(gè)段的基地址之后,在訪問內(nèi)存的時(shí)候,仍然是按照段機(jī)制 偏移量的方式。


由于在32位處理器中,存儲(chǔ)偏移地址的寄存器都是32位的,最大偏移地址可達(dá)4 GB,所以,我們可以把段的基地址設(shè)置為0x0000_0000:


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】這樣的分段方式,稱作“平坦模型”,也可以理解為沒有分段。


看到這里,是否聯(lián)想起之前的一篇文章中,我們?cè)?jīng)畫過一張 Linux 操作系統(tǒng)中的分段模型:


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】現(xiàn)在是不是大概就明白了:為什么這4個(gè)段的基地址和段的長(zhǎng)度,都是一樣的?


從實(shí)模式進(jìn)入到保護(hù)模式

如何進(jìn)入保護(hù)模式

CPU是如何判斷:當(dāng)前是執(zhí)行的是實(shí)模式?還是保護(hù)模式?


在處理器內(nèi)部,有一個(gè)寄存器CR0。這個(gè)寄存器的bit0位的值,就決定了當(dāng)前的工作模式:


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】
bit0 = 0: 實(shí)模式;
bit1 = 1: 保護(hù)模式;


在處理器上電之后,默認(rèn)狀態(tài)下是工作在實(shí)模式。


當(dāng)操作系統(tǒng)做好進(jìn)入保護(hù)模式的一切準(zhǔn)備工作之后,就把CR0寄存器的bit0位設(shè)置為1,此后CPU就開始工作在保護(hù)模式。


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】也就是說:在bit0設(shè)置為1之前,CPU都是按照實(shí)模式下的機(jī)制來進(jìn)行尋址(段地址左移4位 偏移地址);


當(dāng)bit0設(shè)置為1之后,CPU就按照保護(hù)模式下的機(jī)制來進(jìn)行尋址(通過段寄存器中的索引號(hào),到一個(gè)表中查找段的基地址,然后再加上偏移地址)。


GDT 全局描述符表

由于這張表中的每一個(gè)條目(Entry),描述的是一個(gè)段的基本信息,包括:基地址、段的長(zhǎng)度界限、安全級(jí)別等等,因此我們稱之為全局描述符表(Global Descriper Table, GDT)。


之所以稱之為全局的,是因?yàn)槊恳粋€(gè)應(yīng)用程序還可以把段描述符信息,放在自己的一個(gè)私有的局部描述符表中(Local Descriper Table,LDT),在以后的文章中一定會(huì)介紹到。


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】
處理器規(guī)定:第一個(gè)描述符必須為空,主要是為了規(guī)避一些程序錯(cuò)誤。


從上圖中可以看出:GDT中每一個(gè)條目的長(zhǎng)度是8個(gè)字節(jié),其中描述了一個(gè)段的具體信息,如下所示:


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】黃色部分:表示這個(gè)段在內(nèi)存中的基地址。


綠色部分:表示這個(gè)段的最大長(zhǎng)度是多少。


第一次看到這張圖時(shí),是不是心中有2個(gè)疑問:


  1. 為什么段的基地址不是用連續(xù)的 32 bit 位來表示?


  2. 段的界限怎么是 20 位的?20 位只能表示 1 MB 的范圍啊?


第一個(gè)問題的答案是:歷史原因(兼容性)。


第二問題的答案是:在每一個(gè)描述符中的標(biāo)志位G,對(duì)段的界限進(jìn)行了進(jìn)一步的粒度描述:


  1. 如果 G = 0: 表示段界限是以字節(jié)為單位,此時(shí),段界限的最大表示范圍就是 1 MB;


  2. 如果 G = 1:表示段界限是以 4 KB 為單位,此時(shí),段界限的最大表示范圍就是 4 GB( 1 MB 乘以 4KB);


為了完整性,我把所有標(biāo)志位的含義都匯總?cè)缦?,方便參考?


D/B (bit22):用來決定數(shù)據(jù)段or棧段使用的偏移寄存器是16位 還是32位。


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】L (bit21):在64位系統(tǒng)中才會(huì)使用,暫時(shí)先忽略。


AVL (bit20):處理器沒有使用這一位內(nèi)容,被操作系統(tǒng)可以利用這一位來做一些事情。


P (bit15):表示這個(gè)段的內(nèi)容,當(dāng)前是否已經(jīng)駐留在物理內(nèi)存中。


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】在Linux系統(tǒng)中,每一個(gè)應(yīng)用程序都擁有4 GB(32位處理器) 的虛擬內(nèi)存空間,而且一個(gè)系統(tǒng)中可以同時(shí)存在多個(gè)應(yīng)用程序。


這些應(yīng)用程序在虛擬內(nèi)存中的代碼段、數(shù)據(jù)段等等,最終都是要映射到物理內(nèi)存中的。


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】但是物理內(nèi)存的空間畢竟是有限的,當(dāng)物理內(nèi)存緊張的時(shí)候,操作系統(tǒng)就會(huì)把當(dāng)前不在執(zhí)行的那些段的內(nèi)容,臨時(shí)保存在硬盤上(此時(shí),這個(gè)段描述符的P位就設(shè)置為0),這稱之為換出。


當(dāng)這個(gè)被換出的段需要執(zhí)行時(shí),處理器發(fā)現(xiàn)P位為0,就知道段中的內(nèi)容不在物理內(nèi)存中,于是就在物理內(nèi)存中找出一塊空閑的空間,然后把硬盤中的內(nèi)容復(fù)制到物理內(nèi)存中,并且把P位設(shè)置為1,這稱之為換入。


DPL (bit14 ~ 13):指定段的特權(quán)級(jí)別,處理器一共支持4個(gè)特權(quán)級(jí)別:0,1,2,3(特權(quán)級(jí)別最低)。


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】比如:操作系統(tǒng)的代碼段的特權(quán)級(jí)別是0,而一個(gè)應(yīng)用程序在剛開始啟動(dòng)的時(shí)候,操作系統(tǒng)給它分配的特權(quán)級(jí)別是3,那么這個(gè)應(yīng)用程序就不能直接去轉(zhuǎn)移到操作系統(tǒng)的代碼段去執(zhí)行。


在 Linux 操作系統(tǒng)中,只利用了 0 和 3 這兩個(gè)特權(quán)級(jí)別。


S (bit12):決定這個(gè)段的類型。


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】TYPE (bit11 ~ 8):用來描述段的一些屬性,例如:可讀、可寫、擴(kuò)展方向、代碼段的執(zhí)行特性等等。


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】這里的依從屬性不太好理解,它主要用于決定:從一個(gè)特權(quán)級(jí)別的代碼,是否可以進(jìn)入另一個(gè)特權(quán)級(jí)別的代碼。


如果可以進(jìn)入,那么當(dāng)前任務(wù)的請(qǐng)求級(jí)別RPL是否發(fā)生改變(以后會(huì)討論這個(gè)問題)。


另外,操作系統(tǒng)可以把A標(biāo)志,加入到物理內(nèi)存的換出換入計(jì)算策略中。


這樣的話,就可以避免把最近頻繁訪問的物理內(nèi)存換出,達(dá)到更好的系統(tǒng)性能。


GDTR 全局描述符表寄存器

還有一個(gè)問題需要處理:GDT表本身也是數(shù)據(jù),也是需要存放在內(nèi)存中的。


那么: 它存放在內(nèi)存中的什么位置呢?CPU 又怎么能知道這個(gè)起始位置呢?


在處理器的內(nèi)部,有一個(gè)寄存器:GDTR (GDT Register),其中存儲(chǔ)了兩個(gè)信息:


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】我們可以從上一篇文章Linux從頭學(xué)07:【中斷】那么重要,它的本質(zhì)到底是什么?中,中斷向量表的安裝過程中進(jìn)行類比:


  1. 程序代碼把每一個(gè)中斷的處理程序地址,放在中斷向量表中的對(duì)應(yīng)位置;


  2. 中斷向量表的起始地址放在內(nèi)存的 0 地址處;


也就是說:處理器是到固定的地址0處,查找中斷向量表的,這是一個(gè)固定的地址。


而對(duì)于GDT表而言,它的起始地址不是固定的,而是可以放在內(nèi)存中的任意位置。


只要把這個(gè)位置存放到寄存器 GDTR 中,處理器在需要的時(shí)候就可以通過GDTR來定位到GDT的起始地址。


其實(shí),GDT 在上電剛開始的時(shí)候,也不能放在內(nèi)存中的任意位置。


因?yàn)樵谶M(jìn)入保護(hù)模式之前,處理器還是工作在實(shí)模式,只能尋址 1 MB 的內(nèi)存空間,因此,GDT 只能放在 1 MB 內(nèi)的地址空間中。


在進(jìn)入保護(hù)模式之后,能尋址更大的地址空間了,此時(shí)就可以重新把 GDT 放在更大的地址空間中了,然后把這個(gè)新的起始地址,存儲(chǔ)到 GDTR 寄存器中。


從GDTR寄存器中的內(nèi)容可以看出,它不僅存儲(chǔ)了GDT的起始地址,而且還限制了GDT的長(zhǎng)度。


這個(gè)長(zhǎng)度一共是16位,最大值是64 KB( 2 的 16 次方),而一個(gè)段描述符信息是8 B,那么64 KB的空間,最多一共可以存放8192個(gè)描述符。


這個(gè)數(shù)字,對(duì)于操作系統(tǒng)或者是一般的應(yīng)用程序來說,是綽綽有余了。


段描述符的查找原理

在上面的段寄存器示意圖中,我們只說明了段寄存器依然是16位的。


在保護(hù)模式下,對(duì)其中內(nèi)容的解釋,與實(shí)模式下是大不相同的。


我們以代碼段寄存器CS為例:


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】
RPL: 表示當(dāng)前正在執(zhí)行的這個(gè)代碼段的請(qǐng)求特權(quán)級(jí);


TI: 表示到哪一個(gè)表中去找這個(gè)段的描述信息:全局描述符表(GDT) or 局部描述符表(LDT)?


TI = 0 時(shí),到 GDT 中找段描述符;
TI = 1 時(shí),到 LDT 中找段描述符;


假設(shè)當(dāng)前代碼段寄存器cs的值為0x0008,處理器按照保護(hù)模式的機(jī)制來解釋其中的內(nèi)容:


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】
  1. TI = 0,表示到 GDT 中查找段描述符;


  2. RPL = 0,表示請(qǐng)求特權(quán)級(jí)別是 0;


  3. 描述符索引是 1,表示這個(gè)段描述符在 GDT 中的第 1 個(gè)條目中。由于每一個(gè)描述符占用 8 個(gè)字節(jié),因此這個(gè)描述符的開始地址位于 GDT 中的偏移地址為 8 的位置(1 * 8 = 8);


找到了這個(gè)段描述符條目之后,就可以從中獲取到這個(gè)代碼段的具體信息了:


  1. 代碼段的基地址在內(nèi)存中什么位置;


  2. 代碼段的最大長(zhǎng)度是多少(在獲取指令時(shí),如果偏移地址超過這個(gè)長(zhǎng)度,就引發(fā)異常);


  3. 代碼段的特權(quán)級(jí)別是多少,當(dāng)前是否駐留在物理內(nèi)存中等等;


另外,從上文描述的GDTR寄存內(nèi)容知道,它限制了GDT中最多一共可以存放8192個(gè)描述符。


Linux從頭學(xué)08:Linux 是如何保護(hù)內(nèi)核代碼的?【從實(shí)模式到保護(hù)模式】我們?cè)購(gòu)?span>代碼段寄存器中,描述符索引字段所占據(jù)的13個(gè) bit 位可以計(jì)算出,最多可以查找8192個(gè)段描述符。


2 的 13 次方 = 8192。


至此,處理器就在保護(hù)模式下,查找到了一個(gè)段的所有信息。


下面步驟就是:到這個(gè)段所在的內(nèi)存空間中,執(zhí)行其中的代碼,或者讀寫其中的數(shù)據(jù)。


下一篇文章我們繼續(xù)。。。



------ End ------
這篇文章主要描述了80386處理器中的保護(hù)模式下,段寄存器的使用,以及通過段描述符來查找段的具體信息。


從描述的內(nèi)容來看,已經(jīng)和我們的最終目標(biāo):Linux操作系統(tǒng)中的執(zhí)行方式,越來越接近了!


因?yàn)檫@些底層知識(shí),都是Linux操作系統(tǒng)賴以運(yùn)行的基礎(chǔ)。


理解了這些基礎(chǔ)內(nèi)容,后面在學(xué)習(xí)Linux的具體模塊時(shí),就可以回過頭來查一下它在處理器層面的底層支撐。


最后,如果這篇文章對(duì)您有一點(diǎn)幫助,請(qǐng)轉(zhuǎn)發(fā)給身邊的技術(shù)小伙伴,也是對(duì)我繼續(xù)輸出文章的最大鼓勵(lì)和動(dòng)力!感謝!


讓我們一起出發(fā),向著目標(biāo)繼續(xù)邁進(jìn)!


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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉