2017-2018-1 20179203 《Linux内核原理与分析》第五周作业
攥写人:李鹏举 学号:20179203
( 原创作品转载请注明出处)
( 学习课程:《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 )
一、实验要求:
1.选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl
2.参考视频中的方式使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,推荐在实验楼Linux虚拟机环境下完成实验。
二、实验过程:
首先,选择使用的系统调用:我选择的是64号 getppid。网上找到关于该函数的使用与说明:getppid(取得父进程的进程识别码)
表头文件 #include<unistd.h>
定义函数 pid_t getppid(void);
函数说明 getppid()用来取得目前进程的父进程识别码。
返回值 目前进程的父进程识别码。
确定好函数后,写下相关的代码:
编译后执行结果如下:
接着将函数调用的部分改为嵌入式汇编语句:
最后执行嵌入式汇编文件,查看执行结果:
三、实验结果分析
首先附上完整的代码:
c语言代码:
#include<unistd.h>
void main()
{
printf("My parent pid =%d\n",getppid());
}
嵌入式汇编代码:
include <unistd.h>
int main()
{
int a=0;
asm volatile(
"mov $0,%%ebx\n\t"
"mov $0x40,%%eax\n\t"
"int $0x80\n\t"
"mov %%eax,%0\n\t"
:"=m"(a)
);
// a = getppid();
printf("the number of pid is:%d\n",a);
}
分析一下这段汇编代码,首先将ebx置零,汇编调用时的初始化做法,然后把相应函数的终端号写入eax寄存器。可能有人会怀疑,上文中写到了getppid()函数的中断号是64,为何在这里写的是40,这是因为这里写出的是16进制的64,由于寄存器的大小而决定的需要写16进制的数字。两个16进制的数字刚好一字节。接着的int $0x80 为AT&T语法的中断指令,通过中断的调用,将把调用号装入eax寄存器实现,然后实现相应的值的个改变的过程。将数值由EAX给到a中。这是整个汇编语句执行的过程。
可能会有同学怀疑我的实验是不是做的有问题,为什么汇编的结果和C语言出来的结果完全不同。这就涉及到这个函数的功能问题了。getppid()是用来取得目前进程的父进程识别码,每个程序在执行的时候分配的进程是不同的,所以其父进程自然也不同,所以输出两个不同的数字是十分正常的。
结合书中所学和本周的视频和实验,我在这里简单说说我对中断的理解。中断是操作系统当中很重要的一个工作方式,首先所有程序和硬件设备都需要占用CPU,而且有的程序需要占用大量的CPU时间,但是CPU该如何分配工作呢,举一个简单的例子,比如我现在打字用的键盘,这个硬件设备在不使用时是不需要占用CPU的,但是当我敲击键盘的时候我就需要我打的字能够马上出现,因此它不可能一直占有CPU,而是在我打字的时候向CPU发送中断,这时CPU会响应它的请求,在我们看来键盘打字马上就会有反应就会认为CPU一直在等着键盘,有东西就输出,但其实CPU很忙的,它不会等你给它东西,它会忙自己的事,当你准备好的时候,向它发送一个中断,它响应你的要求而已。不过这个过程很快我们根本察觉不到。
那么一个中断来临时究竟经过怎样的工作呢?当一个中断来临时应该先设置断点,保存当前的中断现场,然后按照中断表去找到相应的中断程序进行执行,然后再执行完当前的中断程序之后返回之前的断点,回复中断现场继续执行程序,这是一个完整的中断执行的过程。那么当执行中断程序的时候会不会还能进行中断呢,答案是可以的,但是并不是一定会打断当前的程序,中断也是有等级的,低级的中断自然无法打断高级的中断程序。但是当比其中断等级高的程序来到时自然还是要响应中断的,这就是中断嵌套。但是操作系统并不会由于中断过多而导致出现问题,只要在每次中断来临时保存断点,然后执行中断后进行恢复就好了,这里的记录断点和恢复断点的工作当然就是通过压栈和弹栈来实现的。这就是我对中断的简单理解。
2017-2018-1 20179203 《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中的应用程序大都为开源自由的软件, ...
- 2018-2019-1 20189221《Linux内核原理与分析》第二周作业
读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- Python一些基础练习题
可变的数据类型:list, dict, set(可修改其中的元素) 不可变的数据类型:str, tuple 重点:str, list, dict (1).推导式练习 # 利用列表推导式: 找出100以 ...
- 九度OJ 1202:排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:19711 解决:6508 题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100). ...
- UIApplicationDelegate 各方法回调时机
本篇文章主要介绍一些UIApplicationDelegate中几个常用的回调方法的调用时机.以帮助你判断哪些方法倒底放到哪个回调中去实现. 1. – (void)applicationDidFini ...
- Smarty模板的逻辑运算符号稍微做一下总结
对Smarty模板的逻辑运算符号稍微做一下总结,以备后用. eq equal : 相等neq not equal:不等于gt greater than:大于lt less th ...
- 使用JSTL在页面前的空行怎么去除?
解决的方法是:在每个JSP的头上加上一段代码 <%@ page trimDirectiveWhitespaces="true" %>
- Java实现微信网页授权
开发前的准备: 1.需要有一个公众号(我这里用的测试号),拿到AppID和AppSecret: 2.进入公众号开发者中心页配置授权回调域名.具体位置:接口权限-网页服务-网页账号-网页授权获取用户基本 ...
- CentOS6安装DaoCloud加速器
天朝的网,你又不是不懂.我最爱的红杏最近也用不了了.FUCK GFW. 在这,我们使用DaoCloud的加速器,打开网址 https://dashboard.daocloud.io/mirror 找到 ...
- 【thrift】初识thrift
Reference:http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/ http://jacksongblack.blog.51c ...
- 11.23 Eclipse
一.Eclipse Workspace File-->Switch Workspace 编译环境:Window -- Preferences – Java - Compiler 运行环境:Win ...
- C#快速入门笔记(1)——基础语法
C#快速入门笔记(1)——基础语法 总体框架: