单道批处理系统:程序串行执行,任何时刻,在内存中只有一道作业,依次顺序
多道批处理系统:程序可以并发执行,计算机的各部件可以并行运行
分时系统:用户交互+计算机各部件并行运行
普通的用户程序不能包含特权指令,CPU在用户态下只能执行普通指令
特权指令只能在内核程序中包含
PSW:CPU状态字寄存器,包括(CPU运行态,CPU正在执行的程序的优先级,各种控制位)等信息
PC寄存器:程序计数器,指向马上要执行的那一条指令
断点:检测到中断时,CPU刚执行完的那条指令地址
恢复点:断点的逻辑后续指令地址,实际就是PC的值
现场信息:中断那一刻,确保被中断程序能继续运行的有关信息
中断
中断:实现多道程序设计的基础,和正在执行的指令无关,由外部(如键盘、鼠标、定时器等)发出的信号
中断寄存器:寄存中断事件的全部触发器
中断位:每个触发器称为一个中断位,当发生某个中断事件时相应位被置上
中断响应:CPU在每条机器指令执行周期内的最后时刻,扫描中断寄存器,查看是否有中断信号
异常:和正在执行的指令有关,CPU停止当前的执行流程,转到相应的错误处理程序或陷入处理程序;
如:非法指令,执行指令出错或trap指令用于实现系统调用
早期不刻意区分中断和异常,都称为中断(广义)
trap指令实现系统调用,转到一个约定的地址开始运行内核程序,CPU用户态变为核心态
内核程序所在的内存空间为系统空间
对系统空间进行保护
硬件提供一个界地址寄存器,CPU处于用户态时,每次访问内存,判断访问是否越界
操作系统运行模型
OS内核主要模块:
系统初始化模块
进程管理模块
存储管理模块
文件管理模块
外设管理模块
内核程序是嵌在用户进程里面执行的,内核程序类似于一个函数被用户进程的程序调用
系统调用不是普通的函数调用
使用系统调用API时(如:open,read/write),glibc会进行包装,将参数填入约定的寄存器当中,内部组织执行trap指令(内联汇编代码)
而后才转到内核程序实际提供的系统调用程序
#define internal_syscall5(number, arg1, arg2) \
({ \
unsigned long int resultvar; \
TYPEFY (arg2, __arg2) = ARGIFY (arg2); \
TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
asm volatile ( \
"syscall\n\t" \
: "=a" (resultvar) \
: "0" (number), "r" (_a1), "r" (_a2) \
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
(long int) resultvar; \
})