接著是software,跟hardware看起來很像,但是software是user主動需要OS的幫忙,就像call了一個system call或是寫了一個除以零,造成OS要幫你做事情,所以你會發現它是主動的,不過無論是主動被動,它只是知道它的位置在那邊,跟hardware的流程一樣,就是只要call了這些system call之後,它就會紀錄下剛剛的位置在哪邊,然後一樣track,這邊你可以注意到一點不一樣,這邊是用switch case,而不是用一個array,因為這邊是software,有無限的可能性,你可以define arbitrary number的system call。OS系統裡,有一些define 100個system call,有一些define 1000個,10000個也OK,因為是software,所以跟各有各的目的地hardware無關,沒有限制,所以這些system call的數量是unbounded。
你會發現在實作角度上來看,它會變成是一個switch case,不可能固定一個array去做一些限制,所以你可以load一些kernel的model,然後任意地去增加新的system call。雖然它叫做switch case不是array了,可是你一樣可以知道它就是system call,它會有它的number,會根據number去比對知道是在哪一個function call,然後開始去執行routine,執行完一樣會return回來,到剛剛call完system call的那個人身上,以上就是software的部分。
其實流程是完全相同的,只是說你是突然間被打斷,通常就是hardware,如果是主動去trigger一個interrupt,那就是software。在handle上,其實是兩種不同的routine,所以hardware有hardware的interrupt vector,software有software的switch case,根據hardware跟software的不同,它們會跑到不同OS的code裡面,其實interrupt的過程還是相同的,所以雖然有hardware、software,可是廣義上來說基本架構就像這邊看到的。