目录
1 实验目标
2 实验工具
3 实验内容、实验步骤及实验结果
一、自定义操作系统并启动
1. 最简单操作系统的编写并生成镜像文件
2.虚拟机启动操作系统
【思考题:1、仔细阅读helloos.nas,结合操作系统启动过程尝试分析它的作用;2、若要将显示改为“Hello,MyOS!”该如何操作,请分析并截图出操作过程。】
二、系统调用的使用方法
1. 系统调用的方法
【思考题:调试运行下列程序,说明显式和隐式调用的不同之处。并尝试列出几个常用的系统调用号。】
2、常见系统调用函数
【思考题:请说明系统调用函数与库函数的区别。】
三、编写代码实现简单的 Shell
【思考题:试分析并编写一个简单的shell,能读取用户输入的命令并正确执行。并能通过ps指令查看到自己编写的shell的执行。】
4 实验总结
实 验 报 告 单(2)
实验名称: 操作系统的启动及接口
时间202-11-5
1、掌握操作系统的启动过程
2、理解操作系统的接口工作原理
3、掌握操作系统系统调用的原理
- 记事本:用于编写简单操作系统的汇编代码。
- e2_tools:用于将汇编代码生成为启动文件。
- VMware:用于创建虚拟机并启动自定义操作系统。
- 命令行界面:用于执行生成镜像文件的命令。
1. 最简单操作系统的编写并生成镜像文件
步骤1:使用 Notepad++ 编写简单操作系统 helloos.nas 汇编代码。
步骤2:使用 e2_tools 文件夹中的 makeFile 工具将 helloos.nas 文件生成为启动文件 helloos.img。
Step1:将 helloos.nas 文件放入 e2_tools 文件夹中。
Step2:打开命令行界面,并将当前目录重定位至实验二工具“e2_tools”位置。
Step3:输入命令“make img”在当前位置生成 helloos.img 文件。
nask.exe helloos.nas helloos.bin helloos.lst
edimg.exe imgin:https://blog.csdn.net/m0_/article/e2_tools/fdimg0at.tek wbinimg src:helloos.bin len:512 from:0 to:0 imgout:helloos.img
2.虚拟机启动操作系统
Step1:启动 VMware,创建一个新的虚拟机 MyOS(注意加上软盘驱动器)。
Step2:设置从软盘镜像文件中启动系统,文件为刚做好的 helloos.img。
Step3:启动该虚拟机。




【思考题:1、仔细阅读helloos.nas,结合操作系统启动过程尝试分析它的作用;2、若要将显示改为“Hello,MyOS!”该如何操作,请分析并截图出操作过程。】
- helloos.nas是一个操作系统启动代码,它定义了操作系统的启动扇区(Boot Sector),负责从磁盘加载操作系统并启动。通过汇编语言编写,它直接操作硬件,设置CPU寄存器、初始化堆栈、加载操作系统内核等。
- 在helloos.nas文件中找到字符串显示部分,修改字符串内容。


1. 系统调用的方法
隐式调用:用户通过封装了系统调用的 API 使用系统调用。
显式调用:使用 syscall() 函数实现调用,int syscall(int number,…),number 是系统调用号。
思考题:
调试运行下列程序,说明显式和隐式调用的不同之处。并尝试列出几个常用的系统调用号。
【思考题:调试运行下列程序,说明显式和隐式调用的不同之处。并尝试列出几个常用的系统调用号。】
显式和隐式调用的不同之处:
显式调用:直接使用syscall()函数,通过系统调用号调用内核服务,程序员需要知道具体的系统调用号。
隐式调用:通过C库函数(如getpid())间接调用系统调用,程序员无需知道具体的系统调用号,由库函数封装。
常用系统调用号:
- SYS_getpid:获取进程ID。
- SYS_open:打开文件。
- SYS_read:读取文件。
- SYS_write:写入文件。
- SYS_exit:退出程序
2、常见系统调用函数
请用open()、read()、write()等常见系统调用函数完成创建或打开某目录下的文件,并写入指定语句“This is system call”。再次打开文件,将文字读出并打印输出到屏幕。
【给出代码截图、调试过程、运行结果。】
代码截图:
调试过程:
写入文件时使用sizeof(data)是不正确的,sizeof(data)返回的是指针的大小,应该使用strlen(data)来获取字符串的实际长度并写入.
运行结果:
【思考题:请说明系统调用函数与库函数的区别。】
- 系统调用函数:直接调用内核服务,执行特权指令,通常在用户态和内核态之间切换。
- 库函数:在用户态执行,通常是对系统调用的封装,提供更高层次的接口。
操作系统不信任用户,所以提供了一系列系统接口让用户通过命令行的形式去使用内核。Shell 就是一个命令行解释器,将用户输入的命令行解释为 OS 能够理解的可执行程序并执行该程序以运行。因此,Shell 实际上就是读取用户输入的信息,并创建新的子进程并用系统调用函数 exec 类函数调用该信息所指向的程序。
【思考题:试分析并编写一个简单的shell,能读取用户输入的命令并正确执行。并能通过ps指令查看到自己编写的shell的执行。】
通过这次实验报告册的编写与实验操作,我对操作系统的启动过程、接口工作原理以及系统调用的原理有了更深入的理解。以下是我的实验总结:
操作系统的启动及接口:首先学习了操作系统的启动过程。通过编写并生成自定义操作系统的镜像文件,我掌握了操作系统从磁盘加载到内存的过程,并且理解了操作系统如何初始化寄存器、堆栈以及加载内核。此外,我还学会了使用汇编语言编写简单的操作系统启动代码,并通过虚拟机成功启动了自定义操作系统。系统调用的使用方法:在这部分实验中,我了解了系统调用的基本方法,包括显式调用和隐式调用。通过实际编程实践,我体会到了直接使用syscall()函数进行显式调用和使用C库函数进行隐式调用的不同之处。此外,我还尝试了使用open()、read()、write()等系统调用函数来创建和操作文件,这增强了我对文件系统操作的理解。简单Shell的实现:最后,我尝试编写了一个简单的Shell程序。这个程序能够读取用户输入的命令,并通过创建子进程和调用exec类函数来执行相应的程序。这个过程让我对操作系统如何管理进程和执行命令有了更加直观的认识。
到此这篇kvm虚拟化技术基础与实践(kvm虚拟化技术实验报告)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jszy-jc/47311.html