Linux底层基础知识

一.汇编,C语言,C++,JAVA之间的关系

汇编,C语言,C++可以通过不同的编译器,编译成机器码。而java只能由Java虚拟机识别。Java虚拟机可以看成一个操作系统,Java虚拟机是由汇编,C,Linux等编写而成的一个操作系统(面向os)

不同的芯片,底层的CISC指令集不同,所以其机器码有区别,因此汇编不能跨平台。特定的CPU下只能执行特定的机器码。Java生成字节码,只有Java虚拟机识别,Java虚拟机跨平台,因此Java跨平台。

二.CPU架构,指令集,汇编,硬编码之间的关系

2023-08-29T08:41:15.png

CPU架构

2023-08-29T09:06:31.png


1.CISC(复杂指令集)

  1. Intel芯片

2.RISC(精简指令集)

1.ARM芯片

  1. Mac M1、M2芯片

相同的CPU架构,不同OS,汇编不一样,机器码一样

CISC的优点:
1.复杂指令:CISC允许在单条指苓执行多个低级操作,例加载值、进行算术运算和将结 果存储回内存,这在一定程度上可以减少需要的指令数量。
2.节省内存:由于单个指令可以执行多个操作,所以CISC可以减少对内存的使用。
3.易于编译:由于CISC的指令集更接近于高级语言,编译器可以更容易地将高级语言代码翻 译为机器代码。

CISC的缺点:
1.硬件复杂性:由于指令集的复杂性,CISC架构的处理器在硬件实现上通常会更复杂。
2.功耗较高:由于硬件复杂性,CISC处理器可能需要更多的电力来执行指令。
3.性能:复杂的指令可能需要多个时钟周期来执行,这可能影响到性能。

三.ASM、NASM、ATT、ARM之间的关系

MASM、NASM、ATT和ARM是与汇编语言相关的术语和工具。

MASM(Microsoft Macro Assembler)是微软开发的汇编语言编译器,用于x86架构的处理器。

NASM(Netwide Assembler)是一种开源的汇编语言编译器,支持多种处理器架构,包括x86和ARM。

ATT(AT&T Syntax)是一种汇编语言的语法风格,常用于UNIX系统和GNU工具链。

ARM(Advanced RISC Machines)是一种处理器架构,广泛应用于移动设备和嵌入式系统。

总结一下,MASM和NASM是汇编语言编译器,用于编写汇编语言程序。ATT是一种汇编语言的语法风格,可以与不同的汇编语言编译器一起使用。ARM是一种处理器架构,可以使用不同的汇编语言编写程序。

Linux是一个开源操作系统内核,它可以运行在多种不同的架构上,包括但不限于:

  • x86架构:包括Intel和AMD的处理器,如x86-64(64位)和x86(32位)。
  • ARM架构:广泛应用于移动设备和嵌入式系统,如ARMv7和ARMv8。
  • Power架构:用于IBM Power Systems服务器和一些嵌入式系统。
  • MIPS架构:用于一些嵌入式系统和网络设备。
  • SPARC架构:用于Oracle的SPARC服务器。
  • RISC-V架构:一个开源的指令集架构,逐渐得到广泛采用。
    总之,Linux是一个多架构的操作系统内核,可以在多种不同的处理器架构上运行。

四.寄存器、CPU缓存、内存之间的关系

2023-08-29T09:45:59.png

寄存器、CPU缓存和内存是计算机系统中不同层级的存储设备,它们之间有着紧密的关系。

  1. 寄存器(Registers):寄存器是位于CPU内部的存储设备,用于暂存和快速访问数据和指令。寄存器是CPU执行指令所必需的组成部分。它们具有非常快速的访问速度,但容量相对较小。寄存器通常由硬件设计者定义和使用。
  2. CPU缓存(CPU Cache):CPU缓存是位于CPU内部的高速缓存存储器,用于提高CPU和主内存之间的数据传输效率。它通过在CPU和主内存之间建立缓存层,存储频繁访问的数据和指令,以提供更快的访问速度。常见的CPU缓存包括L1缓存、L2缓存和L3缓存等级别,容量逐级增大而访问速度逐级降低。
  3. 内存(Memory):内存是用于存储程序和数据的设备,它通常指的是主内存(RAM)。内存提供了比寄存器和缓存更大的存储容量,但访问速度相对较慢。CPU从内存中读取指令和数据,并将计算结果写回内存。

关系:寄存器、CPU缓存和内存都是计算机系统中不同层级的存储设备。寄存器作为最快的存储设备,存储着CPU的工作数据和指令。CPU缓存作为CPU的高速缓存存储器,存储了频繁访问的数据和指令。而内存作为存储器的最大部分,存储了程序和数据,但访问速度相对较慢。在计算过程中,CPU会尽量从寄存器和缓存中获取数据,以提高执行速度,当数据不在寄存器和缓存中时,才会从内存中读取或写入数据。因此,寄存器、CPU缓存和内存共同协作,提供了不同层级的存储器层次结构,以满足计算机系统对存储和访问的需求。
当程序执行时,CPU首先从内存中加载指令和数据到寄存器或缓存中进行操作。寄存器提供了最快速的访问速度,因为它们直接位于CPU内部。CPU会频繁地使用寄存器来执行计算、存储中间结果和控制程序的状态。

然而,寄存器的数量有限,容量也比较小。当寄存器无法容纳全部数据时,CPU会使用缓存。缓存通常分为几个层级,以便根据访问频度和访问模式来优化数据的存储和访问。缓存是位于CPU和内存之间的快速存储器,其目的是减少CPU访问内存的次数,提高访问速度。

最后,内存是存储程序和数据的主要设备,它具有较大的容量,但相比寄存器和缓存,访问速度较慢。当寄存器和缓存不能满足CPU需要的数据时,CPU会从内存中读取或写入数据。

总结来说,寄存器、CPU缓存和内存之间的关系是:寄存器提供了最快速的数据存储和访问,缓存作为介于寄存器和内存之间的高速存储器,提供了更大容量的存储和快速的访问,而内存则是存储程序和数据的主要设备,容量最大但访问速度最慢。它们共同协作,以满足计算机系统的存储和访问需求。

寄存器分类

2023-08-29T10:02:35.png

Linux底层知识涉及操作系统的基本概念、内核、文件系统以及与硬件的交互等内容。以下是一些与Linux底层知识相关的主题:

1. 操作系统基础:了解操作系统的概念、组成部分和基本功能,包括进程管理、内存管理、文件系统等。

2. 内核:Linux内核是操作系统的核心,负责管理系统资源、控制进程和提供系统调用接口。了解内核的结构、模块、调度器和驱动程序等是重要的底层知识。

3. 文件系统:Linux使用各种文件系统来管理存储设备上的数据。常见的文件系统包括EXT4、Btrfs、XFS等。了解文件系统的层次结构、文件组织方式以及文件权限和扩展性等是必要的。

4. 设备驱动程序:了解设备驱动程序是如何与硬件交互的,包括字符设备、块设备和网络设备驱动程序的编写和加载过程。

5. 系统启动过程:了解Linux系统的启动过程,包括BIOS/UEFI引导、引导加载程序(如GRUB)、内核启动和初始化过程等。

6. 内存管理:学习操作系统如何管理内存,包括虚拟内存、分页和分段机制、物理内存管理等。

7. 进程管理:了解进程的概念、进程控制块、线程和进程调度算法等,以及相关的系统调用和工具。

8. 网络管理:包括网络协议栈、网络设备驱动程序、网络配置和管理等底层网络知识。

9. 性能优化和故障排查:学习如何分析和优化系统性能,以及如何排查和解决常见的系统故障和错误。

这只是Linux底层知识的一些主要方面。要深入了解这些主题,可以通过阅读相关的操作系统教材、内核文档、技术博客和参与开源社区等途径进行学习和实践。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/370873.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【刷题题解】最长回文子序列

给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列 这道题,一眼动态规划,但是即使动起来也规划…

总结了一下中继引擎(can中继器,TCP总机器)开发实际经验

多路数据进行中继的研究 1.数据中继的概念 数据中继是一种数据传输技术,用于在两个通信设备之间提供数字信号的传输。它利用数字信道传输数据信号,可以提供永久性和半永久性连接的数字数据传输信道。 数据中继的主要作用是提高通信质量和可靠性&#xf…

问题:金属电化学反应的实质是氧化还原反应,被腐蚀金属发生还原反应( ) #知识分享#知识分享#媒体

问题:金属电化学反应的实质是氧化还原反应,被腐蚀金属发生还原反应(  ) A、正确 B、错误 参考答案如图所示

解析Python中HTTP代理的常见问题

在Python编程中,HTTP代理是一个经常被提及的概念,尤其在处理网络请求和爬虫时。但与此同时,使用HTTP代理也经常会遇到一些令人头疼的问题。接下来,就让我们一起解析一下Python中使用HTTP代理时常见的那些问题。 1. 代理服务器无响…

如何在本地部署chatGLM3

文章目录 1. 参考2. ChatGLM3 介绍3. 本地运行3.1 硬件配置3.2 下载ChatGLM3代码3.3 下载需要加载的模型3.4 运行大模型3.4.1 ChatGLM3目录介绍3.4.2 安装依赖3.4.2 综合demo演示3.4.3 启动对话模式工具模式代码解释器 4. 总结 前面一章节有讲到 基于MacBook Pro M1芯片运行ch…

Debian系统显示中文

开发板上的debian默认不显示中文。 安装字体 sudo apt install fonts-wqy-zenhei 安装locals sudo apt install locales (无必要)设置/etc/locale.gen、设置/etc/locale.conf 运行dpkg-reconfigure locales dpkg-reconfigure locales 可以选择UT…

基于动作合成视频、线免费使用不需要注册,支持多种视频任务:图像生成视频、文本生成视频、视频修改、视频风格化、用Transformer构建世界模型

基于动作合成视频、线免费使用不需要注册,支持多种视频任务:图像生成视频、文本生成视频、视频修改、视频风格化、用Transformer构建世界模型。 WorldDreamer无缝逐帧AI模型: 基于Transformer生成高质量电影级别视频的通用世界模型"。从20亿数据中…

【linux】git和gdb调试工具

在linux下提交代码同步到gitee 1.创建一个新的仓库(演示步骤) 2.init 这两个步骤用于识别提交代码的身份,一个你的名字,一个你的邮箱 开启本地仓库 克隆本地仓库成功 我们将这个仓库拷到了111目录底下. 我们发现少了一个.gitig…

Fink CDC数据同步(五)Kafka数据同步Hive

6、Kafka同步到Hive 6.1 建映射表 通过flink sql client 建Kafka topic的映射表 CREATE TABLE kafka_user_topic(id int,name string,birth string,gender string ) WITH (connector kafka,topic flink-cdc-user,properties.bootstrap.servers 192.168.0.4:6668…

微信小程序使用ucharts折线图,有负数显示0刻度线

当数据有负数和正数的时候默认不会显示0刻度线,不方便看出正负对比 实现思路:显示的刻度线是根据数据的最大值和最小值自动分配到刻度线上面,把最大值和最小值设置为一样,然后平均分配给五个刻度线中间的刻度线就会为0就实现了显…

uniapp /微信小程序 使用map组件实现手绘地图方案

获取地图范围 点图拾取坐标-地图开放平台|腾讯位置服务 获取需要手绘地图左下角和右上角GPS坐标 以北京故宫为例&#xff1a; 截取需要手绘地图进行手绘地图制作 ​​​​​​​​​​​​​​ 素材处理 由于地图素材文件比较大&#xff0c;小程序又限制包大小<2M,无…

13.从桥接模式细品人生的几座桥

“物理学不存在了&#xff0c;今后也不会存在。”——《三体》 在《三体》中&#xff0c;有这样一个桥段&#xff0c;顶级的物理学家杨冬在三体文明超级计算机“智子”的干扰和误导下&#xff0c;得出了物理实验的结果在实验之前就会被某种力量确定的结论&#xff0c;导致自己…

PyTorch 2.2 中文官方教程(九)

在生产环境中部署 PyTorch 模型 通过 Flask 在 Python 中部署 PyTorch 的 REST API 原文&#xff1a;pytorch.org/tutorials/intermediate/flask_rest_api_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 注意 点击这里下载完整的示例代码 作者&#…

Windows鼠标右键菜单闪一下就没了?说不定是这个搞的鬼!

前言 这几天接到有些小伙伴反馈&#xff1a;Windows的右键菜单闪一下就没了。 本来是要按鼠标右键进行界面刷新或者新建文件夹等操作的&#xff0c;结果闪一下就没有了&#xff0c;感觉这个系统就好像中了病毒了一样。 相信很多小伙伴应该也遇到过同样的情况&#xff0c;但具…

BUGKU-WEB Simple_SSTI_1

02 Simple_SSTI_1 题目描述 解题思路 进入场景后&#xff0c;显示&#xff1a; You need pass in a parameter named flag。ctrlu 查看源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Simpl…

ElementUI 组件Layout布局 el-row和el-col 简介

Layout布局 el-row属性简介 el-row 组件 提供 gutter 属性来指定每一栏之间的间隔&#xff0c;默认间隔为 0。 提醒&#xff1a; el-row :gutter需要与el-col :span 一起使用才能生效 el-col属性简介 el-col的span属性 默认值为24&#xff0c;表示每一行共24份&#xff0c;:s…

030 可变参数

可变参数定义 public static void main(String[] args) {// 多参数方式传递System.out.println(max(1,3,5,3,6,1,2));// 数组方式传递System.out.println(max(new int[]{1,3,5,3,6,1,2})); }static int max(int... nums){int max Integer.MIN_VALUE;for (int num : nums) {if(…

Mysql架构系列——生产常用的高可用部署模式介绍

模式 高可用模式 Galera Cluster是由Codership开发的MySQL多主集群&#xff0c;包含在MariaDB中&#xff0c;同时支持Percona xtradb、MySQL&#xff0c;是一个易于使用的高可用解决方案&#xff0c;在数据完整性、可扩展性及高性能方面都有可接受的表现。 将会基于Galera C…

三层交换组网实验(华为)

思科设备参考&#xff1a;三层交换组网实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 三层交换技术的出现&#xff0c;解决子网必须依赖路由器进行管理的问题&#xff0c;解决传统路由器低速、复杂所造成的网络瓶颈问题。一个具有三层交换功能的设备可简单理解为…

2.4日总结

第一题&#xff1a;选数 题解&#xff1a;思路还是很简单的&#xff0c;只需要想清楚dfs里的函数都是什么就可以了&#xff0c;还有一个简单的判断素数的函数&#xff0c;这题真没啥难度&#xff0c;就是属于基础题吧&#xff0c;请看AC代码 #include <stdio.h> #includ…