下文中部分图片摘自:https://chyyuu.gitbooks.io/ucore_os_docs/content/lab0/lab0_2_1_about_labs.html
本文将以开源操作系统Linux举例说明。
1. 操作系统概述
操作系统是用户程序和硬件之间的接口, 为用户提供各种服务和监控功能,其主要作用有处理基本的输入输出操作、分配内存和外存、为多个应用程序提供共享计算机资源的服务等。下图为操作系统在计算机系统的角色:
- 操作系统基本特征
- 并发
- 共享
- 虚拟化
- 异步
- 一个典型的linux系统由以下部分组成
- bootloader
加载操作系统的程序,常见的引导程序有Grub、redboot、Yaboot和uboot等。 - Linux内核映像
主要包括进程调度、内存管理、中断异常处理系统、网络系统、文件系统、外部设备驱动系统等。内核镜像的代码是可以根据需要进行裁减的。 - 根文件系统映像
保存用户程序的根文件系统,同时该系统也可以存放一些与系统资源有关的文件。
- Linux 5.4内核代码结构
下图为适配龙芯电脑的Linux的代码目录结构图(图片摘自“基于龙芯的linux内核探索解析”一书)
- 对linux系统来说,与体系结构相关的源代码全部放入./arch目录中(见上述代码结构图),并与其他代码相对独立
- 在arch目录中有很多子目录,如arm、powerpc、x86、mips等目录,这些子目录分别与基于arm处理器、powerpc处理器、x86处理器、mips处理器的linux系统相对应
- linux内核的启动实际上是各个子系统的初始化过程,初始化完成后,内核的各项功能就进入了正常工作的可用状态。
- 内核启动的大部分代码将会集中在arch和init两个目录中
- 操作系统中的相关概念
- bootroom
硬件,芯片内的只读存储器或外部的rom或flash,也可以是EEPROM。它存放着处理器上电时执行的第一段代码,即BIOS代码。该代码可以对系统和外设进行初始化,加载bootloader到内存等(bootroom里的代码有一些BSP的味道)
BIOS可以实现很多功能,但具体实现的功能会根据bootroom的大小确定。 - bootloader
软件,加载操作系统的程序,或实现操作系统及根分区或新版bootloader写入。通常和Linux代码存放在一块儿,将操作系统从存储器中分阶段加载到内存中。工作模式有:boot loading 方式和downloading方式 - firmware
软件,存放再ROM中的驱动程序,为特殊指令提供调用。实际上,鄙人认为firmware的作用和bootrom里的代码作用功能有些重叠,所以如果bootroom里包含了硬件信息代码、系统的初始化代码、设备驱动代码,firmware可以不使用。 - 设备树文件
设备树是对一台机器上所有平台设备信息的描述,设备树文件通常可以和上电初始化代码链接在一起并保存到bootroom中,后同样以启动参数的方式传递给Linux内核;如果bootroom内的代码没有传递设备树信息,则Linux内核可以使用默认的设备树描述。
2. 操作系统和体系结构的联系
操作系统包括三大基本功能和三大其他功能,分别是异常和中断处理、内存管理和进程管理,以及文件系统、设备驱动和网络协议。三大基本功能主要涉及两部分内容,一部分是与体系结构相关的特定内容,另一部分是是与体系结构无关的通用框架;三大其他功能集基本均与体系结构无关。
1 OS与指令集相关的内容
(1)ISA中定义的工作态
(2)ISA中的异常处理
- MIPS中的异常处理
- 硬件检测到异常发生,并将发生时的信息保存到CP0(特殊寄存器堆,是CPU和操作系统的交互窗口),然后跳转到操作系统的通用异常处理入口。同时禁止一切异常的检测,否则检测到的异常会使系统崩溃
- 通用异常处理代码通过提取的异常信息识别出发生的异常,据此分发到相应的异常处理代码
- 所发生的异常处理代码运行完毕后,CPU跳转到被异常打断的指令重新开始运行,同时使能异常检测。
2 OS与CPU硬件相关的内容
(1)硬件在异常处理时的任务
事务1和2一般由一个异常识别单元完成,且设计为组合逻辑电路,这样才能在异常发生时产生异常信息,并通知控制器进行异常处理
- 识别操作系统所需要了解的异常
- 在异常发生时将异常信息保存到指定的位置
- 能够随时将异常处理代码地址或返回地址写入PC,已完成异常处理的进入和返回
- 能够对异常的检测进行使能
(2)虚实地址转换
3. 多种工作态和硬件保护机制
一般情况下,CPU有多种种运行模式,能够支持多个程序在各自独立的内存空间中并发执行,且有用户特权级和内核特权级的区分,让一般应用不能破坏操作系统内核和执行特权指令。
1 内存和工作态
- 内存
地址是访问内存空间的索引,一般内存空间有两种:一个是CPU通过总线访问物理内存空间用到的物理地址,另一个是程序员编写的应用程序用到的逻辑地址(虚拟地址)。
例如C语言中的指针存储的内容就是指针指向的变量的逻辑地址。
有关虚拟地址参见:https://blog.csdn.net/qq_39815222/article/details/107020684
- 工作态
利用 程序状态字的态(模式)来对特权指令、访存范围进行控制
一般分为用户态和核态
进入核态由中断/异常机制实现,按照中断/异常向量表进入到约定程序入口
2 以arm32处理器为例
- 七种运行模式
除用户模式外,其他六种模式为特权模式。低权模式进入高权模式要通过中断或异常
- 用户模式
- 系统模式
- 快中断模式
- 中断模式
- 管理模式
- 种植模式
- 未定义模式
-
线程/进程/虚拟机的现场:
大多与操作系统无关。
-
线程现场:寄存器的值
- 进程现场:
表示共享空间的内容,如页表基地址寄存器值。(进程可以看成模拟CPU) - 虚拟机现场:
特定的一些寄存器(虚拟机可以看成模拟计算机)
- 异常发生时,硬件的操作
- 异常模式的R14保存迁移工作模式的下一条即将执行的指令地址
- 将CPSRd的值
3 以ARM64处理器为例
- 四种工作态
- EL0(类似用户态)
运行应用程序 - EL1(雷同核心态)
运行操作系统 - EL2
运行虚拟机管理器 - EL3(secure 态:运行固定可靠程序客房为保留空间和设备)
运行只读的程序,例如一些固件,驱动程序等
- 如何进入特权级运行
运行SVC进入EL1,HVC进入EL2,SMC进入EL3
EL2优先级程序可以设置低优先级程序运行时的HCR_EL2寄存器
每个特权级都有自己的中断异常向量基址寄存器,保存每个特权级都有自己的向量表基地址
4 以80386处理器(x86架构)为例
对于80386处理器来说,他有四种运行模式。
- 四种工作模式
- 实模式
早期PC采用的简单运行模式,当时的DOS操作系统即运行在该模式下。
80386加电启动后处于实模式运行状态,该模式下软件可访问的物理内存空间不超过1MB,且无法发挥intel 80386以上级别的32位CPU的4GB内存管理能力。实模式将整个物理内存空间看成分段的区域,程序代码和数据位于不同的区域,OS和用户程序并没有区别对待,且每一个指针都指向实际的物理地址。 - 保护模式
保护模式的目地在于确保应用程序无法对操作系统进行破坏。
80386处理器通过在实模式下初始化控制寄存器以及页表,然后再通过设置CR0寄存器是其中的保护模式使能位置位,从而进入到保护模式。
该模式下,处理器所有的32根地址线都可供寻址,物理寻址空间高达4GB;同时支持内存分页机制,提供了对虚拟内存的良好支持,支持多任务模式、优先级机制,不同程序可以运行在不同的特权级上 - SMM模式
- 虚拟8086模式
4. 文件系统
1 概念
- 文件系统
文件系统是操作系统中管理持久性数据的子系统,可以童工数据存储和访问功能
- 文件
文件是具有符号名,由字节序列构成的数据项集合
文件是文件系统的基本数据单位
文件的属性包括名称、类型、位置、大小、保护、创建者、创建时间等
文件头:即文件系统元数据中的文件信息
- 文件系统的功能
- 分配文件磁盘空间,包括管理文件块的位置和顺序、管理空闲空间的位置等、分配算法
- 管理文件集合,包括文件定位、命名、文件系统结构(文件的组织方式)
- 保证数据可靠和安全,即多层次的保护数据安全,且持久地、避免系统崩溃媒体错误攻击地保存文件
5. 操作系统的启动
事实上,不同OS的启动由于计算机体系结构的不同有着多种启动方式,这是工程师根据体系结构设计的,同时针对某一体系结构下的某一操作系统来说,要根据整个架构的属性和体系结构的特点进行相应的初始化和处理,例如有些与处理器系统相关的资源如MMU、中断、系统调用等,必须根据自身系统的特点进行处理;与指令集,操作系统种类关系不大。指令集只是提供了程序和硬件衔接的接口,而操作系统种类虽然不同,但是一个OS从加载到运行的过程均是前篇一律的。
OS的启动可以分为两部分,一部分为上电后初始化和操作系统的加载,另一部分为OS内核的启动。
1 启动类别
- 单系统启动
- 加电
- bootrom运行
- osloader运行
- 操作系统运行
- 双系统启动
- 加电
- 片上ROM
- BIOS运行
- MBR的Grub运行
- Ntloader程序运行
- 操作系统初始化
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82484.html