這個月看了蠻多 database 的影片和寫作業。我在英國上過資料庫導論,其實英國教授那時候就教的不錯,只可惜 CMU Database 上的更完整一點。印象深刻的部分包含:DB 是用什麼方式來儲存 tuple、DB 可能會有自己的 scheduling 來進行寫入、以及 DB 也是有 free list 來管理目前 tuple 紀錄。對於這些關於 DB internel 的學習,覺得非常有收獲,所以非常有收穫~
2. 演算法學習 (80%)
主要複習內容就是考試內容啦,其實不難,不過要如何合理地論證,這是比較需要細讀的地方,尤其是大於小於這些,在證明時要合理地去使用,才能正確地算出 time complexity。另外就是開始進入紅黑樹、Dynamic Programming 啦,雖然上課都有專心上課,但是缺少下課完整的複習,所以只算達到 80%。
3. Memory Allocator (50%)
這部分主要是看 Free List,而且還找到很不錯的線上教材 Computer Systems Fall 2018,老師講解地清楚,內容也相當實用,用來複習 OS 或是增加相關知識都很不錯,強烈推薦。不過之所以只給 50%,是因為只有看 Global 類型的 free list,沒有去看更多關於 thread free list,以及沒有一個完整的實作 demo,十一月如果有空的時候要來補一下範例。
學習部分,七月份其實吸收蠻多內容的,收穫滿滿,可惜因為時間關係,筆記大多很潦草,還不足以登上檯面,就沒有放在 blog 上了。七月份學到最多的就是 Linux kernel 和 network 相關知識,而其中印象讓我深刻的是,我在學習過程中遇到一個不太確定的問題,因此花時間在查閱相關內容並找答案,那時候心中覺得這個答案可能是正確的,但是基於經驗不足的關係,還是去請教了韌體相關的資深同事,結果他給了我一個完全不同方向的答案。這令我蠻訝異的,因為我的確沒想到會不同方向的思考路線,也讓我在後續學習時更加注意各面向的思考。不過會導致這原因,深究起來還是對於 kernel 理論不夠熟悉的緣故,所以在學習中加入了 Linux kernel development 書籍,希望能多加深理論基礎。
1. 使用正規做法來實作 File System (super_block, inodetable, bitmap..)並與 FUSE lib 連接。
這個項目完成50%,包含 disk simulator 和 file system structure,過程中參考蠻多 ext4,希望能一併學習到 ext4 的實作理念。不過後來之所以慢下腳步,是因為做到一半需要 synchronization 相關知識,而在 Linux kernel 中 Locks 的種類分比較細,因此後來注意力就轉移到 synchronization 實作原理和應用上了。目前是打算把 Linux kernel development 看完,再回到這個 side project 上繼續實作。
學習部分,六月份的專注力明顯好很多,因此整體自學的時數有變多,也覺得自己成長了不少。主要原因是因為這個月花了更多時間在學習 linux 以及看 linux kernel source code,有感覺到自己對於作業系統是有比較多興趣的,會自主投入很多時間在理解原理和實驗上。不過因為在看 linux 會碰到很多數學相關的優化內容,因此數學訓練還是要維持固定的進度。
有時候會覺得,這年紀才覺得自己對 linux kernel 有興趣並且學習,還來得及嗎?看看那些研究所學生,他們早就學習了好幾年相關知識,就算很努力也不能追趕上他們。但是回過頭來想,如果不去試試看,怎麼知道自己能不能成為對 linux kernel 略懂的那群人。雖然可能不能成為這領域的頂尖人才,不過至少自己學習過了,而這些基礎知識也可以用在未來工作上。不能要求時間重來,但至少不要留下遺憾是吧 :)
12/22: Golang code style, Data link layer intro (principle) service for framing, NIC adaptor, Adaptor communication, error checking (bits)
12/23: Channel partition - FDMA / TDMA, Random access protocol - ALOHA, CSMA and CSMA/CD, Taking turn MAC protocol (polling and token pass)
12/24: Mutation Testing , MAC address and ARP (Address resolution protocol), The process of send data from A node to B node (datagram -> broadcast to get MAC -> if no target then send to default router)
12/25: 聖誕節聚餐
12/26: The process of CSMA/CD.
12/27: CSMA/CD - Exponential Back off, efficiency, Manchester encoding. Physical layer device - hub. (only broadcast signal). 線上直播 - Linux 核心設計: 多核處理器和 spinlock
12/28: Switch table and self learning, Interconnecting switches. The difference of switch and router
Build a linux kernel 和 simple linux service
這個月在 Embedded System 進展到 build linux kernel, linux 版本上選擇了 Alpine v3.8,size 極小和重視 security 的 linux system。規劃在熟悉了 alpine 整體架構後。會細看它如何去修改這些 kernel 去實現安全化的機制。Service 部分,目前是採用 Alpine 打包成 package 的方式,然後將 package 一起 build 到 kernel 中。不過這些內容比較偏實作面,理論基礎上對於 kernel space 和 user space 的細節和運用場景還需要再加強。