开机

image.png

  • CS是段指针,IP是偏移指针;都是16位寄存器
  • 寻址方式:CS<<4 + IP(differ with protect mode);
  • 一个扇区是512字节;
  • 0磁道0扇区是引导扇区,引导扇区就是启动设备的第一个扇区;

    引导扇区代码(boot)

    image.png

    操作系统启动(setup模块)

    image.png

  • setup将完成os启动前的设置;

  • setup将操作系统代码移到0地址;
  • setup设置保护模式: 切换寻址模式,即改变操作的解释;
  • 保护模式下的地址翻译和中断处理:

image.png
cs在保护模式下叫做选择子;
gdt的作用:硬件实现,快;

OS Interface

  • 命令行就是一个c语言写的程序,这个程序里有一些重要的os接口;
  • 桌面也是普通程序;
  • 操作系统接口是普通的c代码加上一些重要函数;接口表现为函数调用,又由系统提供,因此称为系统调用(system call);

image.png

系统调用的实现

内核态、用户态

处理器保护环:
image.png
对于 x86,中断指令int是用户程序发起的调用代码的唯一方式;此时,CPL=3,而DPL=0;
image.png
CPL是当前执行的程序或任务的特权级。CS的最后两位就是CPL;
DPL表示段或门的特权级。

  1. CPL要通过门(中断门,陷阱门,任务门,调用门)访问一个GDT中的描述符,必须有如下关系:CPL <= DPL (门): 当前运行级不能低于门,如果是外部中断或CPU异常会免去这一判断
    CPL >= DPL (描述符):门只能是用于保持或提升运行级别,因此GDT的描述符中的DPL均为0。如果有提升,则需要进行堆栈切换;
    2. 各个门的DPL解释:中断门: 用于硬件中断,DPL为0,不允许用户态直接使用int指令访问,硬件中断免去这一判断,因此可以在用户态响应中断,见set_intr_gate
    DPL0陷阱门: 用于CPU异常,DPL为0,不允许用户态直接使用int指令访问,硬件中断免去这一判断,因此可以在用户产生CPU异常。
    DPL3陷阱门: 用于系统调用,DPL为3,允许用户态直接使用int指令访问,这样才能通过int80访问系统调用,只有80号向量属于此门。
    调用门: DPL为3,允许用户态访问,和LDT一起使用。

多进程图像

多个进程之间的数据分离:映射表;
image.png


用户级线程

reference:https://www.cnblogs.com/yuanchenqi/articles/6755717.html

  • 进程 = 资源 + 指令执行序列
  • 线程保留了并发的优点,同时又避免了进程切换的代价(映射表)
  • 线程 = 进程代码 + 进程数据 + 进程资源
  • 操作系统 - 图9
  • 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程没有自己的系统资源。
  • 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。或者说进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
    线程则是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
  • 进程和线程的关系:

(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)CPU分给线程,即真正在CPU上运行的是线程。

内核级线程

有用户级线程,但没用户级进程,因为进程要访问内存,必须进入内核态;
image.png
多进程和多用户线程不能发挥多核的优势,核心多线程可以;
两个栈是实现用户态多线程的核心,而两套栈(用户态和核心都要有栈)是实现核心态多线程的核心;

image.png