Linux内核系统调用处理过程
原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/
学号末三位:168
下载并编译Linux5.0
![](/assets/blank.gif)
![](/assets/blank.gif)
1 xz -d linux-5.0.1.tar.xz 2 3 tar -xvf linux-5.0.1.tar 4 5 cd linux-5.0.1
View Code
下载完成之后,依次执行:make menuconfig,sudo apt-get install libncurses5-dev libncursesw5-dev,make menuconfig
接着,制作跟系统文件:
1 cd .. 2 mkdir rootfs 3 git clone https://github.com/mengning/menu.git 4 cd menu 5 sudo apt install gcc-multilib 6 gcc -pthread -o init linktable.c menu.c test.c -m32 -static 7 cd ../rootfs 8 cp ../menu/init ./ 9 find . | cpio -o -Hnewc | gzip -9 > ../rootfs.img
然后启动menuOS:qemu-system-i386 -kernel bzImage -initrd rootfs.img
一、系统调用
操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。
二、系统调用原理
操作系统中的状态分为管态(核心态)和目态(用户态)。特权指令:一类只能在核心态下运行而不能在用户态下运行的特殊指令。不同的操作系统特权指令会有所差异,但是一般来说主要是和硬件相关的一些指令。访管指令:本身是一条特殊的指令,但不是特权指令。(trap指令)。基本功能:“自愿进管”,能引起访管异常。
三、系统调用和普通调用的区别
运行状态不同。系统调用的调用过程和被调用过程运行在不同的状态,而普通的过程调用一般运行在相同的状态。
调用方法不同。系统调用必须通过软中断机制首先进入系统核心,然后才能转向相应的命令处理程序。普通过程调用可以直接由调用过程转向被调用过程。
实验过程描述
首先,从github上更新这次实验要用的新的menuOS镜像。然后我们开始制作根文件系统。
之后系统就成功启动了,我们就会开到熟悉的界面。如果是要跟踪调试系统的话我们可以用这个命令:
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
同样的我们再打开一个窗口然后进入gdb调试模式,然后我们首先是要加载它的符号表,命令是 file linux3.18.6/vmlinux 然后在连接到他,命令是:target remote:1234这样我们就可以开始调试他了。
然后我们添加了一个断点在sys_sgetmask(系统调用号为68)上,然后按c继续执行到,系统停在了相应的位置上。
tips:syst_sgetmark返回当前进程受阻塞的情况,current是一个的类型是struct task_struct*的全局变量,总是指向当前正在执行的进程。
1 int sys_sgetmask()// 获取当前进程阻塞的信号 2 { 3 returncurrent->blocked; 4 }
qemu中输出的内容:
测试程序:
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include <linux/unistd.h>2 #include <syscall.h>3 #include <sys/types.h>4 #include <stdio.h>5 6 int main(void)7 {8 long pid = 0;9 pid = syscall(68);10 printf("%ld\n",pid);11 return 0;12 }
View Code
总结:
我们知道操作系统为在用户态运行的进程与硬件设备进行交互提供了一组几口。在应用程序与硬件之间设置一个额外的层实际上是有很多优点的——所谓的系统调用。首先这使得编程更加容易,把用户从学习硬件设备的低级编程特性中解放出来。其次,着极大的提高了系统的安全性,因为内核在试图满足某个请求之前在接口级别上就可以检查这种请求是否是正确的合法的。最后更为重要的是,这些接口是的程序更具有可以执行,因为只要内核所提供的一组接口相同,那么在任意一个内核之上就可以正确的编译和执行我们编写的程序了。
Linux系统就是通过内核发出的系统调用(system call)实现了用户态进程和硬件设备之间的大部分接口。
转载于:https://www.cnblogs.com/ustc-anmin/p/10540471.html
Linux内核系统调用处理过程相关推荐
- linux内核-系统调用execve()
读者在linux内核-系统调用fork.vfork与clone中已经看到,进程通常是按其父进程的原样复制出来的,在多数情况下,如果复制出来的子进程不能与父进程分道扬镳,走自己的路,那就没多大意义.所以 ...
- Bochs调试Linux内核6 - 启动过程调试 - 跳到bootsect引导程序执行
接此,Bochs调试Linux内核5 - 启动过程调试 - 认识Bootsect.S_bcbobo21cn的专栏-CSDN博客 看一下,0x00007c11 这里是重复执行串传送:而后一条 ...
- linux内核的配置过程,linux内核的配置机制及其编译过程
linux内核的配置机制及其编译过程. 一.配置系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1.Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linu ...
- linux内核中获取虚拟地址api,Linux内核-系统调用
Linux内核-系统调用 1.与内核通信 #系统调用在用户空间进程和硬件设备之间添加了一个中间层 作用:1.为用户空间提供了一种硬件的抽象接口 2.系统调用保证了系统的稳定和安全 3.出于每一个进程都 ...
- 实验三:跟踪分析Linux内核的启动过程 ----- 20135108 李泽源
实验要求: 使用gdb跟踪调试内核从start_kernel到init进程启动 详细分析从start_kernel到init进程启动的过程并结合实验截图撰写一篇署名博客,并在博客文章中注明" ...
- Linux进程调用execve,linux内核系统调用函数do_execve()解析实例源码
linux内核系统调用函数do_execve()解析,彻底解析内核调用用户空间代码入口函数do_execve() sys_execve() –> do_execve() /usr/src/lin ...
- linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程
贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...
- 编译linux内核生成.ko,Linux内核编译完整过程
通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过程中的一些实际经验. 内核简 ...
- linux内核-系统调用fork、vfork与clone
前面已经简要地介绍过fork与clone二者的作用于区别.这里先来看一下二者在程序设计接口上的不同: pid_t fork(void); int clone(int (*fn)(void *), vo ...
最新文章
- 你猜,为什么Google和Facebook不用Docker?
- python编程基础知识体系_最新版 17 幅思维导图:Python 编程之核心知识体系
- stm32.cube介绍
- vue页面翻页勾选的记忆功能
- 【非凡程序员】 OC第一节课 (指针浅析)
- 命令行下的mysql的基本操作
- 两数之和(Leetcode第1题)
- 怎样进行前后台交互_vivo X60 Pro评测,蔡司镜头+OriginOS+微云台+三星1080强强组合...
- 基于Session的认证方式_创建工程_准备一个springmvc的工程_Spring Security OAuth2.0认证授权---springcloud工作笔记115
- 一起谈.NET技术,DataTable 深入解析数据源绑定原理之高级篇
- 三角测量计算三维坐标的代码_室内定位系统的三边测量与三角测量
- 软件项目管理 实验二
- 《指数基金》读书笔记
- backtrader概念(二)Trade
- oracle临时表经常被锁_linux安装oracle
- 实用工具篇 | PPT图表制作软件
- 工作杂记-关于IOS通过Safari使用https域名访问的坑
- 电脑上怎么进行pdf合并免费
- 无法打开csproj,因为此版本的应用程序不支持其项目类型 csproj
- linux禁用用户账号,linux 如何禁用账号和解除禁用账号