实验1 增加新的系统调用.pptVIP

  • 3
  • 0
  • 约2.73千字
  • 约 19页
  • 2017-05-21 发布于浙江
  • 举报
实验1 增加新的系统调用

实验1 增加新的系统调用 目录 实验基础知识介绍 系统调用概念 系统调用分类 系统调用实现 实验目的 实验内容和步骤 实验要求 * * 系统调用概念 由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。系统调用是应用程序同系统之间的接口。 内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。系统调用运行在内核态,是用户态进入内核态的唯一入口。 系统调用分类 Linux操作系统中系统调用分类: 进程管理,如fork(), clone(), execve(), exit()等。 进程通信,如signal(), msgctl(), pipe()等。 控制硬件,如open(), read(), write()等。 设置系统状态或读取内核信息,如getpid(), getpriority(), setpriority()等。 内存管理,如brk(), mmap(), mlock()等。 系统控制 网络管理 socket控制 用户管理 * 系统调用实现 Linux的系统调用通过int 80h实现,用系统调用号来区分入口函数。 操作系统实现系统调用的基本过程是: 应用程序调用库函数(API); API将系统调用号存入EAX,然后通过中断调用使系统进入内核态; 内核中的中断处理函数根据系统调用号,调用对应的内核函数(系统调用); 系统调用完成相应功能,将返回值存入EAX,返回到中断处理函数; 中断处理函数返回到API中; API将EAX返回给应用程序。 应用程序调用系统调用的过程是: 把系统调用的编号存入EAX 把函数参数存入其它通用寄存器 触发0x80号中断(int 0x80) * 实验目的 阅读Linux内核源代码,通过添加一个简单的系统调用实验,进一步理解Linux操作系统处理系统调用的统一流程。 掌握Linux内核编译方法 实验内容 下载、解压内核 配置内核 编译安装内核 添加系统调用函数 添加系统调用号 声明 测试新的系统调用 * 下载、解压内核 下载内核 在官网:/下载linux内核, 完成后, 将下载文件放入/usr/src/目录下 解压内核 将下载的文件解压缩, 在 /usr/src/目录下, 输入如下命令: # xz -d linux-3.17.1.tar.xz # tar -xvf linux-3.17.1.tar 解压后的文件夹名为:linux-3.17.1 * 配置内核 安装ncurses-5.9: 下载ncurses-5.9.tar.gz文件,并解压 # tar zxvf ncurses-5.9.tar.gz (解压) #cd ncurses-5.9(当前目录) #./configure(检查) #make (编译) #make install(安装) * 配置内核 在usr/src下的内核源码目录(linux-3.17.1)下,输入如下命令: # make menuconfig(需要安装ncurses) * 编译安装内核 在usr/src下的内核源码目录(linux-3.17.1)下,输入如下命令: # make (编译内核) 。。。。。。。。。。。。。 * 编译安装内核 # make modules_install(安装模块) 。。。。。。。。。。。。。。。。 * 编译安装内核 #make install(安装内核) 。。。。。。。。。。。。 * 系统调用的名字 系统调用的名字,比如mysyscall。一旦这个名字确定,那么在系统调用中几个相关的名字也就确定了。 系统调用编号:#define __NR_name NNN (name为系统调用名称,NNN为系统调用对应的号码) 例如: #define __NR_mysyscall 338 内核中系统调用的实现程序的函数名字:sys_mysyscall * 添加系统调用函数 在内核源码目录(linux-3.

文档评论(0)

1亿VIP精品文档

相关文档