首页 > 其他分享 >用户空间的系统调用是如何链接到内核空间的系统调用的——MIT6.S081学习记录

用户空间的系统调用是如何链接到内核空间的系统调用的——MIT6.S081学习记录

时间:2024-09-07 21:39:24浏览次数:8  
标签:SYS 调用 MIT6 S081 系统 sys sysinfo 链接

  • 用户态调用了sysinfo()后,系统会从user/user.h里找到相关声明。用户空间的系统调用函数(如 sysinfo())是通过链接到 usys.S 中的汇编代码来实现的。usys.S 文件定义了所有系统调用的入口点,这些入口点使用 .global 指令使函数名在链接时可见。当用户程序中调用 sysinfo() 时,链接器会将调用解析为 usys.S 中的 sysinfo 函数。
.global sysinfo
sysinfo:
 li a7, SYS_sysinfo
 ecall
 ret
  • 如果有人使用sysinfo函数,就会把SYS_sysinfo这个系统调用号(define SYS_sysinfo 23)压入寄存器a7,然后调用ecall,使用ecall就会使用内核态运行SYS_sysinfo。

  • 随后,在kernel/syscall.c中,syscall函数会读取a7,获得系统调用号(define SYS_sysinfo 23),然后调用p->trapframe->a0 = syscalls[num]();,通过syscalls表获取对应的函数[SYS_sysinfo] sys_sysinfo,将运行结果存入a0。其中,sys_sysinfo由kernel/syscall.c中extern uint64 sys_sysinfo(void);调用。这个sys_sysinfo函数最后写在相关的文件里,比如sysproc.c里面。课程没说他应该写在哪,实际应该只是分类的区别。

标签:SYS,调用,MIT6,S081,系统,sys,sysinfo,链接
From: https://www.cnblogs.com/AikN/p/18402170

相关文章

  • Objective-C 动态调用秘籍:NSInvocation 的魔法
    标题:Objective-C动态调用秘籍:NSInvocation的魔法在Objective-C编程中,NSInvocation是一个强大的工具,它允许你在运行时动态地调用方法。这种能力对于实现诸如方法拦截、依赖注入、或者在不知道方法签名的情况下调用方法等高级功能至关重要。本文将深入探索NSInvocation的使用方法,并......
  • C++ 调用 C# - AOT 方案
    一些C#AOT编译的笔记,整体感觉:简单很方便,但限制也很多,适用于比较单一的功能点。跨语言调用C#代码的新方式-DllExport-InCerry-博客园在.NET8下,直接添加<PublishAot>true</PublishAot>就可以支持了,需要注意一些限制,这里比较相关的是,不能使用Newtonsoft.Json做序列......
  • C++ 调用 C# - DllExport 方案
    3F/DllExport:.NETDllExportwith.NETCoresupport(aka3F/DllExportakaDllExport.bat)目前还不支持.NET6以及后续的版本,看起来作者生活上遇到了一些麻烦,暂时也不打算处理了无法使用.NET6工作·问题#197·3F/DllExport---Unabletogetworkingusing.NET6......
  • C++ 调用 C# - C++/CLI 方案
    C++/CLI方案是通过托管C++做中间层,来转发C#和C++之间的调用和数据传递。这个写法,C#不用做任何特殊的处理,正常写就可以。C++/CLI层新建一个C++/CLI项目,e.g.MedicalDbAccessWrapper,添加对C#项目的引用,注意,输出目录最好就是原生C++项目的输出目录,原生C++项目......
  • Python中差分进化differential_evolution的调用及参数说明
    在场景应用中,要求我们的函数计算结果尽可能的逼近实际测量结果,可转化计算结果与测量结果的残差,通过最小化残差,便可求出最优的结果。但使用最小二乘等方法来计算时,常常会使迭代的结果显然局部最优点而导致结算错误。差分进化原理差分进化(DifferentialEvolution,DE)是一种基......
  • 内存管理-34-内存回收-shrinker的注册和调用
    基于msm-5.4一、简介当存在内存压力时,会调用shrinker的count_objects()和scan_objects()进程内存回收操作。二、注册逻辑1.注册ashmem_init//ashmem.cregister_shrinker(&ashmem_shrinker)//vmscan.cregister_shrinker_prepared(shrinker)......
  • 如何在pbootcms网站中调用公司简介等频道内容
    在PbootCMS中,使用{pboot:content}标签可以方便地调用特定频道的内容。下面是一个完整的示例,展示了如何使用{pboot:content}标签来调用公司简介等频道内容,并进行适当的展示。示例代码html<!--调用ID为1的频道内容-->{pboot:contentid=1}<!--显示频道标题--><......
  • pbootcms站点信息调用
    {pboot:siteindex}站点入口地址,一般用于站内链接跳转设置地址前置,实现自适应URL模式{pboot:sitepath}站点路径,根目录时值为空,为适应部署到二级目录时建议链接前面带上{pboot:sitelanguage}站点语言{pboot:sitetitle}站点标题{pboot:sitesubtitle}站点副标题......
  • 操作系统-系统调用
    操作系统中的系统调用是指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务,提供了用户程序与操作系统之间的接口。系统调用是操作系统为用户提供的,只能通过用户程序间接使用。1.系统调用的目的请求系统服务。应用程序无法直接使用内核功能,需要通过系统调用间......
  • C++创建与调用dll动态链接库(MinGW64 Dev-C++)
    本文使用的是dev-c++,如果涉及到VC++中不一样的操作,也会适当进行区分。项目一:创建DLL1、创建一个DLL类型的项目,当前命名为dlltest,并选择合适的路径进行保存。 2、在生成的预设置代码中,加入如下代码//这是头文件dll.h#ifndef_DLL_H_#define_DLL_H_#ifBUILDING_DLL#de......