先整體: VonNeumannArchitecture 馮·諾依曼體系結構, 也叫 普林斯頓架構, 存儲程序計算機=運算器+控制器+存儲器+輸入+輸出
萬丈高樓平地起:
- binary 二進制
- 電工&電路
開始打怪升級:
- CPU
- 存儲與IO(見下篇)
寫在最後:
- 計組知識地圖
- 關於學習的碎碎念
寫在前面
準備好接收知識的壓縮餅乾🍪
了嗎? blog從自己積累的知識庫中進行提煉, 如果遇到不理解的地方, 大概率是不理解相關概念
, 多使用維基百科/百度百科進行搜索, 尤其是 引用
的格式, 基本上都已經在維基百科/百度百科搜索確認過
- 英文詞彙: https://en.wikipedia.org/wiki/{query}
- 中文詞彙: https://zh.wikipedia.org/wiki/{query} https://baike.baidu.com/item/{query}
bin 二進制 二進制可執行文件
計算機只有二進制! 計算機只有二進制! 計算機只有二進制!
編碼
二進制: 8進制.oct 16進制.hex
-
二進制 > 十進制, 涉及到的概念: 原碼.反碼.補碼; signed/unsigned int/uint
- uint8=byte=
ASCII
: chr/ord'a'^' '='A'
特殊字符(\n
\r
)
- uint8=byte=
二進制 > float.浮點數: 浮點數轉換
-
十進制 > string.字符串:
charset
.字符集.encoding
.字符編碼.亂碼-
unicode: utf8=, 1-4byte 變長, 第一個字節爲
1110xxxx 10xxxxxx 10xxxxxx 0xxxxxxx
, 常見utf8顯示\xhh\xhh
- big5.臺灣 GB2312.中國
-
unicode: utf8=, 1-4byte 變長, 第一個字節爲
字符串 + 格式 > json xml yaml toml ...
浮點數中的特殊值定義
e | f | s | float |
---|---|---|---|
0 | 0 | 0/1 | 0 |
0 | !=0 | 0/1 | 0.f |
255 | 0 | 0 | INI_MAX |
255 | 0 | 1 | INI_MIN |
255 | !=0 | 0/1 | NAN |
運算
- 位運算: 與
&
或|
非~
異或^
<< >>
移位 - 位運算基礎上實現加減乘除等數學運算: LeetCode上有相關的題目
附贈相關的 LeetCode 原題:
- 大數相加: https://leetcode-cn.com/problems/add-strings/
- 兩數相除: https://leetcode-cn.com/problems/divide-two-integers
- utf8編碼校驗: https://leetcode-cn.com/problems/utf-8-validation
電工 電路
電工/電路需要了解的基礎知識: 從簡單門電路(與 或 非 異或)開始, 不斷組合成更復雜的電路:
- 門電路>半加器>全加器>加法器>ALU 超前進位加法器
- 乘法器 並行加速.單敗淘汰 電路並行.門延遲.gateDelay
- 寄存器=能夠進行狀態讀寫的電路元件=latch.鎖存器+D觸發器
- 自動電路.固定週期 > PC 程序計數器
- 譯碼電路.內存地址獲取數據/指令
- 摩斯碼電報機: relay.繼電器 反向器
電路2大分類:
- 組合邏輯電路.加法器=固定輸入固定輸出
- 時序邏輯電路.時鐘信號
最後:
- VLSI.超大規模集成電路
CPU
兩大核心功能: 處理單元+控制單元
- processUnit.處理器單元=ALU.算術邏輯單元+processorRegister.處理器寄存器=算術和邏輯運算=datapath.數據通路/運算器
- CU.控制器單元=instructionRegister.指令寄存器+PC.程序計數器=控制程序流程=分支+跳轉
2個核心指標: 性能+功耗
- 性能=提速+擴大帶寬
- 性能優化: 加大大概率事件 通過預測提高性能
- responseTime.響應時間/executionTime.執行時間 NewRelic.性能測試工具 SPEC wallClockTime.ElapseTime.
time seq 1000000 | wc -l real/user/sys
指令數xCPIxCycle
- cycle:
摩爾定律
clockCycle.時鐘週期2GHz
=晶振 - CPI: pipeline.流水線
- 指令數: 編譯器優化
- cycle:
- throughput.吞吐率/bandwidth.帶寬
- 並行優化 並行存儲的性能分析
Amdahl's law
- 並行優化 並行存儲的性能分析
- 功耗~=0.5x負載電容x電壓的平方x開關頻率x晶體管數量
指令: 處理單元和控制單元之上的抽象
- instruction.指令=機器語言/機器碼
- IS.指令集=指令格式+尋址方式
// gcc -g -c test.c // -O 編譯器自動優化
// objdump -d -M intel -S test.o
#include <time.h>
#include <stdlib.h>
int main()
{
srand(time(NULL));
int r = rand() % 2;
int a = 10;
if (r == 0)
{
a = 1;
} else {
a = 2;
}
}
- MIPS: R.算法/邏輯 I.數據傳輸/條件分支 J.跳轉(if/else for/while=goto)
- call.函數調用
- 實現: push+pop=stack.棧
StackOverflow
- InfiniteMirrorEffect=a調用b+b調用a
- stackFrame.棧幀 stackPoint.棧指針
- inline.函數內聯: 將函數調用優化爲非函數調用方式, 大大減少需要執行的指令數
// gcc -g -c test.c // -O 編譯器自動優化
// objdump -d -M intel -S test.o
#include <time.h>
#include <stdlib.h>
int main()
{
int u = add(1,2);
}
// add_lib.c
int add(int a, int b){ return a+b;}
- linux.ELF.execuatableAndLinkableFileFormat symbolsTable.符號表(.text=code .data .rel.text=relocation .symtab) win.PE.portableExe
- dynamicLink.動態鏈接 linux.so.sharedObject win.dll.dynamicLinkLib PLT.procedureLinkTable.程序鏈接表 GOT.globalOffsetTable.全局偏移表
計組知識地圖
- Computer Architecture | Coursera
- 計算機組成-北大 https://www.icourse163.org/course/PKU-1205809805 https://www.coursera.org/learn/jisuanji-zucheng
- 深入淺出計算機組成原理-極客時間 2020
- Computer Architecture: A Quantitative Approach 計算機體系結構:量化研究方法; ed6 2019.7
- Code: The Hidden Language of Computer Hardware and Software 編碼 隱匿在計算機軟硬件背後的語言上; en 2019.6
- 大話計算機; 2019.5
- Computer Organization and Design: The Hardware/Software Interface 計算機組成與設計 硬件/軟件接口; ed5 2015.7; ARM版 2018; RISC-V版;
- 計算機是怎樣跑起來 程序是怎樣跑起來的; 2015
- Structured Computer Organization 計算機組成:結構化方法; 操作系統大神塔能鮑姆Andrew S. Tanenbaum; ed6 2014.8
- 程序員的自我修養:鏈接、裝載和庫; 2009.4
關於學習
- Done is better than perfect. 完美比完成更重要. -- Facebook
- 怕什麼真理無窮, 進一寸有進一寸的歡喜 -- 胡適
- 我們未來生活的可能性就是靠這點點滴滴串聯起來的 -- 喬布斯
- 對愛的渴望, 對知識的追求, 對人類苦難不可遏制的同情, 是支配我一生的單純而強烈的三種情感 -- 羅素
- 新的知識第一遍沒有100%懂, 而隨着時間的推移, 慢慢領悟成長了, 這纔是人生常態.
- 長期積累, 慢慢參悟, 螺旋上升
- 持續學習, 最有效的辦法: 不是短時間衝刺, 而是有節奏的堅持
- 知也無涯, 享受發現的樂趣
- 學與不學, 知識就在那裏, 不如就先學好了. -- 年輕的時候不知道賺錢要幹什麼用, 還是要多多少少賺點, 等到知道要幹什麼用的時候, 至少不缺
- 6個最實用, 督促自己學習的方法: 好奇心 知識面+興趣點+反覆迭代 帶着問題學習 教別人 每月投資200-300在專業學習上 堅持到底就是勝利✌🏻