操作系统程序的运行提供环境
操作系统是直接运行在硬件上的特殊软件
CPU的中断是操作系统的生命所在!
学习操作系统需要注意的地方
了解C内存模型/UNIX/地址
CPU Clock Rates
由于速度差异,CPU和外设通过中断并行工作
多道程序出现,并发执行
多用户同时使用一个机器,互不干涉
重点:C语言内存结构
该C语言内存模型在物理上存在,实际并上不存在,栈只有在运行的时候才存在,堆也是(在可执行文件中没有)
环境变量可看作栈的一部分,是main的参数。
参数调用过程中的跳转,考虑为什么这样实现!
参数和局部变量在变量的角度看是一样的
从硬盘拿到可执行文件放到内存
windows下可执行文件的扩展名:.exe , .sys , .com ,.bat等
一般操作系统会读可执行文件的128个字符
CPU得知道寄存器运行的途径,并进行控制。
每个地址是有多个寄存器的
中断用于解决CPU与外设的操作关系
中断:外设为了让CPU了解自己的信息给出的刺激
CPU只有一个管脚,中断控制器连CPU,外设连中断控制器,中断是在当前指令完成后发生的,查中断向量表,找地址,中断处理程序。win2000之前的都不算现代操作系统
很小的操作系统:μCos 、Cos——C:Card
单道批处理系统与多道批处理系统
Real-Time System 实时系统——可预期
硬实时:必须在规定时间内完成
软实时:尽力而为,如互联网
实时系统与交互系统是矛盾的,桌面系统是结合了软实时的交互系统
操作系统从User mode进入Kernel mode需要由swi(software interrupt 软中断)指令触发exception。
所有User模式下软件的系统调用(System Call)都是通过swi指令进入Kernel模式的。Glibc中包含了一系列的System Call,如常用的open、read、write、ioctl,每个System call对应一个System call number。每个System call在kernel中都有相应函数来完成。在_vector_start开始的向量表中SWI exception handle将从vector_swi开始执行。实际vector_swi代码在entry_common.s中。Vector_swi主要做的事情就是根据user mode执行swi时存在寄存器中的system call number找到kernel中对应的handler routine,并跳转到该routine执行。
CPSR (current program status register)程序状态寄存器,包含条件码标志、中断禁止位、当前处理器模式以及其他状态信息。
从异常exception返回时要修改CPSR,从而恢复到Exception发生时的CPU mode继续执行。