Study 2019/06月份自我學習回顧

前言

六月份安排了一趟北海道旅遊,因此整體唸書時間相較少些。北海道旅遊中,在富良野鄉村地區待了兩日,雖然只有短短時間,但卻讓我體驗到完全不同的生活環境,遼闊無際的花園農田、路上慢步行走的當地居民們、以及寬廣的生活空間,都令人非常嚮往。我很喜歡在都市的緊湊步調,跟公司同事們努力開發以及學習各種新知原理的過程,但有時候也會想過過這種悠閒沒有太多物質壓力的人生,可能是自己從來沒有過如此的生活方式,所以會有種美麗的幻想吧。

學習部分,六月份的專注力明顯好很多,因此整體自學的時數有變多,也覺得自己成長了不少。主要原因是因為這個月花了更多時間在學習 linux 以及看 linux kernel source code,有感覺到自己對於作業系統是有比較多興趣的,會自主投入很多時間在理解原理和實驗上。不過因為在看 linux 會碰到很多數學相關的優化內容,因此數學訓練還是要維持固定的進度。

有時候會覺得,這年紀才覺得自己對 linux kernel 有興趣並且學習,還來得及嗎?看看那些研究所學生,他們早就學習了好幾年相關知識,就算很努力也不能追趕上他們。但是回過頭來想,如果不去試試看,怎麼知道自己能不能成為對 linux kernel 略懂的那群人。雖然可能不能成為這領域的頂尖人才,不過至少自己學習過了,而這些基礎知識也可以用在未來工作上。不能要求時間重來,但至少不要留下遺憾是吧 :)

預定目標回顧

根據六月初紀錄,六月要完成的目標包含:

  • 數學歸納法和數論。這個算是有點意外,因為自己沒注意到線上課程大綱,所以其實是上一系列 Pigeonhole PrincipleCounting 內容。整體來看算是有進度,只是上的內容和預計不同。

  • Linux 核心設計: 朝向硬即時的核心變革(20%)。本來預計要把線上講座再聽一次,但在檔案系統概念花了比預期還多的複習時間,所以講座內容大概只複習 20%。可能的改善方式就是拉長所需的複習時間,因為講座的內容實在太多,投入很多時間是必然的,不需要強迫自己硬要在短時間內看完。

  • FUSE實作(70%)。除了把基本 FUSE API(high level and low level) 使用並且實驗過之外,還有細部看 FUSE 的實現流程與 source code。並且也同時複習 Virtual File System 的架構和實現方式。因此這部分的進度算是比較多,不過只給自己 70%,因為沒有生出一個較完整的 side-project。

本月進度安排

  1. 使用正規做法來實作 File System (super_block, inodetable, bitmap..)並與 FUSE lib 連接。
  2. Linux 核心設計: 朝向硬即時的核心變革 複習,目標是看第二次並把基本概念釐清下來,其他細節原理則記下來並再後續安排時間深究。
  3. 離散數學線上課程看到 L25,有時間可以看到 L30。

預計產出

  1. 數學筆記
  2. 朝向硬即時的核心變革 共筆 3.File System side-project

學習日誌

  • 2019/6/1 Linux 核心設計: 檔案系統概念及實作手法 (Review) - file descriptor, inode, data block, super block.
  • 2019/6/2 Linux 核心設計: 檔案系統概念及實作手法 (Review) - file system project practice, Ext3, Ext4, journaling, encrypted FS
  • 2019/6/2 Homework: fibdrv
  • 2019/6/3 Discrete mathematics- 量化語句的推論證明習題
  • 2019/6/3 Random numbers from CPU execution time jitter
  • 2019/6/4 Linux Kernel Module practice
  • 2019/6/4 Ktime API
  • 2019/6/6 日本旅行
  • 2019/6/7 日本旅行
  • 2019/6/8 日本旅行
  • 2019/6/9 日本旅行
  • 2019/6/10 日本旅行
  • 2019/6/11 日本旅行
  • 2019/6/12 Discrete mathematics- Pigeonhole PrincipleDM L14
  • 2019/6/12 Linux Kernel Module — Part 2: A Character Device - 1
  • 2019/6/13 Memory Management in Linux (introduction, mmap, shared memory)
  • 2019/6/13 Linux Kernel Module — Part 2: A Character Device - 2
  • 2019/6/16 Find first set (clz/ctz) - source code of clz and ctz.
  • 2019/6/17 User space memory access from the Linux kernel / DMA
  • 2019/6/15 Side project refactor
  • 2019/6/16 Linux Kernel Module — Part 2: A Character Device - 3 (refactor code)
  • 2019/6/17 The cdev interface
  • 2019/6/17 線上講座: Timer 及其管理機制
  • 2019/6/18 Discrete mathematics- Pigeonhole Principle & Example L15A, L15B
  • 2019/6/19 Discrete mathematics- Pigeonhole Principle & Example L15C
  • 2019/6/19 Strcopy_from_user source code trace (Why we should use uaccess.h methods to get user space data)
  • 2019/6/20 understanding the uaccess.h and trace code to know that why cannot access user memory
  • 2019/6/20 Fibonacci number with clz (count leading zero) to optimize the performance
  • 2019/6/22 Recursion And Tail Calls In Go
  • 2019/6/21 Measure the performance of c program
  • 2019/6/23 Pigeonhole Principle - Shaking hand, 33 rooks in 8x8 board.
  • 2019/6/24 Cdev (Character device drivers) and udev (dynamic device management). Implement FUSE
  • 2019/6/25 FUSE - how it works and implement basic functions.
  • 2019/6/26 Paper: To FUSE or Not to FUSE: Performance of User-Space File Systems
  • 2019/6/26 The process of mount a FUSE and how to communicate with user APP and kernel module.
  • 2019/6/26 Discrete mathematics- Counting (1)
  • 2019/6/27 Discrete mathematics- Counting L17 C, D
  • 2019/6/27 Basic concept about vfs, super_block, super_operations
  • 2019/6/27 Try low-level APIs of FUSE to understand more about FUSE work.
  • 2019/6/28 Linux Kernel Development chapter 13: Virtual File System
  • 2019/6/29 Discrete mathematics- (Counting) Combination & Permutation L18A, L18B
  • 2019/6/30 Discrete mathematics- (Counting) Combination & Permutation L18C, L18D

學習資源