zoukankan      html  css  js  c++  java
  • 2019-2020-1 20199325《Linux内核原理与分析》第五周作业

    第五周作业主要是选择一个系统调用(13号系统调用time除外),使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,在实验楼Linux虚拟机环境下完成实验。

    系统调用的列表参见 http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl


    #include <stdio.h>
    #include <unistd.h>
    
    int main(void){
        pid_t tt;
        asm volatile(
                "movl $0x14, %%eax
    	"   //将系统调用号赋给eax寄存器
                "int $0x80
    	"           //执行系统调用
                "movl %%eax, %0
    	"      //将系统调用执行后的返回值赋给变量tt
                :"=m"(tt)     
                );
        printf("%u
    ",tt);
        return 0;
    
    }
    

    代码分析

    #include <stdio.h>
    #include <unistd.h>
    
    int main(void){
        pid_t tt;
        asm volatile(
                "movl $0x14, %%eax
    	"   //将系统调用号赋给eax寄存器
                "int $0x80
    	"           //执行系统调用
                "movl %%eax, %0
    	"      //将系统调用执行后的返回值赋给变量tt
                :"=m"(tt)     
                );
        printf("%u
    ",tt);
        return 0;
    }
    

    总结

    系统调用:是操作系统为用户态进程与硬件设备进行交互提供的一组接口。Linux操作系统实现一般是:硬件层面->Linux内核->系统调用(服务层次)->应用程序。

    库函数:库函数是为了使人们编程更加方面而预先写好常用的函数封装起来,对外提供接口。系统调用是相对高级的服务,如果由用户直接使用可能不是很方便,那么我们可以事先封装系统调用为API,提供给编程人员使用。系统调用是内核态,库函数是用户态,但一般库函数更符合开发需求。库函数中的API不一定全部是系统调用,有些是直接向用户态提供服务,不需要系统调用。

  • 相关阅读:
    深入理解系统调用
    基于mykernel 2.0编写一个操作系统内核
    交互式多媒体图书平台的设计与实现
    Ubuntu下VSCode调试环境搭建指南-C语言篇
    码农的自我修养之必备技能 学习笔记
    工程化编程实战callback接口学习笔记
    CentOS7.4网络配置
    R-CNN
    CUDA整理
    CUDA by Example 第四章 julia集
  • 原文地址:https://www.cnblogs.com/buhery/p/11694148.html
Copyright © 2011-2022 走看看