首页 > 系统相关 >arm64 Linux操作系统知识点

arm64 Linux操作系统知识点

时间:2024-09-11 09:24:06浏览次数:3  
标签:FP 知识点 调用 int 系统 数据类型 arm64 Linux 数据模型

一、C语言常见陷阱

1. 数据模型

  • ARM64下可以采用LP64和ILP64数据模型,在Linux系统下默认采用LP64数据模型。

  • LP64中,L表示Long,P表示Pointer(指针长度),

ILP32、ILP64、LP64数据模型中不同数据类型的长度

数据类型/字节

ILP32数据模型中的长度

ILP64数据模型中的长度

LP64数据模型中的长度

char

1

1

1

short

2

2

2

int

4

4

4

long

4

4

8

long long

8

8

8

pointer

4

8

8

size_t

4

8

8

float

4

4

4

double

8

8

8

2. 数据类型转换与整型提升

  • C语言隐式的数据类型转换:

  • 在赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型

  • 在算术表达式中,占字节少的数据类型向占字节多的数据类型转换。

  • 在算术表达式中,当对有符号数据类型与无符号数据类型进行运算时,需要把有符号数据类型转化为无符号数据类型。

  • 整数常量通常是int类型。例如,在ARM64系统里,整数8会使用Wn寄存器来存储,8LL则会使用Xn寄存器来存储

3. C语言规范中有一个整型提升的约定:

  • 在表达式中,当使用有符号或者无符号的char,short,位域以及枚举类型时,都应该提升到int类型

  • 如果上述类型可以使用int类型来表示,则使用int类型;否则使用unsigned int类型。

二、函数调用标准

三、栈分布

  1. 假设函数调用关系是main()->func1()->func2(),下图为栈的分布

2. ARM64体系结构的函数栈布局的关键点如下:

  1. 所有的函数调用栈都会组成一个单链表

  2. 每个栈由两个地址来构成这个链表,这两个地址都是64位宽的,并且它们都位于栈顶。

  • 低地址存放:指向上一个栈 (父函数的栈)的栈基地址 FP,类似于链表的prev指针。本书把这个地址称为P_FP (Previous FP),以区别于处理器内部的FP寄存器。

  • 高地址存放:当前函数的返回地址,也就是进入该函数时LR的值,本书把这个地址称为P_LR(Previous LR)。

3. 处理器的FP和SP寄存器相同。在函数执行时,FP和SP寄存器会指向该函数栈空间的FP处。

4. 函数返回时,ARM64处理器先把栈中的P_LR的值载入当前LR,然后执行RET指令。

四、系统调用

  1. ARM64体系结构提供一个系统调用指令SVC,它允许应用程序通过SVC指令自陷到操作系统内核中,即陷入EL1中。

  2. 系统调用层主要有如下作用:

  3. 为用户空间中的程序提供硬件抽象接口。这能够让程序员从硬件设备底层编程中解放出来。例如,当需要读写文件时,程序员不用关心磁盘类型和介质,以及文件存储在磁盘哪个扇区等底层硬件信息。

  4. 保证系统稳定和安全。应用程序要访问内核就必须通过系统调用层,内核可以在系统调用层对应用程序的访问权限、用户类型和其他一些规则进行过滤,以避免应用程序不正确地访问内核。

  5. 可移植性。在不修改源代码的情况下,让应用程序在不同的操作系统或者拥有不同硬件体系结构的系统中重新编译并且运行。

3. 用户态调用SVC指令

  • 操作系统为每个系统调用赋予了一个系统调用号,当应用程序执行系统调用时,操作系统通过系统调用号知道执行和调用哪个系统调用。

标签:FP,知识点,调用,int,系统,数据类型,arm64,Linux,数据模型
From: https://blog.csdn.net/weixin_42198851/article/details/142126839

相关文章

  • day08(网络编程基础)Linux IO 模型(IO多路复用)
    目录场景假设select特点编程步骤练习练习一:输入鼠标的时候,响应鼠标事件,输入键盘的时候,响应键盘事件(两路IO)练习二:用select创建并发服务器,可以同时连接多个客户端(0,sockfd)(12min)练习三:用select创建并发服务器,可以与多个客户端进行通信(监听键盘、socket、多个accept......
  • day07(网络编程基础)Linux IO模型(阻塞IO、非阻塞IO、信号驱动IO(异步IO))
    目录场景假设一.阻塞式IO:最常见、效率低、不耗费cpuTCP粘包、拆包发生原因:二.非阻塞IO:轮询、耗费CPU,可以处理多路IO设置非阻塞的方式1.通过函数自带参数设置2.通过设置文件描述符的属性。把文件描述符的属性设置为非阻塞三.信号驱动IO/异步IO:异步通知方式,需要底层驱......
  • Linux学习-ELK(一)
    配置三台elasticsearch服务器安装包elasticsearch.j2报错#---执行rsync命令报以下错误[root@es1~]#rsync-av/etc/hosts192.168.29.172:/etc/[email protected]'spassword:bash:rsync:未找到命令rsync:connectionunexpectedlyclosed(0bytesrece......
  • Linux网络——从《计算机网络》到网络编程
    文章目录从《计算机网络》到网络编程从计算机到计算机网络解决问题网络与计算机系统计算机网络的传输流程IP地址与MAC地址从《计算机网络》到网络编程科班的同学大多学过计算机网络,而非科班的同学也多多少少听说过一些计算机网络体系十分繁杂且精妙,这三四十年来计......
  • 【Linux进程详解】进程地址空间
    目录1.直接写代码看现象2.引入最基本的理解3.细节问题-理解它1.直接写代码看现象#include<stdio.h>#include<string.h>#include<unistd.h>#include<stdlib.h>#include<unistd.h>intg_val=100;intmain(){printf("fatherisrunning,pid:%d,......
  • Linux命令实践
    Linux命令实践学习Linux核心命令1.ls列出当前目录中的文件和目录djy666@ubuntu:~$ls20221307公共的模板视频图片文档下载音乐桌面Desktopdjyhellohello.chello.osnapls-l列出详细信息使用长格式列出目录内容,包括文件权限、所有者、文件......
  • linux中vim常用命令大全
    前言Linux有大量的配置文件,所以Linux的文本处理工具也是比较多的,其中编辑一些配置文件时,常用的工具就是vim。在Linux中,Vim编辑器是一个非常强大的文本编辑工具,它提供了多种模式和命令来满足不同的编辑需求。以下是Vim的一些常用命令和操作:一、启动与退出Vim‌直接启动Vim......
  • 【Linux】命令行参数和环境变量
         ......
  • 【Linux】kill与kill -9
    kill命令格式kill-signalpidsignalpid是进程号,ps命令可以查看默认情况下使用kill,系统发送给进程的是SIGTERM(15)信号,告诉进程“你需要被关闭,请自行停止并退出”。kill-9fasongSIGKILL(9)信号,告诉进程“你被终结了,请立刻退出”。kill-9表示强制杀死进程,与SIGTERM......
  • Linux命令实践
    目录课上测试作业题目:Linux命令实践学习Linux核心命令作业要求(9‘)作业内容命令演示AI提问及验证(重复命令未列出)总结高频命令自主学习重要命令推荐深入学习命令示例echoodbc总结作业提交要求(1')课上测试作业题目:Linux命令实践学习Linux核心命令lswhopwdcdmanwhereis......