当前位置: 首页 > news >正文

【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号扇区
  • 分区引导程序
  • 操作系统引导程序

流程

  1. 计算机启动,电源自检
  2. 计算机主板ROM区的BIOS程序被激活,负责初始化硬件,进一步自检
  3. BIOS读取硬盘0号扇区的主引导记录MBR,启动磁盘引导程序
  4. 利用磁盘引导程序找到系统分区,在系统分区的0号扇区(PBR)启动分区引导程序,再由分区引导程序启动操作系统引导程序,得知OS内核位置并将其加载入主存

虚拟机

1型虚拟机管理程序(具有裸金属架构的虚拟化技术)

1型VMM是唯一一个运行在内核态的OS

客户机OS(虚拟机上的OS)以为自己运行在内核态,这种内核态叫虚拟化内核态,介于真正内核态和用户态之间

虚拟机上的用户程序运行在用户态,这种用户态被称为虚拟化用户态,它基本上就是用户态

2型虚拟机管理程序(具有寄居架构的虚拟化技术)

常用的VMware Workstation、Parallel desktop就是2型VMM

运行在两类虚拟机管理程序上的操作系统叫做用户操作系统

运行在底层硬件上的操作系统叫做宿主操作系统

http://www.xdnf.cn/news/1243909.html

相关文章:

  • 蓝桥杯----AT24C02
  • 机器学习(12):拉索回归Lasso
  • Docker-07.Docker基础-数据卷挂载
  • 基于SpringBoot的OA办公系统的设计与实现
  • 小鹏汽车前端面经
  • 深度解析:CPU 与 GPU 上的张量运算,为何“快”与“慢”并非绝对?
  • Flutter 对 Windows 不同版本的支持及 flutter_tts 兼容性指南
  • C语言:构造类型学习
  • Druid学习笔记 01、快速了解Druid中SqlParser实现
  • Ethereum:智能合约开发者的“瑞士军刀”OpenZeppelin
  • 力扣1124:表现良好的最长时间段
  • 【计算机网络 | 第2篇】计算机网络概述(下)
  • Redis缓存详解及常见问题解决方案
  • 8月4日星期一今日早报简报微语报早读
  • 数据与模型优化随机森林回归进行天气预测
  • 2.4- WPF中非 UI 线程上安全地更新 UI 控件方法
  • Day49 Java面向对象04 类与对象的创建
  • Antlr学习笔记 01、maven配置Antlr4插件案例Demo
  • 数学 理论
  • Druid学习笔记 03、Druid的AstNode类详解与其他产品测试体验
  • Java开发时出现的问题---语言特性与基础机制陷阱
  • STM32_Hal库学习SPI
  • 15个命令上手Linux!
  • Redis之通用命令与String类型存储
  • javacc实现简单SQL解析器
  • 【云馨AI-大模型】2025年8月第一周AI浪潮席卷全球:创新与政策双轮驱动
  • VPS云服务器Linux系统备份策略与灾难恢复方案设计
  • SQL基础语法
  • Qt按键响应
  • 倒排索引:Elasticsearch 搜索背后的底层原理