IT鐵人
System Call的目的是作為執行中user process與kernel溝通的介面,代表OS可以提供的服務項目,當process執行時,若需要OS提供某種服務(例如Disk read txt內容),process會issue Trap,帶入system call ID及其相關參數(例如invoke the required system call),當OS收到此請求後,會去執行對應的system call,當完成後,再將結果通知傳回給process。
如果用比較日常發生的事情來說,像是我們去超商取貨,一定是告訴店員手機末3碼以及名字,然後店員找到包裹後再拿給我們確認。這種翻包裹的動作不會讓我們自己拿,因為可能有其他人包裹的安全性之類的考量。
跟店員說要取包裹就像是一種system call,而提供手機末3碼及名字就是相關參數,包裹就像是結果。
OS中有許多的System Call,大致上可以分成下面6種:
類型 | 內容 |
---|---|
Process Control | Process create/terminate/block |
File Management | Fopen, Fclose, Fread, Fwrite |
Device Management | I/O |
Information Maintenance | status, timer, date... |
Communications | Process間的溝通、recv、send |
Protection | Control access to resource, Get & Set permissions, Allow and Deny user Access |
這些都是因為可能危害系統安全所以要交給OS處理的部分,Process Controll是一個大章節,會在後面做介紹。
前面說要把System Call的相關係數傳給OS,傳輸的方式主要有下列三種:
方法 | 優點 | 缺點 |
---|---|---|
利用Registers保存參數,OS從這些Registers讀取參數 | Simple, fast access(without memory access) | 不適合用在大量參數的狀況(Register數量有限) |
利用memory,以一個Block保存這些參數,且將此Block的位址存在一個Register中,傳給OS | 適用大量參數的情況 | 存取速度較慢 |
準備一個Stack,參數可被push進去Stack,OS在從此Stack pop已取得參數 | 適用大量參數的情況,操作比較簡單 | Stack size要大,避免overflow |
前面介紹了要有System Call,kernel/user mode來保護系統以及其他process的安全,不過實作OS的方式有很多種,以下介紹七種不同的實作類型:
Simple
一如其名,他沒辦法Multitask,也沒有區分Dual-mode。
有名的例子是MS-DOS。
More complex than Simple
他的OS分成兩塊,System Program和The kernel,概念上是把靠近硬體的放在更內層的kernel。
原始的UNIX採用這種方式。
Layered Approach
是比較抽象的模型,切分Layer的方式因系統而異,採用Top-Down切割,將系統分解成數個關鍵元件,上層可以使用下層功能,但下層不能使用上層功能,所以可以用Bottom-up測試。
好處是易於分工也方便測試;而壞處是Layer分割不易,並且Performance會因為Layer太多而降低。
Microkernel
CMU提出的觀念,是為了簡化UNIX。
將kernel中一些比較不基本的Service從kernel中移除,改成以system library方式提供,以便得到一個較小的kernel,稱為Microkernel。
好處是microkernel易於延伸(改變可以坐在user site),OS也方便移植到另一個硬體架構(microkernel小,所以修改的量不大),並且更安全(增加的service放在user site,所以kernel出錯機會低);壞處是Performance變差(user site跟kernel的溝通變多)。
Monolithic kernel
與Microkernel相反,把kernel services都放在kernel mode。
優缺點也相反。
大部分的OS皆採用此作法(e.g. UNIX, Linux, Windows, Apple OS)。
Modular
像是打包成不同的包裹,稱為Loadable kernel modules(LKM),需要某個功能的時候把需要的包讀進Memory。
例子有Linux, Soloris...
Hybrid
基本上就是每個種類都來一點,現今的OS都不會只有一種類型,像是打包的部分也有分成上下層,就是Modular跟Layered的混和。看起來就很複雜了...
介紹了system call的作用以及不同OS的設計方式,這些都是不斷發展改良出來的結果,再加上電腦零件的發展很迅速,所以電腦知識成長的速度就很快,每次都會有永遠學不完的感嘆。
上一篇 | 下一篇 |
---|---|
Kernel Mode | Process |