# 2024q1 Homework5 (assessment) contributed by < `BooleanII` > ## 閱讀〈[因為自動飲料機而延畢的那一年](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1/)〉受到的啟發 閱讀這篇文章時,我深感共鳴,仿佛回到了過去。身為電機系學生,在大學期間除了課堂實驗即大四專題外,從未有機會真正動手操作電路。直到研究所時期參與機器人專案,我才第一次親手製作電路,從設計到組裝都親自參與其中。當看到機器人按照指令動起來時,那份感動無以言喻。 畢業後進入職場,整合多塊電路板、調校細節、生產成品,都是新的挑戰。學生時代的實作經驗雖多少有些幫助,但在產品的量產過程仍花了許多時間在掌握細節。 曾經遇過四大的大三學生不會用三用電錶,理由是沒有修過實驗課。電機系學生不會焊接電路真實存在,我認為很大的原因是缺乏實作的機會與動機,考試不會考的科目通常不太被受到重視。 ## 第 1 到第 6 週 「課程教材」和 CS:APP 3/e 研讀紀錄 ### CS:APP 3/e 如同[因為自動飲料機而延畢的那一年](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1/)系列文章中提到,軟體的有趣之處在於可以馬上看到結果,且實驗的難度與成本相較起硬體電路來的低許多。 有別於電機系從計算機概論、計算機組織到計算機結構,以建構者的角度學習計算機系統,~~但上完後能否打造一個計算機系統又是另外一回事~~。本書以軟體人的觀點介紹計算機系統運作方式,期許在閱讀後知道如何寫出更好的程式。此處的好不限於性能的優化,更包含理解程式開發過程中遇到的錯誤提示,以及避免程式碼存在安全漏洞。 第一章的內容大至上是複習計算機概論所學,值得一提的是抽象表示概念,作業系統透過下列的抽象描述進行實作: <s> - 文件(文件): I/O 設備 - 虛擬記憶體(虚拟內存):程式存取的記憶體抽象描述,包含 I/O 設備連接的硬碟與記憶體 - 行程(进程):程式抽象描述,包含處理器(指令集架構)、記憶體與 I/O 設備 - 虛擬機(虚拟机):計算機系統抽象描述,包含作業系統與底層硬體 此處文件的概念又與 Unix 系統中的 Everything is a file. 概念相互呼應。 </s> :::danger 注意用詞: - file 是「檔案」,而非「文件」(document) - virtual machine 是「虛擬機器」,而非「機」(engine) ::: Amdahl 定律其透過三個變數評估程式性能提升的效果,包含應用程式運算時間 ($T_{old}$) 、優化程式碼片段運作的時間 ($\alpha$) 與性能提升比例 ($k$) 。有趣的是,當性能提升比例高於一定數值時,實際獲得的加速比會收斂。透過此定律的分析,可以避免盲目追求性能,而未能獲得對等的效益。 閱讀第二章時想到下列問題: - 書中第 24 頁提到 GCC 默認編譯時,所使用的 C 語言標準為 GNU89 ,該如何確認該設定為何?另外,由於新的 C 語言標準可向下相容,該如何選用哪種版本進行編譯? - 不同版本的 GCC 默認 C 語言標準有所差異,在 11.04 的說明文件中提到,其使用的是 gnu17 。 - >[Language Standards Supported by GCC](https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/Standards.html#C-Language) - bi-endian 設備在運作時,是否可同時處理 little endian 與 big endian 兩種資料格式? - 依據 CPU 與其指令集是否支援而定,包含但不限於下列種類: - 透過硬體配決定使用哪種資料格式。 - 在系統啟動過程中,透過軟體決定使用的資料格式。 - 運作過程中可同時處理兩種資料格式。 - >https://en.wikipedia.org/wiki/Endianness#Bi-endianness - little endian 與 big endian 看起來只是單純的硬體架構上的差異,兩者在實際運作上存在優缺點嗎? - little endian 和 big endian 的優缺點相互補 - big endian 優點 - 資料排列方法容易閱讀。 - 即便使用錯誤的型態讀取資料,仍可獲得正確的 signed bit 。 - bitwise 位移操作較為簡單且直觀。 - 缺點 - 使用錯誤的資料長度讀取時,取到的內容會完全錯誤。 - 大多數的 big endian 處理器不支援非 word 單位的記憶體位址資料讀寫。 - > [Big-Endian, Little-Endian: Comparison](http://bear.ces.cwru.edu/eecs_314/endian_comparison.html) - 圖 2-4 的範例程式中,為何將 byte_pointer 定義為 signed char pointer 會有不同的結果? ```c #include <stdio.h> typdef unsigned char *byte_pointer; void show_bytes(byte_pointer start, size_t len) { size_t i; for (i = 0; i < len; i++) printf(" %.2x", start[i]); printf("\n"); } void show_int(int x) { show_bytes((byte_pointer) &x, sizeof(int)); } void show_float(float x) { show_bytes((byte_pointer) &x, sizeof(float)); } void show_pointer(void *x) { show_bytes((byte_pointer) &x, sizeof(void *)); } ``` ### 第 6 週課程教材 在[Linux 核心設計: 不只挑選任務的排程器 (上)](https://www.youtube.com/watch?v=X2T7U6AEWrY) 中,想到下列問題: - 排程器在 response 與 throughput 間往往無法兼顧,但如果 throughput 夠高,為何無法同時滿足 response 的需求? - throughput 不可能無限大,如遇到運算量過大的任務,將造成其他任務沒辦法在需求時間內被執行。 - 投影片中提到 Processes may belong to various process groups ,此設計的用途為何? process group ID 也是使用 link-list 的方式紀錄在 process 中嗎? - [How containers use PID namespace to provide process isolation](https://www.youtube.com/watch?v=J17rXQ5XkDE)使用多個 terminal 示範PID Namespace 提供各個 session 間的隔離機制,為何開啟多組 terminal 就可以觀察到 root PID namespace 的相關隔離機制?且最先開的為 root PID namespace ? - 在 Linux 核心中 process switch 與 context switch 的差別? ## 課程期末專題 0. [Trusted Firmware-A (TF-A)](https://github.com/ARM-software/arm-trusted-firmware) 工業 4.0 的興起,使物聯網 (IOT) 技術被廣泛應用於各式情境,但背後的資訊安全仍未有標準。 Arm 針對自家 A-Profile 架構處理器推出的韌體架構,目的在於提供安全的運算平台,共提供四大類安全性功能,與 PSA Certified 安全性認證方案,以增加使用者信心。 - 防禦執行 - 隔離 - 共同平台安全性服務 - 標準安全性 API > [ARM 架構安全性功能](https://www.arm.com/zh-TW/architecture/security-features#defensive) 閱讀[前人的研究成果](https://hackmd.io/@sysprog/rkxaDOWI3),若同樣使用 Raspberry Pi 作為實驗平臺,待確認可滿足系統啟動流程分析需求的 JTAG 規格。 1. 重做 lab0 並彙整學員成果 為了這堂課特地買了新電腦,好不容易完成環境架設後,第一件事情竟是急著實作 queue 操作,而沒有靜下心來把 Valgrind 、網頁伺服器與指定論文研讀完,第一週就這麼草草開始感覺不踏實。 :::warning 幻滅是成長的開始 ::: 2. [Trusted Firmware-A 及 Linux 啟動流程分析](https://hackmd.io/@BooleanII/linux2024-ARM_Trusted_Firmware) 我對嵌入式系統的應用十分感興趣,在評估要為這堂課買哪台電腦時,有看上 Raspberry Pi 5 ,當時苦於 mouser 價格親民但交期太長,且不確定硬體規格是否可以滿足課程實驗所需,就選擇一般的筆電來旁聽課程一同學習 Linux 系統。工業 4.0 與設備智慧化的趨勢,感測、遠端監控與遠端控制模組需求急速增長,在軟體開發過程中就須考量到系統可靠度與資安風險等相關議題。 > https://trustedfirmware-a.readthedocs.io/en/latest/plat/qemu.html > https://lnxblog.github.io/2020/08/20/qemu-arm-tf.html 3. 並行程式設計 去年看到羅習五老師在[ ptt 八卦板上的文章](https://www.ptt.cc/bbs/Gossiping/M.1689707284.A.6C7.html)覺得驚為天人,透過修改 glibc 和 Linux kernel 把多核 CPU 壓榨出更多性能。在運算平台的核數不斷增加的現在,也希望自己能夠撰寫出具備 scalability 的程式,有了更多的資源不就是要能夠做更多的事嗎? > [Re: [新聞] 中正資工新技術助電腦效能大躍進 獲「系統界奧斯卡」肯定](https://www.ptt.cc/bbs/Gossiping/M.1689638145.A.1FC.html)