嗡嗡嗡~
2017-07-22
Reentrancy and Thread-safety

常常聽到看到 reentrancy 但老是跟 thread-safety 搞得不是太清楚。

2017-07-09
Design Models for Concurrent Algorithems

這篇是設計 concurrent algorithem 的理論概念,沒什麼例子。

2017-05-21
Linux Desktop 3 Software Mapping

來個 Windows 跟 Linux 日常(?)軟體對照表。

2017-04-15
Open Street Map API

記錄開放街圖 Open Street Map(OSM) API 的基本使用跟文件。

2017-04-14
Use Shared Library in Linux

執行檔如何尋找 shared library

ELF 將依賴的 shared library 存在 .dynamic section 的 DT_NEED 欄位。

2017-04-03
Shared Library Versioning

相容性問題

使用 library 其中一個目標是不需要重新 compile 就能方便的升級程式的部份功能或者修正 bug。理想上,升級 library 只需要用新的檔案取代舊的。但是事情沒那麼美好,舊程式不見得能正常使用新 library,新舊程式間會有相容性問題。

2017-03-18
Dynamic Linking Relocation

Load process 在 dynamic linking 的差別是 load 完執行檔後 OS 會先看 ELF 的 .interp section 知道要 load 哪個 dynamic linker,OS load dynamic linker 並將控制權先交給它,在 linux 下是 /lib/x86_64-linux-gnu/ld-2.19.so(很明顯也是個 shared library)。

2017-03-16
Linux Desktop 2 中文環境

用 Linux 桌面最麻煩的地方之一是中文介面。我已經放棄設語系為中文,畢竟 terminal 各種 message 顯示中文實在很奇怪,但還是需要輸入法跟能看一點的字型啊啊啊啊啊……

2017-03-11
工程師碎碎念 1

想不到標題只好亂寫。跟這篇有點相關,但講點別的。

2017-03-07
Dynamic Linking Position-independent Code(PIC)

Dynamic linking 遇到的問題

Dynamic linking 想解決的一大問題是 memory 浪費。直覺想法是如果能讓不同 process 都會使用到的 library 在 memory 只有一份就能節省空間。對不同 process 來說 library 的內容必須是相同的才能共用。library 主要是 instruction 以及 data (executable file 都是這樣辣),data 不可能在 process 間共用,因為每個 process 都需要它自己的 data,不然會互相干擾(好像有古代系統是共用的…),因此能共用的主要是 instruction。

2017-03-05
Dynamic Linking Basic

Static Linking 的問題

static link 拆分了可執行檔,讓不同人或組織可以開發自己的 module,最後再 link 成執行檔。隨著系統變複雜,OS 裡有多個 process 在執行,當多個 process 以 static linking 連結相同的 library 時,例如擁有 printf() 的 standard library,memory 會有多份類似的 library 程式碼,造成浪費。

2017-03-05
Linux Desktop 1 Install Nvidia driver

裝 Linux 桌面系統來用用,為了避免以後可能重灌還要重找一次,記下些安裝過程。

2017-02-22
軟體擴充性

這個人又來胡言亂語了,不是什麼正經筆記

2017-02-21
Cargo project basic

Cargo basic

Cargo 是 Rust 的 build & package management system,通常會用 Cargo 管理 Rust project。安裝 Rust 會一起裝 Cargo。

2017-02-19
Explicit Runtime Linking

explicit runtime linking 讓程式可以在執行過程中控制 load 及 unload 模組。這種方式讓載入模組變得更靈活,可以在程式需要時才載入某個模組,載入什麼模組也可以依執行狀況決定。因為不需要在一開始載入所有模組,所以可以減少啟動時間跟記憶體用量。另外,因為可以在執行期才載入,也就能在不關閉程式的情況下新增、刪除及更新模組。