操作系统基础 (二)

avatar
作者
筋斗云
阅读量:3

目录

六. 运行机制

两种指令

  • 指令:处理器(CPU)能够识别,执行的最基本命令。【即二进制机器指令】

Linux,Windows,MacOS的cmd命令框中的”指令“实质上是交互式命令接口。

  • 特权指令:一些可以影响其他程序的指令。只能由”管理者“即操作系统内核使用
  • 非特权指令应用程序使用的指令,如加法指令,减法指令等。

CPU设计出来时候就划分了两种指令,因此执行的之前可以判断出指令类型。

两种CPU状态

  • 内核态(核心态,管态):此时运行的是内核程序,可以执行特权指令。
  • 用户态(目态):此时运行的是应用程序,只能执行非特权指令。

CPU中存在标志CPU状态的寄存器:程序状态字寄存器(PSW),使用一个二进制位来表示CPU处于用户态还是内核态。

两种程序

  • 应用程序:普通程序员写的程序。
  • 内核程序多个内核程序组成”操作系统内核“,简称”内核Kernel)

内核操作系统的核心部分(eg. Docker—>仅需要Linux内核),最接近硬件。操作系统最核心的功都在内核中,其他功能如图形化用户界面GUI则不在内核中。

  • 状态切换:内核态—>用户态执行特权指令—修改PSW位,操作系统让出CPU使用权。

    用户态---->内核态由”中断“信号引发,硬件自动完成变态过程。操作系统强行夺回CPU使用权。

凡是需要操作系统介入的地方,都会触发中断信号

七. 中断和异常

中断的作用

“中断”:操作系统内核夺回CPU控制权的唯一途径。

如果没有"中断"机制,一旦应用程序上CPU运行,就会一直占用CPU。

中断类型

  • 内中断:与当前执行的指令有关,中断信号来自CPU内部。【也称为”异常“,包括陷入(trap),故障(fault),终止(abort)】
  • 例子一:试图在用户态执行特权指令
  • 例子二:除法运算发现除数为零
  • 例子三:应用程序请求内核服务,会执行特殊指令–陷入指令【不是特权指令】,引发内部中断。
  • 外中断:与当前执行的指令无关,中断信号来自CPU外部。【狭义的"中断"】
  • 时钟中断:时钟部件发来的中断信号
  • I/O中断

中断机制基本原理

联想截图_20240717173150.png

八. 系统调用

定义

系统调用是操作系统提供给程序(程序员/编程人员)使用的接口【可供应用程序调用的特殊函数】;应用程序通过系统调用请求获得操作系统内核服务
联想截图_20240717185501.png

系统调用与库函数

联想截图_20240717185645.png

系统调用实现的功能

联想截图_20240717185924.png
联想截图_20240717185835.png

系统调用过程

  • Step 1 传递寄存器参数

首先,向寄存器传递参数(≥1个),首个参数指明系统调用类型,如”fork“调用

联想截图_20240717190416.png

  • Step 2 执行陷入指令 引发内中断信号。接着转入中断处理程序【内核程序】—即 系统调用入口程序。

联想截图_20240717190951.png

  • Step 3系统调用入口程序 【假设使用了fork系统调用】

联想截图_20240717191053.png

  • **Step 4 **系统调用完成后,返回用户态继续执行原程序后续指令

联想截图_20240717191350.png

  • 总结

联想截图_20240717191556.png

九. OS体系结构

  • 原语一种特殊程序,具有原子性。(即程序的运行不可被”中断“

联想截图_20240717193750.png

内核

联想截图_20240717192441.png

  • 大内核(宏内核/单内核):将操作系统主要功能模块都作为系统内核,运行在核心态。

应用程序请求内核服务需要2次CPU状态转换。Tip:CPU状态转换需要消耗时间,频繁转换会降低系统性能

  • 优点:高性能
  • 缺点:内核代码庞大,结构混乱,难以维护某个功能模块出错,可能导致整个系统崩溃
  • 常见系统:Linux,Unix。

联想截图_20240717192737.png

  • 微内核内核只保留最基本功能。

应用程序请求内核服务需要6次CPU状态转换
利用进程管理,存储管理 :通过消息传递,指明想要调用的功能模块。

  • 优点:内核功能少,结构清晰,便于维护可靠性高。内核外的功能模块出错不会导致整个系统崩溃。
  • 缺点:需要CPU频繁切换状态,性能低
  • 常见系统:Windows NT

联想截图_20240717192744.png

分层结构

  • 操作系统内核被分为多层,最底层是硬件,最高层是用户接口。每层只能调用更低一层提供的接口。

  • 优点:1.便于调试,自底向上逐层调试验证。【本层只会使用低一层的功能

    1. 利于扩充维护,各层接口清晰固定。【只需要层间接口固定不变即可扩充层次】
  • 缺点:1. 仅仅可以调用相邻低层,难以定义各层的边界。【不同层的功能都需要被使用】

    1. 效率低,不可跨层调用,系统调用时间长。

模块化

  • 内核被分为多个模块,各模块相互协作。

内核 = 主模块(由进程管理,内存管理等模块组成) + 可加载内核模块(如驱动模块)

可加载模块动态加载新模块到内核,无需重新编译整个内核。【使内核具有可拓展性】

  • 优点:模块间逻辑清晰易于维护,可以多模块同时开发。

    支持动态加载新的内核模块,增强OS适应性。
    ** 各模块之间可以相互直接调用**,无需通信,效率高

  • 缺点:模块间接口定义不一定合理,实用。

    模块间相互依赖,难以调试

外核

  • 内核:负责进程调度,进程通信等功能。

  • 外核:负责为用户进程分配,回收未经抽象的硬件资源保证资源使用安全

                外核**分配连续的地址空间**,便于用户随机访问【磁盘的磁头不需要来回跳转】,**提升了性能**。 

未经抽象的硬件资源:即未经过虚拟化的硬件资源(内存空间,磁盘空间等)。
用户进程视角下连续的地址空间,实际上可能是分散存储的。

  • 优点:
    • 使得用户进程可以灵活使用硬件资源
    • 减少了虚拟硬件资源的”映射层“,提升效率。【不需要查页表,进行物理地址转换
  • 缺点:
    • 降低了系统一致性。【可能存在一块物理地址被用于虚拟地址映射,同时又被外核使用分配给用户进程。需要实际分析使用情况】
    • 使得操作系统更加复杂

十. 系统引导

BIOS(Basic Inout / Output System):基本输入/输出系统。

相关的数据

磁盘数据

联想截图_20240717204314.png

  • 分区表:一个数据结构,指明了磁盘各个分区的空间大小和地址范围
  • C盘:作为磁盘的活动分区,安装操作系统。

C盘细分如图:联想截图_20240717204611.png

主存数据

联想截图_20240717204744.pngRAM芯片区:易失性(断电丢失数据);ROM芯片区:不易失性。

  • ROM引导程序:指示CPU将磁盘的主引导记录读入CPU(RAM区)。

接着CPU会执行主存中的磁盘引导程序 ----> 磁盘引导程序确定C盘位置,将C盘的引导记录PBR读入主存 ------->执行PBR程序----->查找启动管理器【通常存储在根目录】
---------> 读取启动管理程序进入主存------------> 执行启动管理程序--------->完成操作性系统初始化操作

系统引导过程总述

联想截图_20240717205844.png

eg. Windows操作系统万丈的开机初始化程序在”根目录/Windows/Boot“路径下。

十一. 虚拟机

联想截图_20240717211235.png

背景

  • 传统计算机在一个物理机上只能运行一个操作系统,在其上运行多个应用程序。

  • 不足:1. 若物理机器硬件资源强大,则会出现计算机资源利用不充分

    1. 多个进程同时运行在一台物理机上,可能会出现资源冲突而相互影响造成安全隐患

两类虚拟机

  • 第一类VMM,直接运行在硬件之上
    • CPU按时间片划分,然后分配给各个虚拟机。磁盘,内存空间划分出来分配。
    • 直接管理、分配硬件资源
    • 只有虚拟机管理程序运行在内核态,可以使用特权指令。【如果上层操作系统使用特权指令,会被虚拟机管理程序捕获,然后进行转换,模拟出特权指令执行成功的现象】
  • 第二类VMM,运行在宿主操作系统
    • 参考上图
    • 虚拟机管理程序将获得的虚拟资源再次划分,然后分配给各个虚拟机,比第一类虚拟机多了一层套接,因此性能更差
  • 两种虚拟机的比较

联想截图_20240717213108.png

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!