Kernel

kernel 就是把计算机的硬件资源管理调度起来,例如:内存管理 进程管理 设备管理 网络等。并遵循 OS 规范抽象出接口供给用户使用的程序。这样用户不用关心硬件的配置,通过给定的接口就可以使用这台机器的资源。

computer.svg

File System

计算之前需要先输入数据,计算完成之后要输出数据。数据输入和输出都需要格式的规范以及存取的方式。所以我们还需要一个文件系统解决这两个问题。当然一些小的嵌入式的系统可以没有文件系统(Fs)直接将数据存储在内存中。但是基本的 I/O 接口还是要有的。

Shell

在进行人机交互时,操作系统提供了 shell 程序。shell 程序就是指令输入的通道,mac 上有 iterm , linux 上 有 bash ,windows 上有 CMD ……等等 。我们可以通过 shell 程序 安装软件、操作文件、进行系统设置等等。

操作系统 在为应用程序提供 API 接口。有两个基本的作用:

  • 应用隔离:防止应用程序在运行过程中被其他程序篡改。
  • 应用中断:防止被失控程序滥用硬件资源。

    Process

    进程是对处理器、内存和 I/O 设备的一种抽象,是操作系统分配资源的最小单位。
    进程.svg

Threads

一个进程分配好了资源,是通过一个或多个线程利用这些资源干活的。

进程间切换

一个进程的指令和另一个进程的指令是交错执行的。因为同一时刻单核 cpu 只能执行一个程序。但是我们却感觉系统上多个进程是在同时运行的。这就是进程间切换来实现的。这种交错执行的机制称为上下文切换。

并发

线程在并发时会产生竞争,线程之间的通信就变的非常重要。通信有共享内存或者通过通信。分布式系统中共享内存就没办法了。

状态机

计算机的本质就是状态机。 State1 -> State2 。