(一)给MenuOs增加time和time-asm命令 更新menu代码到最新版 在main函数中增加MenuConfig 增加对应的Ttime和TimeAsm函数 make rootfs (二)使用gdb跟踪系统调用内核函数sys_time 1.sys_time返回后进入汇编代码处理gdb无法继续跟踪 2.执行0x80之后执行system_call对应的代码 3.entry32.s中system_call 不是一个函数,只是一段汇编代码的起点,gdb不能跟踪它. (三)系统调用在内核代码中的处…
LINUX内核分析第四周--扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断处理过程 1. 用户态和内核态 CPU指令执行级别: 执行特权指令,访问任意的物理地址--内核态. 低级别:代码只能在级别允许的特定范围内活动--用户态.在日常操作下,执行系统调用的方式是通过库函数,库函数封装系统调用,为用户提供接口以便直接使用. I…
Linux内核分析第四周 扒开系统调用的三层皮(上) 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断 用户态:当进程在执行用户自己的代码时,则称其处于用户态,即此时处理器在特权级最低的(3级)用户代码中运行. 内核态:当一个进程执行系统调用而陷入内核代码中执行时,我们就称进程处于内核态,此时处理器处于特权级最高的(0级)内核代码中执行. PS:CPU指令…
一.用户态.内核态和中断处理过程 系统调用是用户通过库函数方式:库函数帮我们把系统调用封装起来. 内核态:高级别执行,可以使用特权指令,访问任意的物理地址. 用户态:低级别执行,代码范围受到限制. CS寄存器的最低两位表明了当前代码的特权级. 在linux中,0xc0000000以上的地址空间只能在内核态下访问,0x00000000-0xbfffffff的地址空间两种状态下都可以使用.(逻辑地址) 二.中断处理是从用户态进入内核态主要的方式 从用户态进入内核态:必须保存用户态的寄存器上下文 中断…
Linux第四周学习总结--扒开系统调用的三层皮(上) 一.用户态.内核态和中断 系统调用通过库函数. 1.用户态和内核态 区分(不同的指令执行级别): 用户态:在相应的低执行状态下,代码的掌控范围受到限制,只能在对应级别允许的范围内活动 内核态:在高执行级别下,代码可以执行特权指令,访问任意的物理地址. Intel x86 CPU有四种不同的执行级别0-3,Linux只是用了期中的0级和3级分别表示内核态和用户态. 注意逻辑地址和物理地址的区别.逻辑地址是进程地址空间里面的 2.中断 中断处理…
实验过程 选择20号系统调用getpid(取得进程识别码) 在网上查询getpid函数的C语言代码以及其嵌入式汇编语句 C语言代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(int argc, const char *argv[]) { pid_t tt; tt = getpid(); printf("%u\n&q…
朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 知识点梳理 一.用户态.内核态和中断处理过程 1.级别.如何区分 2.中断处理,用户态到内核态 3.保护现场和恢复现场 二.系统调用概述 1.操作系统为用户态进程与硬件设备进行交互提供了一组接口--系统调用 1.把用户从底层硬件编程中解放: 2.提高系统安全性: 3.用户程序具有可移植性: 2.API(应用编程接口)和系统调用…
第五章 系统调用 5.1 与内核通信 1.系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 (3)每个进程都运行在虚拟系统中,而在用户空间和系统的其余部分提供这样一层公共接口. 2.在Linux中,系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核唯一的合法入口. 5.2 API.POSIX和C库 1.一般情况下,应用程序通过在用户空间实现的应用编程接口(API)而不是直接通过…
扒开系统调用的三层皮(下) 一.给menuOS增加time和time-asm 通过内核调试系统调用.将上次做的实验加入到menusOS,变成menusOS里面的两个命令. 1 int Getpid(int argc , char * argv[]) 2{ 3 int pid; 4 pid=getpid(); 5 printf("pid=%d\n",pid); 6 return 0; 7 } 8 9 int Getpidasm(int argc , char *argv[]) 10 {…
LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一.给MenuOS增加time和time-asm命令 1.克隆并自动编译MenuOS rm menu -rf //强制删除原menu文件 git clone https://github.com/me…