Linux:计算机的层状结构
1.冯诺依曼体系结构
我们常见的计算机,如笔记本、台式机。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系结构。
CPU:运算器和控制器组成。运算器主要工作是做算术运算和逻辑运算。控制器主要工作是协调设备之间信息流动的。
输入设备:键盘、鼠标、网卡等。
输出设备:显示器、网卡、打印机等。
存储器:存储器指的是内存,它的特点是掉电易失。
SSD固态硬盘或磁盘在冯诺依曼体系结构中它们不是存储器,它们是输入或者是输出设备。
设备是用总线连接的,被集成在了主板上。将设备连接起来的目的是为了数据流动(本质就是设备之间数据的来回拷贝,拷贝的整体速度是决定了计算机的效率指标)。
输入设备和输出设备它们的效率是比较慢的,cpu的速度又非常的快,如果中间没有了存储器这样的设备,那么计算机的整体速度就取决于输入或输出设备,为了解决这种问题,于是在硬件上加入了存储器。
存储器比输入或输出设备要快,比CPU慢,输入设备就将数据放到存储器中,CPU在存储器中去读取执行,将结果放入到存储器,存储器在转交给输出设备,这样一来计算器的整体速度就变为了以存储器为主。
当CPU在忙的时候,输入设备将数据放入到存储器中(这个工作是预先加载),当CPU不忙的时候直接到存储器中读取数据,将处理好的结果放入到存储器中(这个工作是缓存),输出设备直接在存储器中去读取,这样一来计算机的效率就变得很高。
2.操作系统是如何管理底层硬件的?
第一个被加载的软件是操作系统。操作系统是一个软件,它的工作是对软件资源和硬件资源进行管理。
计算机的层状结构图:
计算机的软硬件结构是层状的。最底层是硬件,硬件有网卡,硬盘,键盘,显示器,CPU等等,这些硬件底层构成并不是随便放的,都是以冯诺依曼体系结构来进行组织的。
操作系统和底层硬件之间还有一个驱动程序,驱动程序是一个软件,专门去控制对应的软件,例如网卡驱动控制的是网卡,网卡的读,写,状态,开和关等相关操作接口,都在网卡驱动里,操作系统直接去调用网卡驱动就能控制底层硬件的网卡(几乎每一种底层硬件都有自己的驱动程序)。
在计算机的层状结构图中我们先从往下去研究,来学习操作系统是如何管理底层硬件的。
操作系统类似于现实生活中的领导,领导的主要工作是管理自己底下的员工,而管理的核心就是去做出正确的决策。底层硬件类似于现实生活中的普通员工,它们的主要工作是做执行,执行领导安排的任务。驱动程序类似于现实生活中的组长,它们的主要工作是保证管理决策落地,催促小组成员完成任务(操作系统做决策,底层硬件去执行,驱动程序保证决策落地)。
下面就以校园生活为例:
校长---------操作系统
辅导员----------驱动程序
学生-----------底层硬件
在学校中,校长是管理者,学生是被管理者,大多数的学生连校长的面都没有见过,但是各方面都被安排的明明白白的,例如:该在什么教室上什么课,住在哪一间寝室,是否可以拿到奖学金和助学金等等。所以管理者和被管理者根本不需要见面,管理的本质不在于对人做管理,而在于对人的信息(数据)做管理,例如:校长拿到一个学生的信息(数据),该学生各科成绩优秀,且是学生会的主席,对学校有重大贡献,校长就可以做出决策,让该学生拿到助学金。管理者核心是做决策,根据数据来做决策。
管理者和被管理者面都没有见过是如何拿到信息(数据)的呢,校长和学生没有见过面,但是校长却能知道学生的信息(数据),原因是因为辅导员,辅导员将学生的信息(数据)上交到了校长那里,同时辅导员还要保证管理决策落地,如果校长想组织一场运动会,不需要挨个去通知学生,只需要告诉辅导员,辅导员就会去通知学生。
管理者在面对大量的被管理者的时候,数据量是必然非常大的,因为对人的管理需要转化成对数据的管理,数据量非常大的时候(学生非常的多),校长该如何去管理???
假设校长在没有升职前是一个C语言的老师,他是一个懂编程的校长,在面对大量学生的信息(数据)时就想到了数据结构的链表,根据学生的信息(数据)去创建一个节点,例如:
将根据学生的信息(数据)所创建的节点以链表的形式链接起来,每新来一个学生就新增一个节点,将被开除的学生或者是毕业的学生就释放掉对应的节点,还可以以身高、成绩为键值进行排序来找出身高最高的学生或成绩最好的学生进行做出决策,这样一来对学生的管理就变成了对链表的增删查改。对管理的一个计算机的建模的过程可以简化为六个字:先描述,在组织。我们在C语言上描述一个事物只能用结构体来描述,先描述就是用结构体去描述对应的事物,比如校长用结构体去描述一个学生的基本信息,然后在使用链表将用结构体来描述的事物进行组织起来,这样一来校长对学生的管理就变为了对数据结构中链表的增删查改。
底层硬件虽然有很多,不同,但是硬件都有它的名称,状态,操作方法,对应的属性。操作系统对底层硬件的管理也是先描述,在组织,先将底层硬件使用结构体抽象的描述出来,例如:
再将用结构体抽象描述起来硬件使用链表的形式组织起来。从此往后,操作系统对底层硬件的管理就变为了对数据结构链表的增删查改,例如:操作系统想找一个网卡,就可以根据网卡的名称来遍历一遍链表,然后再根据它的驱动做出管理,如:发送数据,关闭网卡。如果一个设备突然坏掉了,操作系统在链表中将这个坏掉的设备节点释放掉。
操作系统不仅要管理底层硬件同时也需要将驱动程序给管理起来,管理的方法也是先描述,再组织。使用结构体将驱动程序描述出来,里面的属性有:驱动的名称,驱动的类别,驱动的方法,驱动的状态,驱动的版本等等....,然后再给每一个驱动程序创建一个结构体对象,再使用数据结构组织起来,如链表。之后操作系统对驱动程序的管理就变为了对链表的增删查改。
总结:
操作系统的管理工作:先描述,再组织。
3.系统调用接口
计算机的层状结构图:
在前面说过,操作系统是一个软件,它的主要工作是管理好软硬件资源,对上层应用软件提供良好的运行环境。判断一款操作系统好不好主要是看这三点:稳定(软硬件资源管理的非常好,不会经常出现蓝屏死机现象)、高效(软硬件资源管理的代码算法部分写的非常良好)、安全(用户的数据不会泄露出去)。
为什么要有系统调用接口???举个例子:在现实生活的银行,如果我们要去银行中存钱或取钱,银行肯定不会让我们跑到仓库里自己去放钱或取钱,万一有人要存5000,实际上只在仓库里放了一块钱,还顺带在仓库里拿了一部分钱,所以银行会担心群众中有坏人,它不会将自己全面暴露出来,但是为了给我们提供服务,银行就设置了柜台(人工服务),ATM机,让我们去存钱或者是取钱,这样一来,银行就保证了自己的安全,也为群众提供了应有的服务。
同样也是如此,我们要去硬盘中读取数据,操作系统肯定不会让我们直接去遍历它管理硬盘那一个数据结构中的某个字段,万一我们把其他人的数据也拿去了怎么办,所以操作系统不能将自己全面暴露出来,这样做不安全。为了解决这个问题,所以操作系统和用户之间有了系统调用接口这一层,系统调用接口是操作系统提供的一批接口,只允许用户通过系统调用接口来访问操作系统内部。
Linux操作系统是用C语言实现的(有少部分汇编),所以系统调用接口其实就是用C语言实现的函数,它是操作系统提供的系统调用函数。有些函数是有输入、输出的,所谓的输入其实就是用户想将数据交给操作系统,输出就是通过接口函数将数据拿给用户。
操作系统给上层用户提供的两方面的功能:1.数据方面的支持(如:用户想拿到文件数据、系统当中有多少进程等),2.功能方面的支持(如:用户想将数据通过网卡发送到网络,将数据写入到磁盘等)。
总结:任何人都不能直接去访问操作系统内部的数据,必须通过操作系统提供的接口函数才能去访问。
用户不能直接去访问操作系统内部的数据,能不能直接绕过操作系统去控制底层硬件???答案是不能的,假设可以,如果用户一直在控制着网卡,网卡就会处于非常忙的状态,这时操作系统有个任务需要使用网卡,发现网卡一直被用户给控制着,这个任务就无法进行下去,那么操作系统的管理工作还做不做了。所以用户不能越级去控制底层硬件,必须通过系统提供的系统调用接口才行。
重新去理解printf函数和scanf函数
在学习C语言的时候,我们肯定使用printf函数和scanf函数。以printf函数为例,printf打印的消息是在显示器上显示的,显示器是一个硬件,肯定是被操作系统管理起来的,printf是C语言提供的标准输出函数,它有能力直接在显示器上打印内容吗??答案是不能的,用户不能越级去控制底层硬件,虽然我们不知道printf是怎么实现的,但是它的内部肯定封装并且调用了系统调用接口函数才能向显示器上打印内容。scanf同样也是如此,必须通过系统调用接口函数才能读取到用户在键盘上输入的数据。
不仅是C语言,其他语言也是如此,只要是影响到底层的硬件就必须通过系统调用接口函数才能去访问硬件。
虽然系统调用接口本来就是给用户准备的,但是要对操作系统有一定的了解才能把系统调用使用的好,因为系统调用的参数和返回值必须得对操作系统有一定的认知,如果不懂的话使用系统调用接口会非常难受,所以就有人对系统调用接口进行了封装,形成了lib(库),提供给用户进行开发操作,减少使用者使用成本。
所以我们虽然没有使用过系统调用,但是通过学习计算机语言时也间接使用了,例如C语言将访问显示器和键盘的系统调用接口封装成了printf和scanf函数,所以才有了C标准库这样的概念。
系统调用和库函数之间的关系!!
系统调用是操作系统提供,库函数是用户提供(如C标准库),它们之间的关系是上下层的关系。并不是所有的库函数都会去调用系统调用,只要是库函数调用了系统调用它们的关系就是上下层的关系(库函数在上,系统调用在下)。
4.总结
我们通过学习冯诺依曼体系结构了解了计算机的组成结构,在通过计算机的层状结构图来学习操作系统是如何管理底层硬件的。
所以为什么要有操作系统的原因以及操作系统为什么要进行软硬件资源进行管理的原因就是因为:操作系统要对下管理好软硬件资源,对上要将自己的功能进行打包,形成系统调用接口,给上层的用户提供服务,可以让用户直接调用系统调用接口,也可以让用户直接使用各种库函数,为了让用户更好的去操作,所以在系统调用接口之上就有了shell外壳,lib(库),指令,用户就能更好的去进行指令操作、开发操作、管理操作。
相关文章:

Linux:计算机的层状结构
1.冯诺依曼体系结构 我们常见的计算机,如笔记本、台式机。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系结构。 CPU:运算器和控制器组成。运算器主要工作是做算术运算和逻辑运算。控制器主要工作是协调设备之间信息流动的…...

【SpringBoot】关于MP使用中配置了数据库表前缀的问题
problem 使用MP时,在application.yml配置文件中配置了MP匹配数据库表中的表名时的前缀作了规定,如下: 那么当我运行时报错了错误,报错信息如下: 因为我数据库表的书类表名是book,MP在匹配时使用了表名前…...

AI 赋能防艾宣传:从创意到实践,我的 IP 形象设计之旅
在数字技术飞速发展的今天,如何让严肃的健康传播变得更有温度、更具吸引力?作为一名参与防艾宣传实践的学生,我尝试通过 AI 工具构建专属 IP 形象,让防艾知识从 "被动接受" 转化为 "主动探索"。这篇文章将分享…...

Redis 事务与管道:原理、区别与应用实践
在现代分布式系统开发中,Redis 作为高性能的内存数据库,其事务处理和管道技术是开发者必须掌握的核心知识点。本文将深入探讨 Redis 事务和管道的实现原理、使用场景、性能差异以及最佳实践,帮助开发者根据实际需求选择合适的技术方案。 一、…...
每日算法刷题Day9 5.17:leetcode定长滑动窗口3道题,用时1h
9. 1652.拆炸弹(简单,学习) 1652. 拆炸弹 - 力扣(LeetCode) 思想 为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 ,将第 i 个数字用 接下来 k 个数字之和替换。如果 k < 0…...

手机打电话时如何将通话对方的声音在手机上识别成文字
手机打电话时如何将通话对方的声音在手机上识别成文字 --本地AI电话机器人 上一篇:手机打电话时由对方DTMF响应切换多级IVR语音应答(一) 下一篇:手机打电话时由对方DTMF响应切换多级IVR语音应答(二) 一、…...

重排序模型解读:gte-multilingual-reranker-base 首个GTE系列重排模型诞生
模型介绍 gte-multilingual-reranker-base 模型是 GTE 模型系列中的第一个 reranker 模型,由阿里巴巴团队开发。 模型特征: Model Size: 306MMax Input Tokens: 8192 benchmark 关键属性: 高性能:与类似大小的 reranker 模型…...
C++学习:六个月从基础到就业——C++11/14:列表初始化
C学习:六个月从基础到就业——C11/14:列表初始化 本文是我C学习之旅系列的第四十三篇技术文章,也是第三阶段"现代C特性"的第五篇,主要介绍C11/14中的列表初始化特性。查看完整系列目录了解更多内容。 引言 在C11之前&a…...
SQL语句执行问题
执行顺序 select [all|distinct] <目标列的表达式1> AS [别名], <目标列的表达式2> AS [别名]... from <表名1或视图名1> [别名],<表名2或视图名2> [别名]... [where <条件表达式>] [group by <列名>] [having <条件表达式>] [ord…...
2025系统架构师---选择题知识点(押题)
1.《计算机信息系统安全保护等级划分准则》(GB 17859-1999)由低到高定义了五个不同级别的计算机系统安全保护能力。 第一级:用户自主保护级---通过隔离用户与数据实现访问控制,保护用户信息安全; 第二级:系统审计保护级---实施更细粒度的访问控制,通过审计和隔离资源确…...
flutter flutter run 运行项目卡在Running Gradle task ‘assembleDebug‘...
flutter run --verbose在运行flutter run 可以看到是卡在哪一步 最重要的就是自己查看日志,具体哪一步有问题flutter run --verbose使用这个,运行了项目会将错误信息放在控制台 可能原因 静态资源问题如果:图片、字体文件等没有在pubspec.yam…...
P5682 [CSP-J2019 江西] 次大值
P5682 [CSP-J2019 江西] 次大值 题目描述 Alice 有 n n n 个正整数,数字从 1 ∼ n 1 \sim n 1∼n 编号,分别为 a 1 , a 2 , … , a n a_1,a_2, \dots , a_n a1,a2,…,an。 Bob 刚学习取模运算,于是便拿这 n n n 个数进行练习&…...
Elasticsearch 性能优化面试宝典
Elasticsearch 性能优化面试宝典 🚀 目录 设计调优 🏗️写入调优 ⚡查询调优 🔍综合设计 💎总结 📝设计调优 🏗️ 面试题1:索引设计优化 题目: 假设需要设计一个电商商品索引,日增数据量1TB,要求支持多维度查询(名称、分类、价格区间)。请说明索引设计的关…...

【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理2
文章目录 一、前述二、不同的先验及代表性论文2.1 几何先验(Geometric Prior)2.2 生成式先验(Generative Prior)2.3 codebook先验(Vector Quantized Codebook Prior)2.4 扩散先验 (Diffusion Pr…...

无监督学习在医疗AI领域的前沿:多模态整合、疾病亚型发现与异常检测
引言 人工智能技术在医疗领域的应用正经历着从辅助决策向深度赋能的转变。无监督学习作为人工智能的核心范式之一,因其无需大量标注数据、能够自动发现数据内在规律的特性,在医疗AI领域展现出独特优势。尤其在2025年,无监督学习技术在医疗AI应用中呈现出多模态整合、疾病亚…...

计算机操作系统概要
不谋万世者,不⾜谋⼀时。不谋全局者 ,足谋⼀域 。 ——陈澹然《寤⾔》《迁都建藩议》 操作系统 一.对文件简单操作的常用基础指令 ls ls 选项 目录或⽂件名:罗列当前⽬录下的⽂件 -l:以长格式显示⽂件和⽬录的详细信息 -a 或 --all&…...
C语言进阶-数组和函数
C语言 一、数组 一维数组 通过数组,可以一次性的分配多个同类型的连续存储区 语法: 类型 数组名字[元素个数]; 例:int arr[6]; arr占用内存6个整型大小的连续存储空间 注意: 通过下标可以区分数组的每个…...

图片通过滑块小图切换大图放大镜效果显示(Vue3)
图片通过滑块小图切换大图放大镜效果显示 实现目标: 显示一组图片列表,鼠标进入小图记录当下小图下标,通过小图下标在数组中对应图片显示到大图位置; 鼠标进入大图位置时,带动滑块移动,并将放大两倍的大图…...

[SSL]1Panel添加阿里云DNS账户
1 创建一个子用户 将得到的key和secret贴到1panel的DNS账户配置中 添加权限 即可用DNS账号申请SSL证书...
C语言编程中的时间处理
最简单的time 在C语言编程中,处理时间最简单的函数就是time了。它的原型为: #include <time.h> time_t time(time_t *_Nullable tloc);返回自从EPOCH,即1970年1月1日的零点零时零分,到当前的秒数。 输入参数可以是NULL。…...

计算机网络 : 网络基础
计算机网络 : 网络基础 目录 计算机网络 : 网络基础引言1. 网络发展背景2. 初始协议2.1 初始协议2.2 协议分层2.2.1 软件分层的好处2.2.2 OSI七层模型2.2.3 TCP/IP五层(四层)模型 2.3 TCP/IP协议2.3.1TCP/IP协议与操作系统的关系&…...

C++跨平台开发:突破不同平台的技术密码
Windows 平台开发经验 开发环境搭建 在 Windows 平台进行 C 开发,最常用的集成开发环境(IDE)是 Visual Studio。你可以从Visual Studio 官网下载安装包,根据安装向导进行安装。安装时,在 “工作负载” 界面中ÿ…...
实现 STM32 PWM 输出:原理、配置与应用详解
实现 STM32 PWM 输出:原理、配置与应用详解 在嵌入式开发领域,STM32 微控制器凭借其强大的功能和丰富的外设资源,被广泛应用。PWM(脉冲宽度调制)作为 STM32 的重要功能之一,对于电机调速、LED 调光、信号合…...
Web 架构之负载均衡会话保持
文章目录 一、引言二、思维导图三、负载均衡会话保持的概念3.1 定义3.2 作用 四、负载均衡会话保持的实现方式4.1 基于 IP 地址原理代码示例(以 Nginx 为例)注释 4.2 基于 Cookie原理代码示例(以 HAProxy 为例)注释 4.3 基于 SSL …...

第一次做逆向
题目来源:ctf.show 1、下载附件,发现一个exe和一个txt文件 看看病毒加没加壳,发现没加那就直接放IDA 放到IDA找到main主函数,按F5反编译工具就把他还原成类似C语言的代码 然后我们看逻辑,将flag.txt文件的内容进行加…...

【Linux网络】传输层协议TCP
TCP协议 TCP全称为"传输控制协议(TransmissionControl Protocol"). 人如其名, 要对数据的传输进行一个详细的控制; TCP协议段格式 源、目的端口号:表示数据从哪个进程来,到哪个进程去。 32位序号、确认序号 4位TCP报头长度:表示该TCP头部有…...

AAAI-2025 | 中科院无人机导航新突破!FELA:基于细粒度对齐的无人机视觉对话导航
作者:Yifei Su, Dong An, Kehan Chen, Weichen Yu, Baiyang Ning, Yonggen Ling, Yan Huang, Liang Wang 单位:中国科学院大学人工智能学院,中科院自动化研究所模式识别与智能系统实验室,穆罕默德本扎耶德人工智能大学࿰…...

排序算法之基础排序:冒泡,选择,插入排序详解
排序算法之基础排序:冒泡、选择、插入排序详解 前言一、冒泡排序(Bubble Sort)1.1 算法原理1.2 代码实现(Python)1.3 性能分析 二、选择排序(Selection Sort)2.1 算法原理2.2 代码实现ÿ…...

Linux常用命令42——tar压缩和解压缩文件
在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,tar 是 Linux 和 Unix 系统中用于归档文件和目录的强大命令行工具。tar 名字来自 "tape archive"(磁带归档),最初用于将文件打包到磁带…...

网络协议分析 实验七 FTP、HTTP、DHCP
文章目录 实验7.1 FTP协议练习二 使用浏览器登入FTP练习三 在窗口模式下,上传/下传数据文件实验7.2 HTTP(Hyper Text Transfer Protocol)练习二 页面提交练习三 访问比较复杂的主页实验7.3 DHCP(Dynamic Host Configuration Protocol) 实验7.1 FTP协议 dir LIST&…...