Buffered IO, Direct IO, mmap

Buffered IO

Page Cache 頁緩存

  • Page Cache: 是在內存的一塊區域,儲存文件IO,可能隨時被 OS Evict 掉,但如果讀的 chunk 在 cache 的話,就不用去 disk access,可以得到 DRAM throughput (>20GB/s)。
  • 有幾種情況資料會存在 Page Cache,一個是不久之前曾經讀取過,另外一個是主動調用 readahead()。
  • 一般為 …

RISC, ARM, Registers, Instruction, Stack Frame

RISC (Reduced Instruction Set Computer)

  • 相較於 CISC (complex instruction set computer)
  • David Patterson 發現整個指令集,只有20%的指令常常被用到,但占整個程式 80%,因此主張硬體應該專心加速常用指令,複雜指令用常用指令組合。
  • RISC 的特性1:指令長度固定,優點是方便解碼,可以簡化設計,且 Pipeline 成效好;缺點是程式可能變大,占用記憶體較多,需要更多時間載入到處理器中。
  • RISC 的特性2:泛用的暫存器,所有暫存器可用於所有內容,以及編譯器設計的單純化,但暫存器中區分了整數和浮點。
  • RISC 的特性3:Load-Store架構,處理器不會對內存操作,所有計算都在暫存器完成。暫存器和內存的溝通,用其他指令完成。

ARM (Advanced RISC Machine)

  • Armv8-A 有兩種執行狀態 AArch64 和 AArch32
  • AArch64:執行 A64 指令集,使用 64bit 暫存器,但是指令的長度還是固定32bit。
  • AArch32:執行 A32/T32指令集,使用 32bit 暫存器,大部分架構使用32bit定長指令集。以前有 Thumb 執行狀態,使用 16bit。

Registers in AArch64

General-purpose integer registers (R0-R30, X0~X32, W0~W30)

  • The architecture provides 31 general purpose registers (R0..R30)…

PN Semiconductor、Diode、BJT、JFET、MOSFET、CMOS、IC

半導體 Semiconductor

  • 半導體的導電性介於良導電體與絕緣體之間,半導體材料通常是砷化鎵
  • 經過各式特定的摻雜 (Doping),產生P型或N型半導體,作成整流器、振盪器、發光器、放大器、測光器等元件或設備。
  • 常見的半導體元件有二極體、電晶體。

P 型、N型半導體

  • 原子是由的原子核和環繞在原子核周圍帶負電的電子組成,原子核由不帶電的中子和帶正電的質子構成,而核外電子帶負電,因此,整個原子 …

卡爾曼濾波器的原理和應用

What is Kalman Filter

  • 卡爾曼濾波器能夠從時間序列中不完全、包含雜訊的測量中,估計出系統的狀態,但系統必須是線性與動態的。

Kalman Filter Concept

公式來源
  • k :不同的離散間隔,例如 k=1 代表1s、k=2 代表2s。
  • ^xk :目標狀態 x 在 k 時間的的估值 (estimated value)。
  • Zk:在 k 時間獲取的量測值 (measured value),不完全可信。
  • Kk:卡爾曼增益 (kal …

SIGEV_SIGNAL/SIGEV_THREAD

Signals

sigev_notify

SIGEV_NONE: Do nothing. I can use timer_gettime() and timer_getoverrun() to query.SIGEV_SIGNAL: When timer expire, the kernel will pass the sigev_signo to the process.SIGEV_THREAD: When timer expire, the kernel will create a thread in this process and execute sigev_notify_function callback.

sigev_signo

SIGUSR1/2: The kernel will never send SIGUSR1 or SIGUSR2…

影響情緒的賀爾蒙

血清素對情緒的影響

  • 血清素主要是讓人感覺到平靜 ,和周遭的是感覺到親近感,感到快樂和幸福,與作息和睡眠也息息相關。
  • 血清素過少可能會導致憂鬱、焦慮、易怒、強迫症。

血清素對食慾的影響

  • 血清素會影響胃口,血清素低的時候會誘導攝取高熱量的食物,碳水化合物確實能夠提高血清素,但同時要注意避免攝取過多精製糖與脂肪。
  • 血清素高的時候胃口會下降。

血清素對睡眠的影響

  • 血清素的下游產物是褪黑激素,掌管睡眠,血清素分泌正常,褪黑激素才能分泌正常,睡眠才會好。
  • 白天曬太陽的時候,色胺酸會轉換血清素,晚上夠暗的時候,血清素會轉換成褪黑激素。過多的藍光,像是手機,會讓大腦誤以為是白天,導致失眠。

如何從食物增加血清素

  • 碳水化合物
  • 色胺酸(血清素的前驅物質),可以從海鮮、雞肉、奶類、豆類、堅果、香蕉。
  • 酶 (合成血清素的催化劑),包含 B6 和鎂,可以從香蕉、巧克力攝取,甜食和酒精會導致B群流失。

其他增進血清素的方法

  • 有節奏性的動作,跳舞、跑步、瑜珈、唱歌、甚至是咀嚼口香糖
  • 微笑 :)

Reference

Linux 常用系統指令

Disk usage (du)

$ du -sh
615M .
-s summarize
-h human-readable (K, M, G, T)
$ du -h -d 1 | sort -rh | sed 1d | head -n 4
597M ./.local
15M ./.cache
1.6M ./.config
1.2M ./Pictures
-d max-depth=N
(total of directory/files only if levels <= N, N=0 is equal to…

static_cast, dynamic_cast, const_cast, reinterpret_cast

Why C++ has four different casts, but in C only has one?

  • Inheritance
  • Templates

static_cast

  • 除了 void* 互轉其他 pointer,大部分都用在 Data 的轉換。
  • Data 轉換分成 Implicit / Explicit Conversions,差別在於隱性資料不失真。
// Data Conversions
float num1 = 3.1415;
int num2 = static_cast<int>(num1); // explicit conversions
// Void Pointer Conversions
int num = 0x41424344;
void* int_ptr = &num;
char* char_ptr = static_cast<char *>(int_ptr);
printf("%c %c %c %c\n", // D C B A…

unique_ptr, shared_ptr, weak_ptr

Smart Pointer

  • 避免 new 出來的記憶體,忘記 delete,然後也沒有 pointer 指到它,導致 memory leak。
  • 為了解決這個問題,C++11 提供了幾種不同的 Smart pointer,自動做 Garbage Collection 的動作。

unique_ptr

  • 確保只有一個指標可以管理這塊記憶體資源,當指標消失,資源就會被釋放。
  • 儘量使用 std::make_un …

Vince

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store