<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    書籍推薦《深入理解計算機系統》

    一顆小胡椒2021-08-18 07:40:00

    本書概述

    本書由12章組成,旨在闡述計算機系統的核心概念。內容概述如下:

    第1章:計算機系統漫游。這一章通過研究“hello,world”這個簡單程序的生命周期,介紹計算機系統的主要概念和主題。

    第2章:信息的表示和處理。我們講述了計算機的算術運算,重點描述了會對程序員有影響的無符號數和數的補碼表示的特性。我們考慮數字是如何表示的,以及由此確定對于一個給定的字長,其可能編碼值的范圍。我們探討有符號和無符號數字之間類型轉換的效果,還闡述算術運算的數學特性。菜鳥級程序員經常很驚奇地了解到(用補碼表示的)兩個正數的和或者積可能為負。另一方面,補碼的算術運算滿足很多整數運算的代數特性,因此,編譯器可以很安全地把一個常量乘法轉化為一系列的移位和加法。我們用C語言的位級操作來說明布爾代數的原理和應用。我們從兩個方面講述了IEEE標準的浮點格式:一是如何用它來表示數值,一是浮點運算的數學屬性。

    對計算機的算術運算有深刻的理解是寫出可靠程序的關鍵。比如,程序員和編譯器不能用表達式(x-y<0)來替代(x),因為前者可能會產生溢出。甚至也不能用表達式(-y<-x)來替代,因為在補碼表示中負數和正數的范圍是不對稱的。算術溢出是造成程序錯誤和安全漏洞的一個常見根源,然而很少有書從程序員的角度來講述計算機算術運算的特性。

    第3章:程序的機器級表示。我們教讀者如何閱讀由C編譯器生成的x86-64機器代碼。我們說明為不同控制結構(比如條件、循環和開關語句)生成的基本指令模式。我們還講述過程的實現,包括棧分配、寄存器使用慣例和參數傳遞。我們討論不同數據結構(如結構、聯合和數組)的分配和訪問方式。我們還說明實現整數和浮點數算術運算的指令。我們還以分析程序在機器級的樣子作為途徑,來理解常見的代碼安全漏洞(例如緩沖區溢出),以及理解程序員、編譯器和操作系統可以采取的減輕這些威脅的措施。學習本章的概念能夠幫助讀者成為更好的程序員,因為你們懂得程序在機器上是如何表示的。另外一個好處就在于讀者會對指針有非常全面而具體的理解。

    第4章:處理器體系結構。這一章講述基本的組合和時序邏輯元素,并展示這些元素如何在數據通路中組合到一起,來執行x86-64指令集的一個稱為“Y86-64”的簡化子集。我們從設計單時鐘周期數據通路開始。這個設計概念上非常簡單,但是運行速度不會太快。然后我們引入流水線的思想,將處理一條指令所需要的不同步驟實現為獨立的階段。這個設計中,在任何時刻,每個階段都可以處理不同的指令。我們的五階段處理器流水線更加實用。本章中處理器設計的控制邏輯是用一種稱為HCL的簡單硬件描述語言來描述的。用HCL寫的硬件設計能夠編譯和鏈接到本書提供的模擬器中,還可以根據這些設計生成Verilog描述,它適合合成到實際可以運行的硬件上去。

    第5章:優化程序性能。在這一章里,我們介紹了許多提高代碼性能的技術,主要思想就是讓程序員通過使編譯器能夠生成更有效的機器代碼來學習編寫C代碼。我們一開始介紹的是減少程序需要做的工作的變換,這些是在任何機器上寫任何程序時都應該遵循的。然后講的是增加生成的機器代碼中指令級并行度的變換,因而提高了程序在現代“超標量”處理器上的性能。為了解釋這些變換行之有效的原理,我們介紹了一個簡單的操作模型,它描述了現代亂序處理器是如何工作的,然后給出了如何根據一個程序的圖形化表示中的關鍵路徑來測量一個程序可能的性能。你會驚訝于對C代碼做一些簡單的變換能給程序帶來多大的速度提升。

    第6章:存儲器層次結構。對應用程序員來說,存儲器系統是計算機系統中最直接可見的部分之一。到目前為止,讀者一直認同這樣一個存儲器系統概念模型,認為它是一個有一致訪問時間的線性數組。實際上,存儲器系統是一個由不同容量、造價和訪問時間的存儲設備組成的層次結構。我們講述不同類型的隨機存取存儲器(RAM)和只讀存儲器(ROM),以及磁盤和固態硬盤 (直譯應為固態驅動器,但固態硬盤一詞已經被大家接受,所以沿用。——譯者注)的幾何形狀和組織構造。我們描述這些存儲設備是如何放置在層次結構中的,講述訪問局部性是如何使這種層次結構成為可能的。我們通過一個獨特的觀點使這些理論具體化,那就是將存儲器系統視為一個“存儲器山”,山脊是時間局部性,而斜坡是空間局部性。最后,我們向讀者闡述如何通過改善程序的時間局部性和空間局部性來提高應用程序的性能。

    第7章:鏈接。本章講述靜態和動態鏈接,包括的概念有可重定位的和可執行的目標文件、符號解析、重定位、靜態庫、共享目標庫、位置無關代碼,以及庫打樁。大多數講述系統的書中都不講鏈接,我們要講述它是出于以下原因。第一,程序員遇到的最令人迷惑的問題中,有一些和鏈接時的小故障有關,尤其是對那些大型軟件包來說。第二,鏈接器生成的目標文件是與一些像加載、虛擬內存和內存映射這樣的概念相關的。

    第8章:異常控制流。在本書的這個部分,我們通過介紹異常控制流(即除正常分支和過程調用以外的控制流的變化)的一般概念,打破單一程序的模型。我們給出存在于系統所有層次的異常控制流的例子,從底層的硬件異常和中斷,到并發進程的上下文切換,到由于接收Linux信號引起的控制流突變,到C語言中破壞棧原則的非本地跳轉。

    在這一章,我們介紹進程的基本概念,進程是對一個正在執行的程序的一種抽象。讀者會學習進程是如何工作的,以及如何在應用程序中創建和操縱進程。我們會展示應用程序員如何通過Linux系統調用來使用多個進程。學完本章之后,讀者就能夠編寫帶作業控制的 Linux shell 了。同時,這里也會向讀者初步展示程序的并發執行會引起不確定的行為。

    第9章:虛擬內存。我們講述虛擬內存系統是希望讀者對它是如何工作的以及它的特性有所了解。我們想讓讀者了解為什么不同的并發進程各自都有一個完全相同的地址范圍,能共享某些頁,而又獨占另外一些頁。我們還講了一些管理和操縱虛擬內存的問題。特別地,我們討論了存儲分配操作,就像標準庫的malloc和free操作。闡述這些內容是出于下面幾個目的。它加強了這樣一個概念,那就是虛擬內存空間只是一個字節數組,程序可以把它劃分成不同的存儲單元。它可以幫助讀者理解當程序包含存儲泄漏和非法指針引用等內存引用錯誤時的后果。最后,許多應用程序員編寫自己的優化了的存儲分配操作來滿足應用程序的需要和特性。這一章比其他任何一章都更能展現將計算機系統中的硬件和軟件結合起來闡述的優點。而傳統的計算機體系結構和操作系統書籍都只講述虛擬內存的某一方面。

    第10章:系統級I/O。我們講述Unix I/O的基本概念,例如文件和描述符。我們描述如何共享文件,I/O重定向是如何工作的,還有如何訪問文件的元數據。我們還開發了一個健壯的帶緩沖區的I/O包,可以正確處理一種稱為short counts的奇特行為,也就是庫函數只讀取一部分的輸入數據。我們闡述C的標準I/O庫,以及它與Linux I/O的關系,重點談到標準I/O的局限性,這些局限性使之不適合網絡編程。總的來說,本章的主題是后面兩章——網絡和并發編程的基礎。

    第11章:網絡編程。對編程而言,網絡是非常有趣的I/O設備,它將許多我們前面文中學習的概念(比如進程、信號、字節順序、內存映射和動態內存分配)聯系在一起。網絡程序還為下一章的主題——并發,提供了一個很令人信服的上下文。本章只是網絡編程的一個很小的部分,使讀者能夠編寫一個簡單的Web服務器。我們還講述位于所有網絡程序底層的客戶端服務器模型。我們展現了一個程序員對Internet的觀點,并且教讀者如何用套接字接口來編寫Internet客戶端和服務器。最后,我們介紹超文本傳輸協議(HTTP),并開發了一個簡單的迭代式Web服務器。

    第12章:并發編程。這一章以Internet服務器設計為例介紹了并發編程。我們比較對照了三種編寫并發程序的基本機制(進程、I/O多路復用和線程),并且展示如何用它們來建造并發Internet服務器。我們探討了用P、V信號量操作來實現同步、線程安全和可重入、競爭條件以及死鎖等的基本原則。對大多數服務器應用來說,寫并發代碼都是很關鍵的。我們還講述了線程級編程的使用方法,用這種方法來表達應用程序中的并行性,使得程序在多核處理器上能執行得更快。使用所有的核解決同一個計算問題需要很小心謹慎地協調并發線程,既要保證正確性,又要爭取獲得高性能。

    本版新增內容

    本書的第1版于2003年出版,第2版在2011年出版。考慮到計算機技術發展如此迅速,這本書的內容還算是保持得很好。事實證明Intel x86的機器上運行Linux(以及相關操作系統),加上采用C語言編程,是一種能夠涵蓋當今許多系統的組合。然而,硬件技術、編譯器和程序庫接口的變化,以及很多教師教授這些內容的經驗,都促使我們做了大量的修改。

    第2版以來的最大整體變化是,我們的介紹從以IA32和x86-64為基礎,轉變為完全以x86-64為基礎。這種重心的轉移影響了很多章節的內容。下面列出一些明顯的變化:

    • 第1章。我們將第5章對Amdahl定理的討論移到了本章。
    • 第2章。讀者和評論家的反饋是一致的,本章的一些內容有點令人不知所措。因此,我們澄清了一些知識點,用更加數學的方式來描述,使得這些內容更容易理解。這使得讀者能先略過數學細節,獲得高層次的總體概念,然后回過頭來進行更細致深入的閱讀。
    • 第3章。我們將之前基于IA32和x86-64的表現形式轉換為完全基于x86-64,還更新了近期版本GCC產生的代碼。其結果是大量的重寫工作,包括修改了一些概念提出的順序。同時,我們還首次介紹了對處理浮點數據的程序的機器級支持。由于歷史原因,我們給出了一個網絡旁注描述IA32機器碼。
    • 第4章。我們將之前基于32位架構的處理器設計修改為支持64位字和操作的設計。
    • 第5章。我們更新了內容以反映最近幾代x86-64處理器的性能。通過引入更多的功能單元和更復雜的控制邏輯,我們開發的基于程序數據流表示的程序性能模型,其性能預測變得比之前更加可靠。
    • 第6章。我們對內容進行了更新,以反映更多的近期技術。
    • 第7章。針對x86-64,我們重寫了本章,擴充了關于用GOT和PLT創建位置無關代碼的討論,新增了一節描述更加強大的鏈接技術,比如庫打樁。
    • 第8章。我們增加了對信號處理程序更細致的描述,包括異步信號安全的函數,編寫信號處理程序的具體指導原則,以及用sigsuspend等待處理程序。
    • 第9章。本章變化不大。
    • 第10章。我們新增了一節說明文件和文件的層次結構,除此之外,本章的變化不大。
    • 第11章。我們介紹了采用最新getaddrinfo和getnameinfo函數的、與協議無關和線程安全的網絡編程,取代過時的、不可重入的gethostbyname和gethostbyaddr函數。
    • 第12章。我們擴充了利用線程級并行性使得程序在多核機器上更快運行的內容。

    本書的起源

    本書起源于1998年秋季,我們在卡內基梅隆(CMU)大學開設的一門編號為15-213的介紹性課程:計算機系統導論(Introduction to Computer System,ICS)。從那以后,每學期都開設了ICS這門課程,每學期有超過400名學生上課,這些學生從本科二年級到碩士研究生都有,所學專業也很廣泛。這門課程是卡內基梅隆大學計算機科學系(CS)以及電子和計算機工程系(ECE)所有本科生的必修課,也是CS和ECE大多數高級系統課程的先行必修課。

     ICS這門課程的宗旨是用一種不同的方式向學生介紹計算機。因為,我們的學生中幾乎沒有人有機會親自去構造一個計算機系統。另一方面,大多數學生,甚至包括所有的計算機科學家和計算機工程師,也需要日常使用計算機和編寫計算機程序。所以我們決定從程序員的角度來講解系統,并采用這樣的原則過濾要講述的內容:我們只討論那些影響用戶級C語言程序的性能、正確性或實用性的主題。

     比如,我們排除了諸如硬件加法器和總線設計這樣的主題。雖然我們談及了機器語言,但是重點并不在于如何手工編寫匯編語言,而是關注C語言編譯器是如何將C語言的結構翻譯成機器代碼的,包括編譯器是如何翻譯指針、循環、過程調用以及開關(switch)語句的。更進一步地,我們將更廣泛和全盤地看待系統,包括硬件和系統軟件,涵蓋了包括鏈接、加載、進程、信號、性能優化、虛擬內存、I/O以及網絡與并發編程等在內的主題。

     這種做法使得我們講授ICS課程的方式對學生來講既實用、具體,還能動手操作,同時也非常能調動學生的積極性。很快地,我們收到來自學生和教職工非常熱烈而積極的反響,我們意識到卡內基梅隆大學以外的其他人也可以從我們的方法中獲益。因此,這本書從ICS課程的筆記中應運而生了,而現在我們對它做了修改,使之能夠反映科學技術以及計算機系統實現中的變化和進步。

     通過本書的多個版本和多種語言譯本,ICS和許多相似課程已經成為世界范圍內數百所高校的計算機科學和計算機工程課程的一部分。

     本文摘編自《深入理解計算機系統(原書第3版)》,經出版方授權發布。

    作者[美] 蘭德爾 E.布萊恩特(Randal E. Bryant)

    大衛 R. 奧哈拉倫(David R. O'Hallaron) 

    譯者龔奕利、賀蓮



    被譽為“價值超過等重量黃金的無價資源寶庫”理解計算機系統首選書目, 十余萬程序員的共同選擇。

    本書是一本將計算機軟件和硬件理論結合講述的經典教程,內容覆蓋計算機導論、體系結構和處理器設計等多門課程。卡內基-梅隆大學、北京大學、上海交大等國內外眾多知名高校選用指定教材。本書的最大優點是為程序員描述計算機系統的實現細節,通過描述程序是如何映射到系統上,以及程序是如何執行的,使讀者更好地理解程序的行為,以及造成效率低下的原因。

    程序員深入理解計算機系統
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    作者:Randal E. Bryant,David R. O'Hallaron來源:華章計算機(hzbook
    以色列政府大力投資教育,據統計,以色列對國民教育的資金投入僅略低于其軍事投入。這一系列舉措為高質量的網絡安全教育提供了基本保障。培養網絡安全人才成為以色列建成網絡安全強國的重要支撐。據統計,以色列的研發投資占比 GDP 全球最高,其中網絡安全科研投入居世界前茅。2016 年底,以色列政府推出“創新簽證計劃”,海外創業者能夠利用以色列的技術設施、商業系統以及工作空間創業,極大吸引了國際網絡安全人才。
    網絡安全風險管理是指識別、評估企業網絡信息系統中的缺陷和風險隱患,并采取相應的安全控制以防止網絡威脅,這是一個持續的過程,會隨著威脅的發展而不斷優化調整。
    澳大利亞政府稱該計劃旨在提高女性在勞動力中的比例,因為澳大利亞統計局發現,女性僅占當地數字技術工人的31%。·確定安全需求。英國政府表示,因此它的目標是建立一個新的實踐準則,為應用程序設定基本的安全和隱私要求。英國政府網站的一份新聞稿稱,根據新提案,智能手機、
    公眾號后臺回復:“220323”,即可下載PDF全文。
    在過去二十年的持續沖突中,陸軍部署了 有史以來最強大的通信系統。在此期間,美國 軍隊繼續主宰網絡空間和電磁頻譜,同時在阿 富汗和伊拉克開展反叛亂行動,打擊那些缺乏 挑戰我們技術優勢能力的敵人和敵方。
    重要事件回顧,智覽網安行業發展。近日國內外網安行業發生了哪些重要事件,呈現出了怎樣的發展態勢呢?中國網安科技情報研究團隊將從行業大角度出發,帶領大家回顧近日國內外行業的重要事件,探究其中的發展態勢。 國內 產業規模超萬億元 工業互聯網步入快速成長期
    Windows安全日志分析
    2021-10-16 06:43:51
    在應急響應初步階段,我們會對系統日志、中間件安全日志、惡意文件等進行收集。接下來便是要進一步對這些文件進行分析:對惡意文件逆向、日志文件分析、梳理入侵時間線和入侵路徑等。本文主要對Windows安全日志進行舉例分析。
    一顆小胡椒
    暫無描述
      亚洲 欧美 自拍 唯美 另类