linux课程第五周实验及总结(代码片段)

chx791046982 chx791046982     2022-12-20     411

关键词:

 

一、学习总结

  • 给MenuOS增加time和time-asm命令(四步操作命令)

rm menu -rf 强制删除
git clone http://github.com/mengning/menu.git   克隆相关信息
cd menu
make rootfs 一个脚本,自动编译自动生成根文件系统,并自动启动MenuOS
  • 使用gdb跟踪系统调用内核函数sys_time

(gdb)b sys_time
(gdb)c    # 启动到MenuOs
// 在MenuOs中使用time,会停在time函数处
(gdb)list # 可以看到对应代码
(gdb)s    # 单步执行
(gdb)finish # 将这个函数执行完
// 以上两步重复使用,可以看到sys_time函数中的函数,直到看见return i
// sys_time返回后进入汇编代码处理,gdb无法继续进行追踪

系统调用指令:

// 执行int 0x80之后执行system_call对应的代码
(gdb)b system_call # 是可以设置断点的,但是这段是汇编代码,运行时不能在这个断点处停下逐句分析。
  • 系统调用的中断处理过程

    •       系统调用流程图

技术图片

    

    • sys_call_table是系统调用分派表
    • syscall_after_all,需要先保存返回值
    • sys_exit_work
      没有这个就restore_all,返回用户态。
      一旦进入sys_exit_work:会有一个进程调度时机

  • 简化后便于理解的system_call伪代码
    技术图片
  • system_call到iret之间的主要代码
SAVE_ALL保存现场

call *sys_call_table(,%eax,4)调用了系统调度处理函数,eax存的是系统调用号,这段是实际的系统调度程序。

restore_all
INTERRUPT_RETURN,是个宏,实际上就是iret,结束。
这个过程中会有sys_exit_work
sys_exit_work中会有work_pending
work_pending中会有work_notifysig,用来处理信号
可能call schedule 进程调度代码
还可能跳转到restore_all,恢复现场。
从以上可以看出:
  1. 在系统调用返回之前,可能发生进程调度,进程调度里就会出现进程上下文的切换
  2. 进程间通信可能有信号需要处理
系统调用就是一个特殊一点的中断,所以也有保护现场恢复现场

二、实验:分析system_call中断处理过程

  • 增加系统调用

    • 在test.c中增加两个函数,Getpid和GetpidAsm
      技术图片
      技术图片

               技术图片

    • make rootfs后,输入help会显示当前菜单

              技术图片

  • 使用gdb调试

    这里需要注意的就是,因为当前是在menu目录下,而所需要的镜像文件不在这个目录下,这时需要使用全路径,不然的话就会出现像上面第二张图的错误。给time处设置断点:

 

    • 技术图片
      c运行之后,在MenuOs里使用time,可以看到它停了下来
      技术图片

第五周课程总结&试验报告

实验三String类的应用实验目的掌握类String类的使用;学会使用JDK帮助文档;实验内容1.已知字符串:"thisisatestofjava".按要求执行以下操作:(要求源代码、结果截图。)统计该字符串中字母s出现的次数。统计该字符串中子... 查看详情

第五周课程总结&试验报告

Java实验报告班级计科二班学号20188423姓名邹健完成时间2019.9.27评分等级实验三String类的应用一、实验目的(1)掌握类String类的使用;(2)学会使用JDK帮助文档;二、实验内容1.已知字符串:"thisisatestofjava".按要求执行以... 查看详情

第五周编程总结(代码片段)

...logs.com/campus/zswxy/computer-scienceclass4-2018/homework/2826我在这个课程的目标是学会运用数组,字符串这个作业在那个具体方面帮助我实现目标运用字符串进行编程参考文献C语言程序设计Ⅱ7-1统计一行文本的单词个数(15分)本题目要求... 查看详情

20165337第五周实验报告(代码片段)

一.命令行下Java程序开发1.输入mkdir指令建立文件夹。2.输入javac-d.目标文件夹/类名.java编译文件3.输入javac包名.类名运行文件程序运行结果如下:二.使用IDEA调试程序1.编写程序及运行2.依次向下单步调试3.在循环内调试4.调试过程... 查看详情

第五周学习总结-html5(代码片段)

2018年8月12日  暑假第五周,我把HTML剩余的一些标签和用法看完了并学了一些HTML5的标签及用法。  HTML5比HTML多了一些元素,也删去了一些元素。HTML5新增元素图形元素<canvas>定义图形,比如图表和其他图像。该标签基于J... 查看详情

第五周学习总结(代码片段)

第五周学习总结  因为这周我们绝大部分时间是学的shell脚本进阶,所以这周我的博客内容主要是有关shell脚本函数。一我对函数的个人理解  编写shell脚本的时候,我们经常会发现在多个地方使用了相同的代码。如... 查看详情

java第五周学习总结(代码片段)

学号2016-2017-2《Java程序设计》第X周学习总结教材学习内容总结1.接口(1)使用关键字interface来定义一个接口,接口分为接口声明和接口体,例如interfacePrintablefinalintMAX=100;voidadd();floatsum(floatx,floaty);;(2)接口声明,格式如下interfa... 查看详情

第五周编程总结(代码片段)

输入格式:输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。输出格式:输出为排序后的结果,每个单词后面都额外输出一个空格... 查看详情

第五周学习总结(代码片段)

第五周学习总结  因为这一周只学习了网络这一章,内容主要也是网路理论居多,所以这一周的博客我打算写一下使用虚拟机搭建三个路由器和两个主机的路由环境。前提我们需要开启五个CentOS系统。可以把虚拟机复制现... 查看详情

第五周总结

第五周迎来了java的团队合作,找了个好队友,思路很清晰!这周课上只做了一个小小的练习,求数组最大值,因为老师给了一段代码,改了改很快就写出来了。然后就是重头戏,石家庄地铁~我们只完成了最简单的两条线的计算... 查看详情

《java程序设计》第五周学习总结(代码片段)

学号20175313《Java程序设计》第五周学习总结教材学习内容总结第六章主要内容掌握接口的定义接口声明:interface接口名接口体:包含常量的声明和抽象方法。接口体中只有常量没有变量(public、final、static)接口体中只有抽象方法... 查看详情

第五周(代码片段)

这个作业属于哪个课程C语言程序设计II这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/computer-scienceclass4-2018/homework/2826我在这个课程的目标是掌握高级程序设计语言的知识,更重要的是在实践中掌握程序设计的思想和方法,培养... 查看详情

第五周周二练习:实验5sparksql编程初级实践(代码片段)

1.题目:源码:importjava.util.Propertiesimportorg.apache.spark.sql.types._importorg.apache.spark.sql.Rowimportorg.apache.spark.sql.SparkSessionimportorg.apache.spark.sql.DataFrameReaderobjectTestMySQLdefma 查看详情

第五周编程总结(代码片段)

7-1英文单词排序(25分) 本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。输入格式:输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文... 查看详情

第五周编程总结

计算存款利息(1)实验代码#include<stdio.h>#include<math.h>int main (void) int money; double year, rate, interest; scanf("%d %lf %lf", &money, &year, &rate); interest = money * pow (1&n... 查看详情

20175304《java程序设计》第五周学习总结(代码片段)

201753042018-2019-3《Java程序设计》第五周学习总结教材学习内容总结1.接口体中包含常量的声明和抽象方法两部分。接口体中只有抽象方法,没有普通方法,而且接口体中所有的常量的访问权限一定都是public,而且是static常量(允... 查看详情

第五周测试总结分析(代码片段)

1、下列关于接口的说法,正确的是A.接口体中包含常量、变量和抽象方法三部分。B.使用关键字interface来定义一个接口。C.接口体中所有抽象方法的访问权限一定都是public。D.接口体中只有抽象的方法,没有普通方法。答案:BCD解... 查看详情

2018-2019-120165301《信息安全系统设计基础》第五周学习总结(代码片段)

2018-2019-120165301《信息安全系统设计基础》第五周学习总结学习目标了解常见的存储技术(RAM、ROM、磁盘、固态硬盘等)理解局部性原理理解缓存思想理解局部性原理和缓存思想在存储层次结构中的应用高速缓存的原理和应用学... 查看详情