首先我们需要解决的问题是操作系统是什么,其本质上就是一段计算机程序,用于管理计算机的硬件和软件资源,操作系统需要处理很多事务,如管理与配置内存、决定系统资源的优先次序、控制I/O设备等。一个计算机系统可以分成三层,如下图所示:

我们将计算机操作系统的特征分为四个方面,下面将通过几段程序,依次进行说明。
一、CPU的虚拟化
编写如下的c程序




cpu.c的功能是打印你输入的字符串,然后在一个无限循环的函数里spin一秒钟,这里提一下在运行了上述的函数之后,需要使用指令
killall cpu
来终止整个程序的运行,cpu是指生成的可执行文件的名字。我们观察结果会发现虽然我们同时运行了多个程序,但是所有程序都会输出结果,结果是cabcabcab....这样子的无限字符串序列。即使我们只有一个物理cpu,这种现象依然存在,即说明操作系统通过某种机制令每个应用程序都感觉自已拥有整个cpu,会直接执行。
二、内存的虚拟化
编写如下的程序,


输出结果中的pid表示进程的id,在操作系统中每个进程都有系统分配的独一无二的id来做相互之间的区分,从上图的结果我们可以发现二者是并行实现的,而且二者被分配了同样的地址!是不是很神奇!这说明cpu通过某种机制让应用有完整的虚拟地址空间。
三、并发性
程序如下,


在threads.c中我们创造了两个子线程,每一个线程都对一个共享的全局变量做设定次数的 ++ 操作,但是我们发现这个结果是不确定的,这说明这两个线程的执行并不是严格并发的,操作系统需要去控制线程的并发。
四、持久性
程序如下:


io.c创建了一个文本文档,并且在里面存储了字符串,无论我们用什么物理存储装置,我们都可以访问到这个路径以及里面的文件,这说明操作系统提供了文件系统来做一个持久性的存储。
网友评论