《Linux内核原理与分析》第六周作业
课本:第五章 系统调用的三层机制(下)
- 中断向量0x80和system_call中断服务程序入口的关系
0x80对应着system_call中断服务程序入口,在start_kernel函数中调用了trap_init函数,trap_init函数中调用了set_system_trap_gate函数,其中有系统调用的中断向量0x80和system_call中断服务程序入口的函数指针,system_call被声明为一个函数,通过set_system_trap_gate函数绑定了中断向量0x80和system_call中断服务程序入口之后,一旦执行int 0x80,CPU就直接跳转到system_call这个位置执行。 - 系统调用用户态接口和系统调用的内核处理函数是通过系统调用号匹配起来的
system_call中断服务程序执行流程
从entry(system_call)开始执行,根据系统调用号来查sys_call_table表中的位置,调用系统调用对应的处理函数,在syscall_exit里面判断当前任务是否需要处理syscall_exit_work,进入syscall_exit_work,这是最常见的进程调度时机点。
其中sys_call_table(,%eax,4)可以理解为,分派表中每个表项占4个字节,所以先把系统调用号(eax)乘以4,再加上sys_call_table分派表的起始地址,得到系统调用号对应的系统调用内核处理函数的指针。
system_call的执行流程图如下图所示:
其中,cmpl部分是检查系统调用号(应小于nr_syscalls),不合法即跳入syscall_badsys异常处理,movl部分是保存返回值到栈中,syscall_exit检查是否有任务需要处理,有则进入syscall_exit_work,无则恢复现场。实验:分析system_call中断处理过程
上周我进行实验选择的系统调用是38号rename,首先修改menu目录下的test.c文件,添加Rename函数,并在main里menuconfig方法里调用,如下图所示:
在进行make rootfs后,在qemu中的执行效果如下:
后打开gdb,在gdb中调试,在start_kernel和rename的系统调用入口sys_rename两个地方设置断点,执行效果如下图所示:
在menuOS中执行rename指令后,断点停在sys_rename系统调用入口处,如下图所示:
对system_call的流程理解见上部分流程图所示。
总结
本周实验是了解系统调用在内核代码中的处理过程,实验实践起来会比较容易,但真正了解其在内核代码中的处理过程是十分困难的,在gdb环境下有些特殊的汇编代码还无法跟踪调试。使用 ALD(Assembly Language Debugger)这个汇编代码调试器可以完成汇编代码的调试,这会在以后进行实现。总统来说,进行本实验之后对system_call的关键流程有了清晰的了解,具体的细节指令还有待研究。
本周的实验遇到一个路径问题。在LinuxKernel/menu目录下直接执行init可执行文件,在menuOS下执行rename指令,发现指令返回提示成功,并成功更改文件名,如下图所示:
后把文件名更改回原文件名,在qemu环境下启动内核和menuOS,执行rename指令,指令返回error,并未成功更改文件名,如下图所示:
翻看rename函数源代码,判断应该是文件的路径问题,源码中使用的是相对路径,更改文件路径为绝对路径依然不能成功更改文件名。就非常疑惑,qemu环境下运行menuOS默认的相对路径到底在什么位置?
与同学讨论,大多也遇到了这个问题。本来想使用mkdir系统调用指令来生成文件,后在shell中使用find指令查找此文件夹,但是遇到了访问路径权限不足的问题,升级到root权限也无济于事。。。根据多个系统调用指令实验初步猜想,qemu环境没有默认的路径,其直接从内存中读写文件。这只是猜想,还望了解此问题的同学、老师看到此博可以给予指导解答。
《Linux内核原理与分析》第六周作业的更多相关文章
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业
2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...
- 2017-2018-1 20179215《Linux内核原理与分析》第二周作业
20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...
- 2019-2020-1 20199329《Linux内核原理与分析》第九周作业
<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...
- 2019-2020-1 20209313《Linux内核原理与分析》第二周作业
2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- 《Linux内核原理与分析》第一周作业 20189210
实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...
- 2020-2021-1 20209307 《Linux内核原理与分析》第九周作业
这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业> 这个作业的目标 & ...
随机推荐
- linux centos7添加ip黑名单禁止某个ip访问
centos7用的是firewall 添加单个黑名单只需要把ip添加到 /etc/hosts.deny 格式 sshd:$IP:deny vim /etc/hosts.deny 添加你要禁止的i ...
- spring boot 2整合mybatis
mybatis-spring-boot-starter主要有两种解决方案,一种是使用注解,一种是使用XML. 参考这篇文章动手跑了一个例子,稍微不同之处,原文是spring boot,这里改成了spr ...
- node:express:error---填坑之路
express版本4.0之后需要安装的东西 npm install -g express npm install -g express-generator jade转换成ejs(修改为html引擎,打 ...
- Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded datasource could be auto-configured.
从报错信息中,我们就可以分析出错误原因是触发了数据源的自动化配置,然而当前项目其实并不需要数据源.查其根源是依赖方提供的API依赖中引用了一些多余的依赖触发了该自动化配置的加载. 如何解决 为了解决上 ...
- mac系统删除.DS_Store文件
查找某目录下某类文件 find . -name ".DS_Store" -type f -print # find: 主命令 # . : 当前目录下(可变) # -name: 通过 ...
- 将npm的注册表源设置为国内的镜像
1.国内用户,建议将npm的注册表源设置为国内的镜像,可以大幅提升安装速度 2.国内优秀npm镜像推荐及使用:http://riny.net/2014/cnpm/ 淘宝npm镜像 ·搜索地址:http ...
- ST MCU_GPIO的八种工作模式详解。
补充: N.P型的区别,就是一个为正电压启动(NMOS),一个为负电压启动(PMOS) GPIO的八种工作模式详解 浮空输入_IN_FLOATING带上拉输入_IPU带下拉输入_IPD模拟输入_AIN ...
- fastJson设置接口只接受json格式数据
spring-mvc/servlet.xml <mvc:annotation-driven> <mvc:message-converters register-defaults=&q ...
- 【分布式搜索引擎】Elasticsearch中的基本概念
一.Elasticsearch中的基本概念 以下概念基于这个例子:存储员工数据,每个文档代表一个员工 1)索引(index) 在Elasticsearch中存储数据的行为就叫做索引(indexing ...
- js禁止页面滚动
开发移动端页面的时候有一个很比较常见的需求,在出现弹窗时,禁止滑动弹窗后面的主体页面.如何实现呢,往下看 js实现整个页面禁止滚动: document.body.addEventListener('t ...