嗡嗡嗡~
2017-09-23
Performance of Concurrency

用 concurrency 就是為了更快,為了比 sequential 程式快,不然搞得那麼複雜幹嘛呢。

2017-09-21
驗證 Concurrent Algorithm

設計 concurrent algorithm 後當然要確認正確性。在《Principles of Concurrent and Distributed Programming》中 Ben-Ari 定義了為驗證 concurrent algorithm 各種特性的抽象結構(concurrency abstraction),可分為以下四個部份:

2017-08-31
Concurrency and Parallelism

Concurrency vs Parallelism

concurrency 是如何拆分程式成多個獨立的工作,讓這些工作可以一起「正在進行(in progress)」但不一定要「同時執行」。「正在進行」是多個工作可以輪流到 CPU(或者 core)上執行,雖然不是同時執行但這些工作都是正在進行中的。而 parallelism 則是多個工作「同時執行」,也就是實際上必須要有多個 core 能同時執行工作。

2017-08-27
Reactor pattern

這篇 paper

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 程式碼,造成浪費。