进程是计算机对于一个正在运行的程序的抽象,在一个系统上可以同时运行多个进程,每个进程都看起来是在单独的使用着硬件。而并发的执行,可以视作是一个进程的指令和另一个进程的指令交错执行的。 一个 CPU 看上去是在并发的执行多个进程,这是通过处理器在进程之间切换实现的。操作系统实现这种交错执行的机制称之为上下文切换。 操作系统保持跟踪进程运行所需要的所有状态信息,这种状态也就是所谓的上下文。
在任何一个时刻,单处理器系统都是只能执行一个进程的代码。当操作系统决定要把控制权从当前进程转移到某个新的进程的时候,就会进行上下文切换。也就是保存当前的上下文,恢复新进程的上下文,然后将控制权传递到新的进程。
在现代的计算机系统中一个进程可以说是有多个线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码合全局数据。由于网络服务器中对并行处理的需求,线程成为越来越重要的编程模型,就是因为多线程之间比多进程之间共享数据要来的容易。也因为线程比进程是要更加的高效,当有多处理器可用的时候,多线程也是一种可以让程序运行的更快的方法。
虚拟内存是一个抽象的概念,他为每个进程提供了一个假象,也就是每个进程在独占的使用主存。每个进程看到的内存都是一致的,称之为虚拟地址空间。
文件就是字节序列。 每个 I/O 设备,包括磁盘键盘显示器甚至网络都可以看成是文件。系统中的所有输入输出都是通过一组 Unix I/O 的系统函数调用读写文件来实现的。 文件这个简单而精致的概念是非常强大的,因为它向应用程序提供了一个统一的视图,来看待系统中可能含有的所有的各式各样的 I/O 设备。