欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

理解Linux内核深入剖析与源代码解析 - 中国科技大学软件学院MOOC课后笔记第4部分

最编程 2024-02-19 11:15:09
...

用户态和内核态

image.png

image.png

  • 中断处理是从用户态进入内核态主要的方式
  • 系统调用是一种特殊的中断

image.png

  • 中断发生后的第一件事就是保存现场
  • 中断结束后的最后一件事就是恢复现场

image.png

  • 中断处理的完整过程

image.png

系统调用

image.png

操作系统提供的API和系统调用的关系

image.png

image.png

系统调用的三层皮:xyz、system_call、system_xyz

image.png

中断向量0x80与system_call绑定起来

image.png

系统调用的参数传递方法

image.png

使用库函数API获取系统当前时间

#include <stdio.h>
#include <time.h>

// gcc timedemo.c -m32 && ./a.out
int main()
{
    time_t tt;
    struct tm *t;
    // tt = time(NULL);
    asm volatile(
        "mov $0,%%ebx\n\t"
        "mov $0x0d,%%eax\n\t"
        "int $0x80\n\t"
        "mov %%eax,%0\n\t"
        : "=m" (tt)
    );
    t = localtime(&tt);
    printf("%d-%d-%d %d:%d:%d\n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
           t->tm_hour, t->tm_min, t->tm_sec);
    return 0;
}

给 MenuOS 增加 time 命令

code image.png

debug

启动

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

image.png

gdb

file linux-3.18.6/vmlinux

target remote:1234