Linux内核系统调用处理过程
原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/
学号末三位:168
下载并编译Linux5.0
xz -d linux-5.0..tar.xz tar -xvf linux-5.0..tar cd linux-5.0.

下载完成之后,依次执行:make menuconfig,sudo apt-get install libncurses5-dev libncursesw5-dev,make menuconfig


接着,制作跟系统文件:
cd ..
mkdir rootfs
git clone https://github.com/mengning/menu.git
cd menu
sudo apt install gcc-multilib
gcc -pthread -o init linktable.c menu.c test.c -m32 -static
cd ../rootfs
cp ../menu/init ./
find . | cpio -o -Hnewc | gzip - > ../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*的全局变量,总是指向当前正在执行的进程。
int sys_sgetmask()// 获取当前进程阻塞的信号
{
returncurrent->blocked;
}

qemu中输出的内容:


测试程序:
#include <linux/unistd.h>
#include <syscall.h>
#include <sys/types.h>
#include <stdio.h> int main(void)
{
long pid = ;
pid = syscall();
printf("%ld\n",pid);
return ;
}
总结:
我们知道操作系统为在用户态运行的进程与硬件设备进行交互提供了一组几口。在应用程序与硬件之间设置一个额外的层实际上是有很多优点的——所谓的系统调用。首先这使得编程更加容易,把用户从学习硬件设备的低级编程特性中解放出来。其次,着极大的提高了系统的安全性,因为内核在试图满足某个请求之前在接口级别上就可以检查这种请求是否是正确的合法的。最后更为重要的是,这些接口是的程序更具有可以执行,因为只要内核所提供的一组接口相同,那么在任意一个内核之上就可以正确的编译和执行我们编写的程序了。
Linux系统就是通过内核发出的系统调用(system call)实现了用户态进程和硬件设备之间的大部分接口。
Linux内核系统调用处理过程的更多相关文章
- 跟踪调试Linux内核的启动过程
跟踪调试Linux内核的启动过程---使用gdb 符钰婧 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...
- Linux内核启动分析过程-《Linux内核分析》week3作业
环境搭建 环境的搭建参考课件,主要就是编译内核源码和生成镜像 start_kernel 从start_kernel开始,才真正进入了Linux内核的启动过程.我们可以把start_kernel看做平时 ...
- Linux内核-系统调用
Linux内核-系统调用 1.与内核通信 #系统调用在用户空间进程和硬件设备之间添加了一个中间层 作用:1.为用户空间提供了一种硬件的抽象接口 2.系统调用保证了系统的稳定和安全 3.出于每一个进程都 ...
- LINUX内核PCI扫描过程
LINUX内核PCI扫描过程 内核版本 3.10.103 1. ACPI热插拔扫描subsys_initcall(acpi_init)@drivers/acpi/bus.c |-acpi_scan_i ...
- 跟踪分析Linux内核的启动过程--实验报告 分析 及知识重点
跟踪分析Linux内核的启动过程 攥写人:杨光 学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.stud ...
- 20135202闫佳歆--week3 跟踪分析Linux内核的启动过程--实验及总结
实验三:跟踪分析Linux内核的启动过程 一.调试步骤如下: 使用gdb跟踪调试内核 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd r ...
- 跟踪分析Linux内核的启动过程小解
跟踪分析Linux内核的启动过程 “20135224陈实 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...
- 作业三:LINUX内核的启动过程
作业三:LINUX内核的启动过程 一.使用GDB跟踪内核从start_kernel到init进程启动(附实验截图) (一)使用自己的Linux系统环境搭建MenuOS的过程 下载内核源代码编译内核 c ...
- 实验三:跟踪分析Linux内核的启动过程
实验三:跟踪分析Linux内核的启动过程 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.16 ...
随机推荐
- jsp,velocity,freemark页面引擎的比較
在java领域.表现层技术主要有三种:jsp.freemarker.velocity. jsp是大家最熟悉的技术 长处: 1.功能强大,能够写java代码 2.支持jsp标签(jsp tag) 3.支 ...
- JAVA 网络长短连接
作为java的刚開始学习的人,看了网上的资料后,关于java的长短连接,感觉理解的不是非常深刻.结合自己的学习和网上的资料整理例如以下.不对之处请大家批评指正. ...
- UVa563_Crimewave(网络流/最大流)(小白书图论专题)
解题报告 思路: 要求抢劫银行的伙伴(想了N多名词来形容,强盗,贼匪,小偷,sad.都认为不合适)不在同一个路口相碰面,能够把点拆成两个点,一个入点.一个出点. 再设计源点s连向银行位置.再矩阵外围套 ...
- POJ 2007 Scrambled Polygon(简单极角排序)
水题,根本不用凸包,就是一简单的极角排序. 叉乘<0,逆时针. #include <iostream> #include <cstdio> #include <cs ...
- Getting console.log output with Selenium Python API bindings
持久化存储 Getting console.log output from Chrome with Selenium Python API bindings - Stack Overflow http ...
- DeepDive is a system to extract value from dark data.
DeepDive is a system to extract value from dark data. http://deepdive.stanford.edu/
- Visual Studio AI
Visual Studio 完全AI手册 - 从0开始配置环境 https://www.cnblogs.com/ms-uap/p/9123033.html 零.前提条件 一台能联网的电脑,使用win1 ...
- linux安装/卸载mysql
其实安装mysql差不多有10次了吧, 但是每次都有坑,各种百度,太麻烦了,所以这次把坑给记录下来,下次直接用. 1. 去官网下载mysql.这里可以使用wget下载.先去官方网站,找到mysql5. ...
- 微信小程序的wxml文件和wxss文件在webstrom的支持
webstrom默认不支持wxml文件和wxss文件,所以要进入设置里面手动添加支持. 对wxml文件的支持: 文件 -> 设置 -> 编辑器 -> 文件类型, 然后选择XML文件, ...
- post提交表单的数据查看方式(不是很理解,但要会看,可以找人商讨下,比如崔老师,自己再看一遍HTTP基础)