操作系统概述

单道批处理系统:程序串行执行,任何时刻,在内存中只有一道作业,依次顺序
多道批处理系统:程序可以并发执行,计算机的各部件可以并行运行
分时系统:用户交互+计算机各部件并行运行
普通的用户程序不能包含特权指令,CPU在用户态下只能执行普通指令
特权指令只能在内核程序中包含
PSW:CPU状态字寄存器,包括(CPU运行态,CPU正在执行的程序的优先级,各种控制位)等信息

PC寄存器:程序计数器,指向马上要执行的那一条指令
断点:检测到中断时,CPU刚执行完的那条指令地址
恢复点:断点的逻辑后续指令地址,实际就是PC的值
现场信息:中断那一刻,确保被中断程序能继续运行的有关信息

中断

中断:实现多道程序设计的基础,和正在执行的指令无关,由外部(如键盘、鼠标、定时器等)发出的信号
中断寄存器:寄存中断事件的全部触发器
中断位:每个触发器称为一个中断位,当发生某个中断事件时相应位被置上
中断响应:CPU在每条机器指令执行周期内的最后时刻,扫描中断寄存器,查看是否有中断信号

异常:和正在执行的指令有关,CPU停止当前的执行流程,转到相应的错误处理程序或陷入处理程序;
如:非法指令,执行指令出错或trap指令用于实现系统调用

早期不刻意区分中断和异常,都称为中断(广义)

trap指令实现系统调用,转到一个约定的地址开始运行内核程序,CPU用户态变为核心态
内核程序所在的内存空间为系统空间
对系统空间进行保护
硬件提供一个界地址寄存器,CPU处于用户态时,每次访问内存,判断访问是否越界

操作系统概述_第1张图片

操作系统运行模型

OS内核主要模块:
系统初始化模块
进程管理模块
存储管理模块
文件管理模块
外设管理模块

操作系统概述_第2张图片

内核程序是嵌在用户进程里面执行的,内核程序类似于一个函数被用户进程的程序调用
系统调用不是普通的函数调用
使用系统调用API时(:open,read/write),glibc会进行包装,将参数填入约定的寄存器当中,内部组织执行trap指令(内联汇编代码)
而后才转到内核程序实际提供的系统调用程序
// 下面是一个示例(glibc中的代码),在x86架构的CPU中,syscall指令从用户态切换到内核态,并执行内核代码的系统调用程序
// 用户程序需要将系统调用号存储在eax寄存器中,并将参数存储在其他寄存器中
// CPU会根据eax寄存器中的系统调用号,在内核中找到对应的系统调用处理程序并执行
#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;						\
})

你可能感兴趣的:(操作系统,操作系统)