# Overview 概述

- [What is an OS? 什么是操作系统?](#what-is-an-os)
- [Process Abstraction 进程抽象](#process-abstraction-进程抽象)
- [Separate 分割](#separate-分割)
- [Service Provider 提供服务](#service-provider-提供服务)
- [Conclusion 结论](#conclusion-结论)

## What is an OS?

操作系统是一个软件。它像是一个协调人，或者幻术师，简化硬件细节，给程序提供更友好、安全的接口。
![操作系统将硬件变为更友好的接口](images/L01-OS-Overview.png)

- 程序认为的“机器”实际上是操作系统提供的抽象接口，而不是物理硬件。
- 每个正在运行的程序只需关心它自己，而无需协调其他程序的运行。
- 操作系统提供更易于使用、安全的接口，隐藏了底层硬件。

操作系统不一定要实现全部功能。有时候，在特定环境下（比如在一个月球探测车上），会构建简化的操作系统。这种操作系统可能会缺乏很多功能，比如不支持网络或者缺乏安全措施。

## Process Abstraction 进程抽象

一个进程有:

- 地址空间 Address Space
- 一个或多个线程，用以执行任务
- 其他的系统状态（打开的文件、网络连接，etc.）

## separate 分割

在进程运行时，每个程序都会假设自己独占处理器。它无需关心是否有别的进程会和它产生冲突，或者抢占它的CPU时间。操作系统通过提供一个抽象的“机器”来实现这一点，使得每个进程都感觉自己独占了整个系统。

同样地，为了保护，操作系统一般也不会允许程序访问其他程序的内存或资源。这么做会让系统立刻终止该程序，并生成一份core dump。
![操作系统禁止非法内存访问](images/L01-OS-stop-illegal-memory-access.png)

## Service Provider 提供服务

操作系统还会提供一些服务:

- 文件系统、网络、UI, etc.
- 传输文件、权限管理、用户管理, etc.
- Look and feel
- 电源状态

## Conclusion 结论

操作系统:

- 提供便于使用的抽象层，应付各种各样的硬件
  - 便利性、保护、可靠性...
- 统合可用的硬件资源，保护用户进程
- 通过提供标准化的服务，简化应用开发
- 提供fault containment(错误隔离), fault tolerance(容错), 以及fault recovery(错误恢复)机制。
