#CentOS on Mac#2.加入系统调用

2024-01-17 07:18

本文主要是介绍#CentOS on Mac#2.加入系统调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验要求:
1.加入系统调用,在终端输出信息
2.编写用户态程序,运行输出

实验步骤
1.修改实验一的源码
终端进入

/usr/src/linux-4.6.4/usr/include/asm/unistd_64.h 

这里64是64位,32位应为32

2.修改系统调用号
查询系统调用号,不同的系统号不同,应该为未使用过的
define __NR_yssyscall 329

查询系统调用号,不同的系统号不同,应该为未使用过的

3.简单起见按照第一篇文章的函数修改sys.c文件
gedit /usr/src/linux-4.6.4/kernel/sys.c

在文件最后添加函数(功能为输出姓名学号

asmlinkage int sys_yssyscall(void)
{
printk("qyisi 20142100”);
return 0;
}

4.加入 define __NR_yssyscall 329

cd /usr/src/linux-4.6.4/arch/x86/entry/syscallsgedit syscall_64.tbl

我的电脑里syscall_64.tbl的位置很奇怪,若找不到搜索一下就好了
同理,若是32位即找对应的tbl文件

5.make menuconfig
详细介绍

http://blog.csdn.net/xuyuefei1988/article/details/8635539

6.重新编译内核

清除上次痕迹 make mrproper
这里写图片描述

make 
make modules 
make modules_install 
make install

编译
这里写图片描述

这里写图片描述

这里写图片描述

7.reboot 重新启动 进入新内核
这里写图片描述

8.编写用户态文件

在主文件目录(/home)下创建文件夹

mkdir test

进入/home/test/目录下

cd test 

(1)创建文件test.c

gedit test.c

代码如下

#include<stdio.h>
#define __NR_yssyscall 329
int main()
{
int rs;
rs = syscall(__NR_yssyscall);
if (!rs)
printf("qyisi 20142100");
return 0}

(2)执行命令编译

gcc –o test test.c

(3)编译成功后
./testHello

(4)查看内核日志
查看系统调用在内核空间的运行情况

dmesg

这里写图片描述

思考问题

“什么是操作系统的系统调用(system call)?系统调用过多会引起进程的性能开销么?为什么?”

Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。
用户可以通过系统调用命令在自己的应用程序中调用它们。系统调用和普通的函数调用非常相似。

区别仅仅在于,系统调用由操作系统核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。系统调用过多会引起进程的性能开销,因为系统调用需要从用户空间陷入内核空间,处理完后,又需要返回用户空间。其中除了系统调用服务例程的实际耗时外,陷入/返回过程和系统调用处理程序(查系统调用表、存储\恢复用户现场)也需要花销一些时间,这些时间加起来就是一个系统调用的响应速度。

系统调用对性能要求很苛刻,因为它需要陷入内核执行,所以和其他内核程序一样要求代码简洁、执行迅速。

这篇关于#CentOS on Mac#2.加入系统调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/615251

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep