当前位置: 首页 > 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.dtcms.com/a/315042.html

相关文章:

  • 互联网医院整体项目套表整理过程文档全流程分析
  • Stanford CS336 assignment1 | Byte-Pair Encoding (BPE) Tokenizer
  • 飞算JavaAI:颠覆传统开发的智能利器
  • Effective C++ 条款22: 将成员变量声明为private
  • Pixel 4D 3.4.4.0 | 支持丰富的壁纸资源,高清画质,高度的个性化设置能力,智能推荐功能
  • Ubuntu 下 MySQL 离线部署教学(含手动步骤与一键脚本)
  • 力扣面试150题--加一
  • ZCC1004E-120V 3A 零功耗使能异步降压电源芯片
  • 人工智能之数学基础:条件概率及其应用
  • JS中的Set和WeakSet联系与区别
  • 数据结构---配置网络步骤、单向链表额外应用
  • 【Linux】Linux 操作系统 - 33 , 线程(二) 线程互斥和同步 , 带你对线程使用深刻理解 !
  • 《Python 实用项目与工具制作指南》· 2.2 变量
  • JVM调优工具详解
  • 把“距离过近”的节点(或端点)合并成一个,避免重复。机器学习 python
  • web:ts元组
  • 【RH124知识点问答题】第8章 监控和管理 Linux 进程
  • Bean的生命周期和循环依赖问题的解决
  • 防火墙认证用户部署
  • 开发规范(一)移动端
  • 多线程(一)
  • 【C#】操作Execl和Word文件-1
  • 子词分词器(Byte Pair Encoding + WordPiece)
  • 如何给Word和WPS文档添加密码或取消密码
  • 【Java】使用FreeMarker来实现Word自定义导出
  • 反转字符串中的元音字母:Swift 双指针一步到位
  • EXPLAIN工具:查询执行计划分析与索引诊断
  • 【数据结构】排序(sort) -- 插入排序
  • 如何设置端口映射?防火墙/路由器/纯软件工具多种常用方案步骤,确保任意内网ip端口映射公网访问到
  • 《汇编语言:基于X86处理器》第11章 复习题和练习