# 再觀電腦! ep.1 ###### tags: `csst` ## 黃恩明 --- ## 電腦基礎架構 - 硬體:CPU 、RAM 、Storage 、GPU - 軟體:OS、核心、呼叫、中斷 ---- ### CPU - Central Processing Unit - 中央處理器 - 電「腦」 ![](https://tpucdn.com/review/intel-core-i9-10900/images/title.jpg =540x) ---- ### RAM - Random Access Memory - ~~隨機存取存儲器~~ 記憶體 - 家用量級:4~128GB ![](https://www.cclonline.com/images/avante/KVR16N118.jpg?width=1600&height=1600 =720x) ---- ### 硬碟 - 傳統硬碟 HDD(有馬達) - 固態硬碟 SSD(隨身碟) - 家用量級: 256GB~4TB ![](https://i2.wp.com/topwinfix.com.tw/wp-content/uploads/2019/01/001.jpeg =240x) ![](https://static.techspot.com/images/products/2018/storage/ssd/org/2018-10-02-product.jpg =360x) ---- ### 科普 - 資料有無重量? ![https://www.facebook.com/WDTaiwan/photos/a.139527342788549/2706635449411046/](https://i.imgur.com/MGSDDlA.png =260x) > <span> ~~資料有重量,不信的話把硬碟拿掉看電腦會不會變輕~~ <!-- .element: class="fragment" data-fragment-index="1" --></span> ---- ### 科普 - 資料有無重量? - 若電子在 Floating Gate ,代表 0 ;反之為 1 - 電荷守恆 ![](https://i.imgur.com/uYOwmXJ.png =720x) ---- ### RAM vs. 硬碟 || 記憶體 (RAM) | 硬碟 (HDD, SSD) | |:---:|:---:|:---:| | 用途 | 快速讀寫資料 | 長期儲存資料 | | 關機後資料 |消失 | 還在 | | 存取速度 | 快 | 慢 (SSD > HDD) | | 舉例 | 書桌 | 書櫃 | ---- ### GPU - Graphics Processing Unit - 圖形處理器 ![](https://www.nvidia.com/content/dam/en-zz/Solutions/geforce/ampere/rtx-3080/geforce-rtx-3080-product-gallery-full-screen-3840-1.jpg =480x) ![](https://cdn.vox-cdn.com/thumbor/AzpGNWNKmFM1vOoHiHER7bPnrfs=/1400x1050/filters:format(jpeg)/cdn.vox-cdn.com/uploads/chorus_asset/file/19970190/2555435ebae590030837.15346566_NVIDIA_A100_GPU.jpg =360x) ---- ### 作業系統 (Operating System) ![](https://i.imgur.com/ocwYqOs.jpg) ---- #### 使用者模式/核心模式 - 避免使用者覆寫系統資料 - 需要執行特殊指令時透過 *System Call 系統呼叫* 轉移至核心模式(Ex: 關機) ---- #### 系統呼叫 (System Call) ![](https://www.tutorialspoint.com/assets/questions/media/11194/User%20Mode%20vs%20Kernel%20Mode.PNG) ---- #### 中斷 (Interrupt) - 暫停目前的工作,做完中斷事件後再繼續處理目前的工作。**不一定是出錯** - 硬體中斷: - 按下鍵盤 - 插入隨身碟 - 軟體中斷: - System Call - $\div0$ 、存取非法記憶體 --- ## 程式之旅 - 編輯器 - 開發整合環境 - 編譯器 ---- ### 編輯器 - Text Editor (Notepad, VS Code, etc.) - 原始用途純粹為打字 ![](https://i.imgur.com/QuoJy37.png =360x) ![](https://i.imgur.com/fcXi2Ak.png =480x) ---- ### 開發整合環境 - IDE (**I**ntegrated **D**evelopment **E**nvironment) - 編輯器 + 編譯器 + 除錯工具等... - Ex: Code::Blocks、安裝套件後的 VS Code - [VS Code C語言環境設定教學](https://hackmd.io/@tangerine1202/rJtDbme3H) ![](https://i.imgur.com/fsvxwFo.png =540x) ---- ## 編譯器 (Compiler) 1. 預處理 (Preprocessing) 2. 編譯 (Compilation) 3. 組譯 (Assembly) 4. 連結 (Linking) ---- ### Example ```c= #include <stdio.h> #define BANG(x) printf(x) int main() { /* Hello World! */ BANG("Hello World!\n"); return 0; } ``` ---- ### 預處理 (Preprocessing) 1. 處理define、註解 2. 新增行號和檔案標識 ```bash gcc -E -ansi hello.c ``` ```c= # 874 "/usr/include/stdio.h" 3 4 # 3 "hello.c" int main() { printf("Hello World!\n"); return 0; } ``` ---- ### 編譯 (Compilation) 1. 詞法分析 - 產生單字 2. 語法分析 - 組成句子 3. 語義分析 - 理解語意 4. 轉成 *組合語言* ---- ### 編譯 (Compilation) ```bash gcc -S -ansi hello.c ``` ```bash _main: ## @main .cfi_startproc ## %bb.0: pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp subq $16, %rsp movl $0, -4(%rbp) leaq L_.str(%rip), %rdi movb $0, %al callq _printf xorl %ecx, %ecx movl %eax, -8(%rbp) ## 4-byte Spill movl %ecx, %eax addq $16, %rsp popq %rbp retq .cfi_endproc ## -- End function .section __TEXT,__cstring,cstring_literals L_.str: ## @.str .asciz "Hello World!\n" ``` ---- ### 組譯 (Assembly) 將組合語言轉成*目標檔案 (object file)* : 機器碼 / binary ```0101010101``` ---- ### 連結 (Linking) 將目標檔案 (object file) 與標頭檔等其他檔案連結起來,產生可執行檔 ![](https://i.imgur.com/jjLtu0n.png) ---- ### 總結 ![](https://karthikdega.files.wordpress.com/2013/10/compile.gif)
{"metaMigratedAt":"2023-06-15T12:54:09.695Z","metaMigratedFrom":"Content","title":"再觀電腦! ep.1","breaks":true,"contributors":"[{\"id\":\"2308ee1b-d046-4851-80ab-090ecbeaf503\",\"add\":5317,\"del\":1430}]"}
    1448 views