Fork me on GitHub

操作系统学习基础

clip_image001 操作系统程序的运行提供环境

clip_image001[1] 操作系统是直接运行在硬件上的特殊软件

clip_image001[2] CPU的中断是操作系统的生命所在!

clip_image002 学习操作系统需要注意的地方

clip_image001[3] 了解C内存模型/UNIX/地址

clip_image003

CPU Clock Rates

由于速度差异,CPU和外设通过中断并行工作

多道程序出现,并发执行

多用户同时使用一个机器,互不干涉

clip_image002[1] 重点:C语言内存结构

该C语言内存模型在物理上存在,实际并上不存在,栈只有在运行的时候才存在,堆也是(在可执行文件中没有)

环境变量可看作栈的一部分,是main的参数。

clip_image004 参数调用过程中的跳转,考虑为什么这样实现!

参数和局部变量在变量的角度看是一样的

clip_image001[4] 从硬盘拿到可执行文件放到内存

clip_image001[5] windows下可执行文件的扩展名:.exe , .sys , .com ,.bat等

clip_image001[6] 一般操作系统会读可执行文件的128个字符

CPU得知道寄存器运行的途径,并进行控制。

每个地址是有多个寄存器的

中断用于解决CPU与外设的操作关系

中断:外设为了让CPU了解自己的信息给出的刺激

CPU只有一个管脚,中断控制器连CPU,外设连中断控制器,中断是在当前指令完成后发生的,查中断向量表,找地址,中断处理程序。win2000之前的都不算现代操作系统

很小的操作系统:μCos 、Cos——C:Card

单道批处理系统与多道批处理系统

Real-Time System 实时系统——可预期

硬实时:必须在规定时间内完成

软实时:尽力而为,如互联网

clip_image001[7] 实时系统与交互系统是矛盾的,桌面系统是结合了软实时的交互系统

操作系统从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继续执行。

clip_image005

posted @ 2016-10-08 21:45  伊甸一点  阅读(1250)  评论(0编辑  收藏  举报