2009年4月29日 星期三

FTL介紹

FTL(flash translation layer)是一個轉換的介面,
使得flash 能夠被當作一般的儲存裝置使用(因為他不能直接更新檔案內容)

主要的作用有:
  • 位址轉換,把LBA(logical block address)轉換成flash上的位址
  • garbage collection(GC),由於flash的out-of-place update的關係,會造成有一些page被invalid掉,所以需要回收這些page
(FTL的效能受GC影響最明顯)






上面的page 和block大小只是個範例,實際上有的會不一樣(例如page為4K之類)



FTL位址轉換對應基本上最簡單的可以分成兩種:
  • page level - 對應比較細,但占用較大的轉換表(非常之大......)
  • block level - 對應比較粗躁,在GC的overhead很大(因為只要修改一個page就要重寫整個block),但是節省轉換表
基本上page level是沒辦法用的,block level有缺點,所以有一些替代方案,
像是已知的NFTL或是Log buffer-based FTL schemes之類

2009年4月23日 星期四

linux share memory用法

http://www.ecst.csuchico.edu/~beej/guide/ipc/shmem.html

可以用man 2 shmget查詢相關資料

需要include
sys/shm.h




主要有四個function:
  • shmget() - 建立共享記憶體
  • shmat() - attach 共享記憶體
  • shmdt() - detach 共享記憶體
  • shmctl() - 設定共享記憶體

int shmget(key_t key, size_t size, int shmflg);
  • key可以這樣用:(key_t)1234
  • size:以byte為單位的大小
  • shmflag:
    IPC_CREATE | 0666
    (0666是權限)
  • 若shmflag內有IPC_EXCL 則表示:
    若之前用同一個key建立過share memory,則此次建立會失敗(防止用到已創立過的)
    若沒用這flag就會連接到同一個地方
  • 回傳值是shmid,錯誤時則會回傳-1
void *shmat(int shmid, const void *shmaddr, int shmflg);
  • attach會把個shmid的share memory的位址放到shmaddr
  • 若失敗則shmaddr為-1
int shmdt(const void *shmaddr);
  • detach

若要移除已經建立的share memory,須使用shmctl:
先拿到shmid之後,用shmctl即可移除
shmctl(shmid,IPC_RMID,0);




寫出我的簡單範例做講解...







#include
#include

int main(int argc, char* argv[]){

int data[100];

int shmid;
void *shared_memory = (void *)0;

shmid =
shmget ((key_t) 123, sizeof (int) * 100, 0666 | IPC_CREAT);

if (shmid == -1)
{
fprintf (stderr, "shmget failed\n");
exit (1);
}

shared_memory = shmat (shmid, (void *)0, 0);

if (shared_memory == (void *)-1)
{
fprintf (stderr, "shmat failed\n");
exit (1);
}
printf ("Memory attached at %X\n", shared_memory);

if(argc == 2 && strcmp(argv[1], "-d") == 0){
printf("reset data to 0!\n");
((int *)shared_memory)[0] = 0;
}

printf("old data:%d\n", ((int *)shared_memory)[0]++);


printf("new data:%d\n", ((int *)shared_memory)[0]);

exit(0);
}

SKYARTEC 七動遙控器DIP開關修復

這台是買二手的,

遙控器上面控制陀螺儀感度是否可調整的DIP開關接觸不良,

要按著才能調整,很麻煩!


不過想到換DIP一次要解焊24跟針腳就覺得麻煩,

後來就直接就壞掉的那個開關接腳接到另外一個開關上面。






電鑽改裝鋰電

家樂福牌12V電鑽,雖然力道還算不錯(轉速有點慢)

但由於使用的鎳鎘電池不好,一下下就沒電了...

改裝成18650(3S1p 有分壓充) 以我的情況大約用兩三個禮拜才需要充一次。








自製直升機尾支撐架

由於不小心把尾翼摔裂了,

尾旋翼打到地上,

培林也打壞了...

所以就裝上碳纖棒代替,

相較之下碳纖棒比本來的尾翼堅固許多









詳細作法是用電木切掉一個長條行的缺口放置碳纖棒,

再把這組東西鎖在尾翼和尾齒輪箱的中間,

最後再用漆包線固定碳纖棒。




====================================================


由於原本的尾翼垂直的不好看

所以把它改成斜的...