2011年3月31日 星期四

Linux Process 排程-1

       所謂的process 排程,就是指CPU 的資源作有效的安排  ("which next process" 、”when" and "how long").

       多工執行的系統有分為preemptive multitasking and cooperative multitasking. Linux 使用的是前者,preemptive multitasking. 而preemptive 簡單說就是執行中的task(Process ),可以非自願式在執行未結束的過程中,被scheduler 將其使用的CPU 的資源交給另一個優先權較高的task. 反之cooperative multitasking 則是由佔有CPU資源的程式執行到特定段落時,將CPU 資源交出時,才作重新排程,這也就是協調多工。(除了Win3.1及MAC OS 9使用cooperative multitasking 外,多數都是採用preemptive multitasking).

在preemptive multitasking  中,有個名詞叫作timeslice,指的是每個process 能執行的時間片段。

thread and process under Linux

      在Linux kernel 中,沒有thread的concept,有別於其它的OS -XP/NT,他們的process 結構有明確的定義所屬的thread, 也較為單純,有人說是lightweight process.

     但在Linux kernel裡,thread 就是標準的process ,差別是, 它與其它稱為 "同一個process 下的threads",共享address、file open 等resource.

     另一個要注意的名調是kernel thread, 這個thread 僅執行在kernel space, 所以他task結構中的mm是null,也就是說他沒有address space.

2011年3月29日 星期二

Activity 的四種不同工作模式

  Activity 在同一個”task" 是以堆疊的方式排放在一起,一般來若沒特別指定”模式”的話,新的Activity 會疊在前一個的上面,當最上面的Activity call finish() or 按下back key 時,該Activity 會被Destroy 掉,疊在下面的那一個會被ReStart.


       多個相同的Activity實体:

       1. Standard mode
                新產生的會疊在最上頭, 最上面舊OnPause -> 新onCreate -> 新onStart -> 新onRescume->舊OnStop 

  2. Single top mode:   
                若設定Single top mode 的那個Activity 不在最top 的堆疊,那start 該個Activity 時,結果與Standard mode 相同。

                若該Activity 在top ,當Start 該Activity時,會在看到同一個Activity OnPause , 接著同一個Activity 就會執行 OnResume

      

    只有一個Activity的實体:

         由於只有一個實体的產生,那重點是在它被疊在stack裡時候,如果有intent 傳來要start 該Activity ,那堆疊會有什麼樣的變化?是不是已經疊在上面的Activity 都會被清除,讓該個Activity 浮上來?
 
      1. Single Task Mode:(該Activity 只產生在該task 內一個實体,不同task 可存在另一個實体)
   當該Activity 被叫到的時候,在它上面疊著的其它Activity 都會被清掉。

       2. Single Instance Mode:(該Activity 產生的時候,只在產生一個新的task,該task 也僅有它這一個Activity,系統中僅這一個實体)  
   當該Activity 被叫到的時候,由於它是獨立的task,所以,在它上面疊著的其它Activity會保留,不會被影響到,因為它們是不同的task。但也因為這樣,所以當我們按back key一路退回去的時候,不會看到該instance 出現在退出的堆疊中。 

Monolithic kernel and Microkernel

          Linux 屬於Monolithic , 而NT / XP 之類則屬於MicroKernel, 兩者的差別比較:

         Monolithic Kernel:
              implemented entirely as a single process running in a single address space. Then kernel can invoke functions directly, as a user-space application might.

        Microkernel:
               the functionality of the kernel is broken into separated processes, usually called servers which are running in privileged execution mode. (other servers that don't need privileged execution mode are running under user space). So it's not possible for direct invoking function between servers, and instead, microkernels communicate via message passing.

The separation of the various servers prevents a failure in one server from bringing down another.

(from Linux.Kernel.Development.3rd.Edition -Robert Love)

         至於兩者好壞,各有說法,可參考重新審視微核心法則, 其中強調Microkernel 最大的特色是" 可靠性 ",而Linux 是monolithic kernel ,但它也引用了Microkernel Modular 設計的概念,可以動態的載入不同的modules.

2011年3月28日 星期一

Linux Kernel 在任何時刻都處於三種狀況之一

        Linux Kernel 在任何時刻都處於三種狀況之一:

        1。In user space, executing user code in a process
        2。In kernel-space , in process context, executing on behalf of a specific process
        3。In kernel-space , in interrupt context, no associated with a process, handling an interrupt

        就算是在系統idle 時,kernel is executing an idle process in process context. 
        (from Linux.Kernel.Development.3rd.Edition -Robert Love)