【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录

前言

操作系统与驱动程序

是什么,为什么

怎么做

[system call](#system call)

用户操作接口

总结


前言

日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上,在网络中传消息或文件最终作用到网卡上。指令是如何作用到底层硬件的相信很多人都没有了解过,本文将系统地解释指令作用到硬件上的流程。

根据上面的架构图,你也许可以大致认识到指令到底层的步骤。下面将一一介绍各个部分的功能和作用,先从操作系统开始吧!!!

操作系统与驱动程序

关于操作系统,相信很多人都接触过毕竟我们使用的电子设备都需要搭载操作系统,比如最常见windows操作系统,安卓手机的Linux操作系统,苹果的MacOS操作系统......

但是**操作系统究竟是什么,为什么要有操作系统,其功能又是如何实现的?**这三个问题相信很多人都不知道或者说不理解。以下将围绕着操作系统的灵魂三问进行展开,帮助你对操作系统的理解更深入,更透彻。

是什么,为什么

操作系统是一款软件,是一款管理软硬件的软件

搭载操作系统的原因是因为:计算机中各个外设都是独立的,没有任何联系,正是因为这一原因我们可以自己组装电脑,只有选择CPU,显卡,硬盘...... 因为外设之间是独立的,如果不进行管理 计算机内部就"乱成一锅粥了",操作系统就是担起了这一责任:管理软硬件。

怎么做

操作系统是如何管理软硬件的???

先说结论:先描述,再管理;

对应一切人或事物管理的前提是先对事物进行描述,不论是计算机世界还是现实世界都是如此。

操作系统在进行软硬件管理之前需要先对每一个软硬件进行描述 ,将软硬件的属性存储起来再进行管理;Linux操作系统底层使用C语言实现的,所以描述软硬件属性自然就通过结构体进行实现的,操作系统内部为每一种类型的结构体创建对象来实现对不同外设的描述,将这一个个的结构体对象存储到容器中进行管理,因此操作系统只需要对容器进行增删查改,而不必与外设交互即可实现对外设的管理。 在Linux中该容器就是双链表。

上面我们提到操作系统只管理存放软硬件的结构体对象的数据结构,那么操作系统是如何拿到软硬件资源信息的??? 操作系统对数据结构的增删查改必定要作用的软硬件上,他又不与软硬件交互,怎么实现数据的增删查改???

此时就需要驱动程序帮助操作系统来完成,驱动程序将软硬件的属性交给操作系统,当操作系统要对软硬件进行增删查改时就由驱动程序来完成。


system call

操作系统本身使用起来成本很高, 一般人是使用不了的**,并且操作系统是不信任用户的** ,因为操作系统担心用户会进行一些非法的操作,所以操作系统会"封闭"起来,但用户又需要使用操作系统,所以在设计操作系统的时候就对外开放一些接口,用户只能通过特定的接口使用操作系统。这就好比银行,银行是不相信人的,所以在柜台前设有防弹玻璃,但是它又要为人民服务,所以银行就开放了一系列的小窗口为人民进行服务。

这些接口被称为system call系统调用接口。

用户操作接口

系统调用接口在使用上,功能简单,对用户的要求高,所以一些程序员又对系统调用接口进行进一步的封装形成库,有利于更上层的用户进行二次开发,更加方便。对系统调用接口进行进一步的封装就变成了我们日常开发中使用的用户操作接口。


总结

以上就是用户与底层进行交互的所有逻辑,用户在计算机上发送指令,调用操作系统接口向操作系统发送请求,操作系统做出反应通过驱动程序对软硬件资源进行修改。

相关推荐
蝎子莱莱爱打怪5 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
梯度不陡7 小时前
AI 到底能不能从零写软件?ProgramBench 和 RepoZero 给出了两种答案
前端·javascript·面试
胡萝卜术8 小时前
滑动窗口最大值:从暴力到单调队列,层层优化全解析
前端·javascript·面试
沉默王二11 小时前
面试结束后,我反问:“就面个实习至于上这么大强度吗?”面试官:“你对 RAG、Agent、MCP、Skill 理解得很到位,所以要求高一点。”
面试·agent·ai编程
zzzzzz31013 小时前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
假如让我当三天老蒯13 小时前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
XIAOHEZIcode13 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
假如让我当三天老蒯2 天前
前端跨域解决方案(学习用)
前端·javascript·面试
Colin草率地做慢慢地改2 天前
关于QuickStore这个项目的重构(2)- 数据库建表文件
后端·面试·架构