理解Linux内核深入剖析与源代码解析 - 中国科技大学软件学院MOOC课后笔记第4部分
最编程
2024-02-19 11:15:09
...
用户态和内核态
中断处理是从用户态进入内核态主要的方式
-
系统调用
是一种特殊的中断
- 中断发生后的第一件事就是
保存现场
- 中断结束后的最后一件事就是
恢复现场
- 中断处理的完整过程
系统调用
操作系统提供的API和系统调用的关系
系统调用的三层皮:xyz、system_call、system_xyz
中断向量0x80与system_call绑定起来
系统调用的参数传递方法
使用库函数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
debug
启动
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
gdb
file linux-3.18.6/vmlinux
target remote:1234