操作系统实验三·xv6系统增添系统调用和用户级应用程序
2021/12/6 22:18:30
本文主要是介绍操作系统实验三·xv6系统增添系统调用和用户级应用程序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
xv6系统增添系统调用和用户级应用程序
- 1.实验目的
- 2.实验内容
- 3. 实验环境
- 4. 程序设计和实现
- 4.1系统修改
- 4.2 编译运行
1.实验目的
准备xv6环境,向xv6添加一个新的系统调用,并编写用户级应用程序来调用新增的系统调用。
2.实验内容
您的任务是向xv6添加系统调用。从读取syscall.c(系统调用表的内核端)、user.h(系统调用的用户级头)和usys.S(用户级系统调用定义)开始,这将有所帮助。您可以向xv6添加其他文件来实现此调用。有关xv6如何实现系统调用的更多信息,您应该阅读xv6手册的第3章。
创建一个系统调用int sys_wolfie(void *buf, uint size), 它将ASCII艺术图像复制到用户提供的缓冲区中,前提是缓冲区足够大,如果缓冲区太小或无效,则返回负值。如调用成功,则返回复制的字节数。
您还将编写一个名为wolfietest.c的用户级应用程序,从内核获取映像,并将其打印到控制台。
3. 实验环境
Linux虚拟机
操作系统:Ubantu 16.04 32位
虚拟机软件:VMware Workstation 15
虚拟处理器:1个2核
4. 程序设计和实现
4.1系统修改
4.1.1 syscall.c
增添 extern int sys_zhjprint(void);
和 [SYS_zhjprint] sys_zhjprint
4.1.2 syscall.h
增添 #define SYS_zhjprint 22
4.1.3 user.h
增添 int zhjprint(void* buff, unsigned int size);
4.1.4 usys.S
增添 SYSCALL(zhjprint)
4.1.5 sysproc.c
增添
int sys_zhjprint(void) { char* buff; int size; if( argint(1, &size) < 0){ return -1; } if( argptr(0, &buff, size) < 0){ return -1; } return zhjprint(buff, size); }
4.1.6 proc.c
增添
int zhjprint(char *buff, unsigned int size) { if(size < 200) { return -1; } char temp[300] = "****************************\n* name:zhj12399 *\n* ASCII Art *\n* (zhj@zhj12399.cn) *\n****************************\n"; cprintf(temp); buff = temp; return 200; }
4.1.7 Makefile
UPROGS=\
中增添 _zhjprint\
4.1.8 defs.h
proc.c
中增添 int zhjprint(char* buf, unsigned int size);
4.1.9 zhjprint.c 自己写的用户级应用程序
#include "types.h" #include "stat.h" #include "user.h" void show_ans(int ans) { if(ans == -1) { printf(0, "the buffer is not enough\n"); } else { printf(0, "the string length is %d\n", ans); } printf(0, "\n"); return; } int main(int argc, char* argv[]) { char buf_one[1000] = {0}; printf(0, "create a buffer which size is 1000\n"); int ans_one = zhjprint(buf_one, 1000); show_ans(ans_one); char buf_two[10] = {0}; printf(0, "create a buffer which size is 10\n"); int ans_two = zhjprint(buf_two, 10); show_ans(ans_two); return 0; }
4.2 编译运行
make qemu 后执行我们的函数zhjprint
先创建了一个1000个字符大小的数组,调用系统函数后返回了长度,又创建了一个10个字符大小的数组,调用系统函数后返回0。
这篇关于操作系统实验三·xv6系统增添系统调用和用户级应用程序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法