目录
🌈前言🌈
📁 冯诺依曼体系结构
📂 拓展问题:程序为什么要被加载到内存?
📂 主机与主机的交互
📁 操作系统的概念
📂 作用
📂 理解“管理”
📂 系统调用 和 库函数的概念
📁 总结
🌈前言🌈
欢迎收看本期【Linux杂货铺】,本期内容将讲解计算机中操作系统的概念。其中包括了操作系统是什么,有什么作用,以及用户是如何使用操作系统的。
本文旨在脱离教材晦涩难懂的理念,从零开始理解操作系统及其周边概念。此外本文是以Linux系统进行讲解。
操作系统是计算机中重要组成部分,是我们学习的重点,也是日后学习进程的必备前置知识。所以如果想要学好进程,必须先了解什么是操作系统,以及计算机中底层结构。
📁 冯诺依曼体系结构
我们以简单的输入输出代码为例,当我们当键盘中输入数据,如何输出到显示器呢?
我们从键盘中输入数据,将数据输入到磁盘中,由磁盘将数据送到内存,CPU与内存进行数据的加工和处理,将结果由内存输出到显示器上。
因此我们知道,数据是要在计算机的体系结构中进行流动,流动过程中,进行数据的加工处理。从一个设备到另一个设备,本质上是一种拷贝。
因此,设备之间的拷贝效率,决定了计算机整机的运行效率。
上图是计算机中存储设备的运行速度示例图。简单理解:寄存器 > 内存 > 硬盘,但价格也是由高到低。
为什么CPU和硬盘之间要有内存呢?因为CPU的运行速度远远高于硬盘的运行速度。所以当CPU处理完数据后,往往还要等待硬盘就绪,这就导致了整机运行效率降低。
如果硬盘内部全部采用寄存器的方式,是会大大提高运行效率,但造价会非常昂贵,考虑到普及等问题,就引入了内存的概念,内存与CPU之间的速度差小于硬盘与CPU。
将硬盘中待处理的数据提前存到内存中,此后,CPU只与内存进行交互,不与外设进行交互,大大提高了整机的运行效率。
冯诺依曼体系结构对我们计算机发展发挥了重要作用,大大提高了计算机的普及。以上我们就对冯诺依曼体系结构有了一些简单的理解。
📂 拓展问题:程序为什么要被加载到内存?
在C语言学习过程中,我们的程序是要被加载到内存中才能执行,这是为什么呢?
这就是因为冯诺依曼体系结构规定了,如果想要被CPU执行必须加载到内存。
程序在没有被执行之前,是一个二进制文件,存放在硬盘中,想要被CPU执行,需要先调入到内存。
在数据层面上:1. CPU不和外设直接交互,CPU只和内存交互;2. 外设的数据,不是直接给CPU,而是要先放入到内存中。
📂 主机与主机的交互
例如,一台山东的电脑,想要将硬盘的数据发往北京的一台电脑,其中硬上的数据经过本机流动到网卡,经过网络,传送到另一台电脑的网卡,再由网卡将数据流动到硬盘。
因此,我们日后就要意识到,两台主机的交互,就是两个冯诺依曼体系结构的交互。
📁 操作系统的概念
我们了解了冯诺依曼体系结构,知道硬盘的数据是要先放到内存的,那么谁去控制硬盘这些底层硬件到内存中呢?就是操作系统。
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。操作系统包括:
● 内核(进程管理,内存管理,文件管理,驱动管理)
● 其他程序(例如函数库,shell程序等)
操作系统的定位就是,进行管理的的关键。
📂 作用
1. 进行软硬件资源管理。
2. 为上层提供良好(稳定,高效,安全)的运行环境。
📂 理解“管理”
管理 = 先描述,在组织。
操作系统使用C语言写出来的,如何去管理底层硬件呢,先描述,在组织。通过结构体struct 将硬件抽象成一个结构体,内部具有相同的属性,不会因为硬件厂商的不同而改变。
即厂商根据操作系统写出硬件的驱动程序,操作系统就会通过驱动程序将硬件信息保存到结构体中,这样就将底层硬件描述起来了。
操作系统在通过链表等一系列数据结构,将结构体组织起来。
这样,操作系统对底层硬件的管理,就变为了对数据结构的增删查改。
通过结构体进行描述,再通过数据结构进行组织,最终演变为对数据结构的增删查改,这就是管理的本质。
📂 系统调用 和 库函数的概念
以上,了解了用户通过操作系统去操作底层硬件,操作系统通过结构体描述硬件,通过数据结构将结构体组织起来,来进行管理。
这里我们必须有一个认知:用户不能越过操作系统,去操作底层硬件。
此外,用户也不能直接操作 操作系统,因为操作系统内部有需要重要信息,不能轻易修改。
而是通过调用系统调用接口,也就是提供一些接口函数,供用户使用,通过函数去操作OS。
但是系统调用接口有部分内容是比较晦涩难以使用,有些人就讲这些接口封装了起来,转为轻松易懂的用户操作接口,供用户使用。
系统调用 和 库函数的区别:
1. 在开发角度,操作系统对外表现为一个整体,但是会暴露自己的部分接口,供上层使用,这部分有操作系统提供的接口,叫做系统调用。
2. 系统调用接口,功能较为基础,对用户的要求相对比较高,所以,有心的开发者对部分系统调用进行适度封装,从而形成了库,有了库,这便更有利于上层用户或者开发者进行二次开发。
- 用户不能越过操作系统,去操作底层硬件。
- 用户也不能直接访问操作系统,而是通过调用系统调用接口/用户操作接口。
- 用户操作接口lib是对系统调用接口的封装,旨在将复杂的系统调用使用起来较为简单。若有能力,可以直接使用系统调用。
- 但要注意,使用系统调用直接写出的代码,不具备跨平台性。因为不同操作系统有不同的统调用接口。而lib做了封装,隐藏了系统调用接口的差异
📁 总结
以上,我们就对计算机的底层结构——冯诺依曼体系结构有了一定理解;了解了什么是操作系统,即进行管理的软件;初识了计算机的层状结构,知道了通过操作系统去操作底层硬件,用户不能直接使用硬件,也不能直接访问操作系统;认知了系统调用接口和库函数,库函数就是对系统调用接口的封装。
如果感觉本期内容对你学习操作系统有作用,欢迎点赞,收藏,关注。Thanks♪(・ω・)ノ