rCore-ch1

应用程序与基本执行环境

应用程序执行环境

../_images/app-software-stack.png

All problems in computer science can be solved by another level of indirection。

– David Wheeler

在计算机领域中,抽象是一种深刻的哲学、深入软件开发的指导思想。

应用程序通过调用编程语言提供的标准库或者其他三方库的API接口,仅需少量代码就能完成复杂的功能。

从操作系统内核的角度看来,它上面的一切都属于用户态软件,而它自身属于内核态软件。无论用户态应用如何编写,是手写汇编代码,还是基于某种高级编程语言调用其标准库或三方库,某些功能总要直接或间接的通过操作系统内核提供的 系统调用 (System Call) 来实现。因此系统调用充当了用户和内核之间的边界。内核作为用户态软件的执行环境,它不仅要提供系统调用接口,还需要对用户态软件的执行进行监控和管理。

从硬件的角度来看,它上面的一切都属于软件。硬件可以分为三种: 处理器 (Processor,也称CPU),内存 (Memory) 还有 I/O 设备。其中处理器无疑是其中最复杂,同时也最关键的一个。它与软件约定一套 指令集体系结构 (ISA, Instruction Set Architecture),使得软件可以通过 ISA 中提供的机器指令来访问各种硬件资源。软件当然也需要知道处理器会如何执行这些指令,以及指令执行后的结果。当然,实际的情况远比这个要复杂得多,为了适应现代应用程序的场景,处理器还需要提供很多额外的机制(如特权级、页表、TLB、异常/中断响应等)来管理应用程序的执行过程,而不仅仅是让数据在 CPU 寄存器、内存和 I/O 设备三者之间流动。

内核与裸机平台

由于我们要在裸机平台编写内核LibOS,而不是在OS上编写应用程序,而Rust标准库std需要依赖操作系统提供的系统调用, 这就导致我们无法使用std.不过, Rust提供了一个不需要任何操作系统支持的核心库core,可以满足我们的大部分开发需求.

Reference

  1. rCore-ch1

  2. BlogOS