前言
六月份安排了一趟北海道旅遊,因此整體唸書時間相較少些。北海道旅遊中,在富良野鄉村地區待了兩日,雖然只有短短時間,但卻讓我體驗到完全不同的生活環境,遼闊無際的花園農田、路上慢步行走的當地居民們、以及寬廣的生活空間,都令人非常嚮往。我很喜歡在都市的緊湊步調,跟公司同事們努力開發以及學習各種新知原理的過程,但有時候也會想過過這種悠閒沒有太多物質壓力的人生,可能是自己從來沒有過如此的生活方式,所以會有種美麗的幻想吧。
學習部分,六月份的專注力明顯好很多,因此整體自學的時數有變多,也覺得自己成長了不少。主要原因是因為這個月花了更多時間在學習 linux 以及看 linux kernel source code,有感覺到自己對於作業系統是有比較多興趣的,會自主投入很多時間在理解原理和實驗上。不過因為在看 linux 會碰到很多數學相關的優化內容,因此數學訓練還是要維持固定的進度。
有時候會覺得,這年紀才覺得自己對 linux kernel 有興趣並且學習,還來得及嗎?看看那些研究所學生,他們早就學習了好幾年相關知識,就算很努力也不能追趕上他們。但是回過頭來想,如果不去試試看,怎麼知道自己能不能成為對 linux kernel 略懂的那群人。雖然可能不能成為這領域的頂尖人才,不過至少自己學習過了,而這些基礎知識也可以用在未來工作上。不能要求時間重來,但至少不要留下遺憾是吧 :)
預定目標回顧
根據六月初紀錄,六月要完成的目標包含:
-
數學歸納法和數論。這個算是有點意外,因為自己沒注意到線上課程大綱,所以其實是上一系列
Pigeonhole Principle
和Counting
內容。整體來看算是有進度,只是上的內容和預計不同。 -
Linux 核心設計: 朝向硬即時的核心變革(20%)。本來預計要把線上講座再聽一次,但在檔案系統概念花了比預期還多的複習時間,所以講座內容大概只複習 20%。可能的改善方式就是拉長所需的複習時間,因為講座的內容實在太多,投入很多時間是必然的,不需要強迫自己硬要在短時間內看完。
-
FUSE實作(70%)。除了把基本 FUSE API(high level and low level) 使用並且實驗過之外,還有細部看 FUSE 的實現流程與 source code。並且也同時複習 Virtual File System 的架構和實現方式。因此這部分的進度算是比較多,不過只給自己 70%,因為沒有生出一個較完整的 side-project。
本月進度安排
- 使用正規做法來實作 File System (super_block, inodetable, bitmap..)並與 FUSE lib 連接。
- Linux 核心設計:
朝向硬即時的核心變革
複習,目標是看第二次並把基本概念釐清下來,其他細節原理則記下來並再後續安排時間深究。 - 離散數學線上課程看到 L25,有時間可以看到 L30。
預計產出
- 數學筆記
朝向硬即時的核心變革
共筆 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
學習資源
- operator-sparse Fibonacci hashing of waitqueues
- Linux Kernel Module — Part 2: A Character Device
- Overview of the Linux Virtual File System
- Introduction to Memory Management in Linux
- Find first set
- User space memory access from the Linux kernel
- Linux 核心設計: Timer 及其管理機制
- strncpy_from_user
- Recursion And Tail Calls In Go
- LINUX下 Udev详解
- udev - Linux dynamic device management
- Character device drivers
- How to understand “((size_t) &((TYPE *)0)->MEMBER)”?
- libfuse
- To FUSE or Not to FUSE: Performance of User-Space File Systems
- 韓永楷教授離散數學-第17講 Counting L17A