跳转至

第一章 操作系统引入

1.1 引论

什么是操作系统

什么是计算机系统?

计算机系统可以分为四个组成部分:硬件、操作系统、应用程序、用户

什么是操作系统?

操作系统Operating System: A program that acts as an intermediary between a user of a computer and the computer hardware.

大致意思为,操作系统是一个程序,它发挥着计算机用户与计算机硬件交互的媒介的作用,有了操作系统,用户与计算机硬件交互更为简便。

Operating System goals:

  • Execute user programs and make solving user problems easier. 执行用户程序并且使得解决用户问题变得更为简单。
  • Make the computer system convenient to use. 使得计算机系统使用更为简便。
  • Use the computer hardware in an efficient manner. 用一种更为高效的方式使用计算机硬件。

从 Hello world 说起

一个最简单的程序hello.c是怎么在计算机中运行起来的。

#include <stdio.h>

int main() {
    printf("Hello world!\n");
    return 0;
}

这样一个C语言程序,通过命令行运行过程可能如下

gcc hello.c -o hello # 将hello.c编译为可执行文件hello
./hello # 执行hello可执行文件
> Hello world! # 运行结果

要理解这样一个程序是怎么从一个文件到程序运行结果,我们需要学习整个操作系统的相关操作过程。

编译系统

广义上的编译分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段

  • 预处理阶段:对程序文件进行预先处理,加入必要的头文件的相关内容,展开相关宏定义等。
  • 编译阶段:这里的编译特指将高级编译语言翻译为对应指令集架构下的汇编语言程序
  • 汇编阶段:将汇编语言程序翻译为机器语言程序,得到可重定位目标文件
  • 链接阶段:将可重定位目标文件链接起来,合并得到一个可执行文件

经过这四个阶段后,hello.c文件就会变为hello可执行文件,可以被机器直接读取运行

运行过程

在命令行中输入./hello后,计算机进行了一系列操作

Reading the hello command from the keyboard.

首先输入指令后,计算机需要从键盘输入处读取到相应的运行指令,相关指令信息从USB controller经过I/O bus传输到I/O bridge,再通过属于CPU内的Bus interface信息写入Register file,然后再从Register file寄存器文件经过System bus回到I/O bridge,再通过Memory bus到达目的地Main memory主存。

Loading the executable from disk into main memory.

读取完./hello指令后,计算机开始将原本存储在磁盘中的程序文件载入主存。Disk与Disk controller互传数据,数据还是通过I/O bus到达I/O bridge通过Memory bus直接进入Main memory对应载入位置。

Writing the output string from memory to the display.

将输出字符串从内存写到显示器上。Main memory中存储的输入字符串经过Memory bus, System bus到达Bus interface后进入CPU Register file,Register file中数据经过Bus interface通过System bus到达I/O bridge,再通过I/O bus到达Graphics adapter最后抵达Display显示器,显示相应输出字符串。

操作系统执行过程

之前主要是计算机硬件层的操作流程,现在说说操作系统层的相关执行过程。

  1. 编译成可执行文件
  2. 用户告诉shell执行该可执行程序
  3. 创建一个新的子进程
  4. 装入hello程序
  5. 操作系统找到该程序;找出代码段和数据段的地址
  6. 可执行文件映射到进程结构
  7. 设置CPU上下文环境,并设置程序开始处
  8. 调度hello程序
  9. 执行程序的第一条指令
  10. 执行失败,缺页中断发生
  11. 分配一页内存,并将代码从磁盘读入,继续执行
  12. 更多的缺页中断,读入更多的页面
  13. printf
  14. 操作系统检查字符串的位置是否正确
  15. 操作系统找到字符串被送往的设备
  16. 设备是一个伪终端,由一个进程控制
  17. 操作系统将字符串送给该进程
  18. 该进程告诉窗口系统它要显示字符串
  19. 窗口系统确定这是一个合法操作,然后将字符串转换成像素
  20. 窗口系统将像素写入存储映像区
  21. 视频硬件将像素表示转换成一组模拟信号控制显示器
  22. 显示器发射电子束
  23. 你在屏幕上看到Hello world!

为什么学习操作系统

怎么学习操作系统

操作系统简史

人工操作阶段

没有操作系统概念,所有程序设计都是靠直接操作硬件。

从1945年诞生的第一台计算机到20世纪50年代中期所出现的计算机都属于第一代计算机,还没有出现OS。

用户使用计算机采用人工操作的方式进行,需要通过成千上万根电缆接到插件版上连成电路来控制机器的基本功能。

程序和数据记录在纸带上,程序员将纸带装入纸带输入机,再启动它们将纸带上的程序和数据输入计算机,然后启动计算机执行。

优点:独享整个资源

缺点:

  • 用户独占全机资源,资源利用率不高,系统效率低下。
  • 手工操作多,浪费处理机时间,也极易发生差错。
  • CPU等待人工操作——用户装带、卸带操作时CPU及内存资源空闲

单道批处理系统

软硬件分离

多道批处理系统

操作系统与计算机硬件分离,ISA

分时操作系统

  • 将CPU处理时间分割为多个时间片,将不同时间片分给不同程序,达到多个程序“同时”运行的效果。
  • 时间片用完则产生时钟中断,控制权专职操作系统重新调度。
  • 未完成程序将挂起,等待再次分配时间片。

分时操作系统与多道批处理系统的区别 多道批处理系统中的多道指的只是允许多个作业进入计算机中进行处理,但是实际运行时,并不会让两个作业达到近乎同时运行,而是可以同时调度多个作业使得CPU和IO设备尽可能都处于忙状态,比如当一个作业需要使用CPU并且进入了CPU中进行运行时,直到这个作业再次放弃CPU之前,另一个作业都无法使用CPU了,达不到同时运行的效果,只能做到提高资源利用率,节省多个作业的运行时间的效果。而分时操作系统则不同,分时操作系统将CPU资源分为多个时间片分配给多个程序,可能存在多个程序交替在CPU上运行的情况,但又不是像多道批处理系统一样一次只能完成一个作业对于CPU的使用需求,而是同时满足多个作业,它们可能各自交替时都不能一次完成全部工作,但是能同时进行多个作业的工作。

多用户多任务操作系统

多用户多任务操作系统:允许多个用户通过各自的终端使用同一台机器,共享主机系统中的各种资源,而每个用户程序又可进一步分为几个任务。

实时操作系统

实时操作系统 Realtime Operating System:指当外部事件或数据产生时,能够对其予以接受并以足够快点速度进行处理,所得结果能够在规定的时间内控制生产过程或对控制对象做出快速响应,并控制所有实时任务协调运行的操作系统

典型实时系统:

  • 过程控制系统(生产过程控制):实时采集数据,并对其进行分析处理,进而进一步自动发出控制信号,如导弹制导系统、飞机自动驾驶系统。
  • 信息查询系统(情报检索):接受终端服务请求和提问,快速查询信息数据库,在极短时间内做出响应。
  • 事务处理系统(银行业务):不仅对终端用户及时做出响应,还要对系统中的文件或者数据库频繁更新

嵌入式操作系统

嵌入式系统:

  • 在各种设备、装置或系统中,完成特定功能的软硬件系统,例如汽车、飞机、手机、电视机等。
  • 通常工作在反应式或对处理时间有较严格要求环境中。

嵌入式操作系统 Embedded Operating System:

  • 运行在嵌入式系统环境中,对整个嵌入式系统以及它所操作、控制的各种部件装置等等资源进行统一协调、调度、指挥和控制的系统软件
  • 例如uC/OS-II、嵌入式Linux、Vxworks,以及智能手机的Android、iOS。

操作系统网络化

  • Network Operating System 网络操作系统:在传统单机OS上加单独软件层,主要提供联网功能和资源的远程访问,实现多机互联
  • Distributed Operating System 分布式操作系统:多台机器统一管理形成单一系统,相比网络操作系统,对用户和应用高度透明

分布式操作系统的透明性:

  1. 数据透明:用户无需了解文件存储位置。
  2. 执行透明:用户无需关心程序运行位置。
  3. 保护透明:统一的身份管理和安全机制。

网络操作系统

背景:随着计算机网络的兴起,操作系统需要提供网络功能,支持计算机之间的通信和资源共享。

特点:

  • 网络协议支持:支持TCP/IP网络协议
  • 网络服务:提供文件共享、打印共享、远程登录等网络服务
  • 分布式处理:支持分布式计算资源共享

代表性系统:

  • Novell NetWare: 早期流行的网络操作系统。
  • Windows NT: 微软公司开发的网络系统。
  • Linux: 具有强大的网络功能。

分布式操作系统

背景:随着计算机网络的发展和大规模计算需求的出现,分布式操作系统应运而生。

特点:

  • 透明性:用户感觉不到底层多台计算机的存在,就像使用单台计算机一样;
  • 资源共享:多台计算机的资源可以共享;
  • 并行处理:任务可以在多台计算机上并行执行;
  • 高可靠性:一台计算机故障不会影响整个系统的运行。

代表性系统:

  • Amoeba: 荷兰阿姆斯特丹自由大学开发的分布式操作系统。
  • Mach: 卡内基梅隆大学开发的操作系统,是许多分布式操作系统的基础。

云操作系统

背景:随着云计算技术的发展,云操作系统成为管理和调度云端资源的核心

特点:

  • 虚拟化:支持虚拟机技术,将物理资源虚拟化为多个逻辑资源;
  • 资源调度:负责在多个虚拟机之间分配和调度资源;
  • 弹性伸缩:可以根据需求动态调整资源分配;
  • 高可用性:提供故障转移和容错机制。

代表性系统:

  • Amazon Web Services (AWS):亚马逊提供的云计算服务,包括EC2(弹性计算云)等
  • Microsoft Azure: 微软提供的云计算服务
  • Google Cloud Platform (GCP):谷歌提供的云计算服务
  • 华为云、阿里云、百度云等

操作系统功能与特征

操作系统对硬件进行抽象

  • 处理器资源的使用抽象为进程
  • 存储器抽象为地址空间
  • 磁盘、SSDs......抽象为文件

操作系统的功能

处理机管理

处理机分配和运行都以进程为最基本单位,主要有以下功能:

  • 进程控制:创建和撤销进程,进行状态转换;
  • 进程同步:对各进程运行进行协调,处理互斥、同步;
  • 进程通信:实现进程间的信息交换;
  • 进程调度:按照一定算法把处理机分配给进程。
存储器管理(内存)

任务:

  • 为多道程序的并发提供良好的环境;
  • 便于用户使用存储器;
  • 提高存储器利用率;
  • 为尽量多的用户提供足够大的存储空间。

功能:

  • 内存分配和回收:静态和动态分配;
  • 内存保护;
  • 地址影射;
  • 内存扩充。
设备管理

任务:

  • 为用户程序分配I/O设备;
  • 完成用户程序请求的I/O操作;
  • 提高CPU和I/O设备的利用率:中断、通道;
  • 改善人机界面。

功能:

  • 缓冲管理;
  • 设备分配;
  • 设备处理;
  • 虚拟设备功能。
文件管理
接口管理

操作系统的结构

计算机硬件与操作系统机制