操作系统概述

操作系统简介

  1. 操作系统是做什么的?

    操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

本质上来说这句话没什么用,可以简称为操作系统很重要的学计算机软件软件

os 的作用

  1. Os 是用户与计算机硬件之间的接口

    Os 处于应用用户和计算机硬件之间

    image-20241117211051523

  2. os 是系统资源的管理者

    为了方便用户对系统资源的使用,OS将计算机资源抽象为一组数据结构及操作命令(对象),然后再设
    计出对这些抽象资源的管理软件,然后再将这些管理软件逐层覆盖在计算机硬件之上,于是便形成了一层
    层的虚机器。这些虚机器是逐层系统软件覆盖在裸机上而成的逻辑计算机。

  3. os 是计算机资源的抽象

    用于对计算机的操作多用于io处理上

    第一层抽象i/o设备的管理

    第二层抽象对文件的管理

    image-20241117213141709

    第三层抽象对图形界面的管理

os 启动过程

此段在x86 pc 实模式下进行加载

  1. 开启电源的时候,cpu 处于实模式

    实模式与保护模式对应

    实模式的寻址方式实cs:ip (cs 左移4位 + ip)

  2. 开机时ip 又计算机硬件设计者设计
    开机时cs=0xffff ip=0x0000

  3. 寻址0xfff0
    该地址通过(cs 左移4位 + ip),实模式下寻址而来

  4. 检查ram,键盘。。。。

  5. 将磁盘0磁道0扇区中读出一个扇区也就是512 byte,放入0x7c00
    这个512 就是系统的引导区

  6. 设置cs=0x7c00 ip=0x0000

image-20241117222511581

总的来说boot的工作就是读setup 和system

本质上来说,就只有两个问题

  1. 将操作系统读入内存
  2. 初始化操作系统

保护模式下的地址翻译和中断处理

在实模式中,也就是16位的寻址方式,通过cs<<4+ip 进行寻址

保护模式也就是32位模式

在这之前需要知道gdt 是什么

gdt

简介

gdt : global described table

GDT 是 x86 和 x86-64 体系结构中用来实现内存分段(memory segmentation)的重要数据结构。它是一个表,存储了段描述符(Segment Descriptor),每个描述符定义了内存段的基地址、大小和访问权限等信息。

GDT 的作用是在保护模式下帮助 CPU 通过段选择器(Segment Selector)访问特定的内存段。每个段可以配置为代码段、数据段或系统段,支持灵活的内存管理和保护机制。

组成结构

  1. 段描述符(Segment Descriptor)

    段描述符是 8 字节的数据结构,包含以下字段:

基地址(Base Address):内存段的起始地址。

段界限(Limit):定义段的大小。

访问权限(Access Rights):控制段的访问模式(如只读、可执行等)。

  1. GDTR 寄存器

    GDTR 是一个专门的寄存器,用于存储 GDT 的地址和大小。

    格式:

    • Base:GDT 的基地址。
    • Limit:GDT 的大小(最大 64KB)。

寻址方式

  1. 加载 GDT (全局描述符表)

使用 lgdt 指令来加载 GDT 的基地址和大小到 GDTR (全局描述符表寄存器)。

当保护模式被激活后,CPU 将自动使用 GDT 中的描述符来进行段落转换。

  1. 段选择器 (Segment Selector)

段选择器是一个 16 位的值,用于指向 GDT 表中的条目。

Index (13 位): 它指定了 GDT 表中的描述符位置。

TI (1 位): 表示描述符是在 GDT (0) 还是 LDT (1) 中。

RPL (2 位): 请求者特权级别 (Ring Privilege Level)。

段选择器可以通过 mov 或 jmp 指令加载到段寄存器中,比如 CS (代码段), DS (数据段), SS (堆栈段) 等。

  1. CPU 寻址过程

CPU 从段寄存器读取段选择器。

根据段选择器中的索引找到 GDT 中相应的描述符。

利用描述符里的基地址与偏移量计算得出线性地址: 线性地址 = 基地址 + 偏移量

操作系统的接口

本质就是一些操作函数

系统调用

举个例子为什么使用whoami 进行查找我的身份,不能直接mov 或者jmp 到对应的name 的字符串

因为操作系统内部有很多固定的,或者比较珍贵的东西,如果直接可以获取不能保证操作系统的安全调用

那么我该如何获取对应的身份信息? -> 只能通过操作系统给出某一个api,根据调用具体的某一个api获取相对应的数据

内核态和用户态

image-20241119151227072

只要将内核态和用户态相互隔离就可以保证安全性

如何区分内核态和用户态

可以发现所有地址,都需要使用段寄存器

CPL 和 DPL

CPL 用于表示当前内存的权限等级

DPL 用于表示需要跳转的权限等级

所以0 表示内核态

CPL 通过cs 中的一个部分用于展示现在的特权级

所以每一条指令都会检查 DPL >= CPL

中断

中断时进入内核态唯一的方法

image-20241119152415499

比如现在需要执行whoami 或者是open file 之内的

就需要出发中断,然后根据不同指令做出对应的操作

只有一个中断可以进入到内核 0x80

系统调用流程

image-20241119153943322


操作系统概述
https://tsy244.github.io/2024/11/17/操作系统/操作系统概述/
Author
August Rosenberg
Posted on
November 17, 2024
Licensed under