0


【Linux杂货铺】操作系统


🌈前言🌈

    欢迎收看本期【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. 系统调用接口,功能较为基础,对用户的要求相对比较高,所以,有心的开发者对部分系统调用进行适度封装,从而形成了库,有了库,这便更有利于上层用户或者开发者进行二次开发。
  1. 用户不能越过操作系统,去操作底层硬件。
  2. 用户也不能直接访问操作系统,而是通过调用系统调用接口/用户操作接口。
  3. 用户操作接口lib是对系统调用接口的封装,旨在将复杂的系统调用使用起来较为简单。若有能力,可以直接使用系统调用。
  4. ** 但要注意,使用系统调用直接写出的代码,不具备跨平台性。因为不同操作系统有不同的统调用接口。而lib做了封装,隐藏了系统调用接口的差异**

📁 总结

    以上,我们就对计算机的底层结构——**冯诺依曼体系结构**有了一定理解;了解了什么是操**作系统,即进行管理的软件**;初识了计算机的层状结构,知道了**通过操作系统去操作底层硬件**,**用户不能直接使用硬件,也不能直接访问操作系统**;认知了**系统调用接口和库函数**,库函数就是对系统调用接口的封装。

    如果感觉本期内容对你学习操作系统有作用,欢迎点赞,收藏,关注。Thanks♪(・ω・)ノ

标签: c++ 学习 笔记

本文转载自: https://blog.csdn.net/jupangMZ/article/details/136636575
版权归原作者 秋刀鱼的滋味@ 所有, 如有侵权,请联系我们删除。

“【Linux杂货铺】操作系统”的评论:

还没有评论