今天我们开始学习《操作系统导论》的第一个主题:虚拟化CPU。
虚拟化CPU的目的是为了将少量物理CPU,让用户看起来像是有无数多个CPU可用,以便能让多个进程可以同时运行。
操作系统要实现虚拟化CPU,要从三个方面要实现:抽象出“进程”的概念、底层(硬件)机制支持以及高层策略(OS对进程的调度算法)。
进程是底层机制和高层策略实现的基础。所以,我们先来了解下进程相关的知识。
进程基础.png
操作系统中,将运行中的应用程序叫做进程。
我们在电脑桌面上或手机桌面上看到的应用列表,就是应用程序。应用程序被存储在磁盘上。如下:
将应用程序运行起来就叫做进程。比如,我们在macbook的活动监视器中看到的列表,就是正在运行中的应用程序,也就是对应应用程序的进程。通过这个列表,我们就可以看到每个进程使用的内存和CPU的占用量。如下:
操作系统为什么要抽象出“进程”这么一个概念呢?因为操作系统在分配系统资源时是以进程为基本单位的,每个分配到的系统资源(比如内存、CPU)都是独立的,进程与进程间的资源是不能共享的;同时进程和进程之间也就具有了隔离性。
操作系统在调度时的基本单位也是进程。所以,进程是操作系统中调度策略实现的基础。
因为计算机的硬件就是要用来运行软件的。所以操作系统要创建一个进程,就必须要给该进程分配一定的硬件资源。一般一个进程所需要的硬件资源至少有内存、寄存器和持久设备。
我们看下操作系统是如何将一个应用程序转换成进程的。
image.png
用户或应用程序如何告知操作系统来创建进程以及管理进程呢?那就是通过操作系统提供的和进程相关的一组API,即相关的函数接口。
操作系统一般会提供如下相关API:
进程在给定的时间内可能处于不同的状态。一般有3个主要的状态:
3个状态的转换关系如下:
image.png
大家可能都听说过数据结构+逻辑=软件。数据结构是用来存储各种信息的,逻辑就是告诉CPU如何执行的指令。操作系统也不例外,也需要用数据结构来存储进程相关的信息。比如每个进程所需的各种寄存器的信息、状态信息以及不同状态的进程列表结构等。
操作系统抽象出了“进程”的概念,这就为后续操作系统做进程调度提供了基础。
下一篇,我们继续学习虚拟化CPU的底层机制。
特别说明:你的关注,是我写下去的最大动力。点击下方公众号卡片,直接关注。关注送《100个go常见的错误》pdf文档、经典go学习资料。