《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内核原理与分析第九周作业> 这个作业的目标 & ...
随机推荐
- 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...
- Vue:(二)基础常用语法
(一)模板语法 Mustache语法:{{ msg }} Html赋值:v-html = " " 绑定属性:v-bind:id = " " 使用表达式:{{ o ...
- Eclispe创建maven工程缺失web.xml报web.xml is missing and <failOnMissingWebXml> is set to true的错误
Eclispe创建maven工程缺失web.xml报web.xml is missing and <failOnMissingWebXml> is set to true的错误,一看,还缺 ...
- java笔记 -- GregorianCalendar和DateFormateSymbols 类方法
java.util.GregorianCalendar new GregorianCalendar() 构造一个日历对象, 用于表示默认地区,默认时区的当前时间. new GregorianCalen ...
- opencv的resize和matlab的imresize函数的计算
在用c++代码复现matlab代码时,遇到两者resize函数的结果不相同的问题. opencv: resize(image1, reTmp, Size(, ), , , cv::INTER_LINE ...
- itchat和wordcloud对微信好友的签名进行画像
获取好友列表的时候,返回的json信息中还看到了有个性签名的信息,脑洞一开,把大家的个性签名都抓下来,看看高频词语,还做了个词云. # coding:utf-8 import itchat # 先登录 ...
- SASS 简单实用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python学习(三)
- tensorflow和keras混用
在tensorflow中可以调用keras,有时候让模型的建立更加简单.如下这种是官方写法: import tensorflow as tf from keras import backend as ...
- 多个Activity之间共享数据的方式
现在要做一个项目,多个Activity之间要共享数据,所以要考虑共享数据的方式. 其实有如下5种方式: 1.基于消息的通信机制 Intent ---bundle ,extra 数据类型有限,比如遇到 ...