2019-2020-1 20199304《Linux内核原理与分析》第六周作业
第五章 系统调用的三层机制(下)
1.往MenuOS中添加命令
(1)首先进入LinuxKernel文件夹,将menu目录删除。然后再git clone克隆下载更新了版本之后的menu目录(包含time和time-asm系统调用)。
cd LinuxKernel/ //进入LinuxKernel文件夹
rm -rf menu //将menu目录删除
git clone http://github.com/mengning/menu.git //克隆下载更新了版本之后的menu目录
(2)进入menu文件夹,使用make rootf进入MenuOS,并使用help命令查看现有的命令。
cd menu/ //进入menu文件夹
make rootfs //进入MenuOS
MenuOS>>help //并使用help命令查看现有的命令
(3)在test.c中加入getpid()。
sudo gedit test.c //编辑test.c
(4)再次使用make rootfs命令,make rootfs成功后,输入help命令查看新增的GPid,然后输入GPid命令成功返回pid的值。
make rootfs //将根目录系统重新编译
MenuOS>>help //查看新增的GPid
MenuOS>>GPid //调用GPid查看返回值
2.使用gdb跟踪系统调用内核函数sys_time
(1)返回LinuxKernel目录,然后用如下命令启动内核,内核被冻结起来。
cd LinuxKernel //返回LinuxKernel目录
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S //启动内核
(2)使用水平分割,打开一个shell窗口,使用gdb调试,打开vmlinux,连接1234端口,并在start_kernel处设置断点。
(gdb)file linux-3.18.6/vmlinux
(gdb)target remote:1234
(gdb)b start_kernel
(3)在sys_time处设置断点,并c继续调试,启动MenuOS后执行time命令,程序停在sys_time处。
(gdb)b sys_time
(gdb)c
(4)使用list命令列出sys_time对应的代码。并使用s命令单步调试。
(gdb)list
(gdb)s
分析system_call汇编代码过程
在system_call处设置断点,查看system_call
通过结果分析,它其实就是系统调用的处理过程,内部没有严格遵守函数调用堆栈基址,不支持gdb的调试,所以MenuOS中仍停留在sys_time。
从system_call到iret的流程图
总结
通过本实验,查阅相关资料,我了解到系统调用时,首先通过save_all来保存现场,然后进行系统调用,并将返回值放入寄存器eax中,然后确认有没有其他的中断进入,以便设置返回信号。如果没有就从系统调用返回,并通过函数restore_all恢复现场;如果有就进入函数syscall_exit_work,查看有没有挂起的任务,有就转入函数work_pending进行任务调度,没有就返回,并恢复现场。
2019-2020-1 20199304《Linux内核原理与分析》第六周作业的更多相关文章
- 2019-2020-1 20199329《Linux内核原理与分析》第九周作业
<Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...
- 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 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中的应用程序大都为开源自由的软件, ...
- 2018-2019-1 20189221《Linux内核原理与分析》第二周作业
读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- Redis集群--Redis集群之哨兵模式
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 搭建R ...
- UiPath之数据透视表
今天给各位小伙伴们讲讲如何使用UiPath来创建数据透视表,相信大家在Execl中经常会使用. ---小U的QQ群(714733686):小U的订阅号[UiPath8888]--- 在UiPath里面 ...
- NOIP 模拟29 B 侥幸
这次考得好纯属是侥幸,我T3打表试数试了两个小时,没有想打T2的正解(其实是打不出来)所以这个T3A掉纯属是侥幸,以后还是要打正解 (以下博客最好按全选观看,鬼知道为啥这个样子!) 在这里也口胡一下我 ...
- 关于vue ui组件
一.vue ui 组件 1: vue 当前很火前端框架vue 针对PC用户 pc 端与移动端区别 (1)屏幕宽度:992px > (2)操作方式:鼠标 事件 手指:触碰操作 -饿了么:基于 ...
- JVM原理速记复习Java虚拟机总结思维导图面试必备
良心制作,右键另存为保存 喜欢可以点个赞哦 Java虚拟机 一.运行时数据区域 线程私有 程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是Native方法则为空),是唯一一个没有规定 ...
- Java升级那么快,多个版本如何灵活切换和管理?
前言 近两年,Java 版本升级频繁,感觉刚刚掌握 Java8,写本文时,已听到 java14 的消息,无论是尝鲜新特性(Java12 中 Collectors.teeing 超强功能使用),还是由于 ...
- [LC] 112题 路径总和(在二叉树里判断是否有哪条路径之和等于某个值)
①题目 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum ...
- Flutter 构建的 Mac 桌面应用上无法发出网络?
在上一篇文章中我们分享了,如何开发桌面应用.在本章文章中,来解决一下为何在 Mac 中无法发出网络情况的原因. 起因 事情起因是这样的:我总觉得写一个 Demo 不足以体现我们开发同学的能力.直到最 ...
- hostnamectl命令 主机名 host相关命令
hostnamectl set-hostname CentOS7设置主机名为CentOS7 hostnamectl status查看主机系统信息 注:host+TAB查阅host相关的所有命令 hos ...
- JavaScript中解析JSON --- json.js 、 json2.js 以及 json3.js的使用区别
JSON官方(http://www.json.org/)提供了一个json.js,json.js是JSON官方提供的在JavaScript中解析JSON的js包,json.js.json2.js.js ...