👦个人主页:Weraphael
✍🏻作者简介:目前正在学习c++
和Linux
还有算法
✈️专栏:Linux
🐋 希望大家多多支持,咱一起进步!😁
如果文章有啥瑕疵,希望大佬指点一二
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍
目录
- 一、认识冯诺依曼体系结构(硬件)
- 1.1 体系结构
- 1.2 体系之间是如何工作的
- 二、操作系统(软件)
- 2.1 什么是操作系统
- 2.2 操作系统为什么要管理
- 2.3 操作系统是怎么管理
- 三、系统调用和库函数
一、认识冯诺依曼体系结构(硬件)
1.1 体系结构
我们常见的计算机,如笔记本,台式机等,大部分都遵守冯诺依曼体系
截至目前,我们所认识的计算机,都是有一个个的硬件组件组成
- 输入设备:键盘、鼠标、摄像头、麦克风、磁盘、网卡等
- 输出设备:显示器、播放器、磁盘、网卡等
- 存储器:指的是内存。(注意:磁盘和U盘统称外存)
- 运算器:对输入的数据进行计算(算术运算、逻辑运算)
- 控制器:控制计算硬件流程
运算器和控制器合起来叫做中央处理器,也就是我们常说的CPU
注:以上五个部分其实是独立的个体。
所以各个硬件单元必须用“线”链接起来,这些线就是总线
- 系统总线(
CPU
和内存) IO
总线(内存和外设)
1.2 体系之间是如何工作的
输入设备的的数据不能直接传送到CPU
中
- 首先通过输入设备传给存储器
- 然后由存储器交给
CPU
- 经过运算后,
CPU
再交给存储器 - 最后才能给输出设备
那么为什么是以上顺序呢?
这就要涉及到存储的效率问题
【金字塔存储体系】
这是因为外设和CPU
速度差距太大了。就类似于木桶原理,如果外设直接和CPU
交互,那么计算机整个体系结构的效率就以输入输出的效率为主,效率相当低下;于是就选择既不快,也不快的存储器来当中介。
总之,所有设备都只能直接和内存打交道。
二、操作系统(软件)
2.1 什么是操作系统
概念:操作系统是一款对硬件的管理,也可以是对软件的管理的软件。
2.2 操作系统为什么要管理
以下是操作系统在计算机中所处的层次图:
最底层就是硬件(眼睛能看的到,摸得着),早期计算机是通过硬件电路来控制的,需要用户手动进行硬件控制。随着科技的发展,硬件变得越来越完善,所以就要有一款软件对硬件进行管理,我们称为操作系统。而硬件也随之变得复杂,功能也越来越多,因此在操作系统和硬件之间还有一个设备驱动。而有这些还是不够的,比如一个电脑,买回来仅仅是铁疙瘩,但是安装操作系统后,就可以开机(应用软件)。因此,在操作系统之上,我们还需要各种不同的应用软件,来满足用户的不同应用场景。
因此,操作系统的【核心工作】(为什么会有操作系统):对下管理好软硬件资源的手段,以达到为用户提供良好的(稳定、快速、安全)操作/使用环境
操作系统给我们提供非常良好的服务,并不代表操作系统会相信我们,反而,操作系统不相信任何人
举例理解:就好比银行给我们提供良好的服务,但所有服务都是基于一个小小的柜台窗口,因为银行在为我们提供服务时要确保自身的安全,因此银行的服务是基于窗口进行的
而操作系统也是一样的,为了保证自己数据安全,也为了保证给用户能够提供服务,操作系统以接口的方式给用户提供调用的入口,来获取操作系统内部的数据(对上提供接口),这种调用称为系统调用。
所以说,所有访问操作系统的行为,都只能通过系统调用完成!
2.3 操作系统是怎么管理
为了让大家更好理解,以学校系统为例。
- 在学校系统中,我们学生是典型的被管理者,校长是典型的管理者。
但是我们有天天见到校长吗?实际上并没有。因此,校长(管理者)和学生(被管理者)是不需要见面的。
- 校长和学生不见面,那么校长是如何管理学生的呢?
其实,校长只需要知道你在学校的数据(情况),就能实施某种意义上的管理。因此,管理的本质:通过数据的管理,来达到对人的管理。
- 那么问题来了:校长是如何拿到数据的呢?
这我们都可以想到,通过老师即可。因此,管理和被管理之间还有一个老师。
- 那么老师是管理者吗?
有的人想肯定是,因此自己天天在学校都是被老师管hh。但是,老师并不是管理者。
实际上,我们对一个事情的思考分为两种:
- 决策(做 or 不做)
- 执行(做)
在整个学校系统中,校长是做决策的,而老师才是真正意义上的执行者。
通过以上例子,我们可以得出一下结论:
- 操作系统 — 管理者
- 驱动程序 — 执行者
- 软硬件资源 — 被管理者
- 接下来又有一个问题:由于学校有成千上万个学生,每个年级的老师将学生的数据全部上报,数据量太大的时候,想要管理者(校长)做出一个决策是非常困难的。
在学校,常见的就是老师发出一个表格给学生来收集信息,比如姓名,性别,年龄,电话等。这个过程就是一个描述的过程。当每个老师将这个表整理好以后再给校长
那么校长面对成千上百万张纸,如何进行高效的数据管理呢?
回想我们一路学习的知识,是不是有一门叫做数据结构。
- 比如我们用一个链式结构(也可以是别的数据结构),来存储每一个人的信息,这就是描述的过程
- 接着我们就可以实例化多个对象。再通过多个函数(方法)来进行管理,这个步骤我们称为组织。
这样的话,校长就成功的对学生的管理工作,转换成为了对链表的增删改查。
// 描述
struct student
{
char _college[]; //学院
char _name[]; //姓名
char _class[]; //班级
......
struct student* next;
};
【总结】
- 关于如何管理,答案是:
先描述,后组织
。- 同时,这就注定了在操作系统中,一定存在了大量的数据结构来对数据进行高效的管理。
三、系统调用和库函数
- 系统调用:由于操作系统不相信任何用户,就需要有用户操作接口,供上层开发使用。
- 库函数:库函数将系统调用进行了封装和抽象,使得程序员能够更加方便地使用高级接口来完成各种任务,而不必关心底层系统调用的具体实现。因此,计算机语言都是建立在操作系统上实现的。