用户空间的系统调用是如何链接到内核空间的系统调用的——MIT6.S081学习记录
- 用户态的sysinfo(),首先系统会从user/user.h里找到声明,随后由链接到 usys.S 中的汇编代码来实现的。usys.S是通过usys.pl生成的。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。
- 在 usertrap() 中检测到 ecall 系统调用之后,程序会跳转到 syscall() 函数。
- 在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里面。课程没说他应该写在哪,实际应该只是分类的区别。
int
copyout(pagetable_t pagetable, uint64 dstva, char *src, uint64 len)
用户空间的系统调用是如何链接到内核空间的系统调用的——MIT6.S081学习记录的更多相关文章
- User space(用户空间) 与 Kernel space(内核空间)
出处: User space 与 Kernel space (整理)用户空间_内核空间以及内存映射 学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel spac ...
- linux内核空间与用户空间信息交互方法
linux内核空间与用户空间信息交互方法 本文作者: 康华:计算机硕士,主要从事Linux操作系统内核.Linux技术标准.计算机安全.软件测试等领域的研究与开发工作,现就职于信息产业部软件与 ...
- Linux内存管理--用户空间和内核空间【转】
本文转载自:http://blog.csdn.net/yusiguyuan/article/details/12045255 关于虚拟内存有三点需要注意: 4G的进程地址空间被人为的分为两个部分--用 ...
- Operating System-Thread(3)用户空间和内核空间实现线程
http://www.cnblogs.com/Brake/archive/2015/12/02/Operating_System_Thread_Part3.html 本文主要内容: 操作系统用户空间和 ...
- linux内存管理--用户空间和内核空间
关于虚拟内存有三点需要注意: 4G的进程地址空间被人为的分为两个部分--用户空间与内核空间.用户空间从0到3G(0xc0000000),内核空间占据3G到4G.用户进程通常情况下只能访问用户空间的虚拟 ...
- linux 用户态和内核态以及进程上下文、中断上下文 内核空间用户空间理解
1.特权级 Intel x86架构的cpu一共有0-4四个特权级,0级最高,3级最低,ARM架构也有不同的特权级,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查.硬件已经提 ...
- 用户空间和内核空间通讯之【Netlink 上】
原文地址:用户空间和内核空间通讯之[Netlink 上] 作者:wjlkoorey258 引言 Alan Cox在内核1.3版本的开发阶段最先引入了Netlink,刚开始时Netlink是以字符驱动接 ...
- GPIO硬件资源的申请,内核空间和用户空间的数据交换,ioctl(.....),设备文件的自动创建
1.通过GPIO库函数控制LED open("/dev/myleds",...) close(fd) ----------------------------- ...
- [2]windows内核情景分析--系统调用
Windows的地址空间分用户模式与内核模式,低2GB的部分叫用户模式,高2G的部分叫内核模式,位于用户空间的代码不能访问内核空间,位于内核空间的代码却可以访问用户空间 一个线程的运行状态分内核态与用 ...
- Linux系统调用具体解释(怎样从用户空间进入内核空间)
系统调用概述 计算机系统的各种硬件资源是有限的,在现代多任务操作系统上同一时候执行的多个进程都须要訪问这些资源,为了更好的管理这些资源进程是不同意直接操作的,全部对这些资源的訪问都必须有操作系统控制. ...
随机推荐
- Kubernetes - [03] 安装部署
Kubeadm 部署k8s集群 一.准备工作 1.1.组件 组件:Harbor(私有Docker Hub).Router 服务器操作系统:Centos7 +(内核3.0+,最好内核4.40+) 1.2 ...
- 机器学习 | 强化学习(4) | 无模型控制(Model-Free Control)
无模型控制(Model-Free Control) 无模型预测概论 上一节课: 无模型预测 用于估计一个未知马尔科夫决策过程的价值函数 这节课 无模型控制 最优化一个未知马尔科夫决策过程的价值函数 一 ...
- selenium 提示 Non-UTF-8 code starting with '\xc4'
解决(1):在程序最上方加上语句,# coding=gbk 解决(2):在preference下进行修改
- 自动化-Yaml文件写入函数封装
1.文件布局 打开文件修改读取方式为w dump函数写入文件 写入中文 使用allow_unicode=True class ReadConfiYaml: def __init__(self,yaml ...
- windows使用Makefile时自动给可执行文件加上.exe后缀
APP := main 在使用makefile的时候,一般通过变量设置自己想要编译出来的可执行文件的名字 在windows平台编译出来的可执行文件是需要.exe后缀的 识别当前操作系统 通过识别当前的 ...
- 学习unigui【26】关于Unigui控件的个性化CSS框架
用unigui写程序,简单的事用户界面不用HTML.因为这个太闹心了.没有什么技术含量,但很闹心. 但是,但是不清楚HTML CSS更闹心.因为养眼的界面是客户起步疑问和要求. 强烈推荐认真读明白大虾 ...
- 从零开始构建智能聊天机器人:Rasa与ChatGPT API实战教程
引言:AI对话系统的时代机遇 在数字化转型浪潮中,聊天机器人已成为连接用户与服务的关键纽带.无论是客服系统中的7×24小时即时响应,还是智能家居中的语音交互,聊天机器人正在重塑人机交互方式.本文将通过 ...
- java基础之数据结构
一.栈:stack,又称堆栈[出口和入口在同一侧],特点:先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素) 例子:子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当 ...
- VScode前端代码编辑器:修改默认打开的浏览器和代码提示设置
一.修改默认打开的浏览器 二.代码提示设置
- Eclipse 中 JAVA AWT相关包不提示问题(解决)
原因: 由于在2021年7月15日 OpenJDK管理委员会全票通过批准成立由Phil Race担任初始负责人的 Client Libraries Group(客户端类库工作组). 新的工作组将继续赞 ...