[001]【手撕】《操作系统》第二章第1节:Boot, Process, Kernel

首发于2022-11-10
完善于2022-12-05
这是Sum_sugar 的第001篇原创文章

前言:本系列以BUPT人工智能学院徐梦炜老师的课件为蓝本,以《王道操作系统考研复习指导》为知识补充,旨在系统梳理操作系统课程的知识点,以学生的视角出发解释学习操作系统过程中遇到的种种问题。如有疏漏及错误之处,烦请不吝赐教。

操作系统前情回顾

操作系统是连接硬件和用户、应用之间的桥梁;
操作系统是一种特殊的软件层,它提供和管理了用户到硬件资源的访问权限。
操作系统的三种角色(隐喻):裁判、魔法师、胶带:

  1. 裁判:管理资源,隔离,用户态和内核态双模式的设计。
  2. 魔法师:让应用感觉到似乎独占了系统的所有资源。
  3. 胶带:缝合了上层应用和底层硬件之间的gap,给应用提供统一的接口。

计算机是如何启动的

BIOS

BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统"。在IBM PC兼容系统上,是一种业界标准的固件接口。本质上是软件,通常伴随着硬件一起来的。

**是一组固化到计算机内主板上一个ROM芯片上的程序 **,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。

除此之外,BIOS还负责以下几点:

  1. 开机自检诊断
  2. 识别硬件并初始化其状态
  3. 定义BIOS和操作系统之间的高级硬件接口,为OS建立硬件描述。
  4. 将引导程序(BootLoader)从硬盘加载到内存,BootLoader放在硬盘的第一个扇区(512字节)。
  5. 将控制权移交给引导程序(BootLoader),设置%cs和%ip 寄存器。

BootLoader

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注:有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。

除此之外,BootLoader还负责以下几点:

  1. 从实模式切换到保护模式
  2. 检查内核image(数据、代码)是否正常
  3. 将内核(kernel)从硬盘加载到内存
  4. 将控制权切换到真正的操作系统

实模式和保护模式的区别

实模式和保护模式都是CPU的工作模式,而CPU的工作模式是指CPU的寻址方式、寄存器大小等用来反应CPU在该环境下如何工作的概念。

实模式将整个物理内存看成分段的区域,程序代码和数据位于不同 区域,系统程序和用户程序没有区别对待,而且每一个指针都是指向"实在"的物理地址。这样一来,用户程序的一个指针如果指向了系统程序区域或其他用户程序 区域,并改变了值,那么对于这个被修改的系统程序或用户程序,其后果就很可能是灾难性的。为了克服这种低劣的内存管理方式,处理器厂商开发出保护模式。这样,物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)要由操作系统转化为物理地址去访问,程序对此一无所知。二者根本区别在于进程内存受保护与否。

实模式:寻址采用和8086/8088相同的16位段和偏移量,最大寻址空间1MB,最大分段64KB。可以使用32位指令。

保护模式:寻址采用32位段和偏移量,最大寻址空间4GB,最大分段4GB (Pentium Pre及以后为64GB)。在保护模式下CPU可以进入虚拟8086方式,这是在保护模式下的实模式程序运行环境。

保护模式可以实现更大空间的,更灵活也更安全的内存访问。

实模式保护模式
只能处理一个任务一次可以处理多个任务
在此内存中,不需要进行地址转换需要进行地址转换
可以直接与端口或设备进行通信通过操作系统与端口或设备进行通信
不支持内存管理支持内存管理
支持较少的寻址模式和指令支持更多寻址模式和指令

BIOS vs BootLoader

BIOSBootLoader
固件软件
开机后运行的第一个软件开机后运行的第一个用户定义或用户可更改的软件
通常存储在ROM上,不可更改存储在操作系统中(硬盘、USB等)

BIOS为什么不直接加载内核?

BIOS只能加载第一个扇区的数据,BIOS是一个固件,所以它的功能要尽量简单。让硬件做最简化的事情,把复杂的事情放在软件里面做。在BootLoader里面设计做更多的事情。

UEFI(可扩展固件接口)

  • 被认为是BIOS的继任者
  • 更快
  • 支持文件系统
  • 可以被存储在各种地方:闪存、主板、硬盘甚至是网络共享
  • 支持更多的输入方式,例如鼠标(BIOS不支持鼠标输入)
  • 可以实现安全启动
  • 有更好的UI界面
  • 某种程度上像“小型操作系统”

进程:进程的概念

进程与程序的区别:进程是程序的一个运行实例,一个程序可以有0个,1个或多个进程同时运行。

  • 进程:应用程序受到限制性权力的一次执行过程(指应用程序不能访问内核空间)
  • 进程之间互不影响,操作系统也受到保护,不受进程的影响
  • 进程拥有专门的地址空间
  • 拥有文件描述符、文件系统等上下文信息
  • 进程可以含有一个或多个线程

PCB: 进程控制块

操作系统用来追踪进程执行情况的一个数据结构,也是进程存在的唯一标志。
一个PCB包含以下内容:

  • 进程ID(PID)
  • 进程状态(运行态、就绪态、阻塞态)
  • 进程优先级
  • 进程计数器(pc指针)
  • 内存相关信息
  • 注册信息
  • IO状态信息(文件描述符、IO设备等)
    请添加图片描述
    更多进程内容待之后章节补充

进程的内存

在这里插入图片描述
tips:bss和data段是一定要有的,已经固定了会占用多大的存储空间,但是堆和栈不一定。堆和栈可能有0个,有可能有很多个,所以是动态生长的过程。
a = 0 已经初始化,所以在data段,b 未初始化,所以在bss段。
c static 编译器会放在bss段内,d 放在栈里,e 放在堆里。
在这里插入图片描述
注:这里的地址都是指虚拟地址。

双模式:内核空间和用户空间

我们如何防止来自进程的恶意行为?
比如访问甚至修改其他进程或操作系统的数据。
如果让操作系统来负责程序的每条指令,肯定不现实。会很慢。
我们可以引入隔离的概念来阻止进程的恶意行为,由此引入双模式的设计:用户态与内核态。
用户的应用程序运行在用户态,操作系统内核程序运行在内核态。内核态可以执行特权指令,用户态只能执行非特权指令。

特权指令,**不允许用户直接使用,需要由用户请求系统调用,由内核态进行操作。**例如IO读写指令、上下文切换、修改特权级别、设置系统时间、置中断指令等。
非特权指令,例如:算术运算、调用函数、读取处理器状态、读取系统时间等。允许用户直接使用,且不能直接访问系统中的软硬件资源,仅限于访问用户的地址空间,这也是为了防止用户程序对系统造成破坏。

如果用户程序未经允许执行了特权指令,那么会抛出异常,进程停止执行,由操作系统接替控制权 。

哪些需要由硬件提供?

  • 特权指令
  • 内存保护
  • 时间中断
  • 安全的模式切换

系统调用(system call)

请添加图片描述
系统调用,是指用户在程序中调用操作系统所提供的一些子功能。
系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,反是与资源有关的操作(如存储分配、IO传输以及管理文件等),都必须通过系统调用的方式向操作系统提出服务请求,并由操作系统代为完成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值