当前位置: 代码迷 >> 综合 >> 《Operating Systems:Three easy pieces》:2.1 CPU 虚拟化
  详细解决方案

《Operating Systems:Three easy pieces》:2.1 CPU 虚拟化

热度:52   发布时间:2023-12-23 10:55:12.0

2.1 CPU虚拟化

/*************************************************************************> File Name: cpu.c> Author: wq> Mail: 1509802731@qq.com > Created Time: 2018年12月26日 星期三 13时42分42秒>Function:间隔一秒打印出命令行输入的字符串,理解OS的功能************************************************************************/#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{if (argc != 2){fprintf(stderr, "usage: cpu <string>\n");exit(1);}char *str = argv[1];while(1){sleep(1);/*原文此处为作者调用的是自定义的一个Spin函数,我换成了sleep()*/printf("%s\n",str);}return 0;
}

cpu.c是我们的第一个程序。并没有实现多少功能。实际上,功能只是调用Spin(),一个定时检查并每秒返回一次的函数(此处我将作者自定义的该函数换成了sleep(),因为文档没有提供该函数的定义)。该程序不断地以字符串形式重复打印出用户在命令行传入的参数。我们将文件保存为cpu.c,然后在系统上编译运行它,下面是我们将要看到的现象:

图2.3 执行输出

并没有什么有趣的现象——系统开始运行程序,打印出用户输入的字符串,一秒一次,一直持续到我们按下 “Ctrl+C”终止程序的运行。

现在,让我们做同样的事情,但是这次,让我们同时运行多个这样的程序:此刻Ctrl+c也无法强制停止运行,更野蛮一点吧,关闭这个窗口就好了:

图2.4 同时运行多个程序

现在事情开始变得有趣起来了。即使我们只有一个处理器,然而看起来这几个程序是同时运行的!如此魔力的事情是如何发生的?

结论是操作系统在硬件的帮助下,让我们产生了这种幻觉,感觉系统拥有大量的虚拟化的CPU。将单个CPU(或一小部分CPU)转换成看似无限数量的CPU,从而允许许多程序看起来在同时运行,这就是我们所说的虚拟化CPU,这是本书第一部分的重点。

当然,要运行程序并停止它们,或者告诉操作系统要运行哪些程序,需要一些接口(api),需要使用一些接口(APIs)与操作系统交互我们的需求。我们将会在本书中说到这些APIs;事实上,它们是大多数用户与操作系统交互的主要方式。

你可能会发觉:同时运行多个程序的能力可能会引发许多新问题。比如:如果两个程序都想在特定时间运行,那么该运行谁呢?这个问题应该由OS的规则来回答;OS在许多地方都会用到这些规则,为了回答这类型的问题,我们将在学习操作系统实现的基本机制时研究他们。因此,这也说明了OS作为资源管理者这样一个身份。

本节完。