OS-S1 操作系统概论

§1 概论

C1 技术背景

1)作用:联系用户程序与底层硬件

  • 为程序(员)提供良好,清晰,一致的抽象

  • 分配资源给多个程序和用户

    资源多路复用:时间上轮流使用,空间上划分多个区域进行分配

  • 组织计算机系统工作流程,以改善系统性能

CPU调度 内存管理 文件系统 设备管理
进程通讯 内存保护 文件存储 设备缓冲
进程调度 内存分配 文件目录 设备分配
线程调度 内存扩充 文件保护
线程同步 地址映射 读写接口

2)操作系统发展史:个体重复系统发育:旧的思想可能在新技术的演化当中重新出现

  • 批处理系统:收集作业-执行-输出集中进行,系统运行中用户不与程序交互
    • 联机批处理:主机处理IO
    • 脱机批处理:卫星机IO
    • 多道批处理:可以多个程序
    • IBM 7094+IBM 1401(机) 晶体管计算机
  • 多道程序设计:轮流执行多个相互独立程序,提高时间并行度。引入进程调度和内存管理(同步外部设备联机操作(SPOOLing),负责将作业从磁盘读入内存)。
    • OS/360(机) 集成电路
  • 分时系统:多用户按时间片使用CPU,提供快速实时交互服务
    • 兼容分时系统:虚拟机技术???
    • 计算服务:制造满足大量用户计算需求的大型机。其计算服务设想以云计算的形式得以保留。
    • MULTICS S i m p l i f y \xrightarrow{Simplify} UNIX(System V及BSD) S t a n d a r d i z e \xrightarrow{Standardize} POSIX (MINIX(可靠性,模块化),LINUX)
  • 磁盘支持:CP/M MS-DOS
  • GUI: Macintosh Windows95 Windows98 Vista … FreeBSD(X Window/X11视窗 Gnome KDE GUI)
  • 网络操作系统:远程访问,多级互联。透明性:数据,执行和保护
  • 分布式系统:网络支持一体化系统,模块化(不同机器协调处理不同操作系统任务)。允许一个应用运行在多计算机上,但需要处理器调度。由于网络延迟,还需要确保信息一致性。
  • 移动系统:Symbian IOS Android

3)操作系统类型:

  • 大型机操作系统:主要提供批处理,事务处理和分时。需要强IO能力。

    • OS/390
  • 服务器操作系统:提供网络服务若干用户,允许用户共享硬件和资源。

    • Solaris FreeBSD Linux Windows Server 201x
  • 多处理器操作系统:CPU集群系统或多核处理器

    • Windows Linux
  • 个人计算机操作系统:多道程序处理

    • Linux Windows FreeBSD
  • 掌上计算机操作系统:小型计算机,多数设备支持多核CPU,传感器

    • IOS Android System Symbian
  • 嵌入式操作系统:控制设备,不允许用户安装软件,或不可信软件。软件保存在ROM

    • 嵌入式Linux QNX VxWorks
  • 传感器节点操作系统:传感器节点网络,实时监测,信息收集。程序预先装载。

    • TinyOS
  • 实时系统:注重可靠性和安全性

    • 硬实时:不允许超过时限否则有不可逆损失

    • 软实时:没有不可逆损失

  • 智能卡系统:含CPU芯片信用卡。有严格运行能耗和存储空间的限制。部分智能卡ROM中有一个Java虚拟机支持Java小程序。可能有原始的资源管理和保护

4)计算机硬件简介

  • 程序状态字(PSW):CPU中寄存器,包含条件码位(由比较指令设置),CPU优先级,模式(用户/内核)其他控制位

  • 内核态:CPU可以执行所有指令,操作系统运行在内核态故可以访问所有硬件资源,用户态下可通过系统调用指令切换到内核态,多数情况下是硬件异常中断导致进入内核态。

    • 系统调用:将控制权交给操作系统并临时切换到内核态,以获取OS服务

    • 过程:

      • 1° 传参:调用者将参数压栈,将系统调用的编号放到指定位置(如寄存器)。在C/C++中,逆序压栈
      • 2° 切换:使用Trap自陷,跳转到固定的异常处理向量-系统调用处理入口地址
      • 3° 分派:查系统调用编号,分配给请求的系统调用处理程序处理
      • 4° 返回:当系统调用处理结束,可能返回调用者(也可能阻塞直到完成)
      • 5° 退栈
    • 分类:进程,文件,目录和文件系统,杂项

    • POSIX库过程:

      • 进程:fork() waitpid() execve() exit()

      • 文件:open() close() read() write() lseek() stat()

        目录:mkdir() rmdir() link() unlink()

        文件系统:mount() umount()

      • 杂项:chdir() chmod() kill() time()

      • 上述库函数封装了系统调用来完成功能。一个系统调用可能用于多个库过程

    • Windows Win32 API(Win32应用程序接口)

      • 包含大量过程调用,部分需要系统调用
      • 由于对早期系统向后兼容,Win32不是是否统一的接口。
  • 超标量:具备多个处理取指,解码,执行单元,由OS和硬件共同保持程序被顺序执行

  • 多线程:每个CPU有多个线程处理同一进程,可以增加逻辑处理器的数目

  • 上下文切换:从一个程序切换到另一个程序。需要将缓存写回,并修改MMU等。

  • CPU缓存:L1(16KB)缓存已解码指令以及频繁使用的数据字(一般在另一个L1),L2作为L1的下级缓存,L1无延时。Intel选择L2在处理器间共享,需要复杂缓存控制器。AMD选择每个CPU独享L2,但存在缓存一致性问题。

5)shell:文本式命令解释器,不作为操作系统的组成部分

C2 系统结构

1)宏内核/单体系统:系统以过程集合编写,链接成大型可执行文件。可以有一定结构(主过程-服务过程-实用过程)

  • 过程间可不受限制地相互调用,使得系统笨拙难以理解
  • 任何过程的崩溃会导致整个系统的崩溃
  • 许多操作系统支持可装载扩展(IO设备驱动和文件系统),UNIX中称共享库,Windows中称动态链接库(.dll)

2)层次式系统:为系统划分层次,上层程序依赖于下层程序

  • THE系统 A d v a n c e \xrightarrow{Advance} MULTICS系统,MULTICS使用硬件实现的同心环层次,内层等级,通过TRAP进入内层。易于实现扩展,构建用户子系统。(如n层放评测机,n+1层放学生端)

3)微内核系统/模块系统:只有一个模块作为微内核运行在内核态,而其他功能弱的模块运行在用户态。

  • 内核态切换增加开销。接口定义困难无序。
  • 可移植性好,高内聚低耦合,加速研制,便于维护,适合分布式系统。可使用机制与策略分离使得内核减小。限制了用户态进程的权限,避免其崩溃拖垮系统,提升了系统可靠性
  • 代表: Unix MINX、OS X、Symbian、QNX、PikeOS、L4、K42、Integrity
    • LINUX是宏内核结构,但吸收了模块化设计思想
    • Windows是微内核系统

4)客户端-服务器模式:将进程分为服务器和客户端两类。通过消息通讯进行服务。

  • 可应用与单机或者网络机器

5)虚拟机系统:创建机器的精确复制(包括内核态和用户态,所有的中断和IO功能)作为虚拟机,虚拟机上可以运行不同的操作系统。

  • 将多道程序功能和提供扩展机器分离,灵活易维护。

  • 第二类虚拟机:利用宿主操作系统提供服务,不需要客户操作系统实现底层功能。第二类虚拟机从CD-ROM安装盘读入系统并安装在虚拟盘(实际上是一个大文件)。第一类虚拟机需要在原始硬盘分区上自行管理存储。

  • 代表:VM/370(虚拟机上支持会话监控系统CMS以及大型批处理系统)

6)外核:对机器进行分区,分配给多个用户。外核运行在内核态,为虚拟机分派资源,检查请求权限。

  • 虚拟机系统上每个虚拟机认为有独立的资源(磁盘、内存),故需要重定位机制。而外核的虚拟机资源地址是确定的,减少了映像层,使其更加简单。

C3计算机启动(Bootstrapping)

OS启动是逐步释放系统灵活性的过程

Bootloader :引导加载程序

  • stage1:初始化硬件,由汇编语言完成

    stage2:将内核镜像装入系统,由C语言完成

  • MIPS:U-Boot;X86:LILO和GRUB

    • U-Boot: Universal Boot Loader 开源,支持多种嵌入式系统和处理器,功能强大
    • LILO:最早的Linux加载器,快速启动安装。局限在于LILO配置修改需要同时修改MBR,错误的MBR可能导致无法引导
    • GRUB:交互命令界面,支持网络引导。若配置文件错误,转到GRUB命令行。在stage1.5,GRUB识别文件系统,故后续操作可使用文件系统完成
  • Bootloader的实现依赖于具体硬件。即使是支持较多CPU架构的U-Boot使用时也需要做响应的移植

MIPS环境启动

1)MIPS内存空间:

  • kuseg:2G用户区,MMU映射
  • kseg0:512M,高三位清零,cache存取,操作系统存放(0x80010000-0x80400000)
  • kseg1:512M,高三位清零并映射到低段,非cache存取,一般是外设。
    • kseg1是重启时唯一可用空间
    • 启动入口地址0xBFC00000,映射到0x1FC00000
  • kesg2:1G内核区,MMU映射

2)机器启动:

  • board_init_f进行硬件初始化(串口、内存、时钟、环境变量等)
  • 初始化堆栈,划分内存,预留U-boot代码空间,并将其从flash载入内存
  • board_init_r初始化flash,外设,PCI通讯,进入命令行启动Linux Kernel

3)Linux系统启动:

  • Head.S:

    • Bootloader将内核镜像载入内存

    • /arch/mips/kernel/head.s开始,此处是内核入口函数kernel_entry()

      初始化内核堆栈,清零bss段。

  • start_kernel

    • 启动内核,完成页表设置,调度器初始化,时钟设置、系统时间、控制台,内存管理等等。

X86环境启动

1)BIOS(Basic IO System):固化在ROM芯片上,提供底层硬件设置和控制。称为固件。含CPU信息,设备启动顺序,硬盘内存,时钟信息,PhP特性等等

※实际上BIOS具有局限性(寻址空间小),后续发展的有同一可扩展固件接口UEFI。UEFI支持大容量硬盘引导,支持不同OS环境甚至网络OS(硬件支持),支持不同CPU体系结构和驱动(可移植),属于模块化设计

2)主引导记录(MBR):固定位于磁盘第0磁头第0磁道第一个扇区(大小512KB)。

  • 包含已安装系统的Bootloader信息。
  • 包含分区表,分区表由4个分区项(每项16KB)构成。分主分区(1-4个)、扩展分区(0-1个)、逻辑分区(n个)。主分区只有一个是激活的。OS安装在主分区。
  • 每个分区第一个扇区是Boot Sector

3)启动:

  • BIOS阶段

    • BIOS硬件自检:扫描RAM数量,键盘基本设备,然后是PCIe,PCI设备,最后是即插即用设备,若有硬件更新则更新配置。若硬件出问题则发出不同蜂鸣。
    • 启动顺序:查CMOS中设备清单决定是否启动,若有USB设备,优先从USB启动(读入第一个扇区,执行上面的程序,找到活动分区的Bootloader来启动系统)
  • MBR阶段与Bootloader阶段:

    • 读取MBR到0x7c00处
    • 检查0x7fde是否为0xaa55(MBR的魔数)如果不是会转到其他介质(直到没有介质则显示NO ROM BASIC死机)
    • 跳转到0x7c00执行MBR中程序
    • 将自己复制到0x0600
    • 搜索活动分区,若发现没有唯一活动分区则停止
    • 活动分区读入0x7c00,检查0x7dfe是否为0xaa55。若不是则显示MISSING Operating System后停止或尝试软盘启动
    • 跳到0x7c00处继续执行启动

内核镜像

内核的压缩文件,非可执行的内核

  • zImage小于512K
  • bzImage大于512K,包含引导代码,启动代码和压缩的OS代码

猜你喜欢

转载自blog.csdn.net/weixin_42935837/article/details/106359863
今日推荐