博采众长,笨鸟多闻:OS再探

本文不提供系统的知识网络,只记录一些鞭辟入里的见解和个人的思考,还有一些我上一轮复习没有理解的地方,势必会有很多主观性的描述,仅供参考,若有错误,请您指正。

OS究竟是什么

在操作系统中,我们不止关注一段程序他的指令流要从哪来到哪去,我们还要管理他怎么使用相应的资源,我们要为他创建进程,为他分配空间,控制它怎么使用设备,所以我们可以显而易见的把我们学习操作系统这个过程就当作是找到一个帮我们更好的使用硬件的方法。操作系统就像是一个管家,为我们管理CPU、管理内存、管理设备、管理文件、管理磁盘等等,我们可以通过他完成我们交给他的任务,而不用自己去管理硬件,不用自己去调度什么时候去执行什么任务,全靠os为我们进行调度,所以我们在操作系统完成的各种任务肯定也是基于此,我们做的每一件事都是为了管理资源,或者说更好的分配资源。

所以我们使用计算机的时候,os将复杂的硬件屏蔽了给予我们更容易理解的概念去使用计算机。而从os往上看就需要去想,怎么为多个程序服务,因为如果单个程序就完全无需os的管理直接运行即可,我们怎么将有限的资源分配给多个进程,这是我们在os设计中要认真学习的。

系统引导

启动前, 硬件的状态处于一个安全, 通用, 功能最弱的状态; 而启动, 就是要逐步设置硬件, 提升计算机系统的环境, 提高可用性与灵活性. 这段话来自《See MIPS Run Linux》,因此我们把这个纠结的过程叫做拉鞋带,简称boot,从这个过程我们也能看出OS的启动是一个逐步释放系统灵活性的过程。

MIPS系统引导过程

MIPS Stage1:

MIPS下的Linux引导:

首先, Bootloader将Linux内核镜像拷贝到RAM中, 将执行权交给Linux内核.

Linux内核启动的第一个阶段从/arch/mips/kernel/head.s文件开始. 此处正是内核入口函数 kernel_entry , 此函数是与体系结构相关的汇编函数, 它初始化内核堆栈, 为创建系统的第一个进程做准备, 接着用一段循环将内核映像中未初始化的部分清零, 最后转至/init/main.c中的 start_kernel 初始化硬件.

第二阶段就是/init/main.c中的 start_kernel. 包括设置CPU ID, 初始化内核数据结构, 初始化内存管理, 给多核处理器的多个核心分配物理地址空间, 初始化进程调度与时钟, 启用时钟中断, 控制台中断, 启用用户进程等工作.

X86系统引导过程

启动BIOS(Basic Input/Output System)

  • 硬件自检POST(Power-On-Self-Test): BIOS首先检查计算机硬件是否满足运行的基本条件.
  • 启动顺序BS(Boot Sequence): 硬件自检完毕后, BIOS将控制权转交给启动顺序中下一阶段的程序.

主引导记录MBR(Master Boot Record)

计算机读取硬盘的第一个扇区(512B), 即为MBR: 0~446B为启动代码与数据, 447~510B为分区表, 511~512B为幻数 0xAA 与 0x55 .

其中分区标识占1B, 若为 0x80 则表示该分区为激活分区, 控制权就交给这个分区. 四个分区中, 只有一个分区可以被激活.

硬盘启动

计算机读取激活分区的第一个扇区, 该扇区就是卷引导记录VBR(Volume Boot Record), 指示操作系统的位置, 接着计算机就会加载这个操作系统.

X86下的Linux引导 - 以GRUB为例

首先, GRUB读MBR, 识别不同的文件系统格式. 紧接着加载Linux系统引导菜单(/boot/grub/menu.lst或grub.lst), Kernel 会开始检测硬件与加载驱动程序,加载Linux内核镜像和RAM磁盘initrd(可选),在硬件驱动成功后,Kernel 会主动调用 systemed 程序(似乎就是 init 程序),并以 default target 流程启动。

内存管理

现代的内存管理之所以难以理解,是因为它是一个整体的、多功能的管理系统。多功能就导致很多时候,我们往往抓着其中一个功能来谈,然后就根据这一个功能来定义内存管理了。其实这就是盲人摸象的一种现象,人们在描述内存管理的时候,往往只说他的一个功能,比如说

“我们为什么要内存管理呀?因为访问磁盘太慢了,我们将内存作为磁盘的缓存,就可以提高访问速率了。”

“我们为什么要内存管理呀?因为内存空间太小了,可能容纳不了一个进程,所以我们就需要内存管理。”

“我们为什么要内存管理呀?因为要给每个进程提供一个独自占有存储器的假象,所以我们就需要内存管理了。”

​这三句话是没有错误的。但是他们都没有看到内存管理系统的全貌。或者说他们明明看到了全貌,却只愿意用一种观点去解释。比如当我们认为内存管理是为了提高访问速率,那么我们看见什么页式的,就会认为页就是 Cache 中的 Cache line。也不能说不对,就是页式管理的本质不是为了干这个的,只能说它只是在完成它的主要功能后,捎带手符合了一种牵强的解释。

​这是一个很大的困境。反正我本人在听 Cache 的时候,老师就很喜欢多说一句内存管理也是这么回事。当然老师融会贯通了,他可以说“大象有大象腿啊”,而我作为学生听到的却是“这大象腿就是大象啊”。

​在这里记录一下我上操作系统以来看到的最牛逼的话:

操作系统提取“处理器”的概念建立了“进程”的抽象,提取“物理存储器(主存)”的概念建立了“进程(虚拟)地址空间”的抽象,我们提取“外存”的概念建立了”文件系统“的抽象。

​可以说,这句话好就好在它描述了操作系统在干啥,以及它是怎样实现他的目标的。操作系统希望在软件(普通软件)和硬件之间做一个中间层。至于为什么需要这个中间层,是因为如果让软件直接管理硬件,软件不仅需要考虑自身功能的实现,还需要考虑与硬件的沟通,与其他同时运行的软件的沟通,这无疑是很麻烦的。操作系统的出现,使得软件只需要考虑自己的事情,而不需要考虑其他的事情。相当于操作系统把原来本该由软件实现的沟通啊,协作啊之类的功能都转移到了自己身上。

​所谓的抽象,就是操作系统给软件提供的一种幻象(这个说法不本质),这种幻象可以让软件只操心自己的事情,比如说认为自己独占了处理器,认为独占了地址空间。我们研究操作系统,其实就是理清楚它是怎样制造出这种幻象的。

纯分页系统

在分页存储管理方式中, 如果不具备页面交换功能, 则必须将作业的所有页面一次性装入到主存的物理页框中; 若当前空闲物理页框数不足, 则该作业必须等待.

  • 页面: 把作业的地址空间划分为一些大小相等的片段, 这些片段就是页面, 或称虚页, 或简称.
  • 页框: 把主存的存储空间划分为与页面大小相同的片段, 这些片段就是页框, 或称实页存储块.

文件

文件是指一组带标识(文件名), 在逻辑上有完整意义的信息项序列. 信息项是构成文件内容的基本单位, 各个信息项之间具有一定的顺序关系. 文件包含两部分内容:

  1. 文件体: 文件本身的内容.
  2. 文件说明: 文件存储和管理的相关信息(文件名, 文件内部标识, 文件存储地址, 访问权限, 访问时间等).

文件是指一种抽象, 它提供了一种把信息保存在磁盘等外部存储上且便于访问的方法. 用户不必了解具体的实现细节. 且文件可以视为一个独立连续的逻辑地址空间, 其大小为文件的大小, 与进程的地址空间无关.

一切皆文件

文件的本质是一组字节序列, 源于用户程序对所要输入处理的原始数据和输出结果的长期保存需求, 并按一定格式呈现. 所欲需要长期保存的文件都按照某种组织形式存放(映射)在磁盘中.

所有的 I/O 设备(字符设备, 块设备和网络设备)都可以看作字节序列的载体. 因此所有的 I/O 设备都可以抽象为文件.

文件管理

  • 用户视角(使用逻辑文件):
    • 用户关心文件中要使用的数据, 不关心具体的存放形式.
    • 用户关心文件系统对外的接口, 包括文件的命名, 保护, 访问.
  • OS视角(组织和管理物理文件):
    • 文件的描述和分类, 关心的是如何实现与文件相关的各个功能模块, 包括如何来管理存储空间, 文件系统的布局, 文件的存储位置, 磁盘实际运作方式等.

文件系统

文件系统是操作系统中统一管理信息资源的一种软件, 管理文件的存储, 检索, 更新, 提供安全可靠的共享和保护手段, 并方便用户使用.

  • 统一管理磁盘空间, 实现磁盘空间的分配与回收.
  • 实现文件的按名存取.
  • 实现文件信息的共享, 并提供文件的保护, 保密手段.
  • 向用户提供一个方便使用, 易于维护的接口, 并向用户提供有关的统计信息.
  • 提高文件系统的性能.
  • 提供与I/O系统的统一接口.

文件逻辑结构

这里是从用户角度(逻辑上)来看文件.

主要有三种逻辑结构:

  1. 字节为单位的流式结构: 构成文件的基本单位是字节(字符).
  2. 记录式文件结构: 由若干记录组成, 可以按照记录进行读写, 查找. 每一条记录都有其内部结构.
  3. 树形结构: 类似B-树的索引查找形式.

暂且写到这里,以后再补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值