当前位置: 首页 > news >正文

花钱买不到系列之—linux系统调用

        关于系统调用是什么,为什么用系统调用?

        也是通过生活的例子来说明白。

        我们生活中有一种东西叫银行,银行是不是有存钱的仓库对不对?好银行有存钱的仓库,银行有桌椅板凳啊,银行还有电脑,设备啊,银行还有各种纸张啊,那么纸张还有那么还有其他的资源啊。

对我们来讲呢?那么,在银行里面管理仓库呢?有谁呢啊?安保?那么桌椅板凳?那么有谁呢?比如说有后勤的人专门负责。电脑设备呢?那么有专门的it组,来帮我们进行我们对应的电脑的管理啊。然后呢,包括你的电脑操作系统要更新了啊,电脑中毒了,那么还有其他的呢,我们还有其他人啊,包括门口呢,那么嗯,就是。门口那一片地的干洁程度,也由保洁大妈去管。食堂里也有其他的人啊,不管怎么样,对银行里面你来讲呢,这叫做它的硬件资源啊。

        那么大家可以知道银行内呢?虽然有很多人,但是人也因为职位的不同,有很多很多的不同的角色,我们举几个最简单的例子,在银行里面呢?那么有一种人呢?具有业务能力的人啊,那么具有业务能力的人就说白了就给我们。你可以理解成叫做提供窗口服务的这些人,比如说我们的部门经理啊,还有叫做银行行长啊,那么按照我们刚刚的说法呢。

        这个行长他对象管理硬件的时候呢,大家都可以知道一个银行行长,他要把自己的桌椅板凳这些,还有仓库电脑设备各种东西,他都要操心的。那么,其中大家可以理解一个非常关键的一个角色,就是行长,就是管理者角色,而保安保了,考勤了at组了,这就是驱动啊。所以银行行长呢,在自己的心里面有一个小本本,比如仓库,那么现在有多少钱啊,那么分别属于哪些人呢?把这都记好了,注意板凳有多少个,电脑设备有多少个装的什么操作系统啊?用了多少年了啊?纸张有多少张啊?我们上次采购什么时间?反正银行行长呢,他有自己的数据。所对于硬件的管理呢,银行行长也叫做先描述再组织,他也可以把最底下的这些所有的设备呢,那么硬件设备呢,全部按照我们特定数据结构的方式先描述再组织管理起来。

         银行行长除了管理这些硬件,还会不会管理人。

        那么他呢?有比如他手底下有20号人,那么他可以把这20号人抽象成一个struct,我们叫做那么我们的业务人员,然后里面呢放的就是业务人员的姓名。业务人员的那么工龄业务人员的电话,业务人员的所属业务,业务人员现在的工资是多少?年终奖金期望是多少?目前,它的那么各项工作指标是什么?那么所以我把所有的我管理的这20个人,每一个人一个节点用链表一管,管理好之后,最后我要找业务能力最强的人,那么最后就变成了。遍历链表就可以了,

 

 所以逻辑是一样的,现实和计算机对比。

       操作系统要对硬件做管理,它有各种驱动程序,对应的就是有各个不同的,那么职能的人帮我们去管理一些硬件底层硬件,对应的就是这些东西。然后呢?操作系统呢?它对象要对硬件做管理的同时,它对于内部的这些软件内容呢?也要做管理,举个例子,银行行长要不要管理这个安保?这安保不行了,天天给我丢钱啊,动不动多一点啊,动不动少一点好吧,那这个安保人换了,这叫做管理吗?是的,他也要做管理,所以就好比操作系统对驱动软件也要做管理。同样的银行行长觉得,这个业务,这个人业务能力不行怎么办?换一个人啊,或者让他去把他拉过去培养一下,让他提升一下专业技能。这也算管理,那么其中对我们来讲呢?那么这个时候我们就相当于操作系统也管理了软件。换句话说,我们不光光可以管理硬件,也能管理软件。

        反正就是它要对软硬件资源做各种管理。管理的思路就是先描述再组织,说白了就是操作系统内对被管理对象要先抽象成对应的数据结构,然后呢,它里面管的硬件太多了,它可以把所有的硬件结构体。那么,对应定的节点信息填上之后,然后把它构建成链表,最后变成了对于硬件的管理,变成了对链表的增加查改。

        如果不知道什么先描述后组织,可以看一下,下面这篇。

花钱也买不到系列—linux 操作系统是如何管理-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_49529507/article/details/141176387?spm=1001.2014.3001.5502        对人的管理也一样。先描述再组织这个人,现在他的各种属性填到一个结构体里面,然后每一个人对一个节点,所有的节点里。保存的是不同人的数据,但是把所有的节点用列表管理起来,我要找业务能力最强的,那么我要对业务能我们整个银行内部的所有人的业务能力做排序。我可以嗯,就是。我可以,就是本质就是根据业务能力对链表节点做排序,我要找到业务能力最差的人对他做删除,所以我就相当于把这个人。那么,便利列表找到我们业务能力最差的那个节点,然后他的电话联系方式什么都有,让我们对应的部门经理跑过去执行就行了,你去帮我把这个人开掉吧。

        这也就是为什么我们自己平时写代码的时候总是动不动上来直接先干一个类。啊,然后呢?那么必要的时候再把对应的类呢?那么放到某种容器或者自己实现放入到各种链表结构里,每一种结构,就配对一种算法。

        你说银行呢?它为什么不让我进入它的仓库啊?然后呢?那么用它的电脑甚至呢?啊花他的纸,然后坐他的凳子上啊,甚至呢,把他的人叫过来骂一顿,或者是,这个部门经理我来把你批一顿,我作为客户,你怎么给我的服务这么不好?

        我们去银行里的时候呢?我们会看到有厚厚的玻璃。有一道玻璃墙,然后上面开个小洞,你要办业务对不对?那你要办业务可以啊,那你先去排队。叫号叫到你的时候,你拿个小凳子坐在坐在那个银行的那个柜台口,然后人家叫你把你资料递进去,然后人家把对应的你把你的资料递进去,然后比如你要取钱。然后呢?那么柜台人员呢?他就会把你要取多少钱从窗口再给你扔出来。

        那么银行为什么要搞那种特别特别厚的玻璃,然后呢,把我拦到窗口。我是个好人。我不是犯罪分子。你为什么搞这么大的玻璃,然后然后怎么怎么样,然后让我在外面排队,然后你自己给我开个小口?

        因为银行。不是不相信你银行。严格意义上来讲,银行系统不相信任何人。

        你是个好人,但是我甄别你这个人是好人,成本儿太高了,你来取个十块钱,我要花100块钱去调查你。万一个人里面群众里面有坏人,怎么办呢啊?

        所以呢,我银行不是不相信你,我银行是不相信任何人。万一我把银行不要所谓的玻璃柜台,所有的银行的所有的东西全部暴露在外面。那么钱放桌子上,银行的工作人员的电脑,各种设备线随便拉,然后呢,那么仓库什么也不要。最后,万一你是个好人,你把你钱存了,你刚前脚一走,后面有一些不好的人过来,他直接那么非法的强制的去在银行内部做破坏,银行能做什么呢?当然是不好意思,他什么都做不了。

        所以呢,银行不相信任何人。所以,银行要将自己保护起来好不相信任何人,而且自己那么非常容易。受到伤害。

        那么我的问题就是你把你保护起来就完了嘛,那你把门关了不就完了?你为什么就是搞个玻璃门儿呢?你把你的那竖成一道墙啊,然后呢?那么你把门一关,把墙什么的铜墙铁壁都给我们安排上。然后把什么玻璃呢?你也不要搞玻璃了,你就直接拿那种大闸门,直接一拉好了,那就一了百了,这谁也伤害不了你。

        可是啊,银行存在的意义。那么是干什么呢?叫做为人民服务,对不对?那么为人民服务,为人民提供,那么叫做存取的需求。提供应该叫做存取,存取啊,包括贷款等

        所以银行现在就面临一个非常尴尬的局面,既要保护自己也要对外通过服务。

        

没关系啊,我们中国人的智慧是非常非常的厉害的。所以呢,我们就有了,现在你看到的玻璃窗。

 这种情况解决了保护自己,又解决了自己要对外通过服务

 所以操作系统也要保护自己,也不相信任何人

 我的操作系统,我把我的什么进程管理文件管理内存管理,包括这种各种驱动程序,包括底层的硬件呢,全部让你随便访问。数据给你提供好啊,让你呢,随随便便访问,那万一你去修改呢,万一你删除呢,那么我操作系统是不是就完了?

        所以操作系统也不相信任何人或者任何程序,可是那有人说那你不相信就不相信吧,那你别让我用了,或者你干脆把这些所有东西一个都不暴露。啊,一个都不暴露,那么请问大家,你怎么知道操作系统,就是你的磁盘现在怎么样了?网卡现在怎么样了?键盘怎么样?显示器怎么样了?你想想显示器打个消息,我现在不能对你提供任何服务。行不行啊?答案是不行。

        操作系统也不相信任何人,但是又必须给叫做上层提供各种各种,我们叫做服务啊,所以操作系统怎么办呢?操作系统很难受啊,不相信任何人,我也要保护我自己,不受伤害,要我直接把自己封闭起来,我又要对我提供最上层提供服务,那么此时呢我呢?就是又要我开放,那怎么办呢?

        所以我们不能让任意用户对操作系统内做任意修改,那么操作系统就也做了一件事情。它呢,自己将自己的访问软硬件信息,包括进程,文件,内存,驱动,包括各种硬件设备的,你要你要读取到上面的信息,或者甚至修改它上面的信息。不好意思,你自己作为用户,不能直接修改。

        就好比在银行里面,你想把钱存进去,你给银行说,我去你仓库,我直接把钱放进去。不行,你只能把你的钱交给柜台,柜台帮你去做同样的操作系统,说不要你自己去把数据写磁盘,写网卡,写显卡你。你这样做风险太大了,那么我呢?给你提供一个叫做我们对应的操作系统接口啊,那么给你提供一些接口,你想访问那么其中我这里有很多接口。你想访问什么?你把你的数据交给我,我帮你做,

        此时呢,操作系统既把自己保护起来了,又没有对外报,那么叫做又对外能够向上提供各种服务,同学们,我们把。这种操作系统的接口,我们简称为叫做系统调用。

们先暂且不谈所谓的系统调用,那么其中啊,我在柜银行柜台里把我的身份证银行卡。交到我们的银行内部的工作人员。这叫做传参的过程。 银行的工作人员呢,经过自己呢业务操作,然后呢,帮我把我的钱取出来,把钱给我。这叫做返回值的过程。

        也就是说呢,你要什么你提前把准备资把资料准备好,到银行里面,你把你的需求一说资料给我,我给你办,办完就把结果给你。这就是传参和返回值同样的。

        那么当我今天想向显示器打印的时候呢?那么我把我要打印的字符串儿交给接口。接口呢,帮我去打印,打印完之后把结果告诉我,告诉我打印成功了,同学们,我们把这样的接口就叫做系统调用接口。

linux 操作系统是用C语言写的。linux的操作系统既然是用C语言写的这个系统调用接口,那么是操作系统提供的。那么这个接口那么我告诉大家,本质上就是c的接口。

        所以这里所谓的c式的接口,那什么叫做接口呢?那么,再直白一点点,说白了就是那么我们操作系统通过C语言给我们提供的函数调用。

        以后我们想在银行里办事情,你能不能走个后门,直接从这里过去,在里面做事情呢?答案是绝对不能,任何人都不能,那么你只能通过柜台来做操作,同样的,那么以后对操作系统的任何访问只能通过系统接口的方式做访问。既给你提供服务,又将你的那么叫做访问过程,处于监管的状态之下,不让你通过其他方式进入,那么这样就既让操作系统。那么,那么对外提供服务,又把操作系统保护了起来,因为操作系统和银行系统一样,它都是不相信任何人和任何用户的。

        所以呢,我们对应的所有的软硬件未来都必须通过系统接口来访问。

        在说一点,不知道大家有没有感觉到,只要是和政府打交道的,在政府外围肯定又一批人,也叫黄牛,比如一个大妈一个字都不认,又想去银行办理一下业务,随着银行办理的业务也来越多。所以这时候银行就有一个人,叫大堂经理。

        大妈来到银行,什么都不懂,所以这个时候,就需要一个人为他做解析,或者是填表,但大妈不会填,不认识字儿怎么办?我之前来的时候,现在也搞不定,怎么办呢?大堂经理说大妈呀,你不要着急。这样啊,我这里有有表你,你一填填完之后你给我啊,你给我之后呢,然后我去帮你去办。我把资料给人,给完之后,然后人把资料给我的时候,我再给你。

        就相当于是那么因为以前是接口式服务,用起来特别不方便。啊,那么成本太高,所以呢,那么我们有大堂经理的存在来提高客户体验,增加客户效率。同样的黄牛票,各种黄牛的存在,那么也都是起了这样的一个作用,它就是让我们办事呢,什么准备,什么资料提前给你说好,要填什么给你提前弄好。弄好之后直接去银行给你一半。 

        那么我们直接使用这些接口,那么太麻烦了,因为系统调用接口,它必须得了解操作系统。那么,不了解操作系统有很多选项,其实是看不懂的,那么可是让我们用户直接用这个系统接口,那也太麻烦了吧?所以在系统的往上,它还有各种各样不同的软件层啊,那么有一种软件呢,它呢叫做shell。

        关于shell,可以参考这篇我这篇博客。

shell命令行解释器—既陌生又熟悉的东西-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_49529507/article/details/141202942?spm=1001.2014.3001.5502那么还有一类呢,叫做库啊,那么比如说我们各种的lib。我虽然没怎么学过库,但是c和我们对应的叫做C++的库啊那么我总是学过的,所以呢,我们其实可以直接调和C和C++的库。就可以完成功某种功能,所以这里呢,一个是满足用户的一个指令需求。好这个呢,是完成我们对应一个是指令操作,一个是什么呢啊?一个是指令操作,一个是我们的编程操作啊。好,甚至还有一类呢,那么也跟shell其实等价的那么叫做什么呢?叫做界面啊。

        

比如你要调用printf,向显示器显示东西,显示器是硬件,在运行的时候是不是,根据冯诺依曼依曼把数据从我们对应的外置,从内存打到硬件上?你调到printf,你以为你直接打到硬件上了,其实并不是你直接里面直接调的,是系统调用,然后操作系统帮你打的。你把数据交给了操作系统而已。

        可是对我们来讲,我们以前怎么没感受到呢?是因为这个库人家写的很好了,你只要调一下函数。就能够把对应的代码写到硬件上,把数据写到硬件上,可是一个成本非常高的事情。可是我们在学C语言时,第一份代码干的就是hello world,你直接有手就行,写出来hello world就打到硬件上了。这不是那么c标准库写的有多好。

        再来理解这张图片就可以很好理解了。

        我们心里就非常清楚了,最底层的我们叫做硬件。冯诺依曼形式组织的驱动程序帮我们去控制各种硬件。操作系统经过先描述再组织,对硬件资源做管理,他把下面资源管理好,目的是给上面提供更好的服务。 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 嵌入式学习Day29---Linux软件编程---网络编程
  • 力扣--最长公共前缀
  • C++ 对象构造语义学——局部对象、全局对象的构造和析构
  • MINIO图片地址浏览器打开不显示
  • python中的列表、元组、字典之间的区别
  • 刑法学学习笔记(个人向) Part.1
  • haproxy 7000字配图超详细教程 从小白到入门
  • docker知识点
  • https://ffmpeg.org/
  • 专业技能(挖坑填坑)——MYSQL的索引、日志、事务、存储引擎、锁机制等相关原理
  • JVM垃圾回收算法有哪些
  • javaer快速入门 goweb框架 gin
  • 机械行业数字化生产供应链产品解决方案(十六)
  • 深度学习------------------卷积神经网络(LeNet)
  • 学习记录第二十八天
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Bootstrap JS插件Alert源码分析
  • DataBase in Android
  • extract-text-webpack-plugin用法
  • JAVA之继承和多态
  • REST架构的思考
  • select2 取值 遍历 设置默认值
  • Vue小说阅读器(仿追书神器)
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 反思总结然后整装待发
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 判断客户端类型,Android,iOS,PC
  • 如何进阶一名有竞争力的程序员?
  • 提醒我喝水chrome插件开发指南
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 自动记录MySQL慢查询快照脚本
  • ionic入门之数据绑定显示-1
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​linux启动进程的方式
  • ​如何使用QGIS制作三维建筑
  • ​香农与信息论三大定律
  • #if 1...#endif
  • #Linux(Source Insight安装及工程建立)
  • #图像处理
  • ${ }的特别功能
  • (09)Hive——CTE 公共表达式
  • (1)常见O(n^2)排序算法解析
  • (11)MSP430F5529 定时器B
  • (3)STL算法之搜索
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Note)C++中的继承方式
  • (苍穹外卖)day03菜品管理
  • (分布式缓存)Redis持久化
  • (分享)自己整理的一些简单awk实用语句
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (四)JPA - JQPL 实现增删改查
  • (一)认识微服务