Jun 23, 2021
8 min read
最近在參與面試的時候,我方考了 extern 關鍵字,雖然這個關鍵字很常用,但是很少有應試者答的完整。因為自己也是韌體新手,因此就參照 ISO/IEC 9899:2011(C11) 的標準,把 extern 的定義和用法紀錄一下。
Declaration & Definition 在討論 extern 之前,先釐清 C 的 declaration 和 definition 差異性。在 C11: 6.7 Declarations 中有提到:
Declaration
A declaration specifies the interpretation and attributes of a set of identifiers.
Definition
A definition of an identifier is a declaration for that identifier that:
Read more → May 23, 2021
12 min read
Lab 4 包含三個部分,其中 A 部分介紹 x86 架構的 multiprocessor 啟動與初始化流程,並且實作簡易的 round-robin process scheduling。而我認為從 bootstrap processor 啟動並初始化,到透過 bootstrap processor 把其他的 processor 啟動的整個過程相當重要,可以讓新手更具體地知道 multiprocessor 的運作方式。
JOS 實作 intel MultiProcessor Specification(MPS) 標準,在看 source code 的時候,搭配這個文件來看會更加理解每項步驟的用意。
Note:
Multiprocessor 架構會依據設計而有所不同,以下所提到的內容皆以 x86 MPS 制定的規格為主。
Multiprocessor Architecture Multiprocessor 架構下,每個 processor 有各自的 L1 cache 和 APIC,並且透過 ICC (interrupt controller communications) bus 進行溝通。
Read more → May 7, 2021
9 min read
Lab 4 包含三個部分,其中 A 部分介紹 x86 架構的 multiprocessor 啟動與初始化流程,並且實作簡易的 round-robin process scheduling。而我認為從 bootstrap processor 啟動並初始化,到透過 bootstrap processor 把其他的 processor 啟動的整個過程相當重要,可以讓新手更具體地知道 multiprocessor 的運作方式。
JOS 實作 intel MultiProcessor Specification(MPS) 標準,在看 source code 的時候,搭配這個文件來看會更加理解每項步驟的用意。
Note:
Multiprocessor 架構會依據設計而有所不同,以下所提到的內容皆以 x86 MPS 制定的規格為主。
Multiprocessor Architecture Multiprocessor 架構下,每個 processor 有各自的 L1 cache 和 APIC,並且透過 ICC (interrupt controller communications) bus 進行溝通。
Read more → Apr 24, 2021
9 min read
自己對於 memory layout 相關議題都蠻感興趣的,而這次 Go 1.17 有一項效能改善的 proposal: switch to a register-based calling convention for Go functions 剛好跟 memory 有相關,因此就看了一下 proposal 文件介紹,不但複習了在計算機架構中曾接觸到的 calling convention 知識,也對於 Go 內部機制有更多認識。
Application Binary Interface (ABI) 在談 calling convention 之前,先來談 ABI。Calling convention 是 application binary interface (ABI) 的一部分,而定義 ABI 最主要的目的是建立應用程式與其他應用程式或是與作業系統服務之間低階溝通方式 (依賴 machine code) ,讓應用程式能夠在特定的環境下正確執行。
Read more → Apr 22, 2021
3 min read
一個月沒有更新 blog,因為遇上了一些事情要處理,再加上剛好正值工作轉換之際,以及面對研究所考試和 paper study,所以就停筆了,不過還是有在持續地進修,學習的包含 security 和 system design 部分,並且每天刷 leetcode 訓練邏輯能力防失智。
前陣子面試的時候,發現自己有很多不足之處,導致自己無法在面試時有比較好的表現,尤其對於一些久未使用的 protocol,關於它的特性和流程就不是這麼熟悉。檢討自己面試問題,主要是因為自己是佛系面試派,認為平常應該要持續地累積實力,因此不太會因為面試而刻意準備,就像是我去考研究所在職專班ㄧ樣,完全沒有看考古題就去考試了,如果沒有上就代表我實力還不夠。
但是這種想法用在面試上就蠻糟的,尤其現在面試的公司多是一線廠,光是競爭者的實力就很優異,再加上面試時可能會緊張,平常實力再打折,導致整體表現就是比其他 candidate 遜色。另外,現在面試蠻多會遇到 medium level 的演算法測驗,如果準備不夠的話,有時候會突然邏輯失常,無法發揮正常表現,這也是我應該要改進的地方。
總結來說,就是面試心態不夠慎重。1-3年內經驗的菜鳥工程師時期可能還可以靠平常實力去面試,不過當要去面試資深工程師時,就必須把過往專案接觸過的理論知識重新複習一遍,避免因為時間久遠而無法回答精確。
基於這些原因,最近也花時間整理專案上會用到的 protocol 與各種 service 運作原理,如果很不幸又需要面試,還可以拿出來快速複習一番 (但我現在不想再換工作 XD,覺得一些產業知識還是要累積起來才行)
閒聊完了,最近會開始整理文章並發文,同時還要準備 COSCUP 內容,希望能快點有靈感~
Read more → Feb 18, 2021
11 min read
L1 Cache architecture 之所以會看這個主題,是因為網路黑貓(Champ Yen)大大分享 ARM 從 virtual cache 轉到 physical cache 的利弊。雖然曾經從書上看過兩者差異性,不過沒搭配硬體架構,總覺得沒有好好了解。因此這篇整理了 ARM Programmer’s Guide 的內容,並透過實際例子來探討 VIVT (virtual indexed vritual tagged)、VIPT(virtual indexed physical tagged)、PIPT(physical indexed physical tagged) 的差異性。
Virtually Addressed Caches (VIVT) 十多年前的 ARM Processor L1 cache 採用 VIVT cache 架構,在當時的 ARM architecture reference 5.5.1 節有提及主要的原因:
Read more → Feb 10, 2021
9 min read
馬上就要過年了,最近在整理物品的時候,突然找到一年前為了玩板子而亂買的 Grove sensor,回想當時雖然對於韌體很感興趣,不過由於工作關係,因此把大部分進修時間都花在 Web 議題,沒能完成 sensor 韌體,留下一個遺憾。而既然這次被我找出來,近期工作又是都以 FPGA 板子居多,對於相關概念已有基本認知,覺得是時候把它實作出來,了結一年前給自己的課題。
硬體 Grove Temperature&Humidity Sensor (High-Accuracy & Mini) Raspberry Pi 3 Model B (Linux kernel 5.4.x)
技術 I2C linux driver linux Industrial I/O subsystem device tree 由於買的 sensor 有支援 I2C bus protocol,因此這次實作的 driver 就會基於 I2C driver 架構上實作。搭配 iio (Industrial I/O) subsystem 來讓 user space 能夠透過 file system 來讀取溫度和濕度。
Read more → Jan 26, 2021
12 min read
閒聊 2020 年過去了,因為年底各種考試和工作, Lab3 下半部份延遲到現在才完成。雖然拖蠻久的,但是往好的方向看就是有在持續進行下去,沒有放棄就是好結局!最近心境上有蠻多變化的,其中本來對於目前工作內容很疑惑,覺得跟純軟生活落差太大,但是在工作中慢慢地發現自己對於 security 領域的認知嚴重不足,如果能好好學習 security 相關知識,對於自己和未來發展還是挺有幫助的,結合 security 與 embedded or cloud 去發展,是一個有趣又有挑戰性的目標,因此目前就朝著這方向努力,希望今年可以在 COSCUP 分享 security 相關議題。
Lab 3 Interrupts 在開始實作 interrupt 之前,先結合上一篇 CSE 506 Lab 3 - User Environments(Processes) environment(process) 的觀念,綜觀一下 interrupt 結合 environment context switch 的 interrupt handle 過程。
Read more → Jan 15, 2021
9 min read
閒聊 這篇算是接續上次 Meetup 分享會的內容,由於有人提出 password manager 的相關疑問,覺得會不會因為使用 password manager 導致所有隱私資料被看光。與其猜測,不如來看看他們所提出的 security 方案,這篇以 1password 為例,整理其中 security white paper 所提到的保存資料方式,來檢視是不是能夠防止資料被盜取。
Master Password / Secret Key / Vault 在說明 security model 之前,要先了解幾個基本的要素:
Master password (your password) Secret key (account + 26 bytes random data) Vault (sensitive data)
Read more → Dec 23, 2020
3 min read
閒聊 12 月份完成好幾項目標,其中一項就是催生 GDG Hsinchu 12 月份的 Meetup 線下聚會。這次活動跟著 Google 在 12 月時舉辦的 Chrome Dev Summit 2020 一同推出,取自 CDS 中的部分 SMS-OTP 內容,並結合既有的 password-based authentication 與未來有可能普及的 FIDO 2 認證機制,整理出一份 Web Authentication Security 的技術分享。其中對我來說,比較有趣的地方在於理解機制的實現原理,包含資料溝通和驗證,以及可能會產生的安全問題。其實標準規範對於開發者來說相當重要,透過分析 protocol 的行為,可以讓開發者在開發整合性功能的時候,更清楚這些 library 要在什麼時機點使用,以及為什麼要使用這些 functions,這也是我每次進行技術分享時,最希望能夠帶給與會者的內容。
Read more →