操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    單介紹一下編程方式的歷史演變。

    -- Erik O'shaughnessy(作者)

    在計(jì)算機(jī)誕生不久的早期年代,硬件非常昂貴,而程序員比較廉價(jià)。這些廉價(jià)程序員甚至都沒(méi)有“程序員”這個(gè)頭銜,并且常常是由數(shù)學(xué)家或者電氣工程師來(lái)充當(dāng)這個(gè)角色的。早期的計(jì)算機(jī)被用來(lái)快速解決復(fù)雜的數(shù)學(xué)問(wèn)題,所以數(shù)學(xué)家天然就適合“編程”工作。

    什么是程序?

    首先來(lái)看一點(diǎn)背景知識(shí)。計(jì)算機(jī)自己是做不了任何事情的,它們的任何行為都需要程序來(lái)引導(dǎo)。你可以把程序看成是非常精確的菜譜,這種菜譜讀取一個(gè)輸入,然后生成對(duì)應(yīng)的輸出。菜譜里的各個(gè)步驟由操作數(shù)據(jù)的指令構(gòu)成。聽上去有點(diǎn)兒復(fù)雜,不過(guò)你或許知道下面這個(gè)語(yǔ)句是什么意思:

    1 + 2=3
    

    其中的加號(hào)是“指令”,而數(shù)字 1 和 2 是數(shù)據(jù)。數(shù)學(xué)上的等號(hào)意味著等式兩邊的部分是“等價(jià)”的,不過(guò)在大部分編程語(yǔ)言中對(duì)變量使用等號(hào)是“賦值”的意思。如果計(jì)算機(jī)執(zhí)行上面這個(gè)語(yǔ)句,它會(huì)把這個(gè)加法的結(jié)果(也就是“3”)儲(chǔ)存在內(nèi)存中的某個(gè)地方。

    計(jì)算機(jī)知道如何使用數(shù)字進(jìn)行數(shù)學(xué)運(yùn)算,以及如何在內(nèi)存結(jié)構(gòu)中移動(dòng)數(shù)據(jù)。在這里就不對(duì)內(nèi)存進(jìn)行展開了,你只需要知道內(nèi)存一般分為兩大類:“速度快/空間小”和“速度慢/空間大”。CPU 寄存器的讀寫速度非常快,但是空間非常小,相當(dāng)于一個(gè)速記便簽。主存儲(chǔ)器通常有很大的空間,但是讀寫速度就比寄存器差遠(yuǎn)了。在程序運(yùn)行的時(shí)候,CPU 不斷將它所需要用到的數(shù)據(jù)從主存儲(chǔ)器挪動(dòng)到寄存器,然后再把結(jié)果放回到主存儲(chǔ)器。

    匯編器

    當(dāng)時(shí)的計(jì)算機(jī)很貴,而人力比較便宜。程序員需要耗費(fèi)很多時(shí)間把手寫的數(shù)學(xué)表達(dá)式翻譯成計(jì)算機(jī)可以執(zhí)行的指令。最初的計(jì)算機(jī)只有非常糟糕的用戶界面,有些甚至只有前面板上的撥動(dòng)開關(guān)。這些開關(guān)就代表一個(gè)內(nèi)存“單元”里的一個(gè)個(gè) “0” 和 “1”。程序員需要配置一個(gè)內(nèi)存單元,選擇好儲(chǔ)存位置,然后把這個(gè)單元提交到內(nèi)存里。這是一個(gè)既耗時(shí)又容易出錯(cuò)的過(guò)程。


    程序員 Betty Jean Jennings (左) 和 Fran Bilas (右) 在操作


    后來(lái)有一名 電氣工程師 認(rèn)為自己的時(shí)間很寶貴,就寫了一個(gè)程序,能夠把人們可以讀懂的“菜譜”一樣的輸入轉(zhuǎn)換成計(jì)算機(jī)可以讀懂的版本。這就是最初的“匯編器”,在當(dāng)時(shí)引起了不小的爭(zhēng)議。這些昂貴機(jī)器的主人不希望把計(jì)算資源浪費(fèi)在人們已經(jīng)能做的任務(wù)上(雖然又慢又容易出錯(cuò))。不過(guò)隨著時(shí)間的推移,人們逐漸發(fā)現(xiàn)使用匯編器在速度和準(zhǔn)確性上都勝于人工編寫機(jī)器語(yǔ)言,并且計(jì)算機(jī)完成的“實(shí)際工作量”增加了。

    盡管匯編器相比在機(jī)器面板上切換比特的狀態(tài)已經(jīng)是很大的進(jìn)步了,這種編程方式仍然非常專業(yè)。上面加法的例子在匯編語(yǔ)言中看起來(lái)差不多是這樣的:

    01 MOV R0, 1
    02 MOV R1, 2
    03 ADD R0, R1, R2
    04 MOV 64, R0
    05 STO R2, R0
    

    每一行都是一個(gè)計(jì)算機(jī)指令,前面是一個(gè)指令的簡(jiǎn)寫,后面是指令所操作的數(shù)據(jù)。這個(gè)小小的程序首先會(huì)將數(shù)值 1 “移動(dòng)”到寄存器 R0,然后把 2 移動(dòng)到寄存器 R1。03 行把 R0 和 R1 兩個(gè)寄存器里的數(shù)值相加,然后將結(jié)果儲(chǔ)存在 R2 寄存器里。最后,04 行和 05 行決定結(jié)果應(yīng)該被放在主存儲(chǔ)器里的什么位置(在這里是地址 64)。管理內(nèi)存中存儲(chǔ)數(shù)據(jù)的位置是編程過(guò)程中最耗時(shí)也最容易出錯(cuò)的部分之一。

    編譯器

    匯編器已經(jīng)比手寫計(jì)算機(jī)指令要好太多了,不過(guò)早期的程序員還是渴望能夠按照他們所習(xí)慣的方式,像書寫數(shù)學(xué)公式一樣地去寫程序。這種需求推動(dòng)了高級(jí)編譯語(yǔ)言的發(fā)展,其中有一些已經(jīng)成為歷史,另一些如今還在使用。比如 ALGO 就已經(jīng)成為歷史了,但是像 Fortran 和 C 這樣的語(yǔ)言仍然在不斷解決實(shí)際問(wèn)題。


    ALGO 和 Fortran 編程語(yǔ)言的譜系樹


    這些“高級(jí)”語(yǔ)言使得程序員可以用更簡(jiǎn)單的方式編寫程序。在 C 語(yǔ)言中,我們的加法程序就變成了這樣:

    int x;
    x=1 + 2;
    

    第一個(gè)語(yǔ)句描述了該程序?qū)⒁褂玫囊粔K內(nèi)存。在這個(gè)例子中,這塊內(nèi)存應(yīng)該占一個(gè)整數(shù)的大小,名字是 x。第二個(gè)語(yǔ)句是加法,雖然是倒著寫的。一個(gè) C 語(yǔ)言的程序員會(huì)說(shuō)這是 “X 被賦值為 1 加 2 的結(jié)果”。需要注意的是,程序員并不需要決定在內(nèi)存的什么位置儲(chǔ)存 x,這個(gè)任務(wù)交給編譯器了。

    這種被稱為“編譯器”的新程序可以把用高級(jí)語(yǔ)言寫的程序轉(zhuǎn)換成匯編語(yǔ)言,再使用匯編器把匯編語(yǔ)言轉(zhuǎn)換成機(jī)器可讀的程序。這種程序組合常常被稱為“工具鏈”,因?yàn)橐粋€(gè)程序的輸出就直接成為另一個(gè)程序的輸入。

    編譯語(yǔ)言相比匯編語(yǔ)言的優(yōu)勢(shì)體現(xiàn)在從一臺(tái)計(jì)算機(jī)遷移到不同型號(hào)或者品牌的另一臺(tái)計(jì)算機(jī)上的時(shí)候。在計(jì)算機(jī)的早期歲月里,包括 IBM、DEC、德州儀器、UNIVAC 以及惠普在內(nèi)的很多公司都在制造除了大量不同類型的計(jì)算機(jī)硬件。這些計(jì)算機(jī)除了都需要連接電源之外就沒(méi)有太多共同點(diǎn)了。它們?cè)趦?nèi)存和 CPU 架構(gòu)上的差異相當(dāng)大,當(dāng)時(shí)經(jīng)常需要人們花費(fèi)數(shù)年來(lái)將一臺(tái)計(jì)算機(jī)的程序翻譯成另一臺(tái)計(jì)算機(jī)的程序。

    有了高級(jí)語(yǔ)言,我們只需要把編譯器工具鏈遷移到新的平臺(tái)就行了。只要有可用的編譯器,高級(jí)語(yǔ)言寫的程序最多只需要經(jīng)過(guò)小幅修改就可以在新的計(jì)算機(jī)上被重新編譯。高級(jí)語(yǔ)言的編譯是一個(gè)真正的革命性成果。


    1983 發(fā)布的 IBM PC XT 是硬件價(jià)格下降的早期例子。


    程序員們的生活得到了很好的改善。相比之下,通過(guò)高級(jí)語(yǔ)言表達(dá)他們想要解決的問(wèn)題讓事情變得輕松很多。由于半導(dǎo)體技術(shù)的進(jìn)步以及集成芯片的發(fā)明,計(jì)算機(jī)硬件的價(jià)格急劇下降。計(jì)算機(jī)的速度越來(lái)越快,能力也越來(lái)越強(qiáng),并且還便宜了很多。從某個(gè)時(shí)間點(diǎn)往后(也許是 80 年代末期吧),事情發(fā)生了反轉(zhuǎn),程序員變得比他們所使用的硬件更值錢了。

    解釋器

    隨著時(shí)間的推移,一種新的編程方式興起了。一種被稱為“解釋器”的特殊程序可以直接讀取一個(gè)程序?qū)⑵滢D(zhuǎn)換成計(jì)算機(jī)指令以立即執(zhí)行。和編譯器差不多,解釋器讀取程序并將它轉(zhuǎn)換成一個(gè)中間形態(tài)。但和編譯器不同的是,解釋器直接執(zhí)行程序的這個(gè)中間形態(tài)。解釋型語(yǔ)言在每一次執(zhí)行的時(shí)候都要經(jīng)歷這個(gè)過(guò)程;而編譯程序只需要編譯一次,之后計(jì)算機(jī)每次只需要執(zhí)行編譯好的機(jī)器指令就可以了。

    順便說(shuō)一句,這個(gè)特性就是導(dǎo)致人們感覺(jué)解釋型程序運(yùn)行得比較慢的原因。不過(guò)現(xiàn)代計(jì)算機(jī)的性能出奇地強(qiáng)大,以至于大多數(shù)人無(wú)法區(qū)分編譯型程序和解釋型程序。

    解釋型程序(有時(shí)也被成為“腳本”)甚至更容易被移植到不同的硬件平臺(tái)上。因?yàn)槟_本并不包含任何機(jī)器特有的指令,同一個(gè)版本的程序可以不經(jīng)過(guò)任何修改就直接在很多不同的計(jì)算機(jī)上運(yùn)行。不過(guò)當(dāng)然了,解釋器必須得先移植到新的機(jī)器上才行。

    一個(gè)很流行的解釋型語(yǔ)言是 perl 。用 perl 完整地表達(dá)我們的加法問(wèn)題會(huì)是這樣的:

    $x=1 + 2
    

    雖然這個(gè)程序看起來(lái)和 C 語(yǔ)言的版本差不多,運(yùn)行上也沒(méi)有太大區(qū)別,但卻缺少了初始化變量的語(yǔ)句。其實(shí)還有一些其它的區(qū)別(超出這篇文章的范圍了),但你應(yīng)該已經(jīng)注意到,我們寫計(jì)算機(jī)程序的方式已經(jīng)和數(shù)學(xué)家用紙筆手寫數(shù)學(xué)表達(dá)式非常接近了。

    虛擬機(jī)

    最新潮的編程方式要數(shù)虛擬機(jī)(經(jīng)常簡(jiǎn)稱 VM)了。虛擬機(jī)分為兩大類:系統(tǒng)虛擬機(jī)和進(jìn)程虛擬機(jī)。這兩種虛擬機(jī)都提供一種對(duì)“真實(shí)的”計(jì)算硬件的不同級(jí)別的抽象,不過(guò)它們的作用域不同。系統(tǒng)虛擬機(jī)是一個(gè)提供物理硬件的替代品的軟件,而進(jìn)程虛擬機(jī)則被設(shè)計(jì)用來(lái)以一種“系統(tǒng)獨(dú)立”的方式執(zhí)行程序。所以在這個(gè)例子里,進(jìn)程虛擬機(jī)(往后我所說(shuō)的虛擬機(jī)都是指這個(gè)類型)的作用域和解釋器的比較類似,因?yàn)橐彩窍葘⒊绦蚓幾g成一個(gè)中間形態(tài),然后虛擬機(jī)再執(zhí)行這個(gè)中間形態(tài)。

    虛擬機(jī)和解釋器的主要區(qū)別在于,虛擬機(jī)創(chuàng)造了一個(gè)虛擬的 CPU,以及一套虛擬的指令集。有了這層抽象,我們就可以編寫前端工具來(lái)把不同語(yǔ)言的程序編譯成虛擬機(jī)可以接受的程序了。也許最流行也最知名的虛擬機(jī)就是 Java 虛擬機(jī)(JVM)了。JVM 最初在 1990 年代只支持 Java 語(yǔ)言,但是如今卻可以運(yùn)行 許多 流行的編程語(yǔ)言,包括 Scala、Jython、JRuby、Clojure,以及 Kotlin 等等。還有其它一些不太常見(jiàn)的例子,在這里就不說(shuō)了。我也是最近才知道,我最喜歡的語(yǔ)言 Python 并不是一個(gè)解釋型語(yǔ)言,而是一個(gè) 運(yùn)行在虛擬機(jī)上的語(yǔ)言 !

    虛擬機(jī)仍然在延續(xù)這樣一個(gè)歷史趨勢(shì):讓程序員在使用特定領(lǐng)域的編程語(yǔ)言解決問(wèn)題的時(shí)候,所需要的對(duì)特定計(jì)算平臺(tái)的了解變得越來(lái)越少了。

    就是這樣了

    希望你喜歡這篇簡(jiǎn)單介紹軟件背后運(yùn)行原理的短文。有什么其它話題是你想讓我接下來(lái)討論的嗎?在評(píng)論里告訴我吧。


    via: https://opensource.com/article/19/5/primer-assemblers-compilers-interpreters

    作者: Erik O'Shaughnessy 選題: lujun9972 譯者: chen-ni 校對(duì): wxy

    本文由 LCTT 原創(chuàng)編譯, Linux中國(guó) 榮譽(yù)推出

    點(diǎn)擊“了解更多”可訪問(wèn)文內(nèi)鏈接


    幾天之前,國(guó)外著名網(wǎng)絡(luò)安全供應(yīng)商CrowdStrike(吐槽一下:這公司的名字有“罷工”之意,也是很應(yīng)景哈)向所有客戶發(fā)布了例行的自動(dòng)更新,立即在全球范圍內(nèi)導(dǎo)致850萬(wàn)臺(tái)window電腦系統(tǒng)崩潰。

    除非您自上周以來(lái)一直處于斷網(wǎng)狀態(tài),不然您應(yīng)該聽說(shuō)過(guò)CrowdStrike導(dǎo)致的Windows中斷,該中斷導(dǎo)致世界各地的航空公司、銀行、超市、警察部門、醫(yī)院、電視頻道等關(guān)鍵服務(wù)癱瘓。企業(yè)看到他們的Windows機(jī)器因“藍(lán)屏死機(jī)”而崩潰,并且沒(méi)有明顯的修復(fù)程序——至少最初沒(méi)有。該事件在規(guī)模上是非同小可的,并且它還涉及到一些在系統(tǒng)底層級(jí)別運(yùn)行的軟件,這個(gè)因素讓我們更有理由去看一看。

    今天,我們將介紹:

    1、回顧 850萬(wàn)臺(tái)Windows計(jì)算機(jī)的崩潰對(duì)各行各業(yè)的影響

    2、根源:一個(gè)用于查找惡意進(jìn)程的自動(dòng)更新會(huì)以某種方式導(dǎo)致CSAgent.sys進(jìn)程寫入無(wú)效的內(nèi)存地址,并使計(jì)算機(jī)操作系統(tǒng)崩潰(簡(jiǎn)單地說(shuō)就是殺毒軟件更新出BUG了)

    3、進(jìn)度非常緩慢的人工修復(fù) 事件發(fā)生四天后,計(jì)算機(jī)恢復(fù)工作仍在進(jìn)行中,因?yàn)槊颗_(tái)受影響的機(jī)器和主機(jī)都必須手動(dòng)修復(fù)

    4、誰(shuí)負(fù)責(zé)?顯然,CrowdStrike主要的責(zé)任人,微軟公司應(yīng)該承擔(dān)次要責(zé)任。2009年的一項(xiàng)法規(guī)可能會(huì)在此次事件中發(fā)揮作用

    5、給軟件工程師的經(jīng)驗(yàn)教訓(xùn):量化潛在影響,執(zhí)行金絲雀/分階段部署等

    1. 回顧

    上周五(7月19日),發(fā)生了一次有史以來(lái)規(guī)模最大的、由軟件引發(fā)的window電腦故障。航空公司、銀行、超市、警察局、醫(yī)院、電視臺(tái)等社會(huì)關(guān)鍵企業(yè)使用的數(shù)百萬(wàn)個(gè)Windows10、11操作系統(tǒng)突然崩潰,出現(xiàn)了可怕的“藍(lán)屏死機(jī)”,而且沒(méi)有明顯的修復(fù)方法。這是一次真正的全球宕機(jī),從北美、歐洲到澳大利亞,整個(gè)西方世界都受到了沖擊。

    全球航空旅行陷入混亂,在阿拉斯加,緊急服務(wù)號(hào)碼停止工作;在英國(guó),天空新聞電視臺(tái)無(wú)法播出;麥當(dāng)勞因收銀機(jī)故障而不得不關(guān)閉一些日本分店。總共有數(shù)以萬(wàn)計(jì)的企業(yè)和數(shù)百萬(wàn)人受到影響。與此同時(shí),在F1賽車的世界里,梅賽德斯-奔馳車隊(duì)的電腦在匈牙利大獎(jiǎng)賽上崩了。具有諷刺意味的是,該團(tuán)隊(duì)的贊助商之一是就是此次事件的罪魁禍?zhǔn)證rowdStrike。

    2024年7月19日,紐約拉瓜迪亞機(jī)場(chǎng)的傳送帶屏幕。

    資料來(lái)源:維基百科

    巴黎迪斯尼樂(lè)園受到影響,工作人員改用紙質(zhì)打印輸出來(lái)顯示游樂(lè)設(shè)施的等待時(shí)間。

    來(lái)源: The Points Guy

    在新西蘭(奧克蘭)的一家超市自助結(jié)賬。

    資料來(lái)源:《新西蘭先驅(qū)報(bào)》

    由CrowdStrike更新引起的Windows崩潰給CrowdStrike贊助的F1車隊(duì)帶來(lái)了問(wèn)題。

    資料來(lái)源:英國(guó)廣播電臺(tái)/Getty

    這場(chǎng)大崩盤的所有商業(yè)受害者都是網(wǎng)絡(luò)安全公司CrowdStrike的客戶,該公司是“端點(diǎn)安全”的市場(chǎng)領(lǐng)導(dǎo)者,擁有約20%的市場(chǎng)份額。它在Windows/Linux/Mac機(jī)器上安裝軟件,并運(yùn)行防病毒、防火墻、入侵檢測(cè)和防御系統(tǒng)(IDP)等。引發(fā)全球大混亂的是Crowdstrike對(duì)其“獵鷹”產(chǎn)品(類似于火絨或者360安全衛(wèi)士)的一次更新。

    我們知道全球有850萬(wàn)臺(tái)Windows機(jī)器因共享這個(gè)更新而受到影響,后來(lái)由CrowdStrike證實(shí)。受災(zāi)最嚴(yán)重的可能是達(dá)美航空公司,大約三分之一的航班(5000架)在三天內(nèi)被取消。即使在第4天,達(dá)美航空也不得不在計(jì)算機(jī)恢復(fù)過(guò)程中取消了另外1000個(gè)航班,并且正在為受影響的客戶提供現(xiàn)金退款。

    2. 根本原因

    在運(yùn)行CrowdStrike軟件的Windows機(jī)器開始崩潰的幾個(gè)小時(shí)后,該公司發(fā)布了更新:

    “CrowdStrike正在積極協(xié)助受到最近更新BUG影響的客戶。Mac和Linux主機(jī)不受影響。該問(wèn)題已被識(shí)別和隔離,并且已部署修復(fù)程序。這不是網(wǎng)絡(luò)攻擊。”

    發(fā)生了什么?該公司向所有客戶推送了一個(gè)文件,然后導(dǎo)致操作系統(tǒng)崩潰。但這是怎么發(fā)生的呢?隨著事件的進(jìn)行,一些開發(fā)人員試圖重建發(fā)生的事情。以下是帕特里克·沃德爾(Patrick Wardle)的詳細(xì)信息:

    1.導(dǎo)致Windows崩潰的進(jìn)程稱為“CSAgent.sys”

    2.崩潰的指令是程序集指令“mov r9d,[r8]”。這指示將r8地址中的字節(jié)移動(dòng)到r9d地址。問(wèn)題是r8是一個(gè)未映射的地址(無(wú)效),因此進(jìn)程崩潰!

    罪魁禍?zhǔn)祝簩?dǎo)致全球Windows機(jī)器崩潰的匯編指令。

    資料來(lái)源:帕特里克·沃德爾(Patrick Wardle)在X上的推文

    3.崩潰是由CSAgent.sys進(jìn)程讀取CrowdStrike推送到所有客戶端的新文件引起的,稱為“C-00000291-*.sys”

    一天后,CrowdStrike分享了更多細(xì)節(jié):

    1. 此更新的目標(biāo)是檢測(cè)惡意軟件的通信活動(dòng)。CrowdStrike的獵鷹安全軟件會(huì)觀察進(jìn)程如何在機(jī)器上或網(wǎng)絡(luò)上進(jìn)行通信,以嘗試查明惡意活動(dòng)。此更新添加了一個(gè)新的規(guī)則文件,以篩選可疑的網(wǎng)絡(luò)通信活動(dòng)。

    2. 發(fā)布了具有新規(guī)則/命名的新配置文件。CrowdStrike的配置文件,例如可疑網(wǎng)絡(luò)連接的名稱、注冊(cè)表這些東西,它們將所有這些文件存儲(chǔ)在位置C:\Windows\System32\drivers\CrowdStrike\中(國(guó)內(nèi)沒(méi)有,不用查了哈)。這些文件都是有編號(hào)的,命名連接的規(guī)則位于編號(hào)291下。命名模式為“C-00000291-*.sys”的每個(gè)文件都是此類別的規(guī)則。

    3. 未經(jīng)處理的錯(cuò)誤使進(jìn)程和操作系統(tǒng)崩潰。雖然我很想知道錯(cuò)誤到底是什么,但CrowdStrike只分享了一個(gè)非常簡(jiǎn)短的總結(jié):

    “配置更新觸發(fā)了邏輯錯(cuò)誤,導(dǎo)致操作系統(tǒng)崩潰。這與編號(hào)文件291或任何其他頻道文件中包含的空字節(jié)無(wú)關(guān)。”

    總之就是出現(xiàn)了一個(gè)很奇怪的BUG,不知何故,解析這些新的命名規(guī)則會(huì)導(dǎo)致程序集級(jí)指令嘗試將內(nèi)存位置移動(dòng)到無(wú)效位置。這就是使Windows設(shè)備崩潰的原因。(就是內(nèi)存報(bào)錯(cuò)藍(lán)屏)

    3. 緩慢的手動(dòng)修復(fù)

    解決這種崩潰比平時(shí)要復(fù)雜得多,因?yàn)楹?jiǎn)單的遠(yuǎn)程重啟還原是不夠的,技術(shù)人員必須親自維護(hù)每臺(tái)計(jì)算機(jī):

    技術(shù)人員正在親自修復(fù)受影響的Windows計(jì)算機(jī),因?yàn)闆](méi)有遠(yuǎn)程修復(fù)選項(xiàng)。

    資料來(lái)源:techAU on X

    CrowdStrike在事件發(fā)生幾個(gè)小時(shí)后發(fā)布了針對(duì)此次故障的處理步驟。

    步驟是:

    將Windows啟動(dòng)到安全模式或Windows恢復(fù)環(huán)境

    導(dǎo)航到C:\Windows\System32\drivers\CrowdStrike目錄

    找到與“C-00000291*.sys”匹配的文件并將其刪除

    引導(dǎo)計(jì)算機(jī)重啟

    恢復(fù)過(guò)程需要計(jì)算機(jī)上的管理員權(quán)限,這些步驟很專業(yè)(需要CMD或者powershell命令),普通用戶很難執(zhí)行恢復(fù),因此在大多數(shù)公司,技術(shù)人員需要手動(dòng)修復(fù)每臺(tái)機(jī)器。

    在許多地方,Windows筆記本電腦都受到了影響。一位技術(shù)人員分享了這項(xiàng)任務(wù)的一瞥,發(fā)布了一張圖片,其中2000臺(tái)筆記本電腦中有120臺(tái)需要在一個(gè)周末內(nèi)修復(fù)。

    一些筆記本電腦要重置。資料來(lái)源:Dunken K Bliths on X

    作為一個(gè)正常人,當(dāng)我們看到一個(gè)全手動(dòng)的流程時(shí),顯然會(huì)想到,是否可以將其自動(dòng)化,或者以巧妙的方式更快地完成。由于850萬(wàn)臺(tái)機(jī)器需要復(fù)位,很明顯手動(dòng)過(guò)程非常耗時(shí)。因此,獨(dú)立開發(fā)人員以及微軟公司都介入了:

    一天后,iOS開發(fā)人員和Windows修補(bǔ)匠Adam Demasi(亞丹 德瑪西)創(chuàng)建了一個(gè)叫Unistrike的工具。通過(guò)一些額外的設(shè)置,您可以創(chuàng)建一個(gè)U盤來(lái)插入每臺(tái)受影響的機(jī)器,以便更快地恢復(fù)。

    Microsoft在事件后的第二天發(fā)布了類似的恢復(fù)工具。

    幾乎同一時(shí)刻,CrowdStrike分享說(shuō),他們正在為客戶測(cè)試一種新的、更快的恢復(fù)技術(shù)。

    然鵝,在中斷四天后,大多數(shù)受影響的Windows設(shè)備都未得到修復(fù)。事實(shí)證明,大規(guī)模崩潰的操作系統(tǒng)比應(yīng)用程序更難恢復(fù),因?yàn)閼?yīng)用程序可以將補(bǔ)丁發(fā)送到客戶端,或者可以在服務(wù)器端完成修復(fù)。

    4. 誰(shuí)負(fù)責(zé)?

    有趣的是,新聞媒體最初將其報(bào)道為“Microsoft宕機(jī)”或“Windows宕機(jī)”,但是它與事實(shí)相去甚遠(yuǎn)。那么,誰(shuí)導(dǎo)致了世界上最大的軟件崩潰呢?

    CrowdStrike – 顯然

    毋庸置疑,大部分責(zé)任在于CrowdStrike。在這一點(diǎn)上,我們只能推測(cè)哪些關(guān)鍵步驟被跳過(guò)了,或者做得不夠徹底。希望我們能在面向公眾的事后分析中學(xué)到更多經(jīng)驗(yàn)。同時(shí),以下是CrowdStrike應(yīng)該問(wèn)的一些問(wèn)題——:

    1.更新是否經(jīng)過(guò)測(cè)試,以及是如何測(cè)試的?

    此配置文件(C-00000291-*.sys)中的更新是否以手動(dòng)和自動(dòng)方式進(jìn)行了測(cè)試?如果是這樣,測(cè)試是如何通過(guò)的,為什么在實(shí)際生產(chǎn)中會(huì)發(fā)生崩潰?

    事實(shí)上,我們知道測(cè)試環(huán)境永遠(yuǎn)無(wú)法完全復(fù)制生產(chǎn)環(huán)境,因此bug可能會(huì)在測(cè)試中被通過(guò)。

    2.這些配置更改在向公眾發(fā)布之前,是否已向CrowdStrike員工推出?

    如果是,一些CrowdStrike員工是否也看到他們的操作系統(tǒng)崩潰了?

    這樣的話,那么為什么要繼續(xù)推出?

    如果有BUG,但自己家員工的機(jī)器沒(méi)有崩潰,倒是全世界的機(jī)器都崩潰了,那就更有趣了。

    3. 有沒(méi)有金絲雀檢查程序?

    “金絲雀”來(lái)自“煤礦中的金絲雀”一詞。在20世紀(jì)初,礦工們將籠子里的金絲雀鳥帶到了地下。這只鳥對(duì)有毒氣體的耐受性比人類低,所以如果這只鳥停止鳴叫或暈倒,這是對(duì)礦工的警告信號(hào),表明存在危險(xiǎn)氣體,并讓他們撤離。

    如今,金絲雀測(cè)試意味著將代碼更改推廣到較小比例的用戶群,然后監(jiān)控此部署的運(yùn)行狀況信號(hào),以發(fā)現(xiàn)某些不對(duì)勁的跡象。

    分階段推出意味著變化是一步一步的,在繼續(xù)之前評(píng)估每個(gè)階段的結(jié)果。分階段推出通常定義獲取更改功能的用戶群百分比,或此功能應(yīng)推出的區(qū)域,或兩者兼而有之。

    分階段推出計(jì)劃可能如下所示:

    第 1 階段:在新西蘭推出10%(驗(yàn)證更改的小市場(chǎng))

    第 2 階段:50%在新西蘭推出

    第 3 階段:在新西蘭100%推廣

    第 4 階段:全球10%的推廣

    第 5 階段:全球25%的推廣

    第 6 階段:全球50%的推廣

    第 7 階段:全球100%推廣

    在每個(gè)推出階段之間,都會(huì)設(shè)置一個(gè)達(dá)標(biāo)條件,用于確定何時(shí)可以繼續(xù)推出下一個(gè)階段。這通常被定義為沒(méi)有BUG的反饋,并且觀察到業(yè)務(wù)指標(biāo)的預(yù)期變化。

    CrowdStrike是否使用了金絲雀方法,或者更像是“一次性梭哈”,將配置文件同時(shí)推送給所有客戶?現(xiàn)在,我們還不知道。

    4. CrowdStrike的軟件在Windows中以內(nèi)核級(jí)別運(yùn)行,這意味著其進(jìn)程在操作系統(tǒng)中擁有最高級(jí)別的權(quán)限,這意味著它可能會(huì)使整個(gè)系統(tǒng)崩潰,比如通過(guò)損壞操作系統(tǒng)的部分內(nèi)存信息。在此級(jí)別運(yùn)行的殺毒軟件對(duì)于監(jiān)督操作系統(tǒng)運(yùn)行的進(jìn)程以及發(fā)現(xiàn)威脅和漏洞是必要的,但這也意味著一次微小的更新——即使是看起來(lái)無(wú)辜的內(nèi)容配置文件也可能導(dǎo)致整個(gè)系統(tǒng)崩潰。

    5. 公司是否忽略了之前的類似系統(tǒng)宕機(jī)?一位在私營(yíng)技術(shù)實(shí)驗(yàn)室工作的黑客新聞評(píng)論員分享說(shuō),幾個(gè)月前,CrowdStrike對(duì)他們的Linux系統(tǒng)造成了類似的系統(tǒng)崩潰。這位開發(fā)人員總結(jié)道:

    “早在2024年4月19日,Crowdstrike就對(duì)我們用于工作的linux計(jì)算機(jī)集群做了這件事,我一直很想對(duì)此大發(fā)雷霆。”

    簡(jiǎn)而言之,我們是一個(gè)私營(yíng)的技術(shù)實(shí)驗(yàn)室,制作了一堆不同的生產(chǎn)網(wǎng)站。我們運(yùn)行Crowdstrike的安全軟件,它在周五晚上推送了一個(gè)與最新的穩(wěn)定版系統(tǒng)不兼容的更新。我們像往常一樣給系統(tǒng)打了補(bǔ)丁,在一周時(shí)間里一切都很好,然后我們用于多個(gè)網(wǎng)站和云主機(jī)的所有服務(wù)器同時(shí)硬件崩潰并無(wú)法啟動(dòng)。

    當(dāng)我們將其中一個(gè)磁盤連接到一臺(tái)新的電腦并檢查錯(cuò)誤日志時(shí),Crowdstrike看起來(lái)像是罪魁禍?zhǔn)祝晕覀兪謩?dòng)刪除了它,機(jī)器啟動(dòng),嘗試重新安裝它,機(jī)器立即再次崩潰。很好,我們提交了技術(shù)支持工單并讓工程師在線。

    Crowdstrike花了一天時(shí)間做出回應(yīng),然后要求提供更多證據(jù)(超出上述范圍)證明這是他們的錯(cuò)。

    一天后,他們承認(rèn)了這個(gè)錯(cuò)誤,幾周后,他們進(jìn)行了根本原因分析,認(rèn)為他們沒(méi)有在他們的測(cè)試中涵蓋我們的場(chǎng)景(我認(rèn)為他們用于測(cè)試的是我們的上一代操作系統(tǒng)版本)。在我們自己的事后分析中,我們沒(méi)有真正的能力來(lái)防止同樣的事情再次發(fā)生:“Crowdstrike會(huì)隨時(shí)將軟件跟新推送到你的機(jī)器上,無(wú)論它是否緊急,而不進(jìn)行測(cè)試。

    (就像打游戲到一半,window突然藍(lán)屏并強(qiáng)制更新哈哈)

    這些細(xì)節(jié)表明,CrowdStrike可能或應(yīng)該意識(shí)到它可以——而且確實(shí)——通過(guò)更新使內(nèi)核進(jìn)程崩潰。

    公平地說(shuō),像CrowdStrike這樣的公司擁有數(shù)百個(gè)工程團(tuán)隊(duì),一個(gè)團(tuán)隊(duì)觀察到宕機(jī)的信息不一定會(huì)在整個(gè)組織中傳播。盡管如此,導(dǎo)致操作系統(tǒng)崩潰的CrowdStrike進(jìn)程肯定是一個(gè)已知的漏洞,因?yàn)樗瞧茐目蛻魴C(jī)器的最明顯方法,而它本來(lái)要保護(hù)的。

    (笑死我了,宕機(jī)的電腦永遠(yuǎn)不會(huì)中病毒)

    Microsoft / Windows在干嘛?

    為什么CrowdStrike可以在內(nèi)核級(jí)別運(yùn)行進(jìn)程,這可能會(huì)使操作系統(tǒng)崩潰?相比之下,蘋果對(duì)MacOS進(jìn)行了更改,以在用戶級(jí)別運(yùn)行第三方軟件,而不是內(nèi)核。

    幾年來(lái),蘋果一直在鼓勵(lì)第三方開發(fā)人員從內(nèi)核擴(kuò)展轉(zhuǎn)向在用戶級(jí)別運(yùn)行的等效擴(kuò)展。然而,直到最近一年左右,蘋果才提供了足夠的支持,使其可行。

    因此,在Mac上,相同的CrowdStrike進(jìn)程將在用戶空間中運(yùn)行,如果它崩潰,它不會(huì)使整個(gè)系統(tǒng)隨之癱瘓。

    (Mac真就生產(chǎn)力YYDS)

    但是,在Windows和Linux上,防病毒和其他網(wǎng)絡(luò)安全軟件通常在內(nèi)核級(jí)別運(yùn)行,并且一直如此。那么,為什么Microsoft沒(méi)有效仿蘋果的做法,禁止第三方進(jìn)入內(nèi)核空間呢?事實(shí)證明,一起發(fā)生在在2010年之前的殺毒軟件公司的投訴,和歐盟法規(guī)發(fā)揮了作用。

    監(jiān)管是罪魁禍?zhǔn)祝?/p>

    《華爾街日?qǐng)?bào)》問(wèn)Microsoft為什么不限制像CrowdStrike這樣的第三方軟件只在用戶空間運(yùn)行,而不是在內(nèi)核空間運(yùn)行。它的回應(yīng)是:

    “Microsoft發(fā)言人表示,它不能像蘋果那樣合法地封鎖其操作系統(tǒng),因?yàn)樗谝黄鹩脩敉对V后與歐盟委員會(huì)達(dá)成了諒解。2009年,Microsoft同意為安全軟件制造商提供與Microsoft相同級(jí)別的Windows訪問(wèn)權(quán)限。

    具有諷刺意味的是,所有這一切都始于2006年,當(dāng)時(shí)Microsoft希望使其內(nèi)核對(duì)Windows Vista更安全。

    “如今,像賽門鐵克(類似于國(guó)內(nèi)的360安全衛(wèi)士)這樣的安全供應(yīng)商處于高度敏感的狀態(tài),因?yàn)樗麄円呀?jīng)開始與Microsoft正面競(jìng)爭(zhēng),而進(jìn)一步反壟斷行動(dòng)的幽靈籠罩著Microsoft在安全領(lǐng)域的一舉一動(dòng)。

    上周,歐盟競(jìng)爭(zhēng)事務(wù)發(fā)言人喬納森·托德(Jonathan Todd)警告說(shuō),如果Microsoft不允許安全供應(yīng)商有公平的競(jìng)爭(zhēng)機(jī)會(huì),市場(chǎng)可能會(huì)受到威脅。

    (window在安全軟件方面涉及壟斷了,主打一個(gè)自產(chǎn)自銷)

    賽門鐵克和其他安全供應(yīng)商不喜歡微軟的行為,因?yàn)樗鼤?huì)阻止他們?cè)L問(wèn) Windows內(nèi)核。他們表示,這將阻止他們提供賽門鐵克的“防篡改”技術(shù)等重要功能,該技術(shù)可以防止惡意程序修改賽門鐵克自己的軟件。

    (病毒把殺毒軟件改了,倒反天罡)

    Microsoft拒絕接受本文的采訪,但在上周接受IDG新聞采訪時(shí),一位Microsoft高管表示,這只是為了防止內(nèi)核被濫用。

    “我們認(rèn)為周圍存在大量混亂......我們認(rèn)為產(chǎn)品中的某些安全功能奠定了基礎(chǔ),“安全技術(shù)部門高級(jí)產(chǎn)品經(jīng)理Stephen Toulouse(斯蒂芬·圖盧茲)說(shuō)。“我們正在做的是將內(nèi)核與攻擊者隔離開來(lái),因?yàn)槟壳按嬖诘墓δ軓奈幢蝗魏稳耸褂眠^(guò)——軟件供應(yīng)商或攻擊者。

    最終,賽門鐵克和其他供應(yīng)商勝出。Microsoft只能“禁止”安全供應(yīng)商在內(nèi)核空間運(yùn)行,前提是它也沒(méi)有在那里運(yùn)行自己的安全軟件。因此,雖然Microsoft可以被視為對(duì)這次系統(tǒng)宕機(jī)負(fù)有部分責(zé)任,但該公司并沒(méi)有其他辦法來(lái)阻止此事件的發(fā)生!

    不過(guò),可能會(huì)有一種方法:如果Microsoft將自己的安全解決方案(例如Windows Defender)移出內(nèi)核空間,將內(nèi)核徹底對(duì)所有安全軟件供應(yīng)商關(guān)閉,包括它自己。這樣做可能意味著對(duì)Windows安全系統(tǒng)進(jìn)行重大更新。

    5. 軟件工程師能學(xué)到什么

    以下是我們軟件工程師可以從這次事件中吸取的一些教訓(xùn),就目前的情況而言:

    量化軟件崩潰的影響

    如果您公司的產(chǎn)品在幾個(gè)小時(shí)內(nèi)不可挽回地崩潰,會(huì)發(fā)生什么?

    如果發(fā)生這種情況,對(duì)您的公司和外部世界會(huì)有什么影響?例如:

    如果亞馬遜在全球范圍內(nèi)崩潰幾個(gè)小時(shí),賣家將失去收入,一部分購(gòu)物者可能會(huì)失去必需品。亞馬遜將失去收入并遭受聲譽(yù)損害。

    如果TikTok在全球范圍內(nèi)崩潰了幾個(gè)小時(shí),品牌將無(wú)法投放廣告,客戶會(huì)因?yàn)闊o(wú)法使用社交平臺(tái)而感到無(wú)動(dòng)于衷、略帶惱火或憤怒。關(guān)于TikTok被封鎖的牽強(qiáng)附會(huì)的理論可能會(huì)出現(xiàn),該公司將失去廣告收入,用戶將暫時(shí)涌向Ins、Reels和Snap等替代品。

    如果一家主要的電話和互聯(lián)網(wǎng)運(yùn)營(yíng)商崩潰,其影響將遠(yuǎn)遠(yuǎn)超過(guò)上述兩家公司的總和。企業(yè)將難以運(yùn)營(yíng),緊急服務(wù)可能會(huì)受到影響。損害將是影響到聲譽(yù)的、持久的,政府干預(yù)也可能隨之而來(lái)。就像去年11月,澳大利亞一半的互聯(lián)網(wǎng)被切斷14小時(shí)的情況。

    這個(gè)經(jīng)歷很有幫助,因?yàn)樗梢宰屓烁杏X(jué)到系統(tǒng)中斷的代價(jià)有多大。了解這些BUG的“殺傷半徑”有助于使操作系統(tǒng)更具彈性,并更快地檢測(cè)和緩解類似的事件。

    死機(jī)不是一個(gè)人的錯(cuò)

    人們很容易將系統(tǒng)崩潰歸咎于誰(shuí)寫了一段令人反感的代碼,也許是缺乏經(jīng)驗(yàn)的實(shí)習(xí)生,或者是生活過(guò)得很糟糕的資深工程師。但是,將責(zé)任歸咎于個(gè)人是錯(cuò)誤的做法。Microsoft退休員工斯科特·漢塞爾曼(Scott Hanselman)總結(jié)了為什么這種規(guī)模的失敗從來(lái)都不是一個(gè)人的錯(cuò):

    “伙計(jì)們,事情是這樣的。我從事編程工作已有32年了。當(dāng)這樣的事情發(fā)生時(shí),這是組織的失敗。是的,有人寫了一句不好的評(píng)論,有人可以把“責(zé)備”指向某些人,這太可怕了。

    它總是一行代碼,但絕不是一個(gè)人。指責(zé)員工導(dǎo)致了錯(cuò)誤是簡(jiǎn)單化、和種族主義的。工程是一項(xiàng)團(tuán)隊(duì)運(yùn)動(dòng)。包容造就了優(yōu)秀的團(tuán)隊(duì)。良好的工程實(shí)踐造就了優(yōu)秀的軟件。工程實(shí)踐中未能發(fā)現(xiàn)錯(cuò)誤是常見(jiàn)的,無(wú)論寫入該代碼的人員的資歷如何。

    (黑鍋不能給實(shí)習(xí)生背,大家要一起背鍋)

    拓展

    大范圍的系統(tǒng)崩潰總是不好的,但一個(gè)好處是它們迫使我們的工程師停下來(lái)反思:

    我的公司會(huì)發(fā)生類似的災(zāi)難性事件嗎,如果是這樣,如何發(fā)生?

    對(duì)人們會(huì)有什么影響?

    我們?cè)撛趺醋霾拍鼙苊獬蔀椤跋乱粋€(gè)CrowdStrike”?

    CrowdStrike宕機(jī)現(xiàn)在正式成為地球上有史以來(lái)最大的軟件宕機(jī),客戶遭受了嚴(yán)重的財(cái)務(wù)和聲譽(yù)損失。目前尚不清楚CrowdStrike的經(jīng)濟(jì)損失,但您可以假設(shè)這將是巨大的,因?yàn)橐恍┢髽I(yè)會(huì)為造成的損失尋求賠償。

    對(duì)于CrowdStrike來(lái)說(shuō),聲譽(yù)受損的情況再糟糕不過(guò)了。直到幾天前,該公司還是殺毒軟件安全合規(guī)性的黃金標(biāo)準(zhǔn)。但是現(xiàn)在不再是:它的名字與我們見(jiàn)過(guò)的最大規(guī)模系統(tǒng)崩潰有關(guān)。Crowdstrike的聲譽(yù)遭受了打擊,需要很長(zhǎng)時(shí)間才能恢復(fù)。

    沒(méi)有企業(yè)希望一次糟糕的更新部署對(duì)自己造成這樣的打擊,但它確實(shí)發(fā)生了。如果您發(fā)現(xiàn)公司的產(chǎn)品發(fā)布流程(測(cè)試、推出、監(jiān)控、警報(bào)等)存在問(wèn)題,那么就應(yīng)該將您的擔(dān)憂和建議提出,記得及時(shí)與您的經(jīng)理或者上級(jí)領(lǐng)導(dǎo)交談。

    CrowdStrike肯定會(huì)吸取教訓(xùn),毫無(wú)疑問(wèn)。祝那里的團(tuán)隊(duì)(以及所有受影響客戶的團(tuán)隊(duì))好運(yùn),以解決這次事件,并祝CrowdStrike繼續(xù)開展工作以徹底改革內(nèi)部流程。

    讓我們希望許多公司效仿,這一歷史性事件最終會(huì)成為科技行業(yè)的一次積極的經(jīng)驗(yàn)學(xué)習(xí)。

網(wǎng)站首頁(yè)   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號(hào):冀ICP備2024067069號(hào)-3 北京科技有限公司版權(quán)所有