20135220谈愈敏Blog5_系统调用(下)
系统调用(下)
谈愈敏 原创作品转载请注明出处 《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000
给MenuOS增加time和time-asm命令
上周是从用户态的观点来理解系统调用,这周从内核态出发研究系统调用,通过跟踪调试,首先把上周的两个命令加到MenuOS中:
rm menu -rf 强制删除原menu文件
git clone http://github.com/mengning/menu.git 从github中克隆
cd menu
make rootfs 运行自动编译脚本,生成根文件系统,启动MenuOS
- 更新menu代码到最新版
- 在main函数中增加MenuConfig(一个命令一行,与上面的格式一样)
- 增加对应的time和time-asm函数(就是上周写的两个函数)
- make rootfs (rootfs是一个脚本,可以自动生成,编译)
使用gdb跟踪系统调用内核函数sys_time
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
gdb
(gdb)file linux-3.18.6/vmlinux //加载符号表
(gdb)target remote:1234 //连接
b sys_time:在系统调用time的位置设置断点
c:继续执行,停在断点处
n/s:单步运行,s进入函数,n不进入
系统调用在内核代码中的处理过程
需要主要理解的过程:int 0x80触发一个系统调用 ->执行系统调用处理函数system_call ->返回到用户态。
返回到用户态之前有一个进程调度的时机,会跟踪到schedule
回顾:
- 中断向量int 0x80 ->system_call,初始化时绑定
- 系统调用号将xyz和中断服务程序sys_xyz关联起来
系统调用机制的初始化
main.c中start_kernel函数:trap_init()
set_system_trap_gate(SYSCALL_VECTOR,&system_call)
SYSCALL_VECTOR:系统调用的中断向量
&system_call:汇编代码入口
一执行int 0x80,系统直接跳转到system_call。
理解system_call到iret之间的主要代码
系统调用返回前可能进行进程调用,里面会发生进程上下文的切换。
从系统调用入口开始:ENTRY(system_call)
SAVE_ALL //保存现场
system_call:
call *system_call_table(,%eax,4)
//调用了系统调用处理函数,有系统调用号eax中,是实际的系统调用处理程序。
当前任务syscall_exit_work里面有work_pending里面有
work_notifysig //处理pending信号,不用管
重要的是work_resched:call schedule //决定了进程调度的代码,调用完会跳转到restore_all
restore_all //恢复现场
INTERRUPT_RETURN //irp_return宏,中断处理过程在这结束
实验
rm menu -rf 强制删除原menu文件
git clone http://github.com/mengning/menu.git 从github中克隆
cd menu
make rootfs 运行自动编译脚本,生成根文件系统,启动MenuOS

在test.c中增加上周编写的两个函数:Getpid()和GetpidAsm()

并修改test.c中的main函数,添加两行代码MenuConfig

重新编译运行make rootfs,在MenuOS中输入help,发现有刚才添加的两个系统调用,分别执行getpid、getpid-asm:

插入断点进行调试:


从system_call开始到iret结束的流程图:

总结
本周前两个视频教的大概是实验内容,学会如何给内核添加新的系统调用命令,并用gdb进行跟踪调试,我们自己动手做了实验,具体函数代码上周也写过了。后面几个视频重点是理解system_call到iret之间的主要代码,它的整个流程,笔记和流程图都是它的一个总结。
20135220谈愈敏Blog5_系统调用(下)的更多相关文章
- 20135220谈愈敏Blog4_系统调用(上)
系统调用(上) 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 用户态 ...
- 20135220谈愈敏Blog8_进程的切换和系统的一般执行过程
进程的切换和系统的一般执行过程 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-100002 ...
- 20135220谈愈敏Blog7_可执行程序的装载
可执行程序的装载 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. ...
- 20135220谈愈敏Blog3_构造一个简单的Linux系统MenuOS
构造一个简单的Linux系统MenuOS 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1 ...
- 20135220谈愈敏Blog6_进程的描述和创建
进程的描述和创建 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 进程 ...
- 20135220谈愈敏Blog2_操作系统是如何工作的
操作系统是如何工作的 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计 ...
- 20135220谈愈敏Linux_总结
Linux_总结 具体博客链接 计算机是如何工作的 操作系统是如何工作的 构造一个简单的Linux系统MenuOS 系统调用(上) 系统调用(下) 进程的描述和创建 可执行程序的装载 进程的切换和系统 ...
- 20135220谈愈敏Linux Book_4
进程调度 进程:程序的运行态表现形式 进程调度程序:确保进程能有效工作的一个内核子系统,决定将哪个进程投入运行.何时运行以及运行多长时间,在可运行态进程之间分配有限的处理器时间资源. 最大限度的利用处 ...
- 20135220谈愈敏Linux Book_3
第3章 进程管理 进程是Unix操作系统抽象概念中最基本的一种,进程管理是操作系统的心脏所在. 3.1 进程 进程:处于执行期的程序以及相关的资源的总称. 线程:在进程中活动的对象,拥有独立的程序计数 ...
随机推荐
- File API
ES5 推出了一系列的 API: BLOB (二进制大对象) File (文件接口,基于 BLOB,但是增加了文件相关的方法,比如路径,大小) FileList (借助 <input type= ...
- Python接口自动化--requests 2
# _*_ encoding:utf-8 _*_ import json import requests #post请求 payload = {"cindy":"hell ...
- FFT && NTT板子
贴板子啦-- FFT板子:luogu P3803 [模板]多项式乘法(FFT) #include<cstdio> #include<iostream> #include< ...
- Jenkins与Github集成
Jenkins目前是手动进行项目构建的,如何才能做到Github并持续集成呢? 配置前要求: 1.Jenkins已经安装Github插件 2.Jenkins服务器已经拥有一个公网IP地址 第一步:配置 ...
- 允许Ubuntu系统下Mysql数据库远程连接
第一步: vim /etc/mysql/my.cnf找到bind-address = 127.0.0.1 注释掉这行,如:#bind-address = 127.0.0.1 或者改为: bind-ad ...
- 【本地服务器】用nginx进行反向代理处理(windows)
在通过json-server搭建本地服务器得到 http://localhost:3000/todos 的基础上,要想将接口改为www.test.com/todos这样的形式 ,则需要用nginx ...
- Python学习系列:PyCharm CE 安装与测试
开坑啦开坑啦~最近比赛要用Python了,开始强行学习. Mac下PyCharm CE 安装 先去百度PyCharm,一个很好用IDE,下载免费版的就够用啦: https://www.jetbrain ...
- 《网络对抗》Exp4 恶意代码分析
20155336<网络对抗>Exp4 恶意代码分析 问题回答 实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监 ...
- PX Deq: Execution Msg 等待事件
可参考 MOS文档: WAITEVENT: "PX Deq Credit: send blkd" (Doc ID 271767.1) P1 = sleeptime/senderid ...
- 11.8 开课二个月零四天 (Jquery)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...