操作系统概述

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

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

中断

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

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

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

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

在这里插入图片描述

操作系统运行模型

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

在这里插入图片描述

内核程序是嵌在用户进程里面执行的,内核程序类似于一个函数被用户进程的程序调用
系统调用不是普通的函数调用
使用系统调用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;						\
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值