linux内核 header.s,arm架构的linux内核中,clrex指令的作用是什么

1. clrex指令的作用:

《arm architecture reference manual》B2-1292以下简称arm arm手册

The ClearExclusiveLocal() procedure takes as arguments the processor identifier processorid . The procedure clears the local record of processor processorid for which an address has had a request for an exclusive access. It is IMPLEMENTATION DEFINED whether this operation also clears the global record of processor processorid that an address has had a request for an exclusive access

该指令的作用就是在独占访问结束时,清除cpu中本地处理器针对某块内存区域的独占访问标志(核中的某个状态寄存器),以防在未清除时的其他操作,对系统产生影响。对于是否同时清除全局的独占访问标志,需要在设计cpu时的架构师决定。

2. clrex指令的作用很独特,在linux内核中用在什么地方呢?

用在如下地方:

(1)数据中止异常、指令预取中止异常的处理时调用

(调用linaro-aarch64/arch/arm/mm/abort-ev7.s v7_early_abort==》clrex)

(2)从svc模式下的irq异常、未定义指令异常、数据中止异常、指令预取中止异常,处理结束返回时调用

(调用宏:linaro-aarch64/arch/arm/kernel/entry-header.s svc_exit)

(3) 返回到用户层的快速系统调用/慢速系统调用(ret_slow_syscall,ret_fast_syscall==》

调用宏:linaro-aarch64/arch/arm/kernel/entry-header.s restore_user_regs==》clrex)

(4) run_all_tests 函数调用(==》kprobe_arm_test_cases==》TEST_UNSUPPORTED("clrex") ==》clrex)

该函数是一个驱动模块,可以动态加载。

如上所示:基本所有的异常都要用到该指令,系统调用的返回也能用到。

虽然异常和系统调用的代码在内核中不多,但是当内核运行起来时,异常和系统调用的执行频率特别高!

所以该指令还是非常有用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴回答你的问题。首先,让我们来介绍一下Linux内核源文件的结构。 Linux内核源文件结构: 1. arch目录:它包含了不同的硬件架构的代码,例如x86,ARM等,每个架构都有自己的目录。 2. block目录:它包含了块设备的代码,例如硬盘,光盘等。 3. crypto目录:它包含了加密相关的代码,例如AES,SHA等。 4. Documentation目录:它包含了Linux内核的文档,包括API文档,架构文档等。 5. drivers目录:它包含了所有的驱动程序,例如网络驱动,USB驱动等。 6. fs目录:它包含了文件系统相关的代码,例如EXT4,NTFS等。 7. include目录:它包含了Linux内核的头文件,这些头文件定义了内核的各种数据结构,宏,函数等。 8. init目录:它包含了内核初始化的代码。 9. ipc目录:它包含了进程间通信相关的代码,例如信号量,消息队列等。 10. kernel目录:它包含了内核的核心代码,例如调度器,内存管理等。 11. lib目录:它包含了内核使用的一些库函数。 12. mm目录:它包含了内存管理相关的代码,例如内存映射,内存分配等。 13. net目录:它包含了网络相关的代码,例如TCP/IP协议栈,网络驱动等。 14. scripts目录:它包含了内核的一些脚本,例如编译内核的脚本等。 15. security目录:它包含了安全相关的代码,例如SELinux等。 16. sound目录:它包含了声音相关的代码,例如声卡驱动等。 17. tools目录:它包含了一些辅助工具,例如perf等。 18. usr目录:它包含了用户空间程序的源码。 接下来,让我们来介绍一下Linux内核头文件的作用Linux内核头文件的作用Linux内核头文件包含了内核各种结构体,函数原型,宏定义等内容,它们为内核程序员提供了方便的API接口。内核头文件的扩展名是.h,内核的很多函数和数据结构都是定义在这些头文件的。 在内核,头文件的引用是通过#include指令实现的。例如,要使用内核的某个函数或数据结构,我们可以在代码加入相应头文件的#include指令,这样就可以使用了。 总结: Linux内核源文件是一个非常大的工程,由各种不同的目录和文件组成。内核头文件则提供了内核的API接口,方便内核程序员开发和调试内核程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值