Day-19 System Call & OS架构

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

<<:  [Day16] Vue 3 单元测试 (Unit Testing) - Vue Test Utils + Jest 基本介绍 & 安装

>>:  [Day 16] 我的资料哪有这麽平衡!第一季 (data augmentation)

【DAY 25】Microsoft 365 的方案有好多种,到底哪些适合我?(下)

哈罗大家好~ 所以接续昨天提到的内容,IT环境建置,除了要思考使用场景外,也要考量整体组织的 IT ...

[Day 32] 自我介绍後台及前台(一) - 取得使用者资料

自我介绍後台及前台 自定义性别 我们现在要开始做自我介绍的後台部分, 在这里我们要先建一个Enum,...

Laravel 技术笔记 (二)【Controllers 控制器】

介绍 观看本篇前,建议先了解何谓 MVC 模式,简单说控制器的作用就像是交通警察,应用程序在接收 H...

[iT铁人赛Day24]练习题(3)

今天来讲到第三题练习题 题目的大意就是: 有一个小弟弟正在玩积木,然後说他盖了一个城墙。 但他姐姐说...

Day 10 Prototype 制作 - 版面、字体、间距、图示设定小技巧分享

今天用这个阳春的版面来介绍版面、字体、图示还有间距的设定。刚刚跟接案的客户谈完流程,也收了头款,大家...