筑基系列-計(jì)算機(jī)基礎(chǔ)知識(shí)小抄版

A-曉理動(dòng)碼_光頭哥.png

目錄

1.背景篇

1.1 計(jì)算機(jī)發(fā)展史

  • 電子管計(jì)算機(jī) (1946-1957)
    • 埃尼阿克(ENIAC)
  • 晶體管計(jì)算機(jī)(1957-1964)
    • 貝爾實(shí)驗(yàn)室愧杯、MIT林肯實(shí)驗(yàn)室的TX-0啡省、PDP-1配備4k內(nèi)存和顯示器
  • 集成電路計(jì)算機(jī) (1964-1980)
    • 德州儀器的工程師發(fā)明了集成電路(IC)标沪、IBM(7094,1401) 朱沃、System/360 操作系統(tǒng)
  • 超大規(guī)模集成電路計(jì)算機(jī) (1980-現(xiàn)在)
    • 喬布斯 Apple 和 Apple二代
  • 未來(lái)的計(jì)算機(jī)
    • 生物計(jì)算機(jī)
    • 量子計(jì)算機(jī)

1.2 CPU發(fā)展史

  • 摩爾定律
    • 定義:當(dāng)價(jià)格不變時(shí)苞轿,集成電路中可容納的晶體管數(shù)目約每隔 18~24 個(gè)月就會(huì)增加一倍,性能也將提升一倍逗物。
    • 這一定律揭示了信息技術(shù)發(fā)展的速度搬卒,但到今天,摩爾定律失效了翎卓。因?yàn)殡S著芯片越來(lái)越小契邀,在尺寸和散熱等方面已經(jīng)挑戰(zhàn)了人類(lèi)的極限椭迎,芯片中無(wú)法再放入更多的電子元件了缴阎。
    • 所以計(jì)算能力又開(kāi)始以另一種方式發(fā)展抒钱,那就是多核心,比如一個(gè)普普通通的 NVIDA 顯卡中就擁有了幾百個(gè)核心,這樣就可以進(jìn)行大量的并發(fā)計(jì)算砖织;另外茂蚓,一個(gè)分布式的大數(shù)據(jù)集群牍白,里面就可能有上千個(gè)核心切省。
  • 單核CPU發(fā)展史
    • (1971~ 1973) 500KHz頻率的微型計(jì)算機(jī)(字長(zhǎng)8位)
    • (1978~ 1985) 500MHz頻率的微型計(jì)算機(jī)(字長(zhǎng)16位)
    • (1985~ 2000) 高于1GHz頻率的微型計(jì)算機(jī)(字長(zhǎng)32位)
    • (1973~ 1978) 高于1MHz頻率的微型計(jì)算機(jī)(字長(zhǎng)8位)
    • (2000~ 現(xiàn)在) 高于2GHz頻率的微型計(jì)算機(jī)(字長(zhǎng)為64位)
  • 多核CPU發(fā)展史
    • (2005) Intel奔騰系列雙核CPU、 AMD速龍系列
    • (2006) Intel酷睿四核CPU
    • Intel酷睿系列十六核CPU
    • Intel至強(qiáng)系列五十六核CPU
  • CPU數(shù)字能量是如何產(chǎn)生的
    • 時(shí)間是最重要的輸入:晶振
    • 電能供給給芯片脸秽,芯片中的一種電子元件晶振(也就是石英晶體)通電后產(chǎn)生震蕩
    • 震蕩會(huì)產(chǎn)生頻率穩(wěn)定的脈沖信號(hào)薇正,通常這是一種高頻的脈沖信號(hào)钠怯,每秒可達(dá)百萬(wàn)次
    • 然后通過(guò)諧振效應(yīng)發(fā)放這個(gè)信號(hào)宁脊,形成方波
    • 再通過(guò)電子元件調(diào)整這種脈沖的頻率,把脈沖信號(hào)轉(zhuǎn)換為需要的頻率薄疚,這就形成了驅(qū)動(dòng)芯片工作的時(shí)鐘信號(hào)
    • 最后躏筏,時(shí)鐘信號(hào)驅(qū)動(dòng)著芯片工作,就像人體的脈搏一樣砚殿,每一次脈沖到來(lái)凡人,都讓芯片的狀態(tài)發(fā)生一次變化,最終存儲(chǔ)器中的指令被一行行執(zhí)行

1.3 32 位 VS 64 位

  • 32、64 位可以表示操作系統(tǒng)邢隧、軟件包券、 CPU等
  • 32位的容量:2^32 = 4 × 2^30 = 4????
  • 64位的容量:2^64 = 2^34 × 2^30 = 234????=224T??=214EB=24EB
  • 如果是 CPU,那么有 32 位 CPU询吴,也有 64 位 CPU
    • 如果 CPU 每次可以計(jì)算 4 個(gè) byte,那么我們稱(chēng)作 32 位 CPU
    • 如果 CPU 每次可以計(jì)算 8 個(gè) byte,那么我們稱(chēng)作 64 位 CPU
    • 這里的 32 和 64,稱(chēng)作 CPU 的位寬
    • 64 位 CPU 可以執(zhí)行更大數(shù)字的運(yùn)算肌访,這個(gè)優(yōu)勢(shì)在普通應(yīng)用上不明顯蟹演,但是對(duì)于數(shù)值計(jì)算較多的應(yīng)用就非常明顯。
    • 64 位 CPU 可以尋址更大的內(nèi)存空間
  • 如果 32 位/64 位說(shuō)的是程序,那么說(shuō)的是指令是 64 位還是 32 位的。
    • 32 位指令在 64 位機(jī)器上執(zhí)行,困難不大,可以兼容滚婉。
    • 如果是 64 位指令骇窍,在 32 位機(jī)器上執(zhí)行就困難了锥余,32 位的寄存器都存不下指令的參數(shù)腹纳。
  • 如果 32 位/64 位說(shuō)的是操作系統(tǒng)
    • 操作系統(tǒng)也是一種程序,如果是 64 位操作系統(tǒng)驱犹,也就是操作系統(tǒng)中程序的指令都是 64 位指令嘲恍,因此不能安裝在 32 位機(jī)器上。

1.4 計(jì)算機(jī)的分類(lèi)

  • 超級(jí)計(jì)算機(jī)
    • 功能最強(qiáng)
    • 運(yùn)算速度的單位是TFlop/s(1TFlop/s=每秒一萬(wàn)億次浮點(diǎn)計(jì)算)
    • Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz: 44.87 GFlop/s( 0.04487TFlop/s)
    • 世界排名:Summit IBM(美國(guó)) > 神威太湖之光(中國(guó)) > Sierra IBM(美國(guó))
    • 中國(guó)排名:神威 太湖之光 > 天河二號(hào)> 天河一號(hào)
  • 大型機(jī) (又稱(chēng)大型機(jī)央星、大型主機(jī)、主機(jī)等)
    • IBM Z9
    • 大型機(jī)造價(jià)高昂
    • 去“IOE”行動(dòng) (I(IBM) O(Oracle) E(EMC)) --阿里云
  • 迷你計(jì)算機(jī)(服務(wù)器)
    • 普通服務(wù)器已經(jīng)代替了傳統(tǒng)的大型機(jī)刽漂,成為大規(guī)模企業(yè)計(jì)算的中樞
  • 工作站
    • 高端的通用微型計(jì)算機(jī)录肯,提供比個(gè)人計(jì)算機(jī)更強(qiáng)大的性能
    • 類(lèi)似于普通臺(tái)式電腦糊余,體積較大威沫,但性能強(qiáng)勁
  • 微型計(jì)算機(jī)
    • 麻雀雖小、五臟俱全
    • 從構(gòu)成的本質(zhì)上來(lái)講,個(gè)人計(jì)算機(jī)與前面的分類(lèi)無(wú)異

1.5 計(jì)算機(jī)的體系與結(jié)構(gòu)

  • 阿蘭.圖靈

    • 英國(guó)(1912-1954) 數(shù)學(xué)家成邏輯學(xué)家網(wǎng)密肯進(jìn)分析家和理論生物學(xué)家,被譽(yù)為計(jì)算機(jī)科學(xué)和人工智能之父。
    • 圖靈機(jī)
    • 圖靈測(cè)試
    • 圖靈完備
    • 可判定性
  • 圖靈機(jī)

    • 圖靈機(jī)擁有一條無(wú)限長(zhǎng)的紙帶眼滤,紙帶上是一個(gè)格子挨著一個(gè)格子料睛,格子中可以寫(xiě)字符,你可以把紙帶看作內(nèi)存,而這些字符可以看作是內(nèi)存中的數(shù)據(jù)或者程序片迅。

    • 圖靈機(jī)有一個(gè)讀寫(xiě)頭鼓蜒,讀寫(xiě)頭可以讀取任意格子上的字符框杜,也可以改寫(xiě)任意格子的字符。

    • 讀寫(xiě)頭上面的盒子里是一些精密的零件蛋济,包括圖靈機(jī)的存儲(chǔ)、控制單元和運(yùn)算單元炮叶。

    • 圖靈通過(guò)數(shù)學(xué)證明了碗旅,一個(gè)問(wèn)題如果可以拆解成圖靈機(jī)的可執(zhí)行步驟,那問(wèn)題就是可計(jì)算的镜悉。

    • 另一方面祟辟,圖靈機(jī)定義了計(jì)算機(jī)的組成以及工作原理,但是沒(méi)有給出具體的實(shí)現(xiàn)侣肄。

  • 馮諾依曼體系

    • 將程序指令和數(shù)據(jù)一起存儲(chǔ)的計(jì)算機(jī)設(shè)計(jì)概念結(jié)構(gòu),現(xiàn)代計(jì)算機(jī)都是馮諾依曼機(jī)

    • 能夠長(zhǎng)期記憶程序旧困、數(shù)據(jù)、中間結(jié)果及最終運(yùn)算結(jié)果的能力

    • 能夠把需要的程序和數(shù)據(jù)送至計(jì)算機(jī)中

    • 能夠具備算術(shù)稼锅、邏輯運(yùn)算和數(shù)據(jù)傳送等數(shù)據(jù)加工處理的能力

    • 能夠按照要求將處理結(jié)果輸出給用戶(hù)

    • 馮諾依曼瓶頸:CPU和存儲(chǔ)器速率之間的問(wèn)題無(wú)法調(diào)和導(dǎo)致CPU經(jīng)澈鹁撸空轉(zhuǎn)等待數(shù)據(jù)傳輸

  • 馮諾依曼機(jī)組成結(jié)構(gòu)

    • 輸入設(shè)備
      • 鼠標(biāo)、鍵盤(pán)
    • 輸出設(shè)備
      • 顯示器
    • 存儲(chǔ)器
      • CPU缰贝、內(nèi)存馍悟、硬盤(pán)
    • 控制器
      • CPU
    • 運(yùn)算器
      • CPU

1.6 程序翻譯與解釋

  • 人類(lèi)語(yǔ)言與計(jì)算機(jī)語(yǔ)言需要進(jìn)行語(yǔ)言之間的轉(zhuǎn)換

  • 程序翻譯

    • L1是描述程序邏輯的高級(jí)語(yǔ)言

    • L0是計(jì)算機(jī)實(shí)際執(zhí)行的低級(jí)語(yǔ)言

    • 編譯器:高級(jí)語(yǔ)言對(duì)應(yīng)的編譯器

    • 程序翻譯就是編譯器將L1語(yǔ)言翻譯并生成L0語(yǔ)言

    • 翻譯過(guò)程生成新的L0程序

    • 通過(guò)編譯器執(zhí)行的相關(guān)語(yǔ)言

      • C/C++
      • Object-C
      • Go
  • 程序解釋

    • L1是描述程序邏輯的高級(jí)語(yǔ)言

    • L0是計(jì)算機(jī)實(shí)際執(zhí)行的低級(jí)語(yǔ)言

    • 解釋器:使用L0語(yǔ)言實(shí)現(xiàn)的程序

    • 程序解釋的過(guò)程就是解釋器將L1語(yǔ)言解釋為L(zhǎng)0語(yǔ)言

    • 解釋過(guò)程不生成新的L0程序

    • 相關(guān)語(yǔ)言

      • Python
      • Php
      • Javascript
  • 混合型語(yǔ)言

    • Java (java程序翻譯成字節(jié)碼畔濒, 字節(jié)碼解釋成機(jī)器碼)
    • C#

1.7 計(jì)算機(jī)的層次

  • 硬件邏輯層
    • 門(mén)剩晴、觸發(fā)器等邏輯電路組成
    • 屬于電子工程的領(lǐng)域
  • 微程序機(jī)器層
    • 編程語(yǔ)言是微指令集
    • 微指令所組成的微程序直接交由硬件執(zhí)行
    • 一般是硬件廠商公司處理該層
  • 傳統(tǒng)機(jī)器層
    • 編程語(yǔ)言是CPU指令集(機(jī)器指令)
    • 一條機(jī)器指令對(duì)應(yīng)一個(gè)微程序,一個(gè)微程序?qū)?yīng)一組微指令
    • 編程語(yǔ)言和硬件是直接相關(guān)
    • 不同架構(gòu)的CPU使用不同的CPU指令集 (英特爾侵状、AMD赞弥、x86/X86_64)
  • 操作系統(tǒng)層
    • 向上提供了簡(jiǎn)易的操作界面
    • 向下對(duì)接了指令系統(tǒng),管理硬件資源
    • 操作系統(tǒng)層是在軟件和硬件之間的適配層
  • 匯編語(yǔ)言層
    • 編程語(yǔ)言是匯編語(yǔ)言(PUSH DS/PUSH DS)
    • 匯編語(yǔ)言可以翻譯成可直接執(zhí)行的機(jī)器語(yǔ)言
    • 完成翻譯的過(guò)程的程序就是匯編器
  • 高級(jí)語(yǔ)言層
    • 高級(jí)語(yǔ)言的類(lèi)別非常多趣兄,由幾百種
    • 常見(jiàn)的高級(jí)語(yǔ)言有: Python绽左、 Java、 C/C++艇潭、 Golang等
  • 應(yīng)用層
    • 滿足計(jì)算機(jī)針對(duì)某種用途而專(zhuān)門(mén)設(shè)計(jì)
    • WPS拼窥、IDE

1.8 計(jì)算機(jī)的計(jì)算單位

  • 容量單位
    • 在物理層面,高低電平記錄信息

    • 理論上只認(rèn)識(shí)0/1兩種狀態(tài)蹋凝,0/1稱(chēng)為bit(比特位)

    • 0/1能夠表示的內(nèi)容太少了鲁纠,需要更大的容量表示方法

    • 更大的容量單位:字節(jié)、千字節(jié)鳍寂、兆字節(jié)改含、吉字節(jié)、太字節(jié)迄汛、拍字節(jié)捍壤、艾字節(jié)

    • 為什么網(wǎng)上買(mǎi)的移動(dòng)硬盤(pán)500G骤视,格式化之后就只剩465G了?

      • 硬盤(pán)商一般用10進(jìn)位標(biāo)記容量 ?????? ? ????????3/????????3約等于??????
      • 廠商采用十進(jìn)制更好溝通
容量單位 bit Byte KB MB GB TB PB EB
名字 比特位 字節(jié) 千字節(jié)(kilobyte) 兆字節(jié)=百萬(wàn)字節(jié)(megabyte) 吉字節(jié)=十億字節(jié)(GigaByte) 太字節(jié)=萬(wàn)億字節(jié)(terabyte) 拍字節(jié)=千萬(wàn)億字節(jié)(petabyte) 艾字節(jié)=2^60字節(jié)(ExaByte)
換算 - 8bits 1024B 1024K 1024M 1024G 1024T 1024P
常見(jiàn)設(shè)備 門(mén)電路 寄存器 高速緩存 內(nèi)存/硬盤(pán) 硬盤(pán) 云硬盤(pán) 數(shù)據(jù)倉(cāng)庫(kù)
  • 速度單位
    • 網(wǎng)絡(luò)速度
      • 100M帶寬=100M/s
      • 為什么電信拉的100M光纖鹃觉,測(cè)試峰值速度只有12M每秒专酗?
        • 網(wǎng)絡(luò)常用單位為(Mbps)
        • bps(bits per second):每秒傳送位數(shù)
        • 100M/s = 100Mbps = 100Mbit/s
        • 100Mbit/s=(100/8)MB/s=12.5MB/s
    • 計(jì)算速度
      • CPU的速度一般體現(xiàn)為CPU的時(shí)鐘頻率
      • CPU的時(shí)鐘頻率的單位一般是赫茲Hz(hertz)
      • 目前主流CPU的時(shí)鐘頻率都在2GHz以上
      • Hz其實(shí)就是秒分之,并不只是描述計(jì)算機(jī)領(lǐng)域所專(zhuān)有的單位
      • Hz它是每秒中的周期性變動(dòng)重復(fù)次數(shù)的計(jì)量
      • 在CPU中就表示高低電瓶在每秒中變化的次數(shù)盗扇,2GHz = 2*1000^3Hz = 每秒20億次

1.9 計(jì)算機(jī)的字符與編碼集

  • 早期英美的ASCII碼

    • 美國(guó)信息交換標(biāo)準(zhǔn)碼(American Standard Code for Information Interchange)

    • 使用7個(gè)bits就可以完全表示ASCII碼

    • 包含95個(gè)可打印字符笼裳,33個(gè)不可打印字符(包括控制字符)

    • 很多應(yīng)用或者國(guó)家中的符號(hào)都無(wú)法表示

    • 無(wú)法表示數(shù)學(xué)符號(hào):“÷ ≠ ≥ ≈ π”

    • ???? + ???? = ?????? = ??^7

      image
  • Externed ASCII碼

    • 第一次對(duì)ASCII碼進(jìn)行擴(kuò)充, 7bits => 8bits

    • 常見(jiàn)數(shù)學(xué)運(yùn)算符

    • 帶音標(biāo)的歐洲字符

    • 其他常用符粱玲、表格符等

      [圖片上傳失敗...(image-99a975-1627805702081)]

  • 國(guó)際化

    • 歐洲躬柬、中亞、東亞抽减、拉丁美洲國(guó)家的語(yǔ)言多樣性
    • 語(yǔ)言體系不一樣允青,不以有限字符組合的語(yǔ)言
    • 中國(guó)、韓國(guó)卵沉、日本等的語(yǔ)言最為復(fù)雜
    • 中文編碼集
      • GB2312
        • 《信息交換用漢字編碼字符集——基本集》
        • 一共收錄了 7445 個(gè)字符
        • 包括 6763 個(gè)漢字和 682 個(gè)其它符號(hào)
        • 不兼容國(guó)際標(biāo)準(zhǔn)
      • GBK
        • 向下兼容GB2312颠锉,向上支持國(guó)際ISO標(biāo)準(zhǔn)
        • 《漢字內(nèi)碼擴(kuò)展規(guī)范》
        • 收錄了21003個(gè)漢字,支持全部中日韓漢字
        • 國(guó)際電腦不安裝GBK編碼就會(huì)顯示亂碼
        • 國(guó)內(nèi)的Windows系統(tǒng)默認(rèn)使用GBK編碼
    • Unicode
      • Unicode:統(tǒng)一碼史汗、萬(wàn)國(guó)碼琼掠、單一碼,兼容全球的字符集
      • Unicode定義了世界通用的符號(hào)集停撞, UTF-*實(shí)現(xiàn)了編碼
      • UTF-8以字節(jié)為單位對(duì)Unicode進(jìn)行編碼

2.組成篇

2.1 計(jì)算機(jī)的總線

  • 總線的概述

    • USB = Universal Serial Bus 瓷蛙,通用串行總線

      • 提供了對(duì)外連接的接口
      • 不同設(shè)備可以通過(guò)USB接口進(jìn)行連接
      • 連接的標(biāo)準(zhǔn),促使外圍設(shè)備接口的統(tǒng)一
    • 總線的分類(lèi)

      • 片內(nèi)總線
        • 芯片內(nèi)部的總線
        • 寄存器與寄存器之間
        • 寄存器與控制器戈毒、運(yùn)算器之間
      • 系統(tǒng)總線
        • CPU艰猬、主內(nèi)存、 IO設(shè)備埋市、各組件之間的信息傳輸線
        • 數(shù)據(jù)總線
          • 雙向傳輸各個(gè)部件的數(shù)據(jù)信息
          • 一般與CPU位數(shù)相同(32位冠桃、 64位)
          • 數(shù)據(jù)總線的位數(shù)(總線寬度)是數(shù)據(jù)總線的重要參數(shù),64位總線一次可傳輸8個(gè)字節(jié)的數(shù)據(jù)
        • 地址總線
          • 指定源數(shù)據(jù)或目的數(shù)據(jù)在內(nèi)存中的地址
          • 地址總線位數(shù)=n道宅,尋址范圍: 0~??^n
          • 地址總線的位數(shù)與存儲(chǔ)單元有關(guān)
        • 控制總線
          • 控制總線是用來(lái)發(fā)出各種控制信號(hào)的傳輸線
          • 控制信號(hào)經(jīng)由控制總線從一個(gè)組件發(fā)給另外一個(gè)組件
          • 控制總線可以監(jiān)視不同組件之間的狀態(tài)(就緒/未就緒)
  • 總線的仲裁

    • 為了解決總線使用權(quán)的沖突問(wèn)題
    • 總線的仲裁的方法
      • 鏈?zhǔn)讲樵?xún)-串聯(lián)
        • 所有設(shè)備都可想仲裁器發(fā)出使用權(quán)申請(qǐng)食听,仲裁器在分配使用權(quán)時(shí)是按照鏈?zhǔn)巾樞蛑饌€(gè)詢(xún)問(wèn),輪到誰(shuí)就是誰(shuí)
        • 好處:電路復(fù)雜度低污茵,仲裁方式簡(jiǎn)單
        • 壞處:優(yōu)先級(jí)低的設(shè)備難以獲得總線使用權(quán)
        • 壞處:優(yōu)先級(jí)低的設(shè)備難以獲得總線使用權(quán)
      • 計(jì)時(shí)器定時(shí)查詢(xún)-并聯(lián)
        • 仲裁控制器對(duì)設(shè)備編號(hào)并使用計(jì)數(shù)器累計(jì)計(jì)數(shù)
        • 接收到仲裁信號(hào)后樱报,往所有設(shè)備同時(shí)發(fā)出計(jì)數(shù)值
        • 計(jì)數(shù)值與設(shè)備編號(hào)一致則獲得總線使用權(quán)
      • 獨(dú)立請(qǐng)求-循環(huán)
        • 每個(gè)設(shè)備均有總線獨(dú)立連接仲裁器
        • 設(shè)備可單獨(dú)向仲裁器發(fā)送請(qǐng)求和接收請(qǐng)求
        • 當(dāng)同時(shí)收到多個(gè)請(qǐng)求信號(hào),仲裁器有權(quán)按優(yōu)先級(jí)分配使用權(quán)
        • 好處:響應(yīng)速度快省咨,優(yōu)先順序可動(dòng)態(tài)改變
        • 好處:響應(yīng)速度快肃弟,優(yōu)先順序可動(dòng)態(tài)改變

2.2 計(jì)算機(jī)的輸入輸出設(shè)備

  • 常見(jiàn)輸入輸出設(shè)備

    • 輸入設(shè)備

      • 字符輸入設(shè)備
        • 鍵盤(pán):
          • 薄膜鍵盤(pán)
          • 機(jī)械鍵盤(pán)(根據(jù)段落感、聲音、壓力笤受、鍵程的不同分為:黑軸穷缤、紅軸、青軸箩兽、茶軸)
          • 電容鍵盤(pán)
      • 圖像輸入設(shè)備
        • 鼠標(biāo)
        • 數(shù)位板:常用于繪圖設(shè)計(jì)創(chuàng)作津肛,輸入板和壓感筆
        • 掃描儀:將圖形信息轉(zhuǎn)換為數(shù)字信號(hào)
    • 輸出設(shè)備

      • 顯示器
        • CRT顯示器
        • 液晶顯示器
      • 打印機(jī)
      • 投影儀
  • 輸入輸出接口的通用設(shè)計(jì)

    • 通用設(shè)計(jì)考慮的問(wèn)題:讀取數(shù)據(jù)、向設(shè)備發(fā)送數(shù)據(jù)汗贫、設(shè)備有沒(méi)有被占用身坐?、設(shè)備是否已經(jīng)啟動(dòng)落包?部蛇、設(shè)備是否已經(jīng)連接?
    • 數(shù)據(jù)線
      • 是I/O設(shè)備與主機(jī)之間進(jìn)行數(shù)據(jù)交換的傳送線
      • 單向傳輸數(shù)據(jù)線
      • 雙向傳輸數(shù)據(jù)線
    • 狀態(tài)線
      • IO設(shè)備狀態(tài)向主機(jī)報(bào)告的信號(hào)線
      • 查詢(xún)?cè)O(shè)備是否已經(jīng)正常連接并就緒
      • 查詢(xún)?cè)O(shè)備是否已經(jīng)被占用
    • 命令線
      • CPU向設(shè)備發(fā)送命令的信號(hào)線
      • 發(fā)送讀寫(xiě)信號(hào)
      • 發(fā)送啟動(dòng)停止信號(hào)
    • 設(shè)備選擇線
      • 主機(jī)選擇I/O設(shè)備進(jìn)行操作的信號(hào)線
      • 對(duì)連在總線上的設(shè)備進(jìn)行選擇
  • CPU與IO設(shè)備的通信

    • CPU速度與IO設(shè)備速度不一致

    • 程序中斷

      • 當(dāng)外圍IO設(shè)備就緒時(shí)咐蝇,向CPU發(fā)出中斷信號(hào)

      • CPU有專(zhuān)門(mén)的電路響應(yīng)中斷信號(hào)

      • 中斷的意義

        • 提供低速設(shè)備通知CPU的一種異步的方式
        • CPU可以高速運(yùn)轉(zhuǎn)同時(shí)兼顧低速設(shè)備的響應(yīng)
        • 提高工作效率(polling的問(wèn)題)
        • 故障恢復(fù)(異常處理涯鲁、緊急事件等)
        • 簡(jiǎn)化編程模型(try/cache, 計(jì)時(shí)器等)
    • 例如通過(guò)電腦打印資料的過(guò)程

      • 中斷相應(yīng)過(guò)程

        [圖片上傳失敗...(image-b69194-1627805702081)]

      • 中斷請(qǐng)求類(lèi)型

        • 硬件設(shè)備發(fā)給主板(打印機(jī)、鍵盤(pán)有序、鼠標(biāo)等)
        • 硬件中斷: CPU異常(除以0), 時(shí)鐘信號(hào)等
        • 軟件中斷:發(fā)出(異常抹腿、切換到內(nèi)核態(tài)等)
      • 中斷向量表

        • (一般在內(nèi)存中) 一塊塊區(qū)域,存儲(chǔ)了中斷類(lèi)型和中斷響應(yīng)程序的對(duì)應(yīng)關(guān)系旭寿。每一行叫做一個(gè)中斷向量警绩。

          中斷類(lèi)型 ISR地址 描述
          00 0x0000 除以0
          01 0x0004 單步
          09 0x0024 鍵盤(pán)
          18 0x0048 打印機(jī)
          100 0x0190 自定義
      • 中斷QA

        • 32位機(jī)器上的中斷響應(yīng)路徑(ISR) 只有4個(gè)字節(jié),怎么實(shí)現(xiàn)復(fù)雜的程序?
        • 按鍵程序中斷響應(yīng)路徑到操作系統(tǒng)再到應(yīng)用盅称, 但是到底哪些鍵被按了怎么知道?
        • 中斷響應(yīng)后肩祥,如何恢復(fù)到中斷執(zhí)行前的狀態(tài)?
        • 既然出錯(cuò)了?為什么不出錯(cuò)了直接跳轉(zhuǎn)到錯(cuò)誤處理位置?
    • DMA(direct memory access)直接存儲(chǔ)器存取

      • DMA直接連接主存與IO設(shè)備
      • DMA直接連接主存與IO設(shè)備
      • 當(dāng)主存與IO設(shè)備交換信息時(shí),不需要中斷CPU
      • 可以提高CPU的效率
      • 硬盤(pán)和外置顯卡中都有DMA設(shè)備

2.3 計(jì)算機(jī)存儲(chǔ)器

  • 存儲(chǔ)器的分類(lèi)

    • 按存儲(chǔ)介質(zhì)分類(lèi)
      • 半導(dǎo)體存儲(chǔ)器 :內(nèi)存條微渠、 U盤(pán)搭幻、 固態(tài)硬盤(pán)
      • 磁存儲(chǔ)器:磁帶、磁盤(pán)
    • 按存取方式分類(lèi)
      • 隨機(jī)存儲(chǔ)器(RAM): 隨機(jī)讀取 與位置無(wú)關(guān)
      • 串行存儲(chǔ)器 :與位置有關(guān) 按順序查找
      • 只讀存儲(chǔ)器(ROM):只讀不寫(xiě)
  • 存儲(chǔ)器指標(biāo)

    • 讀寫(xiě)速度:7200轉(zhuǎn)
    • 存儲(chǔ)容量:2T
    • 價(jià)格:容量+價(jià)格=>位價(jià):每比特位價(jià)格
  • 層次結(jié)構(gòu)

    • 高速緩存:速度快逞盆,位格高
    • 主存:速度適中,位格適中
    • 輔存:速度慢松申,位格低
    • 緩存-主存層次
      • 原理:局部性原理
      • 實(shí)現(xiàn):在CPU與主存之間增加一層速度快(容量性坡)的Cache
      • 目的:解決主存速度不足的問(wèn)題
    • 主存-輔存層次
      • 原理:局部性原理
      • 實(shí)現(xiàn):主存之外增加輔助存儲(chǔ)器(磁盤(pán)、 SD卡贸桶、 U盤(pán)等)
      • 目的:解決主存容量不足的問(wèn)題
    • 局部性原理
      • 局部性原理是指CPU訪問(wèn)存儲(chǔ)器時(shí)舅逸,無(wú)論是存取指令還是存取數(shù)據(jù),所訪問(wèn)的存儲(chǔ)單元都趨于聚集在一個(gè)較小的連續(xù)區(qū)域中皇筛。

2.4 主存儲(chǔ)器與輔助存儲(chǔ)器

  • 計(jì)算機(jī)斷電琉历,內(nèi)存數(shù)據(jù)丟失

  • 計(jì)算機(jī)斷電,磁盤(pán)數(shù)據(jù)不會(huì)丟失

  • 主存

    • RAM(隨機(jī)存取存儲(chǔ)器: Random Access Memory)
    • RAM 通過(guò)電容存儲(chǔ)數(shù)據(jù),必須隔一段時(shí)間刷新一次
    • 如果掉電旗笔,那么一段時(shí)間后將丟失所有數(shù)據(jù)
    • 內(nèi)存與CPU如何交互的

    [圖片上傳失敗...(image-e4c649-1627805702081)]

    • 32位系統(tǒng):2^32 = 4 × 2^30 = 4????
    • 64位系統(tǒng):2^64 = 2^34 × 2^30 = 234????=224T??=214EB=24EB
    • 32位的系統(tǒng)最大支持4GB的內(nèi)存尋址范圍彪置,每一個(gè)字節(jié)都對(duì)應(yīng)一個(gè)內(nèi)存地址。內(nèi)存地址由 0 開(kāi)始編號(hào)蝇恶,比如第 1 個(gè)地址是 0拳魁,第 2 個(gè)地址是 1, 然后自增排列撮弧,最后一個(gè)地址是內(nèi)存中的字節(jié)數(shù)減 1潘懊。
    • 工作原理
      • 字:是指存放在一個(gè)存儲(chǔ)單元中的二進(jìn)制代碼組合
      • 字塊:存儲(chǔ)在連續(xù)的存儲(chǔ)單元中而被看作是一個(gè)單元的一組字
      • 假設(shè)一個(gè)字有32位,一個(gè)字塊共B個(gè)字贿衍,主存共M個(gè)字塊
        • B×M = 主存總字?jǐn)?shù)授舟;B×M×32 = 主存總?cè)萘?bits)
      • 字的地址包含兩個(gè)部分,前m位指定字塊的地址贸辈,后b位指定字在字塊中的地址
        • 2^?? = ?? , 前m位能表示出的尋址范圍是0--2^??
        • 2^?? = ??岂却,后b位能表示出的尋址范圍是0--2^b
  • 輔存:磁盤(pán)

    • 表面是可磁化的硬磁特性材料

    • 移動(dòng)磁頭徑向運(yùn)動(dòng)讀取磁道信息

    • 磁道、扇區(qū)裙椭、磁頭位置躏哩、磁頭方向

    • 尋道調(diào)度算法

      • 先來(lái)先服務(wù)算法
        • 按順序訪問(wèn)進(jìn)程的磁道讀寫(xiě)需求
      • 最短尋道時(shí)間優(yōu)先
        • 與磁頭當(dāng)前位置有關(guān)
        • 優(yōu)先訪問(wèn)離磁頭最近的磁道
      • 掃描算法(電梯算法)
        • 每次只往一個(gè)方向移動(dòng)
        • 到達(dá)一個(gè)方向需要服務(wù)的盡頭再反方向移動(dòng)
      • 循環(huán)掃描算法
        • 每次只往一個(gè)方向移動(dòng)
        • 一個(gè)方向到頭后再?gòu)念^開(kāi)始從同一個(gè)方向開(kāi)始移動(dòng)

2.5 高速緩存

  • 為了解決CPU與主存的速度不匹配的問(wèn)題

  • 緩存與主存的關(guān)系

    • 存儲(chǔ)的邏輯結(jié)構(gòu)類(lèi)似
    • 緩存的容量較小
    • 緩存的速度更快
  • 在主存緩存層次結(jié)構(gòu)中的工作原理

    • CPU需要的數(shù)據(jù)在緩存里:直接獲取
    • CPU需要的數(shù)據(jù)不在緩存里:需要去主存拿,替換策略
      • 需要性能良好的緩存替換策略
    • 命中率:從緩存取數(shù)據(jù)的命中率
      • 命中率是衡量緩存的重要性能指標(biāo)
      • 理論上CPU每次都能從高速緩存取數(shù)據(jù)的時(shí)候揉燃,命中率為1
      • 訪問(wèn)主存次數(shù): N??扫尺,訪問(wèn)Cache次數(shù): N??
      • 命中率? =????/(????+????)
    • 訪問(wèn)效率: ??
      • 訪問(wèn)主存時(shí)間: ???? ,訪問(wèn)緩存時(shí)間:????
      • 訪問(wèn)Cache-主存系統(tǒng)平均時(shí)間: ???? = ?×???? + (1 ? ?)×????
      • ?? =????/????
  • 高速緩存替換策略

    • 隨機(jī)算法
    • 先進(jìn)先出算法(FIFO)
      • 把高速緩存看做是一個(gè)先進(jìn)先出的隊(duì)列
      • 優(yōu)先替換最先進(jìn)入隊(duì)列的字塊
    • 最不經(jīng)常使用算法(LFU)
      • 優(yōu)先淘汰最不經(jīng)常使用的字塊
      • 需要額外的空間記錄字塊的使用頻率
    • 最近最少使用算法(LRU)
      • 優(yōu)先淘汰一段時(shí)間內(nèi)沒(méi)有使用的字塊
      • 如果正在使用的字塊在緩存就將其移到表頭炊汤,保證鏈表頭部節(jié)點(diǎn)是最近使用的
      • 有多種實(shí)現(xiàn)方法正驻,一般使用雙向鏈表

2.6 計(jì)算機(jī)的指令系統(tǒng)

  • 計(jì)算機(jī)指令

    • 計(jì)算機(jī)通過(guò)指令指揮計(jì)算機(jī)工作。
    • CPU被時(shí)鐘驅(qū)動(dòng)抢腐,不斷的讀取PC指針指向的指令姑曙,并增加PC指針,從內(nèi)存中讀取指令并執(zhí)行迈倍。(如此周而復(fù)始)
    • 不同的CPU架構(gòu)使用不同指令伤靠。目前使用最廣泛的是RISC(Reduced instruction set computer,精簡(jiǎn)指令集)
  • 機(jī)器指令的形式

    • 機(jī)器指令主要由兩部分組成:操作碼、地址碼
    • 操作碼指明指令所要完成的操作
    • 操作碼的位數(shù)反映了機(jī)器的操作種類(lèi)啼染,如果操作碼有8位就有2^8 = 256種操作
    • 地址碼直接給出操作數(shù)或者操作數(shù)的地址
    • 分三地址指令宴合、二地址指令和一地址指令與零地址指令
      • 零地址指令
        • 在機(jī)器指令中無(wú)地址碼
        • 空操作、停機(jī)操作迹鹅、中斷返回操作等
      • 一地址指令
        • (addr1)OP→ (addr1):自己對(duì)自己的操作
        • (addr1)OP(ACC) → (addr1):自增操作
      • 二地址指令
        • (addr1)OP(addr2) → (addr1)或(addr2): 結(jié)果放在addr1或addr2)
      • 三地址指令
        • 一個(gè)操作碼和三個(gè)地址碼
        • (addr1)OP(addr2) → (addr3):結(jié)果放在addr3卦洽, 例如: 1+2=3
  • 操作類(lèi)型

    • 數(shù)據(jù)傳輸
      • 寄存器之間、寄存器與存儲(chǔ)單元斜棚、存儲(chǔ)單元之間傳送
      • 數(shù)據(jù)讀寫(xiě)阀蒂、交換地址數(shù)據(jù)该窗、清零置一等操作
  • load/store指令用來(lái)從內(nèi)存中讀/寫(xiě)入內(nèi)存。通常會(huì)有多個(gè)版本的實(shí)現(xiàn)蚤霞,助記符是:
    - load類(lèi): Iw,Ib,Ih
    - store類(lèi): sw,sb,sh

    • 算術(shù)邏輯
      • 操作數(shù)之間的加減乘除運(yùn)算
        • 加減乘除等:addi, subi, divi, multi
      • 操作數(shù)的與或非等邏輯位運(yùn)算
        • 位運(yùn)算指令:and/or/xor
  • 移位操作

    • 數(shù)據(jù)左移(乘2)酗失、數(shù)據(jù)右移(除2)
    • 完成數(shù)據(jù)在算術(shù)邏輯單元的必要操作
    • 控制指令
      • 等待指令、停機(jī)指令争便、空操作指令级零、中斷指令等
  • 尋址方式

    • 指令尋址

      • 順序?qū)ぶ?/p>

      • 跳躍尋址

        地址 指令
        101 MOV R0,R1
        102 ADD R1,R2
        103 JMP 102
    • 數(shù)據(jù)尋址

      • 立即尋址
        • 指令直接獲得操作數(shù)
        • 無(wú)需訪問(wèn)存儲(chǔ)器
        • 優(yōu)點(diǎn):速度快
        • 缺點(diǎn):地址碼位數(shù)限制操作數(shù)表示范圍
      • 直接尋址
        • 直接給出操作數(shù)在主存的地址
        • 尋找操作數(shù)簡(jiǎn)單,無(wú)需計(jì)算數(shù)據(jù)地址
        • 優(yōu)點(diǎn):尋找操作數(shù)簡(jiǎn)單
        • 缺點(diǎn):地址碼位數(shù)限制操作數(shù)表示范圍
      • 間接尋址
        • 指令地址碼給出的是操作數(shù)地址的地址
        • 需要訪問(wèn)一次或多次主存來(lái)獲取操作數(shù)
        • 優(yōu)點(diǎn):操作數(shù)尋址范圍大
        • 缺點(diǎn):速度較慢

2.7 計(jì)算機(jī)的控制器

  • 控制器是協(xié)調(diào)和控制計(jì)算機(jī)運(yùn)行的
  • 程序計(jì)數(shù)器
    • 程序計(jì)數(shù)器用來(lái)存儲(chǔ)下一條指令的地址
    • 循環(huán)從程序計(jì)數(shù)器中拿出指令
    • 當(dāng)指令被拿出時(shí)滞乙,指向下一條指令
  • 時(shí)序發(fā)生器
    • 電氣工程領(lǐng)域奏纪,用于發(fā)送時(shí)序脈沖
    • CPU依據(jù)不同的時(shí)序脈沖有節(jié)奏的進(jìn)行工作
  • 指令譯碼器
    • 指令譯碼器是控制器的主要部件之一
    • 計(jì)算機(jī)指令由操作碼和地址碼組成
    • 翻譯操作碼對(duì)應(yīng)的操作以及控制傳輸?shù)刂反a對(duì)應(yīng)的數(shù)據(jù)
  • 指令寄存器
    • 指令寄存器也是控制器的主要部件之一
    • 從主存或高速緩存取計(jì)算機(jī)指令
  • 主存地址寄存器
    • 保存當(dāng)前CPU正要訪問(wèn)的內(nèi)存單元的地址
  • 主存數(shù)據(jù)寄存器
    • 保存當(dāng)前CPU正要讀或?qū)懙闹鞔鏀?shù)據(jù)
  • 通用寄存器
    • 用于暫時(shí)存放或傳送數(shù)據(jù)或指令
    • 可保存ALU的運(yùn)算中間結(jié)果
    • 容量比一般專(zhuān)用寄存器要大

2.8 計(jì)算機(jī)的運(yùn)算器

  • 運(yùn)算器是用來(lái)進(jìn)行數(shù)據(jù)運(yùn)算加工的

  • 數(shù)據(jù)緩沖器

    • 分為輸入緩沖和輸出緩沖
    • 輸入緩沖暫時(shí)存放外設(shè)送過(guò)來(lái)的數(shù)據(jù)
    • 輸出緩沖暫時(shí)存放送往外設(shè)的數(shù)據(jù)
  • ALU

    • ALU:算術(shù)邏輯單元,是運(yùn)算器的主要組成
    • 常見(jiàn)的位運(yùn)算(左右移斩启、與或非等)
    • 算術(shù)運(yùn)算(加減乘除等)
  • 通用寄存器

    • 用于暫時(shí)存放或傳送數(shù)據(jù)或指令
    • 可保存ALU的運(yùn)算中間結(jié)果
    • 容量比一般專(zhuān)用寄存器要大
  • 狀態(tài)字寄存器

    • 存放運(yùn)算狀態(tài)(條件碼序调、進(jìn)位、溢出兔簇、結(jié)果正負(fù)等)
    • 存放運(yùn)算控制信息(調(diào)試跟蹤標(biāo)記位发绢、允許中斷位等)
  • 總線

2.9 計(jì)算機(jī)指令的執(zhí)行過(guò)程

  • 指令執(zhí)行過(guò)程

    • 取指令
      • 從緩存取指令
      • 送到指令寄存器
    • 分析指令
      • 指令譯碼器譯碼
      • 發(fā)出控制信號(hào)
      • 程序計(jì)數(shù)器+1
    • 執(zhí)行指令
    • 裝載數(shù)據(jù)到寄存器
    • ALU處理數(shù)據(jù)
    • 記錄運(yùn)算狀態(tài)
    • 送出運(yùn)算結(jié)果

    [圖片上傳失敗...(image-1822e8-1627805702081)]

  • CPU的流水線設(shè)計(jì)

    • 提高CPU的綜合利用率
    • 類(lèi)似工廠的裝配線
    • 工廠的裝配線使得多個(gè)產(chǎn)品可以同時(shí)被加工
    • 在同一個(gè)時(shí)刻,不同產(chǎn)品均位于不同的加工階段
    • 串行執(zhí)行m條指令: ??1 = 3t × ??
    • 流水線執(zhí)行m條指令: ??2 = ?? × (?? + 2)
    • 流水線執(zhí)行效率:H=??2/??1= ?? × (?? + 2)/3t × ??=1/3+1/3m, m很大的情況下是串行執(zhí)行的3倍效率
    指令 時(shí)間片 時(shí)間片 時(shí)間片 時(shí)間片 時(shí)間片
    1 取指令 分析指令 執(zhí)行指令
    2 取指令 分析指令 執(zhí)行指令
    3 取指令 分析指令 執(zhí)行指令

3.計(jì)算篇

3.1 進(jìn)制運(yùn)算的基礎(chǔ)

  • 什么是進(jìn)制
    • 進(jìn)位制是一種記數(shù)方式垄琐,亦稱(chēng)進(jìn)位計(jì)數(shù)法或位值計(jì)數(shù)法
    • 有限種數(shù)字符號(hào)來(lái)表示無(wú)限的數(shù)值
    • 使用的數(shù)字符號(hào)的數(shù)目稱(chēng)為這種進(jìn)位制的基數(shù)或底數(shù)
    • 計(jì)算機(jī)喜歡二進(jìn)制边酒,但是二進(jìn)制表達(dá)太長(zhǎng)了
    • 使用大進(jìn)制位可以解決這個(gè)問(wèn)題
    • 八進(jìn)制、十六進(jìn)制滿足2的n次方的要求
    • 二進(jìn)制
      • 1024=0b1000000000
    • 八進(jìn)制
      • 1024=0o2000
    • 十進(jìn)制: [0-9]
    • 十六進(jìn)制
      • MAC地址:[0-9]和A狸窘、 B墩朦、 C、 D翻擒、 E氓涣、 F
      • 1024=0x400
    • 二十進(jìn)制
      • 瑪雅文明的瑪雅數(shù)字
      • 因努伊特的因努伊特?cái)?shù)字
    • 六十進(jìn)制
      • 時(shí)間、坐標(biāo)陋气、角度等量化數(shù)據(jù)
  • 進(jìn)制的表示法
    • 正整數(shù)N劳吠,基數(shù)為r,位數(shù)為n
    • N=?????1×r???1 +?????2× r???2 + ? + ??1×?? + ??0
    • N= 1024 = 1 ×10^3 +0×10^3+ 2 × 10^1 + 4× 10^0
    • ?? = 10000000000 = 1 × 2^10
  • 二進(jìn)制轉(zhuǎn)十進(jìn)制的方法
    • 按權(quán)展開(kāi)法
    • ?? = 01100101 = 1 × 2^6 + 1 × 2^5 + 1 ×2^2 + 1 = 101
    • 小數(shù)的按權(quán)展開(kāi)法
    • ?? = 0.11001 = 1×2^?1 + 1×2^?2 + 1× 2^?5 = 0.78125=25/32
  • 十進(jìn)制轉(zhuǎn)二進(jìn)制的方法
    • (整數(shù))重復(fù)相除法
    • 重復(fù)除以2 巩趁,得商痒玩, 取余數(shù),最后一個(gè)余數(shù)為最高位
    • (小數(shù))重復(fù)相乘法
    • 重復(fù)乘以2晶渠, 得積 凰荚,取1,第一個(gè)余數(shù)為最高位

3.2 原碼&反碼&補(bǔ)碼

  • 使用0表示正數(shù)褒脯,使用1表示負(fù)數(shù),最高位表示符號(hào)位缆毁,其它都是數(shù)字位

  • +237=011101101番川, -237=111101101

  • 兩個(gè)字節(jié)16位表示+237 【0】 0 0 0 0 0 0 0 1 1 1 0 1 1 0 1

  • 原碼表示法

    • 使用0表示正數(shù)、 1表示負(fù)數(shù)
    • 規(guī)定符號(hào)位位于數(shù)值第一位
    • 表達(dá)簡(jiǎn)單明了,是人類(lèi)最容易理解的表示法
    • 0有兩種表示方法: 00颁督、 10
    • 原碼進(jìn)行運(yùn)算非常復(fù)雜践啄,特別是兩個(gè)操作數(shù)符號(hào)不同的時(shí)候
      • 判斷兩個(gè)操作數(shù)絕對(duì)值大小
      • 使用絕對(duì)值大的數(shù)減去絕對(duì)值小的數(shù)
      • 對(duì)于符號(hào)值,以絕對(duì)值大的為準(zhǔn)
    • 希望找到不同符號(hào)操作數(shù)更加簡(jiǎn)單的運(yùn)算方法
    • 希望找到使用正數(shù)代替負(fù)數(shù)的方法
    • 使用加法操作代替減法操作沉御,從而消除減法
  • 補(bǔ)碼表示法

    • 整數(shù)的補(bǔ)碼
      • 如果 x∈[0, 2^??) X=x 屿讽,n是數(shù)字位的個(gè)數(shù)
      • 如果 x∈[?2^??, 0) X=2^(??+1) + ??
        • 例如:n=4, x=13吠裆,計(jì)算x的二進(jìn)制原碼和補(bǔ)碼
          • 原碼: x=0,1101
          • 補(bǔ)碼: x=0,1101
        • 例如:n=4伐谈,x=-13,計(jì)算x的二進(jìn)制原碼和補(bǔ)碼
          • 原碼: x=1,1101
          • 補(bǔ)碼: 2^(??+1) + ??= 2^(4+1() ? 13 = 100000 ? 1101 = 10011
    • 小數(shù)的補(bǔ)碼
      • 如果 x∈[0, 1) X=x
      • 如果 x∈[?1, 0) X=2+x
      • 規(guī)律:小數(shù)的反碼等于原碼除符號(hào)位外按位取反试疙,補(bǔ)碼等于反碼+1
    • 在計(jì)算補(bǔ)碼的過(guò)程中诵棵,還是使用了減法
    • 需要尋找使用正數(shù)代替負(fù)數(shù)的方法
  • 反碼表示法

    • 反碼的目的是找出原碼和補(bǔ)碼之間的規(guī)律,消除轉(zhuǎn)換過(guò)程中的減法
    • 如果 x∈[0, 2^??) X=x 祝旷,n是數(shù)字位的個(gè)數(shù)
    • 如果 x∈[?2^??, 0) X=(2^(??+1)-1) + ??
    • 規(guī)律:負(fù)數(shù)的反碼等于原碼除符號(hào)位外按位取反履澳,負(fù)數(shù)的補(bǔ)碼等于反碼+1
      • -13, 原碼:1,1101 怀跛,反碼:1,0011 距贷,補(bǔ)碼:1,0010
      • -7, 原碼: 1,0111吻谋,反碼: 1,1001忠蝗,補(bǔ)碼: 1,1000
      • -1, 原碼: 1,0001 滨溉,反碼:1,1111什湘,補(bǔ)碼: 1,1110
    • x=-13,計(jì)算x的二進(jìn)制原碼和反碼
      • 原碼: x=1,1101
      • 反碼: (2??+1?1) + ?? = (2^4+1?1) ? 13 = 011111 ? 1101 = 1,0010
      • 反碼: x=1,0010

[圖片上傳失敗...(image-904cfc-1627805702081)]

3.3 定點(diǎn)數(shù)與浮點(diǎn)數(shù)

  • 定點(diǎn)數(shù)的表示方法

    • 小數(shù)點(diǎn)固定在某個(gè)位置的數(shù)稱(chēng)之為定點(diǎn)數(shù)
    • 純小數(shù) :符號(hào)位【小數(shù)點(diǎn)】數(shù)值位
    • 純整數(shù):符號(hào)位 數(shù)值位 【小數(shù)點(diǎn)】
    • 其它小數(shù)需要乘以比例因子以滿足定點(diǎn)數(shù)保存格式晦攒,10.01 需要左移兩位或者右移兩位
    • 計(jì)算機(jī)中的存儲(chǔ)形式見(jiàn)下表闽撤,小數(shù)點(diǎn)不顯示
    數(shù)值 符號(hào)位 數(shù)值位
    0.1011 0 1011
    -0.1011 1 1011
    1011 0 1011
    -1011 1 1011
  • 浮點(diǎn)數(shù)的表示方法

    • 計(jì)算機(jī)處理的很大程度上不是純小數(shù)或純整數(shù)

    • 數(shù)據(jù)范圍很大,定點(diǎn)數(shù)難以表達(dá)

    • 浮點(diǎn)數(shù)的表示格式

      • 類(lèi)比科學(xué)計(jì)數(shù)法:123450000000 = 1.2345 × 10^11 脯颜, 1.2345:尾數(shù) 哟旗,10:基數(shù) ,11:階碼
      • ?? = ?? × ??^?? 栋操,S:尾數(shù)闸餐, r:基數(shù), j:階碼
      • 階碼符號(hào)位|階碼數(shù)值位|尾數(shù)符號(hào)位|尾數(shù)數(shù)值位
      • 尾數(shù)規(guī)定使用純小數(shù)
      • 11.0101 = 0.110101 × 2^10
      • 11.0101 = 0.0110101 × 2^11
      • 計(jì)算機(jī)中的存儲(chǔ)形式見(jiàn)下表矾芙,小數(shù)點(diǎn)不顯示
      數(shù)字 階碼符號(hào)位 階碼數(shù)值位 尾數(shù)符號(hào)位 尾數(shù)數(shù)值位(8位)
      0.110101 × 2^10 0 10 0 1010100
      0.0110101 × 2^11 0 11 0 01101010
  • 浮點(diǎn)數(shù)的表示范圍

    • 假設(shè)階碼數(shù)值取m位舍沙,尾數(shù)數(shù)值取n位
    • 階碼表示范圍: [?(??^?? ? ??), ??^?? ? ??]
    • 尾數(shù)表示范圍: [?(?? ? ??^???), ?(??^???)] [??^???, ?? ? ???^??]
    • 單精度浮點(diǎn)數(shù):使用4字節(jié)、 32位來(lái)表達(dá)浮點(diǎn)數(shù)(float)
    • 雙精度浮點(diǎn)數(shù):使用8字節(jié)剔宪、 64位來(lái)表達(dá)浮點(diǎn)數(shù)(double)

    [圖片上傳失敗...(image-2f48a7-1627805702081)]

  • 浮點(diǎn)數(shù)的規(guī)格化

    • 尾數(shù)規(guī)定使用純小數(shù)
    • 尾數(shù)最高位必須是1
    • 例如:11.0101 = 0.110101 × 2^10
  • 兩者的對(duì)比

    • 當(dāng)定點(diǎn)數(shù)與浮點(diǎn)數(shù)位數(shù)相同時(shí)拂铡, 浮點(diǎn)數(shù)表示的范圍更大
    • 當(dāng)浮點(diǎn)數(shù)尾數(shù)為規(guī)格化數(shù)時(shí)壹无, 浮點(diǎn)數(shù)的精度更高(尾數(shù)存8位,前面的0多了丟失的精度就更多)
    • 浮點(diǎn)數(shù)運(yùn)算包含階碼和尾數(shù)感帅, 浮點(diǎn)數(shù)的運(yùn)算更為復(fù)雜
    • 浮點(diǎn)數(shù)在數(shù)的表示范圍斗锭、精度、溢出處理失球、編程等方面均優(yōu)于定點(diǎn)數(shù)
    • 浮點(diǎn)數(shù)在數(shù)的運(yùn)算規(guī)則岖是、運(yùn)算速度、硬件成本方面不如定點(diǎn)數(shù)

3.4 定點(diǎn)數(shù)的加減法運(yùn)算

  • 整數(shù)加法:A 補(bǔ) + B 補(bǔ) = ?? + ?? 補(bǔ) (??????2^(??+1))

  • 小數(shù)加法:A 補(bǔ) + B 補(bǔ) = ?? + ?? 補(bǔ) (??????2)

  • 數(shù)值位與符號(hào)位一同運(yùn)算实苞,并將符號(hào)位產(chǎn)生的進(jìn)位自然丟掉

  • 整數(shù)減法:A 補(bǔ) ? B 補(bǔ) = ?? + (???) 補(bǔ) (??????2^(??+1))

  • 小數(shù)減法:A 補(bǔ) ? B 補(bǔ) = ?? + (???) 補(bǔ) (??????2)

  • -B[補(bǔ)]等于B[補(bǔ)]連同符號(hào)位按位取反豺撑,末位加一,B 補(bǔ) = 1,0010101硬梁, (?B) 補(bǔ) = 0,1101011

  • 負(fù)數(shù)的反碼等于原碼按位取反前硫,補(bǔ)碼等于反碼+1

  • 例如: A=-110010, B=001101荧止,求A+B

    • A[補(bǔ)] = 1,001110
    • B 補(bǔ) = B[原] = 0,001101
    • A 補(bǔ) + B 補(bǔ) = (A + B) 補(bǔ) =1,011011
    • (A + B)原 = ?100101
  • 例如:A=11001000屹电, B=-00110100,求A-B

    • A 補(bǔ) = A[原] = 0,11001000
    • B 補(bǔ) = 1,11001100
    • (?B) 補(bǔ) = 0,00110100
    • A 補(bǔ) ? B 補(bǔ) = A + (?B) 補(bǔ)=0,11111100
    • A ? B(原) = 111111100
  • 雙符號(hào)位判斷溢出

    • 雙符號(hào)位判斷法
      • 單符號(hào)位表示變成雙符號(hào)位: 0=>00,1=>11
      • 雙符號(hào)位產(chǎn)生的進(jìn)位丟棄
      • 結(jié)果的雙符號(hào)位不同則表示溢出

3.5 浮點(diǎn)數(shù)的加減法運(yùn)算

  • ?? = ???? × ??^????跃巡,?? = 0.1101 × 2^01

  • ?? = ???? × ??^??y危号,?? = (?0.1010) × 2^11

  • 対階

    • 対階的目的是使得兩個(gè)浮點(diǎn)數(shù)階碼一致,使得尾數(shù)可以進(jìn)行運(yùn)算
    • 浮點(diǎn)數(shù)尾數(shù)運(yùn)算簡(jiǎn)單
    • 浮點(diǎn)數(shù)位數(shù)實(shí)際小數(shù)位與階碼有關(guān)
    • 階碼按小階看齊大階的原則
    數(shù)字 階碼符號(hào)位 階碼數(shù)值位 尾數(shù)符號(hào)位 尾數(shù)數(shù)值位(8位)
    0.1101 × 2^01 00 0001 00 1101
    (?0.1010) × 2^11 00 0011 01 1010
    • 対階操作:將x的數(shù)值右移兩位素邪,?? = 0.001101 × 2^11
    數(shù)字 階碼符號(hào)位 階碼數(shù)值位 尾數(shù)符號(hào)位 尾數(shù)數(shù)值位(8位)
    0.001101 × 2^11 00 0011 00 0011(01)舍棄后兩位
    (?0.1010) × 2^11 00 0011 01 1010
  • 尾數(shù)求和

    • 使用補(bǔ)碼進(jìn)行運(yùn)算
    • 減法運(yùn)算轉(zhuǎn)化為加法運(yùn)算: A - B = A + (-B)
    • ??[原] = 00.0011外莲,??[補(bǔ)] = 00.0011
    • ??[原] = 11.1010,??[補(bǔ)] = 11.0110
    • S = (?? + ??)[補(bǔ)] = 11.1001
    數(shù)字 階碼符號(hào)位 階碼數(shù)值位 尾數(shù)符號(hào)位 尾數(shù)數(shù)值位(8位)
    11.1001 00 0011 11 1001
  • 尾數(shù)規(guī)格化

    • ◆ 對(duì)補(bǔ)碼進(jìn)行規(guī)格化需要判斷兩種情況: S>0和S<0
    • S[補(bǔ)] = 00.1xxxxxx(?? > 0)
    • S[補(bǔ)] = 11.0xxxxxx(?? < 0)
    • 如果不滿足此格式兔朦,需要進(jìn)行左移偷线, 同時(shí)階碼相應(yīng)變化,以滿足規(guī)格化
    • S = (?? + ??)[補(bǔ)] = 11.1001沽甥,不滿足約定格式
    • S = (?? + ??)[補(bǔ)] = 11. (1)0010(左移舍棄声邦,階碼數(shù)值位也要相應(yīng)變化)
    數(shù)字 階碼符號(hào)位 階碼數(shù)值位 尾數(shù)符號(hào)位 尾數(shù)數(shù)值位(8位)
    11.0010 00 0010 11 0010
    • S = ?? + ?? 補(bǔ) = 11.0010,?? + ?? 原 = ?0.1110
    • ?? + ?? = ?0.1110× 2^10
    • 一般情況下都是左移摆舟,符號(hào)位不一致下需要右移(定點(diǎn)運(yùn)算的溢出情況)
    • 右移的話則需要進(jìn)行舍入操作
  • 舍入

    • 0舍1入” 法(二進(jìn)制的四舍五入)
    • S 補(bǔ) = 10.10110111亥曹,符號(hào)位不一致,右移舍棄尾數(shù)再+1恨诱, S 補(bǔ) = 11.01011011(1)+1=11.01011100
    • 右移階碼要+1
  • 溢出判斷

    • 定點(diǎn)運(yùn)算雙符號(hào)位不一致為溢出
    • 浮點(diǎn)運(yùn)算尾數(shù)雙符號(hào)位不一致不算溢出媳瞪,因?yàn)槲矓?shù)雙符號(hào)位可以進(jìn)行右規(guī)
    • 浮點(diǎn)運(yùn)算主要通過(guò)階碼的雙符號(hào)位判斷是否溢出
    • 如果規(guī)格化后,階碼雙符號(hào)位不一致照宝,則認(rèn)為是溢出

[圖片上傳失敗...(image-424183-1627805702081)]

3.6 浮點(diǎn)數(shù)的乘除法運(yùn)算

  • 乘法:階碼相加蛇受,尾數(shù)求積

  • ?? × ?? = (???? × ????) × ??^(????+??y)

  • 除法:階碼相減,尾數(shù)求商

  • ??/?? = (????/????) × ??^(???????y)

  • 階碼運(yùn)算

  • 尾數(shù)運(yùn)算

  • 尾數(shù)規(guī)格化

  • 舍入

  • 溢出判斷

  • 例如: ?? = 0.11010011 × 2^1101厕鹃, ?? = 0.11101110 × 2^0001龙巨,假設(shè)階碼4位笼呆,尾數(shù)8位熊响,計(jì)算x * y

    • ?? × ?? = (???? × ????) ×^??(????+??y)
    • = (0.11010011 × 0.11101110) × ??^(1101+0001)
    • = 0.11000100(保留八位) × ??^1110

4.關(guān)于我

一個(gè)專(zhuān)注基礎(chǔ)知識(shí)的十二線小碼農(nóng)旨别,本著 基礎(chǔ),體系汗茄,實(shí)踐秸弛,分享 的學(xué)習(xí)理念,在自我提升的同時(shí)分享自己的心得體會(huì)洪碳,不斷完善递览,周而復(fù)始。

個(gè)人網(wǎng)站 basedev.cn

Github

BaseDev系列只整理點(diǎn)到為止的知識(shí)綱領(lǐng)瞳腌,不求甚解绞铃;欲知其所以然者還得回歸書(shū)本且付諸實(shí)踐

5.參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嫂侍,隨后出現(xiàn)的幾起案子儿捧,更是在濱河造成了極大的恐慌,老刑警劉巖挑宠,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菲盾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡各淀,警方通過(guò)查閱死者的電腦和手機(jī)懒鉴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)碎浇,“玉大人临谱,你說(shuō)我怎么就攤上這事∨В” “怎么了悉默?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)溺健。 經(jīng)常有香客問(wèn)我麦牺,道長(zhǎng),這世上最難降的妖魔是什么鞭缭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任剖膳,我火速辦了婚禮,結(jié)果婚禮上岭辣,老公的妹妹穿的比我還像新娘吱晒。我一直安慰自己,他們只是感情好沦童,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布仑濒。 她就那樣靜靜地躺著叹话,像睡著了一般。 火紅的嫁衣襯著肌膚如雪墩瞳。 梳的紋絲不亂的頭發(fā)上驼壶,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音喉酌,去河邊找鬼热凹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泪电,可吹牛的內(nèi)容都是我干的般妙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼相速,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碟渺!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起突诬,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤苫拍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后攒霹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體怯疤,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年催束,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了集峦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抠刺,死狀恐怖塔淤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情速妖,我是刑警寧澤高蜂,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布仰泻,位于F島的核電站读慎,受9級(jí)特大地震影響屈留,放射性物質(zhì)發(fā)生泄漏艾蓝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一旋炒、第九天 我趴在偏房一處隱蔽的房頂上張望掌测。 院中可真熱鬧乖阵,春花似錦旅择、人聲如沸惭笑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沉噩。三九已至捺宗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間川蒙,已是汗流浹背蚜厉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留派歌,地道東北人弯囊。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胶果,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斤斧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容