操作系统2:系统调用及用户级线程切换
操作系统接口就是系统调用的函数
POISX(Portable Operating System Interface of Unix)定义 fork、open 等系统函数
内核态与用户态
CS 的最低两位来表示:0 为内核态,3 为用户态。
执行时检查 CPL(Current Privilege Level)是否小于等于 DPL(Descriptor Privilege Level)
用户程序发起的调用核心代码的唯一方式就是中断指令 int0x80
将 CS 中的 CPL 改为 0,“进入内核”
系统调用的核心:
- 用户程序中包含一段包含 int0x80 指令的代码
- 操作系统写中断处理,获取想调程序的编号
- 操作系统根据编号执行相应代码
多线程切换
核心是 Yield() 函数,用户主动实现不同线程栈的切换
1 | void Yield() { |
1 | void ThreadCreate(A) { |
1 | // 以浏览器分别加载文本和图片等数据为例 |