哈工大-操作系统-HitOSlab-李治军-实验2-系统调用

本文详细介绍了如何在Linux0.11中添加自定义系统调用,包括编写用户程序、定义系统调用号、修改内核文件、实现内核函数及编译运行。实验涉及iam和whoami两个程序,通过系统调用实现数据的读取与输出。测试部分使用testlab2.c和testlab2.sh验证了系统调用的正确性。

操作系统实验2:系统调用

实验内容请查看实验指导手册

  1. 实验需要掌握的知识点:
    如何使用用户函数调用系统函数、_syscall宏的含义以及作用、管理使用linux系统的基本知识
  2. 实验中添加和修改的文件
    (1)添加了:
    iam.c(路径:oslab/hdc/usr/root)
    whoami.c(路径:oslab/hdc/usr/root)
    who.c(路径:oslab/linux-0.11/kernel)
    (2)修改了:
    unistd.h(路径:oslab/hdc/include/unistd.h)
    system_call.s(路径:oslab/linux-0.11/kernel/system_call.s)
    sys.h(路径:oslab/linux-0.11/include/linux/sys.h)
    Makefile(路径:oslab/linux-0.11/kernel/Makefile)

绪论

我花了很长的时间,才搞清楚这个实验,干了一件什么事情:

  • 在用户层面写了两个程序iam.c和whoami.c,通过syscall这个宏开启调用系统函数的窗口,调用sys_iam以及sys_whoami系统函数。
  • 编写了两个函数sys_iam以及sys_whoami,以who.c的文件格式保存在了linux0.11系统的内核(kernel)中;
  • sys_iam调用了一个名为get_fs_byte()的系统函数实现数据读取输入,sys_whoami则调用了put_fs_byte()这个系统函数完成对数据的打印输出。
  • 整个实验就是作了一件这么简单的事情,至于修改了Makefile等文件的复杂操作,可以理解为让上述过程实现的辅助过程。

下面是具体的实验过程:

一、实验内容

1.编写iam以及whoami程序

iam.c的代码

#define __LIBRARY__
#include <unistd.h>
//_syscall1宏展开后是一个调用系统函数的函数
_syscall1(int, iam, const char*, name);
int main(int argc,char ** argv)
{
   
   
	int wlen = 0;
	if(argc<1)
	{
   
   
		printf("not enough arguments!\n");
		return -2;
	}
	wlen = iam(argv[1]);
	return wlen;
}

whoami.c的代码

#define __LIBRARY__
#include <unistd.h>
//_syscall2是宏,宏展开后是一个调用系统函数的函数
_syscall2(int, whoami,char*,name,unsigned int,size);

int main()
{
   
   
	char s[30];
	int rlen = 0;
	rlen = whoami(s,30);//这里调用了_syscall2写的whoami函数
	printf("%s\n",s);
	return
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值