本篇文章是进程的预备知识,但也不仅仅是进程的预备知识,
也可以更好地帮助我们理解整个计算机体系。
目录
- 冯诺依曼体系结构:
- 进一步理解操作系统:
冯诺依曼体系结构:
关于这张图先进行一下必要的解释:
- 输入设备:包括键盘, 鼠标,扫描仪, 写板等
- 中央处理器(CPU):含有运算器和控制器等
- 输出设备:显示器,打印机等
- 对于存储器,计算机中很多硬件设备都有存储功能,但这里的存储器指的是
内存
我们现在只谈数据层面的信号,我们发现所有的数据都是经过内存的,为什么呢?
如果没有内存的话
这就是我们没有内存的情况,由于输入设备与输出设备的速度是很慢的,根据木桶原理
计算机的速度就慢下来了,这也就是内存为什么存在的原因。
他是作为一个巨大的缓存,是一个中转站,或许有人会说,他多经过一个路径,多拷贝了一次,速度岂不是更慢了,
答案是,就算CPU的计算速度再快,但是也需要计算时间,我们在CPU计算的时间内,由输入设备像内存中先存一大段数据,CPU直接从中拿取就会加快一个量级。
那我们知道这个有什么作用呢?
我们在学习C语言时大概率听到过一句话,我们写好的程序都是会先加载到内存中,再由CPU计算程序的数据。这就是冯诺依曼体系规定这么做的。
那么从你登录上qq开始和某位朋友聊天,从你打开窗口,给他发消息,到他的到消息之后的数据流动过程是怎样的呢?
首先我们要想到两台电脑就是两个冯诺依曼体系结构。
进一步理解操作系统:
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
给操作系统下一个笼统的定义的话:就是一款管理
硬件与软件的软件。
既然可以管理硬件,那我们可以得到如下示意图(不完整):
那么重点来了,是如何进行管理
的呢?
就像一个学校的校长要管理学生,肯定不是每天一个一个的管理学生,毕竟那么多人。
于是肯定就会有一个管理系统,管理系统中有学生详细的数据
,于是校长直接管理数据
就好了。
到这里我们就会发觉教务系统与我们曾经实现的通讯录是很像的。我们先描述一个对象
struct stu
{char name[20];char telephone[15];int age;....
}
在将每一个对象进行连接,也就是组织起来,即多加一个指针,类似链表的感觉。
struct stu
{char name[20];char telephone[15];int age;....struct stu* next;
}
于是我们可以得到一个结论:
管理事物总是
先描述,再组织
那么我们对于管理硬件同样的道理。
先描述再组织
操作系统即是硬件的管理者,并不是直接对硬件进行管理,而是对硬件的链表进行增删查改
再来看一下完整的操作系统示意图:
我们管理硬件的目的是为了给用户提供好的体验,但是,用户可以直接对操作系统中的各种硬件数据进行修改吗?
答案是否定的,因为你可能改成不符合规定的数据最终造成崩溃,所以不能直接访问。
但是用户要如何使用操作系统呢?
操作系统给我们提供了一系列的系统调用接口
我们也就可以进行一系列的操作了,但是这个是建立在对操作系统有一定理解的程序员才可以很好的使用,不了解的寸步难行,针对这种情况,于是又进行一层封装
让我们更方便的进行使用。我们也经常在使用这些被封装过的接口,也就是各种各样的库。
系统调用和库函数概念
- 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
- 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
注意:
有了库,就算在不同的操作系统下编写代码,由于封装的库是一样的,比如我们在linux下printf,在windows下也是printf(即是他们的系统调用接口不同),于是就有了跨平台性!!