### 操作系统
- 操作系统是指为程序的生存提供一个通用的土壤, 他为多个程序并存提供了条件, 同时避免每个程序都需要自己创造运行空间的精力,如果把程序比喻为人,那么系统就是自然,人只有在自然中才能生存,假设人类要移民火星,人类首先要做的就是在火星上构建自然这个系统,然后人类才能生存,这个自然也可以理解为操作系统。
### 操作系统底层的硬件支持
- 图灵机 内存 磁盘 键盘 鼠标 路由器等其他设备
### 程序运行的本质
- 图灵机模型:一个控制器 一个控制算法 一个无限长的纸带 一个纸带存取器
- 图灵机原理:控制器通过纸袋存取器得到纸袋第一个行的内容,然后将内容放入控制算法中得到下一步的指令,将指令发送给纸带存取器,纸带存取器向纸带写入字符或者移动纸带, 不断循环直到获取结果。
- 现代计算机中, cpu就是控制器, 内存就是存取器, 程序就是算法, 硬盘 磁盘 网络 键盘 鼠标都是纸带。
### 为什么需要操作系统
- 操作系统屏蔽了底层硬件的差异性, 如果没有操作系统 程序就需要为每一台计算机单独编写代码,因为计算机内部的硬件是不同的。
- 同时操作系统提供简单的系统调用,是的程序不需要去关心复杂的硬件概念。
### 操作系统提出的解决方案
##### 程序只是一个进程
- 操作系统将程序运行抽象为一个进程, 进程可以理解为一个party,party将内部与外部隔离开来, 通过将外部无意义的物体聚合到内部以完成一系列有意义的操作。
- 因为操作系统允许同时运行多个程序,这使得进程并行成为了可能,为了避免某个进程卡住 阻塞了其他进程的运行,操作系统提出了 分时并行的概念。
- 程序内部有可能会因为处理IO导致整个程序的阻塞, 于是提出了线程的概念,线程与进程类似,程序可以将耗时的任务放入其他线程里,而主线程负责响应用户输入。
##### 虚拟内存
- 操作系统可以同时运行的程序的数量受限于内存的大小, 为了突破内存的限制, 操作系统提出了虚拟内存的概念, 在进程被切入或者切出的时候 进程所属的内存块 也会被切入到内存或者切出到硬盘。
##### 文件管理
- 磁盘只是一个存储数据的盘子,它本身没有任何逻辑分类, 如果用户希望获取某个信息,他要到磁盘中去寻找犹如大海捞针, 操作系统创造出了文件管理的概念, 这样用户可以根据目录寻找到指定文件。
##### IO
- 操作系统需要与其他硬件交互, 包括硬盘 鼠标 打印机等, 这些硬件都会存在专门为该操作系统编写的驱动, 这样操作系统就可以通过驱动来控制这些硬件,
##### 死锁
- 死锁表示操作系统的组成部分, 而是操作系统的病症, 因为存在多个进程并行, 当出现竞争性资源的时候 就会出现死锁。
### 操作系统架构
- 用户
- 用户程序 shell 编辑器
- 系统调用接口/标准库函数 open/read/write
- 内核 进程管理/内存管理/文件系统
- 硬件 cpu 硬盘
### 总结
- 现代操作系统在使用上越来越复杂, 并不是操作系统本身复杂, 而是因为操作系统上面装了非常多的满足不同场景的用户程序, 非常多的用户程序 使得电脑的使用越来越复杂 可以满足的场景越来越多, 但是用户看到的界面并不是操作系统而是简单的操作系统与多个用户程序的结合。实际上普通用户根本看不到操作系统, 普通用户使用的所有东西都是用户程序。