type
Post
status
Published
date
Jul 12, 2023
slug
2023/07/12/Add-whoami-and-iam-system-calls-in-linux-0.11
summary
在 Linux 0.11 中添加了两个系统调用:iam() 用于保存用户名,whoami() 用于获取保存的用户名。实验要求编写测试程序并完成实验报告,评分标准包括系统调用的成功调用和报告质量。
tags
Linux
开发
category
Linux
created days
new update day
icon
password
Created_time
Jul 12, 2023 02:24 AM
Last edited time
Mar 1, 2025 01:50 AM

0 实验要求

0.1 实验内容

此次实验的基本内容是:在 Linux 0.11 上添加两个系统调用,并编写两个简单的应用程序测试它们。

(1)iam()

第一个系统调用是 iam(),其原型为:
int iam(const char * name);
notion image
完成的功能是将字符串参数 name 的内容拷贝到内核中保存下来。要求 name 的长度不能超过 23 个字符。返回值是拷贝的字符数。如果 name 的字符个数超过了 23,则返回 “-1”,并置 errno 为 EINVAL。
kernal/who.c 中实现此系统调用。

(2)whoami()

第二个系统调用是 whoami(),其原型为:
int whoami(char* name, unsigned int size);
notion image
它将内核中由 iam() 保存的名字拷贝到 name 指向的用户地址空间中,同时确保不会对 name 越界访存(name 的大小由 size 说明)。返回值是拷贝的字符数。如果 size 小于需要的空间,则返回“-1”,并置 errno 为 EINVAL。
也是在 kernal/who.c 中实现。

(3)测试程序

运行添加过新系统调用的 Linux 0.11,在其环境下编写两个测试程序 iam.c 和 whoami.c。最终的运行结果是:
$ ./iam lizhijun $ ./whoami lizhijun

0.2 实验报告

在实验报告中回答如下问题:
  • 从 Linux 0.11 现在的机制看,它的系统调用最多能传递几个参数?你能想出办法来扩大这个限制吗?
  • 用文字简要描述向 Linux 0.11 添加一个系统调用 foo() 的步骤。

0.3 评分标准

  • 将 testlab2.c(在 /home/teacher 目录下) 在修改过的 Linux 0.11 上编译运行,显示的结果即内核程序的得分。满分 50%
  • 只要至少一个新增的系统调用被成功调用,并且能和用户空间交换参数,可得满分
  • 将脚本 testlab2.sh(在 /home/teacher 目录下) 在修改过的 Linux 0.11 上运行,显示的结果即应用程序的得分。满分 30%
  • 实验报告,20%

0.4 实验提示

  • 将 testlab2.c(在 /home/teacher 目录下) 在修改过的 Linux 0.11 上编译运行,显示的结果即内核程序的得分。满分 50%
  • 只要至少一个新增的系统调用被成功调用,并且能和用户空间交换参数,可得满分
  • 将脚本 testlab2.sh(在 /home/teacher 目录下) 在修改过的 Linux 0.11 上运行,显示的结果即应用程序的得分。满分 30%
  • 实验报告,20%

2 开始实验

2.1 注册系统调用

  • include/unistd.h
notion image
  • kernel/system_call.s
notion image
  • include/linux/sys.h
notion image
notion image
  • kernel/who.c
  • kernel/Makefile
notion image
notion image
### Dependencies: who.s who.o: who.c ../include/linux/kernel.h ../include/unistd.h exit.s exit.o: exit.c ../include/errno.h ../include/signal.h \ ../include/sys/types.h ../include/sys/wait.h ../include/linux/sched.h \ ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ ../include/linux/kernel.h ../include/linux/tty.h ../include/termios.h \ ../include/asm/segment.h
notion image
notion image
notion image
notion image
 
 
欢迎加入喵星计算机技术研究院,原创技术文章第一时间推送。
notion image
 
HIT-OSLab LAB1 操作系统的引导Ubuntu 22.04 编译调试内核时,手动生成 qemu 能够使用的 rootfs