Skip to content

Latest commit

 

History

History
23 lines (14 loc) · 3.44 KB

intro.md

File metadata and controls

23 lines (14 loc) · 3.44 KB

引言

本章导读

保障系统安全和多应用支持是操作系统的两个核心目标,本章从这两个目标出发,思考如何设计应用程序,并进一步展现了操作系统的一系列新功能:

  • 构造包含操作系统内核和多个应用程序的单一执行程序
  • 通过批处理支持多个程序的自动加载和运行
  • 操作系统利用硬件特权级机制,实现对操作系统自身的保护
  • 实现特权级的穿越
  • 支持跨特权级的系统调用功能

上一章,我们在 RISC-V 64 裸机平台上成功运行起来了 Hello, world! 。看起来这个过程非常顺利,只需要一条命令就能全部完成。但实际上,在那个计算机刚刚诞生的年代,很多事情并不像我们想象的那么简单。 当时,程序被记录在打孔的卡片上,使用汇编语言甚至机器语言来编写。而稀缺且昂贵的计算机由专业的管理员负责操作,就和我们在上一章所做的事情一样,他们手动将卡片输入计算机,等待程序运行结束或者终止程序的运行。最后,他们从计算机的输出端——也就是打印机中取出程序的输出并交给正在休息室等待的程序提交者。

实际上,这样做是一种对于珍贵的计算资源的浪费。因为当时(二十世纪 60 年代)的大型计算机和今天的个人计算机不同,它的体积极其庞大,能够占满一整个空调房间,像巨大的史前生物。当时用户(程序员)将程序输入到穿孔卡片上。用户将一批这些编程的卡片交给系统操作员,然后系统操作员将它们输入计算机。系统管理员在房间的各个地方跑来跑去、或是等待打印机的输出的这些时间段,计算机都并没有在工作。于是,人们希望计算机能够不间断的工作且专注于计算任务本身。

批处理系统 (Batch System) 应运而生,它可用来管理无需或仅需少量用户交互即可运行的程序,在资源允许的情况下它可以自动安排程序的执行,这被称为“批处理作业”,这个名词源自二十世纪60年代的大型机时代。批处理系统的核心思想是:将多个程序打包到一起输入计算机。而当一个程序运行结束后,计算机会 自动 加载下一个程序到内存并开始执行。当软件有了代替操作员的管理和操作能力后,便开始形成真正意义上的操作系统了。

应用程序总是难免会出现错误,如果一个程序的执行错误导致其它程序或者整个计算机系统都无法运行就太糟糕了。人们希望一个应用程序的错误不要影响到其它应用程序、操作系统和整个计算机系统。这就需要操作系统能够终止出错的应用程序,转而运行下一个应用程序。这种 保护 计算机系统不受有意或无意出错的程序破坏的机制被称为 特权级 (Privilege) 机制,它让应用程序运行在用户态,而操作系统运行在内核态,且实现用户态和内核态的隔离,这需要计算机软件和硬件的共同努力。

本章主要是设计和实现建立批处理系统,从而对可支持运行一批应用程序的执行环境有一个全面和深入的理解。

本章我们的目标让批处理系统能够感知多个应用程序的存在,并一个接一个地运行这些应用程序,当一个应用程序执行完毕后,会启动下一个应用程序,直到所有的应用程序都执行完毕。