2011年7月27日 星期三

Linux kernel spinlock 使用方式與時機

由 Linus 親自整理的 Linux kernel spinlock 文件

~linux/Documentation/spinlocks.txt
            多核心處理 critical section 的方式,safe but slow(disable interrupts)
 67 See . The basic version is:
 68
 69    spinlock_t xxx_lock = SPIN_LOCK_UNLOCKED;
 70
 71
 72     unsigned long flags;
 73
 74     spin_lock_irqsave(&xxx_lock, flags);
 75     ... critical section here ..
 76     spin_unlock_irqrestore(&xxx_lock, flags);

            單核心處理 critical section 的方式:
115
116     spin_lock_irqsave(flags);
117     .. critical section ..
118     spin_unlock_irqrestore(flags);
119

        reader/writer 處理 shared data 的鎖定方式:
149    rwlock_t xxx_lock = RW_LOCK_UNLOCKED;
150
151
152     unsigned long flags;
153
154     read_lock_irqsave(&xxx_lock, flags);
155     .. critical section that only reads the info ...
156     read_unlock_irqrestore(&xxx_lock, flags);
157
158     write_lock_irqsave(&xxx_lock, flags);
159     .. read and write exclusive access to the info ...
160     write_unlock_irqrestore(&xxx_lock, flags);

        如果確定不會跑在 interrupt handler 中(否則會重複鎖定造成 dead lock),
        可以用簡化的 spin_lock API 較快
192     spin_lock(&lock);
193     ...
194     spin_unlock(&lock);

        因此 read lock 等可以用簡化的非 irq safe spinlock,但 write lock 則必須
        使用 irq safe 的 spin lock

Linux kernel and user space interfaces

1. /dev/  character device ioctl control code read/write interface
2. /sys sysfs  show/store read/write interface
3. /proc procfs  read/write interface
4. event: input events (for example key events)

2011年7月21日 星期四

修改 linux device driver 載入 順序

1.  platform driver 可以調整 platform device 的 register 順序
 
2.  強者同事 Gary 使用 include/linux/init.h 定義不同順序的 init macro,module_init default 是 order 6,可以設定 late_initcall 是最後的 order 7

3.  build  kernel module, 在 user space 調整 module loading 順序

2011年7月10日 星期日

蘭德的培養心理調適能力建議

如果喜歡閱讀蘭德公司的文章,可以到蘭德網站購買紙本資料
(Consider buying this document if you think this information is valuable to you.)。

Psychological resilience 原本查到是抗壓力,但我覺得這
個翻譯偏負面,不符合這篇的主旨,因此翻為心理調適能力。

心理調適能力指的是處理或克服逆境與壓力的過程。精神健
康方面,心理調適力不只是個人人格,而是個人跟生命經歷
與當下時空環境的互動。比如調適力可以應用到預防(避免遭
遇壓力)或是治療(從壓力產生的傷害中復原)的情境。

可以提升調適力的因素:

個人因素

– 正向處理
經營管理令人煩惱的情況,花費努力解決個人與人際問題,
尋求降低或忍受壓力與衝突,包括主動務實,專注在問題,
精神與靈魂層次的處理方式

–正向影響
保持熱情、主動與警覺,包括正向情緒,幽默感(承受壓力、
受到挑戰時仍保持幽默感),懷抱希望,保持彈性擁抱改變

– 正向思考
處理資訊,應用知識,藉由改造、重構框架、理解情況、保
持靈活、再評估、重新聚焦,改變偏好與價值觀優先順序。
對事物結果有正向期待,正面的願景與心理準備

–務實主義
務實掌握可能性,對於結果有務實的預期,自尊心與自我
價值,自信心,相信自己能勝任,認識自己可掌握的部份, 
並接受無法控制與無法改變的事物。

– 控制行為
監控、評估、修改情緒反應並完成目標的程序(自我規範、自
我管理、自我提升)。

家庭因素
– 情感連結
家人之間的情感連結,包括共享的娛樂與休閒時間。

– 溝通
思考、資訊的交換、 包括解決問題,人際關係的管理。

 – 支持
認知可以從他人得到、並提供安慰。包括情感上的,可觸
覺的,起重要作用的與精神、靈魂上的支持。

– 親密感
愛、親密、忠誠。

 – 教養
養育子女的技巧

– 適應力與通融
可調適自己接受關於生活中的改變,包括彈性、靈活地扮演
家庭中的角色。

組織因素

– 正向的領導環境
使用或培養組織單位之間的互動,建立自尊心並支援完成
任務、領導統禦、正向角色典範、執行組織政策

– 團隊合作
協調團隊成員之間靈活彈性的分工合作

– 內聚力
小組能聯合行動,聯結所有團隊成員承諾互相援助,一起投
入工作任務。

社群因素
– 歸屬感
整合,友誼,包括參與精神信仰的組織,協定與儀式,社會
服務,學校等,以及執行組織政策。

– 內聚力
社群內可以群聚人們的聯結,包括共享價值與親密安全的關係

– 連結性
在社群中與他人的連繫品質與數量,包括與單位,或與在某
單位的人們聯繫,連繫的層面包括承諾,組織結構,角色,
責任與溝通

– 集體效能
團隊成員瞭解整個團隊有能力共同合作