张文俊+ 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

学习总结

1、给MenuOS增加time和time-asm命令

首先,将time这两个文件添加到MenuOS里面,需要以下指令:

rm menu -rf //其中,-rf为强制删除命令

然后通过以下指令重新克隆一个menu:

git clone https://github.com/mengning/menu.git

然后按照之前的课程编译启动MenuOS。

进入MenuOS后,关键是查看GetPid和GetPidAsm两个命令。

总结来说,给MenuOS增加GetPid和GetPidAsm两个命令,需要按照四个步骤:

(1)更新menu代码到最新版

(2)在main函数中增加MenuConfig

(3)增加对应的GetPid函数和GetPidAsm函数

(4)make rootfs

2、如何调试time——使用gdb跟增系统调用内核函数sys_time

首先,使用-s -S命令进行调试:

进入gdb后,将vmlinux加载进来:

加载进之后,链接Target remote 1234,链接到需要调试的MenuOS:

对sys_time设置断点:

现在c运行之后,系统会启动,MemuOS正常启动。如果这时执行time命令,会发现它卡住了:

list可以查看内部代码,如果这里一直按s单步执行,会进入schedule函数。

sys_time返回后进入汇编代码处理gdb无法继续追踪。

3、系统调用在内核代码中的工作机制和初始化

主要分析从system_call到返回的整个过程。

首先,了解系统调用机制的初始化:

其中,在start_kernel的trap_init里,我们可以看到设计了一个trap_gate函数。

syscall_vector是系统调用中断向量,system_call是汇编代码的入口。

因此,初始化的结果是:这时代码中一旦执行int0X80,CPU就会直接跳转到system_call这个位置上。

system_call之后的指令入口如下:

从上述代码开始分析:

系统调用也是一种中断,也存在保护现场(SAVE_ALL)和恢复现场(RESTORE_ALL)的问题。

下面,sys_call_table调用系统调度表,其中eax传递系统调用号,找到对应的系统调用(在老师的例子里就是sys_time)。

然后执行syscall_after_call,保存返回值eax;继续执行syscall_exit,查看是否需要跳转到syscall_exit_work。不需要的话,就恢复现场,然后返回结束。

如果需要跳转到syscall_exit_sork,则执行work_pending,其中包含work_notifysig,是处理信号的。

可以执行work_resched,是处理重新调度的。

然后恢复并返回结束。

流程图示:

内核:很多种不同的中断处理过程的集合。

“Linux内核分析”第五周报告的更多相关文章

  1. LINUX内核分析第五周学习总结——扒开系统调用的“三层皮”(下)

    LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...

  2. LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)

    LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下) 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...

  3. 20135327郭皓--Linux内核分析第五周 扒开系统调用的三层皮(下)

    Linux内核分析第五周 扒开系统调用的三层皮(下) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/U ...

  4. linux内核分析第五周学习笔记

    linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  5. Linux内核分析第五周——扒开系统调用的“三层皮”(下)

    Linux内核分析第五周--扒开系统调用的"三层皮"(下) 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.1 ...

  6. Linux内核分析第五周学习总结——分析system_call中断处理过程

    Linux内核分析第五周学习总结--分析system_call中断处理过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  7. Linux内核分析——第五周学习笔记

    第五周 扒开系统调用的“三层皮”(下) 一.知识点总结 (一)给MenuOS增加time和time-asm命令 在实验楼中,首先 强制删除menu (rm menu -rf) 重新克隆一个新版本的me ...

  8. Linux内核分析第五周学习总结:扒开系统调用的三层皮(下)

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给MenuO ...

  9. linux内核分析 第五周

    一.实验相关 1.下载老师最新的menu文件,并在其中添加上周所编写的代码,并运行 下载 添加 运行 2.gdb调试跟踪 gdb设置跟踪文件(先进入linux-3.18.6所在的文件) gdb设置断点 ...

随机推荐

  1. 【PAT】B1070 结绳(25 分)

    此题太给其他25分的题丢人了,只值15分 注意要求最终结果最长,而且向下取整 #include<stdio.h> #include<algorithm> using names ...

  2. python基础、字符串和if条件语句,while循环,跳出循环、结束循环

    一:Python基础 1.文件后缀名: .py 2.Python2中读中文要在文件头写: -*-coding:utf8-*- 3.input用法      n为变量,代指某一变化的值 n = inpu ...

  3. Windows Server 2012 RS 配置IIS8.0+发布网站

    一.配置iis 8.0 IIS 8.0 是 windows server 2012 自带的服务器管理系统.相比之前版本,IIS 8.0 安装和操作都更加简单,界面也很简洁,安装也很迅速. 1. 进入w ...

  4. Linux 小知识翻译 - 「小型移动式PC」

    这次介绍下新闻上提到的「小型移动式PC」.(这个当时日本新闻上的内容) 最近,经常在日本的大卖场中看到一种小型的移动式PC.不仅是小巧方便携带,而且价格也便宜.而且,省电功能的加入,使电池能工作更长的 ...

  5. 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)

    好,现在进入高阶代码篇. 目的: 爬取昆明市中学的兴趣点POI. 关键词:中学 已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 昆明市坐标范围: 左下角:24.390894 ...

  6. 「PKUWC2018」随机游走

    题目 我暴力过啦 看到这样的东西我们先搬出来\(min-max\)容斥 我们设\(max(S)\)表示\(x\)到达点集\(S\)的期望最晚时间,也就是我们要求的答案了 显然我们也很难求出这个东西,但 ...

  7. 关于PHP中浏览器禁止Cookie后,Session能使用吗?

    sessionid是存储在cookie中的,解决方案如下: Session URL重写,保证在客户端禁用或不支持COOKIE时,仍然可以使用Session session机制.session机制是一种 ...

  8. M600 (1)飞行注意事项

  9. MySQL 基础七 视图

    -- 查看表 SELECT * FROM student; SHOW CREATE TABLE student; -- 创建视图 CREATE VIEW v_student1 AS SELECT *F ...

  10. esp-adf Element PipeLine

    audio_element: 开发基于ADF的程序软件最基本的模块就是audio_element对象.所有的编码.解码.过滤.输入流.输出流实际上都是audio_element.(这个是官方的文件我翻 ...