參考pdf 《computer basic》
CPU
英文名: Central Processing Unit
sysctl machdep.cpu.brand_string
可查看CPU型號(hào)執(zhí)行過程:
(1)提裙茸怼:從RAM(Random Access Memory??????????????????????????????????????????????????????????????????????隨機(jī)存取存儲(chǔ)器/主存)取指令。RAM速度很快,通常作為臨時(shí)存儲(chǔ)介質(zhì)窖维。
(2)解碼
(3)執(zhí)行組成:控制單元和算術(shù)邏輯單元ALU
ALU:處理算數(shù)和邏輯運(yùn)算
從功能來看潮尝,包括:控制器锈候、運(yùn)算器您朽、時(shí)鐘绑洛、寄存器 四部分內(nèi)存
每個(gè)字節(jié)都有一個(gè)地址編號(hào)-
寄存器
image.png
其中:
程序計(jì)數(shù)器(Program Counter):用于存放下一條指令所在的單元的地址救斑,所以它控制著程序的流程/
指令寄存器:存儲(chǔ)正在被運(yùn)行的指令,供CPU內(nèi)部使用真屯,程序員無法讀寫
棧寄存器:存儲(chǔ)棧區(qū)域的起始位置
標(biāo)志寄存器:保存某個(gè)分支判斷的值/溢出檢查脸候、奇偶校驗(yàn)
補(bǔ)充:程序的比較運(yùn)算,其實(shí)是在CPU內(nèi)部做減法運(yùn)算
通過地址和索引實(shí)現(xiàn)數(shù)組
需要用到基址寄存器和變址寄存器
- CPU指令執(zhí)行過程
五個(gè)階段(馮諾伊曼):取指令绑蔫、指令譯碼运沦、執(zhí)行指令、訪問取數(shù)配深、結(jié)果寫回
內(nèi)存
分為三種:
隨機(jī)存儲(chǔ)器RAM携添,停電信息會(huì)丟失
只讀存儲(chǔ)器ROM,停電信息不會(huì)丟失
高速緩存Cache
內(nèi)存IC:
RD讀取凉馆,WR寫數(shù)據(jù)
內(nèi)存中數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)還有數(shù)據(jù)類型薪寓,需要占用特定大小的內(nèi)存
數(shù)組是內(nèi)存的實(shí)現(xiàn)隊(duì)列有循環(huán)隊(duì)列,有環(huán)形隊(duì)列
二進(jìn)制
1字節(jié) = 8bit
移位運(yùn)算:左移代表*2澜共。表示負(fù)數(shù):首位符號(hào)為1向叉。在表示負(fù)數(shù)時(shí)要用補(bǔ)數(shù)來表示。(補(bǔ)數(shù)就是用正數(shù)來表示的負(fù)數(shù))
求補(bǔ)數(shù)的方法:原始數(shù)值取反嗦董,+1右移
邏輯右移:最高位補(bǔ)0
算數(shù)右移:填充原來的符號(hào)值符號(hào)擴(kuò)展
不管是正數(shù)還是負(fù)數(shù)母谎,只需要用原來的符號(hào)位填充高位即可。
壓縮算法
文件是以字節(jié)為單位來存儲(chǔ)的
RLE算法(Run Length Encoding 行程長度編碼)
存儲(chǔ)的時(shí)候京革,一個(gè)英文是一個(gè)半角字符奇唤,用一個(gè)字節(jié)來存儲(chǔ)。
把文件內(nèi)容用數(shù)據(jù) * 重復(fù)次數(shù)
來表示的方法匹摇,只有對連續(xù)的字符才會(huì)進(jìn)行壓縮哈夫曼算法
磁盤
與內(nèi)存的區(qū)別:內(nèi)存通過電流實(shí)現(xiàn)存儲(chǔ)咬扇,磁盤通過磁記錄技術(shù) 來實(shí)現(xiàn)的。所以斷電之后廊勃,內(nèi)存中的數(shù)據(jù)不能保留懈贺,但是磁盤中的可以经窖。
以前程序的運(yùn)行是通過改變計(jì)算機(jī)的布線來讀寫指令的
磁盤緩存
為了讀取相同的磁盤內(nèi)容時(shí),可以提高速率梭灿。
磁盤緩存是內(nèi)存的一部分画侣。虛擬內(nèi)存
本質(zhì):把磁盤的一部分作為假想內(nèi)存來使用。它使得應(yīng)用程序認(rèn)為它擁有連續(xù)可用的內(nèi)存堡妒,在需要運(yùn)行時(shí)將虛擬內(nèi)存與內(nèi)存置換
配乱。
為了解決程序過大造成內(nèi)存空間耗盡的問題
在Windows中是PAGEFILE.SYS頁面
置換分為:分頁式(windows)和分段式
分頁式:Windows中頁的大小為4KB
虛擬內(nèi)存使用的文件是頁文件-
使程序大小更優(yōu)化
DLL:動(dòng)態(tài)鏈接庫
_stdcall:標(biāo)準(zhǔn)調(diào)用。dll中函數(shù)的調(diào)用大多都是stdcall皮迟,C語言程序默認(rèn)都不是_stdcall搬泥,而是C調(diào)用。因?yàn)楹瘮?shù)傳入?yún)?shù)(的個(gè)數(shù))是可變的伏尼,導(dǎo)致無法清理?xiàng)佑钾?臻g。
C 與Java的區(qū)別是 C需要人為控制釋放內(nèi)存空間
默認(rèn)函數(shù)的清除操作是在調(diào)用的一方
C語言中烦粒,函數(shù)的返回值是通過寄存器來傳遞的,而不是通過棧
image.png
_stdcall為反復(fù)調(diào)用方法代赁,執(zhí)行棧清理的開銷比較小 -
磁盤的物理結(jié)構(gòu)
劃分為空間的方法:可變長方式 和 扇區(qū)方式(固定長度)扰她。
image.png
扇區(qū)是讀寫的最小單位,Windows中扇區(qū)一般是512字節(jié)芭碍。
輸入輸出設(shè)備
本文件完結(jié)??
參考《cxuan-os》
流水線
形式:由于CPU有單獨(dú)的訪問徒役、解碼、執(zhí)行單元窖壕,CPU執(zhí)行第N條指令忧勿,對N+1條指令解碼,讀取N+2條指令瞻讽。
-
超標(biāo)量(superscalar)CPU
image.png
執(zhí)行單元同時(shí)執(zhí)行鸳吸,并且只要空閑,就去緩沖區(qū)中找是否有指令速勇。
此種設(shè)計(jì)晌砾,應(yīng)用程序通常是無序執(zhí)行的。大多數(shù)硬件需要保證執(zhí)行結(jié)果的正確性烦磁。
CPU/內(nèi)存
磁盤
磁道
每個(gè)磁頭可以讀取一段環(huán)形區(qū)域养匈,稱為磁道(track)。
一個(gè)給定臂的位置上所有的磁道合并起來都伪,稱為柱面(cylinder)呕乎。固態(tài)硬盤不是磁盤,數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器(閃存)中陨晶。
虛擬內(nèi)存
需要快速映像內(nèi)存地址
猬仁,把程序生成的地址轉(zhuǎn)換為RAM中的物理地址。由CPU中的存儲(chǔ)器管理單元MMU
部件來完成。ATA
ATA 高級(jí)技術(shù)附件(AT attachment)
SATA 串行高級(jí)技術(shù)附件(Serial ATA)
慎用高級(jí)
這個(gè)詞
I/O 設(shè)備
設(shè)備控制器
含有寄存器
所有設(shè)備寄存器的結(jié)合構(gòu)成了I/O端口空間
逐虚。實(shí)現(xiàn)輸入輸出的三種方式
(1)忙等待
用戶程序--->系統(tǒng)調(diào)用--->轉(zhuǎn)為驅(qū)動(dòng)程序的程序調(diào)用--->啟動(dòng)I/O聋溜、循環(huán)檢查設(shè)備---> |||(輸入完成)---> 數(shù)據(jù)送到指定地方并返回 ---> 控制權(quán)交給調(diào)用者
(2)中斷
設(shè)備驅(qū)動(dòng)程序啟動(dòng)設(shè)備---> 操作完成時(shí)發(fā)生中斷
(3)使用特殊的硬件
直接存儲(chǔ)器訪問(DMA):控制內(nèi)存和控制器之間的位流,無需CPU的干預(yù)叭爱。
[補(bǔ)充中斷]:CPU決定中斷:
保存當(dāng)前狀態(tài):程序計(jì)數(shù)器和PSW
切換內(nèi)核態(tài)
中斷開始:
移除棧中的程序計(jì)數(shù)器和PSW撮躁,保存。
查詢設(shè)備的狀態(tài){
...中斷處理程序全部完成...
}
返回到先前用戶尚未執(zhí)行的第一條指令买雾。
如果正在中斷把曼,又發(fā)生了一條中斷,則其他中斷需要等待漓穿。
總線
參考CS224 Computer Organization- Bilkent
https://www.youtube.com/results?search_query=principles+of+computer+organization
Chapter 1
處理器有:Intel / AMD
計(jì)算機(jī)組成:input, output, memory, datapath, control
datapath + control = CPU(processor)