目錄
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
- 輸入設(shè)備
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億次
- 網(wǎng)絡(luò)速度
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編碼
- GB2312
- 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)(就緒/未就緒)
- 片內(nè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)改變
- 鏈?zhǔn)讲樵?xún)-串聯(lián)
2.2 計(jì)算機(jī)的輸入輸出設(shè)備
-
常見(jiàn)輸入輸出設(shè)備
-
輸入設(shè)備
- 字符輸入設(shè)備
- 鍵盤(pán):
- 薄膜鍵盤(pán)
- 機(jī)械鍵盤(pán)(根據(jù)段落感、聲音、壓力笤受、鍵程的不同分為:黑軸穷缤、紅軸、青軸箩兽、茶軸)
- 電容鍵盤(pán)
- 鍵盤(pán):
- 圖像輸入設(shè)備
- 鼠標(biāo)
- 數(shù)位板:常用于繪圖設(shè)計(jì)創(chuàng)作津肛,輸入板和壓感筆
- 掃描儀:將圖形信息轉(zhuǎn)換為數(shù)字信號(hào)
- 字符輸入設(shè)備
-
輸出設(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ǔ)介質(zhì)分類(lèi)
-
存儲(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)
- 先來(lái)先服務(wù)算法
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ù)该窗、清零置一等操作
- 數(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ù)之間的加減乘除運(yùn)算
- 算術(shù)邏輯
-
移位操作
- 數(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
- 例如:n=4, x=13吠裆,計(jì)算x的二進(jìn)制原碼和補(bǔ)碼
- 小數(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ù)的方法
- 整數(shù)的補(bǔ)碼
-
反碼表示法
- 反碼的目的是找出原碼和補(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)位不同則表示溢出
- 雙符號(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ù)始。
BaseDev系列只整理點(diǎn)到為止的知識(shí)綱領(lǐng)瞳腌,不求甚解绞铃;欲知其所以然者還得回歸書(shū)本且付諸實(shí)踐