20169210《Linux内核原理与分析》第六周作业
这次博客分为两部分,第一部分是实验,第二部分是教材。
第一部分:实验
这周实验的内容是使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,教学案例给的是time()获取系统时间的函数,我用的是getpid()获取当前进程的pid的函数。前20个系统调用号如下图所示

我选择的是20号getpid(),获取的是当前进程的pid.
开始时Code中是没有函数的,我们来新建一个

创建好了之后我们首先使用库函数API来使用系统调用,代码如下。

其中sys/types.h是基本系统数据类型,是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型。
unistd.h是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数。
这些都是通过查资料得到的。
之后就是编译一下getpid.c然后运行得出结果。如图所示

我们可以看到执行结果是pid:3149
下一步就是使用C代码中嵌入汇编代码调用系统调用。创建getpid-asm.c并编写代码。

通过嵌入式汇编我们可以看到
mov $0, %%ebx\n\t
mov $0x14, %%eax\n\t
int $0x80\n\t
mov %%eax,%0\n\t
:"=m"(p)
第一句是指把ebx寄存器清零;第二句的14表示的是16进制的20,因为getpid的系统调用号是20,将20号放到eax寄存器中;第三句是早就设定好的,执行系统调用;第四句是将返回的结果在eax中放到%0中,%0指的就是p。至此系统调用完成,返回结果在p中。
接下来就是编译然后运行,如图所示

我们看到执行结果不是一样的,再执行一次

执行结果跟前两次的都不一样,因为每次调用进程都会改变,所以进程的pid也会不一样。
遇到的问题:
1.开始选系统调用是不知道每个系统调用的具体作用以及参数的个数及类型,经过查资料,看sys_call函数,清楚了一些系统调用的参数的类型以及个数,网址如下
http://lxr.free-electrons.com/source/include/linux/syscalls.h?v=3.18#L223
2.c语言的头函数开始时不知道写那个,后来上网查看别人写的系统调用,再加上对头函数的解释,这才明白sys/types.h和unistd.h的作用。
第二部分:教材
第7章中断和中断处理第8章下半部和推后执行工作。
又想中断处理程序运行的快,又想中断处理程序完成的工作量多,这两个目的显然有所抵触。鉴于两个目的之间存在此消彼长的矛盾关系,所以我们一般把中断处理切成两个部分或两半。中断处理程序是上半,收到一个中断就立即执行,但只做有严格时限的工作。这些工作都是在所有中断被禁止的情况下完成的,能够被允许稍后完成的工作会推迟到下半部去。
20169210《Linux内核原理与分析》第六周作业的更多相关文章
- 20169210《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...
- 20169212《Linux内核原理与分析》第二周作业
<Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...
- 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语言程序并分析其汇编指令执行过程 因 ...
随机推荐
- TDirectory.Delete 创建删除目录简单示例
使用函数: 1.System.IOUtils.TDirectory.CreateDirectory//创建目录 2.System.IOUtils.TDirectory.Exists // ...
- sql join 用法
SQL JOIN 的用法 关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2:create tabl ...
- 服务器慢 mysql-bin.000001文件占满磁盘的原因与解决
发现 VPS 服务器上的网站反应超级慢,简单的重启.重启各主要服务,发现mysql 的反应极其不正常. 一方面是问题,这与站点访问量有关.开始时从mysql 的配置文件 my.cnf 考虑,但志文工作 ...
- 股票API
实时股票数据接口大全 股票数据的获取目前有如下两种方法可以获取:1. http/javascript接口取数据2. web-service接口 1.http/javascript接口取数据 1.1Si ...
- 在vmware 6.5+ubuntu12.04上安装VMware tools出现问题的分析
笔者已经写了一篇关于安装"VMware Tools",以实现文件共享的文章,那篇文章对于你实现共享操作是足够了, 所以,倘若你赶时间不如直接去在虚拟机的linux中利用VMware ...
- python学习之”迭代从入门到精通“
在开发的过程中,假如给你一个list或者tuple,我们可以通过for循环来遍历这个list或者tuple,这种遍历我们成为迭代(Iteration).在Python中,迭代是通过for ... in ...
- AD RMS Bulk Protection Tool 批量加密解密office文档
1.Active Directory Rights Management Services Bulk Protection Tool http://www.microsoft.com/zh-cn/d ...
- 【技术贴】解决Mysql启动服务报错1067 进程意外终止
无法启动MYSQL服务错误1067 进程意外终止. 我使用2013-10-25_appserv-win32-2.6.0.exe安装的MySql,结果服务起不来. 于是细心机智的我发现,在F:\stud ...
- js node
http://blogs.msdn.com/b/scott_hanselman/archive/2011/11/29/window-iis-node-js.aspx http://www.16kan. ...
- 只看Delphi自带的WnAPI帮助似乎不够
比如,MessageBox在Delphi自带帮助的参数说明中,对其第四个参数的MB_类型说明只有最常见的6种类型,这么多年搞得我天经地义的以为MessageBox就是这么简单.今天看了一位前辈写的老代 ...