Intro to the Linux Kernel
Unix特别之处
- 简单,只有几百个system call,设计基础
- 对数据和设备的操作就像文件系统,只需要一系列核心system call
- 用C实现,开源,可移植到不同硬件架构
- 建立进程时间很短,
fork()
- 进程交互简单但健壮,很好的隔离性
Intro to Linux
- 借鉴了Unix
- 实现了部分API,但不是Unix的后代
- 是一个合作项目
- 基础是:内核、C语言库、工具链、基本系统应用
操作系统 VS 系统
-
操作系统:系统的一部分,负责基础使用和管理
-
系统:操作系统和上层运行的应用程序
内核基本构成
内核基本构成:中断处理器、调度器、存储管理系统、系统服务
用户态 VS 内核态
-
用户态:用户应用程序实行时的空间,获取一部分资源,能执行指定的系统函数。一般程序运行时进入。
-
内核态:受保护的存储空间,可以完全访问硬件。运行内核代码时进入。
System Calls
-
library call和kernel call有可能是多对一,或是一对一
-
应用通过system call进入内核态,让内核代替应用执行 = 应用在内核态执行system call = 内核在进程的上下文中运行
中断
-
硬件想要和系统交流,需要打断进程 --> 内核根据序号找到对应的中断处理器 --> 回应中断
-
为了保持同步,可以指定屏蔽哪些中断。中断一般不在进程上下文中,在专门的中断上下文,独自存在,迅速处理
上下文
上下文是内核活动的范围(breadth)。每一个处理器都处在三个状态中的一个:
-
用户态,在进程中执行用户程序
-
内核态,在进程上下文代替特定进程执行
-
内核态,在中断上下文,处理中断,和任何进程无关
Linux内核 VS Unix系统
- Linux支持动态内核模块加载
- Linux有对称多线程(SMP)支持
- Linux支持可抢占
- Linux不特意区分进程和线程
- Linux提供面向对象的设备类
- Linux忽略一些Unix的特征
- 修改Linux的前提是确实解决了一些问题