多操作系统的理解
零.前言
本文将粗略带领你对操作系统进行简单的理解,以及操作系统如何管理软硬件资源,从而为用户提供一个良好的执行环境的。
1.计算机总览图
几乎所有操作系统的书上都会出现一张类似这样的图,但是只有一张图是毫无意义的,要理解操作系统这一概念,我们需要从最下层的底层硬件结构说起。注意我们所讲的底层硬件结构是为了理解操作系统这一概念而讲解的,并不会像计算机组成原理那样详细阐述。
2.底层硬件结构
(1)冯诺依曼体系结构图
在底层硬件结构的位置有一个说明:采用冯诺依曼体系结构。相信大家对下面这张图也并不陌生。
(2)各个模块的作用
输入设备:键盘,磁盘,网卡,显卡,话筒,摄像头等。都可以作为输入设备。
输出设备:显示器,磁盘,网卡显卡,音响等。
我们发现磁盘等设备既可以作为输入设备,也可以作为输出设备,就好比我们可以在文件中读到数据,也可以将数据写到文件中。
存储器:存储器是我们要详细阐述的部分,下面会说。
运算器&&控制器:这俩玩意合在一起就叫做中央处理器,也就是我们所说的CPU。
(3)存储器
什么是存储器
在冯诺依曼体系结构中,存储器的叫法显然有误导倾向,因为这里的存储器指的是内存,而不是磁盘等存储设备(磁盘属于输入设备和输出设备)。
存储器分级
对于这张图,我们了解了冯诺依曼体系结构中的存储内容是什么。
越上层的存储设备,进行存储的效率越高,造价越高。这也就是为什么我们不能将内存也制作成寄存器类型的原因,成本太高了。
存储器的意义
通过冯诺依曼体系结构图我们可以看出,CPU直接处理的是存储器中的数据,那么为什么不直接处理输入设备的数据呢?
要回答这一问题我们需要了解一个原理:一个桶能够装水的多少,取决于最短的那块木板。
CPU处理数据的效率是纳秒(ns)级别的,但是输入设备处理数据的效率是毫秒(ms),秒(s)级别的,这样会导致处理数据的效率取决于输入设备,使整体效率下降。
而存储器处理数据的效率比外设要高,比CPU要低,而且可以进行数据的存储,可以提前存储输入设备中的数据,然后再交给CPU进行处理。此时效率就由存储器决定了。
存储器是体系结构中的核心设备。
I/O
我们通常说的I/O流,指的是在存储器的角度所说的,I即为输入设备(input),O即为输出设备(output)。
本地IO指的就是磁盘作为输入/输出设备,网络I/O指的就是网卡作为输入/输出设备。
(4)体系结构的简单举例
假设你和你的女朋友在聊qq,你在深圳,她在兰州。
通过这一过程,你的消息才会被你的女朋友看到。
3.驱动程序
驱动程序只需要记住一点:
驱动是软件,它是直接和底层硬件进行交互的。
4.操作系统
(1)什么是操作系统
做完了如上的铺垫,我们迎来了大BOSS—操作系统。
操作系统是一款软件,是专门针对软硬件资源进行管理工作的。
注意操作系统在整个计算机体系中处于中间的位置,它既可以对软件进行管理,也可以对硬件进行管理。
(2)操作系统的作用
对下:管理好软硬件资源。
对上:给用户提供稳定的,高效的运行环境。
5.操作系统的管理方式
先描述
我们使用学校管理来类比理解操作系统:
校长想对学生来进行管理的话,就需要拿到学生的数据,但是校长是不会亲自来向你来拿数据的,他会制作一张表格(包含你的各种个人信息),然后交给你的辅导员,说去,让你们系的学生去填了,辅导员让学生填完数据后再将表格还给校长。
类比到计算机中:
校长:操作系统
辅导员:各种驱动
学生:各种软硬件
表格:硬件属性信息
注意,底层硬件和操作系统之间是没有交互的,必须要通过驱动来实现数据的转移。此时每一个底层的硬件中的信息,就被操作系统拿到了,只有根据他们中的信息,操作系统才能对其进行决策(分配任务)。
注意由于Linux的操作系统是使用C语言写的,因此各个硬件中的信息其实是最后写在一个C语言结构体中的。
此时完成了操作系统进行管理的第一步先描述。使用结构体来描述从驱动那里接收到的底层硬件中信息。
PS:注意这里的描述指的是使用结构体将需要的信息存起来,和如何拿到信息无关。
再组织
校长在拿到了学生的数据之后,假设要寻找200110902这名学生的数据,想奖励他1w元,如果直接寻找的话得挨个去看,看不过来啊,毕竟年级有16个班,500多名学生。如果这些数据是已经排好序的呢?查找各个学生会方便很多。所以校长会对拿到的数据使用各种数据结构组织起来,此时对学生信息的管理,就变成了对数据结构的增删查改。
再来类比到计算机中操作系统在拿到各个硬件的数据后,会使用某种数据结构来组织这些信息,即将各个结构体,使用双链表,二叉树等等数据结构进行链接起来,方便今后的使用。
这就是操作系统管理的第二步再组织。。使用数据结构将各个结构体链接起来。
6.系统调用接口
(1)什么是系统调用接口
用户进行的操作本质上其实是对硬件的操作,比如我们使用printf来进行打印,打印的最终结果是要显示在显示器上的,很显然显示器是一个硬件,用户要对显示器进行操作必须要通过操作系统。
注意,操作系统是不信任任何的用户的,它不可能将它的代码暴露给用户,而是使用系统调用接口来传递给用户的。从而让用户进行操作,即计算机图中操作系统上层的位置。在Linux中,该接口本质上就是一些C语言函数。它可以以第三方库的形式存在,也可以直接以语言的形式存在。通常情况下,系统调用接口已经被大佬们封装好了。
(2)系统调用接口 VS C库函数
C中的库函数是作为上层来调用系统调用接口的,比如C语言中进行文件操作的函数,或者对网卡等硬件进行操作的函数一定在语言的内部调用了系统调用接口。系统调用接口相对C语言函数要更加复杂一些。是为了给上层用户连接操作系统下达指令或者来控制硬件的。
7.总结
在整个计算机软硬件架构中,操作系统的定位是:一款搞管理的软件。理解了操作系统先描述,再组织的管理方式,对于我们进行之后操作系统对进程,文件,内存,驱动的管理有很大的帮助。
- 点赞
- 收藏
- 关注作者
评论(0)