论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
大数据
›
数据仓库与分析
›
Linux系统编程:深入理解盘算机软硬件体系和架构 ...
Linux系统编程:深入理解盘算机软硬件体系和架构
美丽的神话
金牌会员
|
前天 20:45
|
显示全部楼层
|
阅读模式
楼主
主题
821
|
帖子
821
|
积分
2463
一、硬件体系
首先我们要知道,我们最常见的盘算机(笔记本)以及我们不常见的盘算机(服务器)实在本质上都是一堆硬件的结合:cpu、网卡、显卡、内存、磁盘、表现器、键盘……
但他们并不是毫无章法地放在一起,硬件和硬件之间必要有效地组织成一个系统才气更好地发挥功能,我们把这个组织结构叫做冯诺依曼体系结构!
1.1 冯诺依曼体系结构先容
a、输入装备:鼠标、键盘、摄像头、话筒、磁盘(文件读取)、网卡(网络接受)……
b、输出装备:表现器、播放器硬件、磁盘(写入文件)、网卡(网络发送)……
盘算机只能辨认二进制语言,所以人和盘算机打交道,必须要借助输入输出装备,并且我们会发现有的装备是纯的输入或输出,而有的装备既有输入也有输出
c、存储区:内存
运行程序、读取文件、写入文件……等大部门操作都是在内存中举行的!
d、运算器:对我们的数据举行盘算任务(算数运算、逻辑运算)
e、控制器:对我们的盘算机硬件流程举行肯定的控制
运算器和控制器统称为中央处理器(CPU)
冯诺依曼体系结构由以上五个部门组成,但我们要知道每一个硬件都是独立的个体,所以想要建立接洽协同起来,必须借助“线”举行连接!!我们把它叫做总线,总线又分为系统总线和IO总线
系统总线:存储区和运算器、控制器之间的线
IO总线:存储区和输入装备、输出装备之间的线
1.2 冯诺依曼为什么要这么设计?
我们会发现一个问题就是,**输入装备和输出装备并不直接跟中央处理器打交道,他们都只跟存储器打交道,所以存储器(内存)在这个过程中发挥了串联整个线路的作用!**我们接下来就要分析为什么要这么去设计!!
1.2.1 提高工作效率
以下是盘算机存储的金字塔层次结构:
CPU的速度是纳秒级别的,而硬盘是毫秒级别的,所以他们的速度差距太大了!!因此必要内存(微秒级别)在中心做一个和事佬
。
1.2.2 串型酿成并型
实在
CPU和硬盘,很轻易让你想到木桶效应,就是木桶能接多少水取决于他的短板,而同理盘算机运行有多快好像也应该取决于硬盘,但如果真的是这样的话,那我们参加内存的意义在哪呢?不也是会相互拖慢速度吗?
?
实在你会这么想的原因是,
你把这套体系理解为串型了,就是单纯以为中央处理器肯定要比及数据全都加载到存储器的才会去工作,实在在我们将数据从输入装备加载到存储器时,中央处理器可能并没有闲着,而是在处理别的工作!!他们是一个并型逻辑!
!
举个例子:比如说二进制可执行程序实在也是文件,文件是在磁盘上存储的,我们要运行这个程序就一定要将其先读取到内存中,而当外部装备在将数据加载到内存中时,实在cpu可能正在举行其他的运算,当你把数据预先都加载到内存中的时候,cpu恰好开始执行你的代码,所以我们会发现
cpu从存储器中拿数据和外部装备导入到存储器这两个过程是可以同时举行的!
!所以这是并型而不是串型!!大大提高了效率!!这也是内存存在的真正价值!!
1.2.3 有利于盘算机的流传
通过盘算机存储的金字塔结构,我们会发现越往下成本越低、容量越大、速度越慢,这是一个有舍有得的过程,那如果我一点也不差钱,那我是不是可以全部都用寄存器?不要内存也不要磁盘?也不必要遵守冯诺依曼体系?
答案实在是应该可以做到的!!如果你特殊有钱,大概真的可以让别人给你定制一个只靠寄存器的盘算机,但是这个盘算机一定是造价特殊贵的。老百姓是用不起的!!
实在
我们是否会去利用这个盘算机,一方面是考虑是否易操作、性能好,另一方面也要考虑成本!!所以冯诺依曼体系中为什么要有内存,也是由于我们不仅必要中央处理器,但是为了控制成本也不得不有硬盘,所以才必要有一个速度适中、容量也适中的存储器,这样可以在不降低太多性能的条件下降低成本,可以或许让老百姓去利用
!!
通过此时的冯诺依曼体系结构,包罗开源的Linux和git,我们会发现实在
一样东西是否可以或许被快速流传,成本是非常紧张的,价格太高是倒霉于流传的,实在如今市面上大概也会存在很多可以或许造福于百姓的创造,但是可能由于成本太高无法推广给普通老百姓,所以一定也是会沉没在历史的巨轮中。比如我们看过的一个电影叫《我不是药神》,此中抗癌正版药非常贵才会让老百姓不惜犯罪也要去吃盗版药。也是这个原理!
!
1.3 现实应用
冯诺依曼体系中最为关键的就是内存!!我们可以很好地表明以下知识:
1、为什么一个程序要运行必须要先加载到内存中??
——>这是由冯诺依曼体系决定的,程序实在就是一个二进制文件,文件就是存储在磁盘(外部装备)中的,要去中央处理器那里才气运行,所以必须要先加载到内存中!!
2、我们之前写的进度条,如果不换行的话,数据会被存储到缓存中,那么缓存在哪??
——>根据冯诺依曼体系结构,我们可以知道缓存实在就在内存中!!
3、如果我想把实验报告通过qq发送给我的好友,怎样用冯诺依曼体系来分析整个数据流??
二、OS体系
每个硬件都有他对应的功能并且可以或许安装冯诺依曼体系去很好地工作,但是这是远远不敷的,由于什么时候必要去执行什么功能是必要有人去调控的。
举个例子:假设你是一个国家的国王,这个国家里有善于搞经济的,有善于打仗的,有善于会商的,有善于艺术的……当你想要听声乐,你会去叫搞艺术的人过来,当国家宁静时期,你会重点造就搞经济的人,当外敌来犯,如果你想息争,你会叫善于会商的人来,你想打仗,你就会叫善于打仗的人来…………所以这整个逻辑都是必要有人去调控的,在盘算机中也是云云。
所以可能你的电脑中同时运行了qq、qq音乐、cctalk……那我什么时候该运行先哪个,运行qq的时候,凭什么不先运行qq音乐呢??所以我们必要有一个大脑一样的脚色去管理他们——OS
OS是一款可以管理软硬件资源的软件,就像人可以管理人也可以管理机器一样
!!
2.1 OS存在的意义(为什么)
2.1.1 给用户提供良好(稳定、高效、安全)的运行环境
**无论我们上层是什么样的,最终的行为都是在硬件上表现的,软件想要操控硬件,就一定必要一些可以或许与硬件建立接洽的驱动程序。**比如说鼠标,当你刚把数据线接上的时候,从物理上你已经连接到你的电脑上了,但是你可能还必要等候几秒才真的可以去利用,由于驱动程序一开始还没有马上被加载出来——>
驱动程序是我们和硬件打交道的软件
(大部门是系统自带的)
OS是一个资助我们管理软硬件资源的脚色,但这仅仅只是他的手段罢了,他的目标是为了给用户提供一个良好(稳定、高效、安全)的运行环境,但我们要知道实在普通用户是不善于和OS打交道的,所以普通用户利用的都是基于程序员开发出来的软件,所以首先是我们专业的程序员必要去跟OS打交道,然后再搞出满意普通用户需求的各种软件!!
所以背面我们要探究的就是,程序员究竟怎样和OS打交道呢??
2.1.2 OS实在不信托用户
OS内里有各种各样的数据,但是OS并不信托用户!!
首先我们要理解的是,
不相信你和让你利用实在是不矛盾的
,举个例子:银行允许任何用户进来,但是他实在并不相信全部的用户,由于用户当中可能会有暴徒,所以银行为了掩护自己必要封闭起来,但是不能完全封闭,由于这样就无法给老百姓提供服务了,所以他开放了一些小小的窗口,如果你普通用户想要取钱、借贷……只能通过这个小窗口来申请!!
同理,OS也觉得自己的数据太紧张了,他担心暴徒恶意攻击他,也担心小白随意篡改他,无论故意偶然都有可能对他造成伤害,比如说一个磁盘可能有500G,但是有人给他改成了300G;你的网络本该是良好的,但是却被改成断开……所以OS也得像银行一样,把自己封闭起来,但是留一些小小的窗口出来(在盘算机中称为接口)——>所以
OS的设计者用C语言写了一些内部的函数方法开放给外部,我们把它称之为系统调用!
由于这些接口都是由设计者提供的,所以他的内部天然会存在一些方法可以或许检测你的行为是否非法,只有合法的行为才气访问他的数据
**。**
——>因此将来我们想跟OS打交道,只能通过系统调用来完成!!
——>但是系统调用本身利用难度也很大,所以就必要程序员基于系统调用去设计一些上层的软件大概接口去供普通用户利用。
2.1.3OS和盘算机语言的区别
实在语言的本质就是:头文件+库文件+编译器=可执行程序
1、所以
语言现实上是基于系统调用接口之上存在的!
!但是语言之间也是有区别的,比如说java、python、虚拟机等底层是用C或C++写的,所以哪怕是我们常说C/C++是偏底层的语言,但他现实上也只是在系统调用之上而已。所以我们可以有一个很好的边界认识。
2、任何语言访问硬件都必要颠末操作系统,所以我们会发现,**语言可能会变,但是操作系统是不会变的,由于下层如果改变的,整个上层的逻辑都会崩盘,再牛逼的软件也必须遵守这套体系。**我们常说的盘算机发展很快实在都指的是上层,下层的变化是不大的。
2.2 OS的管理方法(怎么做)
2.2.1 怎样管理
为了可以或许更好地去理解管理,我们举个生活中的例子:
问题1:在学校里,校长是我们公认的管理者,我们门生是公认的被管理者,可是我们大多数人却没有见过校长,但是校长仍旧可以把我们全部人都管理得很好,这是为啥???
所以首先我们可以得到一个观点1:
管理者和被管理者之间是不必要见面的
!!
问题2:那么管理者在不见被管理者的环境,是怎样做好管理的呢??
比如说学校必要选出几个人去参加数学比赛,我只必要知道哪几个门生的数学水平比较高就可以了,如果学校想给前10名奖学金,只必要给成绩排个序取前10名就可以了。比如我作为一个老板,我知道一个员工一年拿下了特殊多的项目为公司创造了特殊多的利润,业绩排名第一,我在不见到他的环境下通过他的表现就可以做出给他升职加薪的决策,所以我们会发现,
对于管理者来说,只要知道管理信息,就可以在将来举行管理决策。所以管理的本质是通过对数据的管理,到达对人的管理
!即使是在小公司我们和管理者可以或许见面,管理者关注的也无非就是管理信息。
问题3:那管理者究竟是怎样拿到数据的呢??
如果是在学校,大家可能会想到辅导员(充当执行者),
在管理者和被管理者实在还混合着执行者,由于一件事变除了决策还必要有人去执行
!比如说校长想知道哪些人可以或许有资格去参加程序设计比赛,然后他就可以喊辅导员过来,辅导员(执行者)和门生(被管理者)走的比较近相对比较相识,大概就可以通过辅导员拿到对应的信息。这确实是有肯定原理,但是如果规模比较大的话,比如大学内里,一个辅导员部下就有几百号人,一个校长部下就有几千甚至上万人……他们同时面对这么多数据,肯定忙不外来啊!!所以通过人去拿数据,不是不行,但是本领比较有限。所以我们换个角度思考,我们不就是想要知道一些基本信息吗,而门生固然各有特点,但都是相同的属性。比如说张三和李四的学院、专业、电话、年事、籍贯、身高、体重、各科成绩、兴趣爱好…………直接把这些我们想要知道的信息管理起来,不就可以解决这个问题了吗。你第一时间可能会想到用个excel表格,这是大部门人能想到的,但是比方说人数特殊多,然后你想在对应的信息里找到比方说前5个数学最好的门生,那你可能得花费很多时间用眼睛去扫描数据,也挺累的实在,
实在我们作为程序员,另有更好的办法,就是用结构体管理起来
。
我们每入学一个门生,就可以新建一个门生范例,而每结业一个门生,就可以删除一个门生范例,
但是门生不只有一个啊!!所以我们必要把它管理起来,而对数据举行管理,固然就是数据结构啦!
!那我们就可以在每一个门生结构体内里加一个next指针,这样就可以把全部门生的信息都串起来酿成一个链表了!!
所以我们就把对门生的管理转酿成了对链表的管理!
!!
变化为链表的管理和相比用excel有什么好处呢??——>
对链表的管理本质上就是对链表的增编削查,所以我们可以根据链表的特点去写很多我们必要的一些接口
。比方说我想找到数学成绩最好的10个门生,那么直接写一个相干的接口,而后每次我们只要调用这个接口就可以完成这件事,就不必要在excel内里一个一个去看了!!
综上我们举行一下总结:
1、管理者和被管理者是不必要见面的
2、管理者只必要得到管理信息,就可以做出管理决策,所以管理的本质是通过对数据的管理从而实现对人的管理
3、管理者一方面可以通过执行者去拿到数据,另一方面可以通过将被管理者的一些信息用结构体描述出来,然后再用数据结构组织在一起,然后再通过该数据结构的特点实现相干需求的算法来拿到数据。
在盘算机体系结构里,我们的OS就相称于管理者,我们的软硬件资源就相称于被管理者,而我们的驱动程序就相称于是执行者。
2.2.2 理解先描述再组织
在理解怎样管理之后,我们发现了管理者通过描述出被管理者的结构体,然后再通过数据结构组织起来,然后再实现一些相干的算法去实现管理。所以就引申出了一个概念——
先描述再组织
思考一下我们从前写的通讯录应该是怎么写呢??
首先我们的通讯录内里要有人,肯定要先把人给描述出来,比如说闻名字、电话、年事……然后我们再用通讯录把这些人的对象管理起来,然后基于这个通讯录去实现一些接口:比如删除接洽人、增加接洽人、查找接洽人…… 所以我们可以得到一个结论就是:实在
将来我们无论开发任何软件,实在都是按照先描述再组织的形式去思考!
!
再思考一下我们学习C++的准确次序,首先我们先是学的类与对象,这是描述,而后我们学了内存、STL,实在就是在学习怎么举行组织………所以我们
学习语言的次序也是按照先描述再组织的思路去学的!
!
另外再OS中,我们还可以知道:
在OS中管理任何的对象最终都可以转化为对某种数据结构的增删查改!
!
2.2.3 理解库文件vs系统调用
先举个例子,如果有A和B两个校长,A校长有一个门生数学特殊锋利,但是B校长没有,于是B校长就想跟A校长商量借这个同学来打比赛,但是B校长肯定不能直接去找这个门生,由于这个门生是A校长的人,他得负责,所以他必须要通过A校长的同意才行。
同理我们通过printf把“hello”打在屏幕上,实在并不是我们直接通过调用这个库函数就和硬件打交道了,而是必须要自上而下贯穿下去,也就是要通过系统调用接口然后让OS知道!!!
所以我们知道了
库函数必须通过系统调用接口才气找到OS,所以库函数和系统调用是上下层的关系,库函数是基于系统调用之上的二级开发
!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
美丽的神话
金牌会员
这个人很懒什么都没写!
楼主热帖
Python 实现贪心算法
Python自动操作 GUI 神器——PyAutoGUI ...
Spark快速上手(3)Spark核心编程-RDD转 ...
哈工大软件构造Lab3(2022)
什么是超融合数据中心网络? ...
java中Files.mismatch方法具有什么功能 ...
C# net core 微信公众号导出历史文章 ...
微服务介绍
基于SqlSugar的开发框架循序渐进介绍( ...
Excelize 2.7.0 发布, 2023 年首个更新 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表