这篇文章我们来介绍一下操作系统相关的知识。
说到操作系统,我们肯定是要介绍冯诺依曼体系结构的。

常见的输入设备有键盘,网卡,显卡,话筒等等
常见的输出设备有显示器,磁盘,网卡,显卡等
存储器就是我们所说的内存
运算器和控制器就是CPU
IO = input + output
我们来分析一下这个体系结构的合理之处。
冯诺依曼体系结构设计了存储器这个十分核心的设备。CPU的速度随着硬件的发展速度之快,已经到达了纳秒级别的速度。而我们的输入设备和输出设备是很慢的,如果输入设备和输出设备直接和CPU取得关联的话,那么会严重制约CPU的速度,就好比博尔特必须把脚和一个老人绑在一起跑步,就算博尔特再快也没用。
存储器的出现让我们的输入设备和输出设备把数据往存储器存入以及从存储器里面输出数据,存储器就像一个缓冲区一样,当CPU需要的时候就往存储器里面读取就可以了。
这样做的好处是:
其实,在操作系统中,很多设计都遵循着这样的思想。
接下来,我们来详细的介绍一下这些思想:
操作系统中很多地方都有缓冲区,也不光是操作系统,网络等等很多地方都用得到缓冲区。例如语言层的语言缓冲区,系统层的内核缓冲区,网络中TCP的缓冲区等等。
缓冲区的好处有:
但是它也有对应的缺点:
解耦合就是把一个任务清晰的可以分离成很多个单独的任务,然后分别解决,不能形成一个任务制约或者被另一个任务制约的情况。例如前后端分离就是很典型的一种解耦合的思想。如果我们的前端和后端都是交给一个人做的,那么效率会很低,无法分工,换一个人写代码就看不懂上一个人写的代码了,而前后端分离可以让任务快速的进行,提高效率。在操作系统中存在很多解耦合的思想:例如驱动层可以理解为一种解耦合,虚拟地址空间也可以,到时候我们会在对应的文章详细的去理解。
Linux操作系统之下所有的东西都是文件,例如我们的命令行,命令行在Linux操作系统里面有对应的文件。包括我们的外设硬件设备也有对应的文件与之对应。这样做的好处是我们可以通过一套管理文件的方式来管理任何东西,方便操作系统的管理。
其实我们说了这么多设计思想,但是我们还没用搞清楚操作系统的定义呀:
OS是什么?是一款专门针对软硬件资源进行管理工作的软件。
对下管理好软硬件资源,对上给用户提供稳定,高效,安全的运行环境。
那么操作系统的管理原则是什么呢?
先描述再组织。
什么意思呢?
我们举一个例子,校长该怎么管理学生呢?校长管理学生的时候是管理学生这个人吗,学生这么多,校长应该怎么管理呢?校长肯定是不会直接管理学生的,校长会先管理辅导员,然后由辅导员来管理学生。这就好比是:学生是硬件,辅导员是驱动,校长是操作系统,操作系统想要进行对硬件的管理,就必须有一个驱动程序,由驱动程序管理硬件,操作系统管理驱动程序。这里体现了解耦合的思想,因为不同种类的外设管理方法不一样,需要驱动进行一个统一,方便操作系统管理。

还有一个问题,就是我们在管理的时候真的是在管理你这个人吗,还是通过你的数据来管理你?校长处分你的时候,是通过你的数据,得知你应该被处分,不一定是亲自接触到了你这个人。因此我们需要把描述的对象数据化,通过数据来描述你这个人。 那么如何用数据对你进行描述呢?在C语言里面我们可以用一个结构体,把你的相关信息存放在结构体里面,这样就完成了对你的描述。
例如:
- struct student {
- int id;
- char *name;
- // ...
- }
我们有了描述一个学生的方法,但是这样无法达成管理的效果,因为我们的学生很多,要管理这些学生我们需要找到组织学生的方法,例如组建班级,在OS中的组建方法就是把代表你的结构体用用双向链表链接起来。这样就完成了描述和组织!
以上就是对操作系统的大概理解和认识,当我们有这些认识之后再去看后面的文章,会好理解很多。