码迷,mamicode.com
首页 > 系统相关 > 详细

linux内核分析第四次实验

时间:2016-03-20 11:41:38      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

实验步骤:

 

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用。本次实验中我使用第20号系统调用getpid()函数,用于取得进程识别码。

  • C代码(getpid.c):

    #include <unistd.h>
    #include <stdio.h>
    
    int main()
    {
        pid_t pid;
        pid = getpid();
        printf("pid = %d \n",pid);
        return 0;
    }
    
    • 编译及运行结果见下图:

技术分享

 

  • 嵌入汇编代码getpid_asm.c:

    #include <unistd.h>
    #include <stdio.h>
    
    int main()
    {
        pid_t pid;
        pid = getpid();
        asm volatile(
                "mov $0,%%ebx\n\t" //系统调用传递第一个参数使用ebx,因为这里没有传入参数所以是null
                "mov $0x14,%%eax\n\t" //使用%eax传递系统调用号20,用16进制表示为0x14
                "int $0x80\n\t" //执行系统调用 
                "mov %%eax,%0\n\t" //将%0(即pid的返回值)放到%eax寄存器中
                : "=m" (pid)   
            );  
        printf("pid = %d \n",pid);
        return 0;
    }
    
    • 编译及运行结果见下图:

技术分享

 

实验总结:

 

系统调用是操作系统为用户态进程与硬件设备进行交互提供的一组接口,也是一种特殊的中断,可使用户态切换到内核态。当用户态进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数。

linux内核分析第四次实验

标签:

原文地址:http://www.cnblogs.com/20135118lpy/p/5297217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!