1670_MIT 6.828 xv6中增加系统调用的实现与分析

这篇具有很好参考价值的文章主要介绍了1670_MIT 6.828 xv6中增加系统调用的实现与分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

         全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         操作系统的任务调度切换,在xv6中其实是基于中断的方式来进行触发的。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         在ttap处理的部分,调用了一个trap处理的C语言接口。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         也就是上面的接口。那么,这个接口运行所需要的参数是从什么地方来的呢?这个其实是一个之前已经熟悉过的一个小技巧了,那就是x86中在C语言调用的时候堆栈的处理模型。这个在之前的学习笔记中是已经整理过了的。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         而这部分具体的操作其实是在汇编代码中实现的。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         而关于系统调用的处理,其实是只是上面的一个分支。而下面的分支,则是处理中断以及其他的trap信息的。这个大概的模型,其实在我最近几年接触到的嵌入式单片机设计中也是类似的。

         上面的系统调用部分中,syscall()接口的调用是触发我们系统中C语言实现的调用接口的地方。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         而这个接口的实现,其实更加简单了,只是一个查表。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         而这个查表处理的表格则是我们系统设计中提供给系统的可以执行的系统调用的具体实现。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         以这一次HW中要求实现的date命令交互为例,上面是一个具体的实现接口。实现其实有一个比较简单的框架模板,在里面实现我们需要做的功能。

         系统调用可能会有一些参数的传递,这些传递其实是在进程的堆栈空间中存储着。上面的argptr()接口其实就是为了实现这样的功能。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         上面的接口的实现,主要是做了一个数据过滤,真正的获取动作来自于argint()接口。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         而argint()的实现中其实可以看到,这个应该跟进程的堆栈空间产生了关联。Esp其实是堆栈的栈底,这里通过这个信息找到参数的存放位置。具体的机理之前已经整理过,这里不去做更深的分析了。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         有了这个地址信息之后,获取对应的参数数值其实是很简单的一个操作了。这里经过了层层传递,层层抽象,从最接近用户的层级追踪到最底层就是这样的一个效果。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         分析了上面的过程,再回到这里的系统调用实现。其实很容易知道这里获取参数的一个用途了。有了这样的参数信息的获取之后,我们的OS内核就可以跟用户级的软件信息产生交互了。而这里,cmostime()接口的功能其实是为用户级的参数接口进行信息的“装填”。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         这里附加一下cmostime()的接口实现,只是看看这个功能的具体的工作。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         由此,用户软件命令中的操作,其实就成了传递r的信息参数,之后由上面的系统实现进行数据更新的过程。获取了更新之后,这里打印了获取到的数据。这个文件的名字是date.c,而这个被编译成了一个名字叫做_date的文件加入到了文件系统中。这也是提示中让我们修改到Makefile中这部分信息的一个原因。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         从这里可以知道,这个date.c的实现是如何进入到xv6中产生对应的作用的。而这个_date的生成以及依赖处理,是make的特殊用法。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         这样,生成的镜像启动后会看到date可执行文件存在于文件系统中。

1670_MIT 6.828 xv6中增加系统调用的实现与分析

         而date如何跟SYS_date产生关联呢?其实就在于上面的这个汇编文件了。其实,相当于实现了一个翻译跳转。文章来源地址https://www.toymoban.com/news/detail-410639.html

到了这里,关于1670_MIT 6.828 xv6中增加系统调用的实现与分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MIT 6.S081 Operating System/Fall 2020 macOS搭建risc-v与xv6开发调试环境

    电脑型号:Apple M2 Pro 2023 操作系统:macOS Ventura 13.4 所以我的电脑是arm64架构的M2芯片 执行安装脚本 /bin/zsh -c \\\"$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)\\\" 镜像选哪个都无所谓,我选择的是阿里巴巴 查看安装是否成功 brew --version 执行brew的安装脚本 这步需要先安装

    2024年02月08日
    浏览(60)
  • xv6(RISC-V)操作系统源码分析第二节——操作系统组织

    一个操作系统至少需要满足以下三个要求: 多路复用 进程隔离 进程通信 硬件CPU的数量有限,且往往少于同时存在的进程数量。而操作系统需要支持进程的并发执行,所以操作系统应该能使多个进程分时共享计算机的资源。 一个进程的运行,应当具有一定的独立性,这个独

    2024年02月03日
    浏览(44)
  • xv6 调试技巧

    url: https://pdos.csail.mit.edu/6.S081/2020/labs/guidance.html 参考链接详细讲了 xv6 调试技巧,认真研读 下面总结重点: 1.运行 debug 模式的方式: 窗口1执行 make qemu-gdb 窗口2执行 gdb-multiarch 如果你想观看内核文件的汇编版本,请查找 kernel.asm If the kernel panics, it will print an error message listin

    2024年02月07日
    浏览(36)
  • mit6.828 - lab5笔记(上)

    unix的文件系统相关知识 unix将可用的磁盘空间划分为两种主要类型的区域: inode区域 和 数据区域 。 unix为每个文件分配一个inode,其中保存文件的 关键元数据 ,如文件的stat属性和指向文件数据块的指针。 数据区域中的空间会被分成大小相同的数据块(就像内存管理中的分

    2024年02月02日
    浏览(34)
  • mit s0681 lab2 Trace系统调用实现

    实验一 实现一个用户级别的程序,功能为,指定系统调用后,跟踪程序的系统调用情况 分析实验 实验目标为实现一个程序去跟踪指定程序的系统调用。因此目标有两个 实现一个程序 跟踪目标程序的系统调用 实现1,就需要在用户这边实现一个trace的相关程序,接收监控的

    2024年02月11日
    浏览(35)
  • 6.s081/6.1810(Fall 2022)Lab5: Copy-on-Write Fork for xv6

    本来往年这里还有个Lazy Allocation的,今年不知道为啥直接给跳过去了。. 环境搭建 Lab1: Utilities Lab2: System calls Lab3: Page tables Lab4: Traps Lab5: Copy-on-Write Fork for xv6 官网链接 xv6手册链接,这个挺重要的,建议做lab之前最好读一读。 xv6手册中文版,这是几位先辈们的辛勤奉献来的呀!

    2024年02月14日
    浏览(38)
  • 操作系统实验 2.3系统调用:linux-0.11-lab “为版本0内核增加一个系统调用getjiffies” 和 “在用户程序中使用新增的系统调用”

    打开 vscode ,在如图所示位置打开 ~/os/linux-0.11-lab/0 文件夹 1.定义getjiffies系统调用 题目中给的提示:进入到 unistd.h 文件中 阅读代码,可以发现上图划线处有个系统调用名为 getpid :返回当前进程号——这与我们期望实现的功能类似:通过系统调用返回jiffies值。 于是此时希望

    2023年04月08日
    浏览(98)
  • 【干货】Android系统定制基础篇:第十四部分(禁止第三方应用调用系统设置、增加TP配置、增加摄像头镜像设置、增加摄像头默认角度设置、修改默认语言)

    修改文件 frameworksbasecorejavaandroidappActivityManagerNative.java 如下: 属性配置: Android 主板定制过程中经常出现客户需要临时适配各种 TP(包括 USB TP),因此在设置菜单中加入 xy 交换,x 反转,y 反转常用配置,以客户多样性需求。 以下修改基于Android 8.1 SDK,如下: 属性配置

    2024年02月10日
    浏览(51)
  • SINUMERIK西门子828D/840Dsl数控系统数据采集方法与IP地址参数设定

    1、系统口令等级取为“制造商“,【MENU/SELECT】,调试-设置口令,密码:SUNRISE,否则会出现没有更改画面。 2、数控系统网口认识: X127(系统正面)用于服务调试; X130(系统背面)用于连接工厂网络。( 也可以作为工程师调试使用 ) 1) X127 服务调试端口 X127 的 IP 地址为 192.168.2

    2024年02月02日
    浏览(120)
  • ASUS华硕天选4笔记本电脑FA507XV原厂Windows11系统22H2

    链接:https://pan.baidu.com/s/1SPoFW7wR5KawGu-yMckNzg?pwd=ayxd  提取码:ayxd  原装出厂W11系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、MyASUS华硕电脑管家、奥创控制中心等预装程序

    2024年02月11日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包