系统调用system_call的处理过程

朱秀秀 原创作品转载请注明出处  《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

通常,在OS的核心中都设置了一组用来实现各种系统功能的子程序(过程),并把它们提供给用户调用,每当用户在需要系统提供某种服务的时候,就可以利用系统调用指令去调用系统过程。在调用系统过程之后,程序运行就由用户态转到内核态,相应的栈也由用户栈,转到内核栈,并且进行了相当于保护现场的工作,把当前的状态,栈顶指针,cs:eip保存到内核栈中。通过中断进入内核态,返回的时候,需要重新调度(所以不一定直接返回到调用过程),同时通过iret操作恢复现场。

系统调用过程比较简单,它由0x80中断向量进入系统调用入口,通过使用系统调用表保存系统服务函数的地址的形式实现。具体的流程可以用下图所示:

0x80将控制传递给核心。0x80就是系统调用的一个矢量地址。这个中断矢量表是在系统启动时就初始化好的,以及一些矢量地址,如系统时钟。当用户系统调用时,执行如下:

每个系统调用都通过lib库体现。每一个系统调用在lib库中一般是一个宏syscallX(),X是具体某个调用的数字参数。有的系统调用更复杂,因为它们有可变
的参数列表,但它们仍用一样的入口指针.每个系统调用宏将展开成一个汇编段,用来建立调用的堆栈段,然后通过调用中断int $0x80调用--ENTRY(system_call).

系统调用处理过程”的理解:它由0x80中断向量进入系统调用入口,通过使用系统调用表保存系统服务函数的地址的形式实现。

时间: 2024-10-27 16:43:01

系统调用system_call的处理过程的相关文章

系统调用system_call处理过程

原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 作者:严哲璟 linux的系统调用的过程: ENtry_32.S 1.enter system_call 2.push eax 保存eax的值,因为此值与系统调用有关 3.SAVE_ALL  ,保存现场 4.比较系统调用号eax和NR_systemcall,如果这是一个合法的系统调用则执行调用符号表syscall_table 5.根据e

system 系统调用、gcc编译过程

system 库函数的功能是执行操作系统的命令或者运行指定的程序 #include <stdio.h> #include <stdlib.h>//引入库 int main() { //system("notepad");//打开记事本 system("dir");//查看目录 system("ipconfig");查看ip return 0; } 多线程 pthread_create thread_create POSIX

实验五:分析system_call中断处理过程

原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 如果我写的不好或者有误的地方请留言 题目自拟,内容围绕系统调用system_call的处理过程进行: 博客内容中需要仔细分析system_call对应的汇编代码的工作过程,特别注意系统调用返回iret之前的进程调度时机等. 总结部分需要阐明自己对“系统调用处理过程”的理解,进一步推广到一般的中断处理过程. 实验报告: 1.将myfork()和

Linux内核分析—实验五分析system_call中断处理过程

郑斌 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验要求: 使用gdb跟踪分析一个系统调用内核函数(您上周选择的那一个系统调用),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl ,推荐在实验楼Linux虚拟机环境下完成实验. 根据本周所学知识分析系

动静结合学内核之 linux 系统调用浅析

刘柳 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 直入主题 实验过程1-增加新的菜单 update the menu //git cone Uhange main.c //注册菜单函数 Add the chmodC ,chmodASM //菜单函数的实现 Make rootfs //激动人心的时刻,进入menuos调用我们新函数 chmodASM代码 讲述调用chmod系统调

《Linux操作系统分析》之Linux系统的理解及学习Linux内核的心得

经过这一段时间的学习,自己对linux也有了一定的认识,今天这篇博客对以往的知识进行一个总结吧. 以往linux学习的博客,从上而下是学习深入的过程,我的博客链接如下: 第一篇:<Linux操作系统分析>之分析计算机如何启动以及如何工作运行 第二篇:<Linux操作系统分析>之分析精简的Linux的内核中断和时间片轮询 第三篇:<Linux操作系统分析>之跟踪分析Linux内核的启动过程 第四篇:<Linux操作系统分析>之使用库函数API和C代码中嵌入汇编

分析Linux内核5.0系统调用处理过程

学号: 363 本实验来源 https://github.com/mengning/linuxkernel/ 一.实验要求 1.编译内核5.02.qemu -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img3.选择系统调用号后两位与您的学号后两位相同的系统调用进行跟踪分析https://github.com/mengning/menu4.给出相关关键源代码及实验截图,撰写一篇博客(署真实姓名或学号最后3位编号),并在博客文章中

从内核看系统调用

本周学习了孟宁老师的<Linux内核分析>,按照课程要求,做实验如下: 首先使用gdb跟踪一个系统调用,我们选择上周实验所写的代码,修改这两段代码成两个系统调用,放入根文件系统中,作为本次实验将要观察的系统调用. 修改代码如下: 1) c实现的系统调用 int mkdir_c(int argc, char **argv) { if(argc != 2) printf("Illegal parameter!!\n"); if(mkdir(argv[1]) == -1) { p

中断、异常和系统调用

所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被"打断"的程序. 中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断.时钟中断.控制台中断等.第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47-63Hz之外).程序故障(非法操作码.地址越界.浮点溢出等)等引起的过程. 第三类由于在程序中使用了请