# 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](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/HJ8bbihWY)|[Process](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/SyJgqbJMF)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.