iT邦幫忙

2021 iThome 鐵人賽

DAY 19
1
自我挑戰組

杰哥的考研紀錄系列 第 19

Day-19 System Call & OS架構

  • 分享至 

  • xImage
  •  

System Call & OS架構

tags: IT鐵人

System Call是啥

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傳遞方式

前面說要把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

OS Structures

前面介紹了要有System Call,kernel/user mode來保護系統以及其他process的安全,不過實作OS的方式有很多種,以下介紹七種不同的實作類型:

  1. Simple

    一如其名,他沒辦法Multitask,也沒有區分Dual-mode。
    有名的例子是MS-DOS。

  2. More complex than Simple

    他的OS分成兩塊,System Program和The kernel,概念上是把靠近硬體的放在更內層的kernel。
    原始的UNIX採用這種方式。

  3. Layered Approach

    是比較抽象的模型,切分Layer的方式因系統而異,採用Top-Down切割,將系統分解成數個關鍵元件,上層可以使用下層功能,但下層不能使用上層功能,所以可以用Bottom-up測試。
    好處是易於分工也方便測試;而壞處是Layer分割不易,並且Performance會因為Layer太多而降低。

  4. Microkernel

    CMU提出的觀念,是為了簡化UNIX。
    將kernel中一些比較不基本的Service從kernel中移除,改成以system library方式提供,以便得到一個較小的kernel,稱為Microkernel。
    好處是microkernel易於延伸(改變可以坐在user site),OS也方便移植到另一個硬體架構(microkernel小,所以修改的量不大),並且更安全(增加的service放在user site,所以kernel出錯機會低);壞處是Performance變差(user site跟kernel的溝通變多)。

  5. Monolithic kernel

    與Microkernel相反,把kernel services都放在kernel mode。
    優缺點也相反。
    大部分的OS皆採用此作法(e.g. UNIX, Linux, Windows, Apple OS)。

  6. Modular

    像是打包成不同的包裹,稱為Loadable kernel modules(LKM),需要某個功能的時候把需要的包讀進Memory。
    例子有Linux, Soloris...

  7. Hybrid

    基本上就是每個種類都來一點,現今的OS都不會只有一種類型,像是打包的部分也有分成上下層,就是Modular跟Layered的混和。看起來就很複雜了...

就到這邊啦~

介紹了system call的作用以及不同OS的設計方式,這些都是不斷發展改良出來的結果,再加上電腦零件的發展很迅速,所以電腦知識成長的速度就很快,每次都會有永遠學不完的感嘆。

上一篇 下一篇
Kernel Mode Process

上一篇
Day-18 Kernel Mode
下一篇
Day-20 Process
系列文
杰哥的考研紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言