TLC NAND 小註解

TLC 是 Triple Level Cell 的縮寫, 和 SLC, MLC 所代表的 Single / Multiple Level Cell 都是類似的東西.

從 SLC, MLC, 到 TLC; 在成本上, 愈來愈低, 因此在容量上也愈來愈大. 所謂的容量變大,  是指單一 cell 可以表示更多 bits.

SLC 用 1 cell 表示  1 bit.

MLC 用 1 cell 表示 2 bit. 以 4 個電壓表示  (0,0), (0,1), (1,0), (1,1).

TLC 用  1 cell 表示 3 bit. 以 8 個電壓表示  (000, 001, 010, 011, 100, 101, 110, and 111).

所以在相同的 cell 容量之下, MLC 的容量變成 SLC 的 2 倍, TLC 的容量是 SLC 的 3 倍.

雖然容量提昇, 但是 TLC 的速度和穩定性都比  MLC 更下降了. 即便如此, 從  MLC 成功取代 SLC 的先例來看, 未來的固態硬碟, 有可能是 TLC 的天下. 畢竟一顆超大的硬碟, 過了兩年可能就變成 "好小一顆", 誰還管它耐不耐用呢?

[ref]

1. 全面了解TLC NAND技术以及市场现状

刷卡報稅優惠整理

本來我想比一比今年刷哪張卡繳稅最優惠, 原來人家已經都整理好了. 在不需要收手續費的情況下, 那麼最有利的狀況就是 0 利率的分期付款, 或是有額外的好處. 整理較優惠的方案如下:

排名

分期 0 利率

現金回饋

抽獎

1

台銀 6

華南銀行滿百萬回饋 0.5%

玉山銀行 10 克黃金 (19,000)

日盛銀行 Sony Tablet P (19,000)

中國信託, 永豐銀行, 玉山銀行台新銀行  iPad2 (12,500+)

2

大眾 4

國泰世華滿萬回饋 0.5% 上限一萬.

3

它多數

台北富邦滿萬回饋 0.3%

N

三信, 50 NTD~手續費 0.3%, 不可分期

[卡優新聞網版本] 發表於 2012/4/30.

重點講到: 哪些銀行不收手續費。

[卡優新聞網版本] 發表於 2012/5/7.

重點講到: 

1. 分期刷卡的優惠.

2. 注意分期利率換算成年利率的高低,以分3期2%來說,年利率就相當於12%之多。

ARM ACP 小註解

ARM 的 CPU 有個機制叫做 ACP (Accelerator Coherence Port), 它是啥呢?

以 MIPS 系統為例, 如果我用 DMA 搬了一塊 memory, 而 CPU 不知情 –  因為不是透過它搬的, 那麼 CPU 就不能用 cache memory 來存取這塊記憶體, 以免發生預期以外的狀況. 既然不能 cache, 那麼 CPU 就不能自由自在地操作它了.

一般來說, 部分的 DMA 還是透過 CPU 填寫 register, 故 CPU 可以等 DMA done, 然後再進行一般的操作. 不過在多工的情況下, 使用起來就會更加地麻煩.

ARM 的 ACP 就是解決這個問題, 假如一個 device 被掛在 ACP 上, 那麼即使用 DMA 對這個 device 做動作, 其內容也會被同步到 cache memory 裡面, 包括 L1 和  L2 cache. 雖然 ACP 只支援 3 個 bit 的 AXI device ID – 8 個 device, 還是可以用 bridge 的方式加以擴充.

ACP 上的 device 在 read 的時候, 依序在 L1, L2 cache 和 external memory 讀資料.

ACP 上的 device 在 write 的時候, 會優先灌入 L1 cache, invalid 舊資料, 當然也就 update 了 L2 cache.

從行為上來看, 如果一個 device  有很多 DMA, 又有很多 CPU 動作, 那麼 ACP 將可以帶來不少的好處. 包括快速, 省電等等.

我的潛意識在搞笑

前幾天, 我有個朋友在臉書上說, 他夢到我們另外一個朋友 4 個月大的小 baby, 忽然說出一句完整的話 “我想要找爸爸", 於是就驚醒了. 我留言安慰他這沒什麼, 說不定繼續看下去還有更好玩的, 要是小 Zoey 可以報明牌不就更好了嗎? 

其實同一天晚上, 我也做了一個夢, 內容更誇張, 大致牽涉好人壞人和妖怪. 之所以沒有恐怖到把我嚇醒, 可能是我的潛意識一直在跟我搞笑吧!

話說好人原本被壞人包圍, 但壞人聽到妖怪殺人於無形, 全都驚慌失措地撤走了. 什麼妖怪這麼厲害? 我一定要看一下.

我把頭探出牆角, 只看到遠處一個小小的身影, 長頭髮蓋住半個身體, 身上穿著白袍.

“這不是前陣子在職棒賽開球的貞子嗎!"

“不!" 我的潛意識 OS 說 (OS = overlapped sound = 旁白). “它是檜子."

“因為它像筷子一樣能把人夾到另外一個世界, 又讓人聯想到劊子手."

嗯, 這樣的名字似乎有點道理啊!

接著我來到一個像是廚房的地方, 牆上有兩層置物的木板, 下方好像是個爐子或是灶. 上層木板放著一個比草綠色深一點點的 “薊", 沒有帶莖的. 帶著莖的話, 我女兒小四年級在韓國見到它, 就叫它 “釋迦棒".

下層木板放著一個削了皮又剖半的水梨, 切口的那一面朝下. 兩層木板上都放了其他的一些都是, 都是基本上灰撲撲的, 只有綠色的薊和雪白的梨看著顯眼.

此時旁白又來了, “你知道這是什麼嗎?" 他接著說 “老薊, 俯梨."

“你想說老驥伏櫪, 志在千里是吧!? 是要我去對付檜子? "

最後那個字唸 “立" 啦! 不過我的潛意識真的很搞笑. 本來不想寫他, 但他剛剛又送給我一個夢.

我夢見我在一個有很多很多民進黨支持者的大房間裡面. 他們討論著怎麼選黨代表; 而我在等他們走光了之後可以洗個澡. 真不知道我們會什麼會出現在同一個空間.

這時候 OS 介紹起撒豆的風俗. 他說有些地方有撒豆驅魔的風俗 (日本吧!?). 但是一般的豆子, 比方說綠豆, 煮熟了就會破皮. 如果是用豆子拿來 “驅趕" 男女朋友,說不定會有撕破臉的聯想.

比綠豆大顆的豌豆沒有這個缺點, 因為豌豆煮久了也不會破皮.於是後來演變成送豌豆給對方, 來表示不想在一起, 但不要傷了和氣 – 也就是以豌豆表示委婉拒絕的意思.

“嗯, 雖然我不下廚房, 我的潛意識也沒有做過菜. 但是這樣講好像很有道理."

我的潛意識佑又把豌豆唸成碗豆了. 他一直是說 “碗豆", 既通俗又有梗.

“這就是婉拒 (碗拒) 一詞的由來."  OS 說.

Android Thread Safe / Lock Free / Atomic 小註解

Atomic (原子) 通常是指一個指令不會被打斷, 例如一道組合語言的指令, 在沒有執行完之前, 就是 ISR (interrupt service routine) 也無法干擾其結果. 同樣的概念如果放到 function 上, 就很難說這個 function 從來都沒有打斷過了. 我們頂多說這個 function 的結果是如預期的.

怎麼樣保證如預期呢?在 Android 當中的 atomic.c 採用暴力的方法進行, 例如要做一個 write.

void android_atomic_write(int32_t value, volatile int32_t* addr) 顧名思義想把 value 寫到這個 addr,  而它裡面的內容就是:

{

int32_t oldValue;

do {

oldValue = *addr;

} while (android_atomic_cmpxchg(oldValue, value, addr);

只要 OldValue 沒有 value, 這個 loop 就不善罷休. 所以一定可以寫成功. 只要成功了, 就準備離開. 大家可以發現, 如果此時別的 thread 也來寫同樣的位置, 那就出事了. 

為了避免後者的狀況發生, 我們最好不允許這個在有效期間之內又被改掉. 解決之道是 lock 此一變數, 直到 unlock 之前, 都不讓別人改寫. 不過 Android 的 atomic 是 lock-free 的, 所以不需要用 lock. 相對地, 它讓其他的 thread 不會影響到當前的 thread, 也就是確保 thread safe.

怎麼做到 lock free, thread safe 呢, 簡單地說就是避免使用全域變數 (global variable), 只用區域變數 (local variable 或 auto variable). 此時每個 thread 都只針對自己的記憶體空間操作, 就不會影響到別人了.

此外, 我們可以指定哪些變數必須是 automic 的, 例如宣告成:AtomicBoolean, AutomicInteger, AutomicLong, AutomicIntegerFieldUpdate<T> …等等就有保護作用. 這些描述在 java.util.concurrent,automic.

當然, Android 還是有 lock, class 是 java.util.concurrent.locks.

[ref]

1. Android SDK

2. Lock-free atomic operations in Android

3. Thread-Safe的理解與分析