【OS】操作系统概述
目录
几种操作系统
批处理
单道批处理
多道批处理
分时操作系统
CPU的工作模式
CPU模式位(PSW)
特权指令
OS内核
系统调用
示例:read()函数简化例子,x86汇编代码
用户态-->内核态
内核态-->用户态
OS引导
名词
主引导记录MBR
分区引导记录PBR
流程
虚拟机
1型虚拟机管理程序(具有裸金属架构的虚拟化技术)
2型虚拟机管理程序(具有寄居架构的虚拟化技术)
几种操作系统
批处理
单道批处理
- 内存中只有一道程序
- 一批程序自动执行
- 程序之间串行执行
- 无须人工干预
多道批处理
- 内存中有多道程序,多个程序交替运行
- 轮流占用CPU
- 无法人机交互
分时操作系统
将CPU时间划分为时间片分配给不同程序
实现了人机交互,用户可在很短时间内获得响应
CPU的工作模式
CPU模式位(PSW)
- 核心态
- 用户态
特权指令
CPU在内核态才能运行的指令
OS内核
基本功能:
- 时钟管理
- 中断机制
- 原语
资源管理:
- 进程管理
- 存储管理
- 文件管理
系统调用
形如一组打包好的库函数,这些函数的功能需要由OS内核实现
系统调用提供了用户程序和OS内核之间的接口
应用程序通过系统调用来获得OS的服务
示例:read()函数简化例子,x86汇编代码
;函数参数 mov rdi,fd ;文件描述符 mov rsi,buf ;缓冲区指针 mov rdx,nbytes ;要读取的字节数;系统调用号 mov rax,0 ;sys_read的系统调用号是0;触发系统调用 syscall;返回值 mov [buffer],rax ;将返回值(读取的字节数)存储或处理
准备参数:read()函数的参数被放置在适当的寄存器中。对于Linux x86_64,文件描述符fd放在rdi,指向数据缓冲区的指针buf放在rsi,字节数nbytes放在rdx
设置系统调用号:系统调用read的编号(在Linux中通常是0)放在rax寄存器
执行系统调用:syscall指令触发系统调用,内核接管,执行实际的读操作
处理返回值:系统调用执行完毕后,返回值(通常是实际读取的字节数,或者错误代码)存放在rax寄存器
用户代码中的read()只是一个库函数,并非真正的系统调用指令不会显式地出现在用户代码中
用户会以为自己的read()引发了系统调用,而库函数read()偷偷地执行一个软中断或陷阱指令来发起真正的系统调用
执行软中断/陷阱指令,可以引发自陷异常,导致CPU从用户态陷入到内核态
内核执行完服务程序后,通过sysret指令修改cpu中的模式位,使其 回到用户态
用户态-->内核态
- 用户程序发起系统调用(系统调用本质就是中断)
- 发生中断,必须陷入内核态由OS内核处理中断
- 发生异常,必须陷入内核态由OS处理中断
- 用户程序视图执行特权指令
内核态-->用户态
- 设置程序状态字寄存器PSW中的CPU模式位,将其置1
OS引导
名词
主引导记录MBR
- 位于磁盘的0号扇区
- 磁盘引导程序
- 分区表信息
分区引导记录PBR
- 位于系统分区的0号扇区
- 分区引导程序
- 操作系统引导程序
流程
- 计算机启动,电源自检
- 计算机主板ROM区的BIOS程序被激活,负责初始化硬件,进一步自检
- BIOS读取硬盘0号扇区的主引导记录MBR,启动磁盘引导程序
- 利用磁盘引导程序找到系统分区,在系统分区的0号扇区(PBR)启动分区引导程序,再由分区引导程序启动操作系统引导程序,得知OS内核位置并将其加载入主存
虚拟机
1型虚拟机管理程序(具有裸金属架构的虚拟化技术)
1型VMM是唯一一个运行在内核态的OS
客户机OS(虚拟机上的OS)以为自己运行在内核态,这种内核态叫虚拟化内核态,介于真正内核态和用户态之间
虚拟机上的用户程序运行在用户态,这种用户态被称为虚拟化用户态,它基本上就是用户态
2型虚拟机管理程序(具有寄居架构的虚拟化技术)
常用的VMware Workstation、Parallel desktop就是2型VMM
运行在两类虚拟机管理程序上的操作系统叫做用户操作系统
运行在底层硬件上的操作系统叫做宿主操作系统