操作系统实验-第二次实验报告.docx
文本预览下载声明
操作系统第二次实验报告
目录
第一次实验遗漏的测试: 4
实验一 6
(1.1)认识保护模式 6
(1.2)保护模式的运行环境 7
实验二 :GDT 9
实验三:LDT 12
实验四:调用门 13
实验五: 15
(5.1)进入ring3 15
(5.2) 调用门进入有特权级变换的转移 15
(5.3) 经由局部任务返回实模式(pmtest5.asm) 16
实验六:编写代码启动分页机制(pmtest6.asm) 17
实验七:显示内存信息(pmtest7.asm) 19
实验八:页表切换(pmtest8.asm) 20
实验九: 21
(9.1)编程操作8259A(pmtest9a.asm) 21
(9.2)实现一个中断(pmtest9b.asm) 22
(9.3) 修改IDT,新增函数处理中断(pmtest9c.asm) 23
(9.4) 时钟中断实验(pmtest9.asm) 24
实验分析 26
个人总结 26
一.实验目的:
1.熟悉保护模式
2.学习理解页式存储
3.学习理解中断与异常
4.理解保护模式下的I/O
二.实验内容
1.学习保护模式的运行环境
2.学习GDT、实模式到保护模式的转换
3.理解描述符的属性
4.学习LDT、特权级的概念
5.理解分页机制、PDE与PTE
6.理解中断与异常机制,实现一个中断
7.认识保护模式下的I/O,学习IOPL与I/O许可位图
三.实验环境
Windows10, ubuntu14.04.4
四.关键技术:
汇编语言入门
Nasm编译
五.设计与实验过程、测试过程与测试结果
第一次实验遗漏的测试:
经测试,我安装的bochs不支持dump_cpu指令,因此选用其他的指令查看寄存器情况。查看结果如下所示
实验一
本次实验分为9个实验,分别自下文介绍。
(1.1)认识保护模式
1. 按照书中所说输入下列代码以实现实模式到保护模式的转换,文件命名为pmtest1.asm,部分截图如下
2. 按照书中所说在pm.inc中定义宏,部分截图如下:
3.输入下列命令编译,再将第一次实验用过的软盘映像a.img和Bochs的配置文件bochsrc复制到当前文件夹,并将生成的二进制写入软盘映像:
4.测试结果如下图所示,屏幕右侧有一个红色的P打印出来。
(1.2)保护模式的运行环境
1.在Bochs的官网(/diskimages.html)上下载一个freedos-img.tar.gz,解压后将其中的a.img改名为freedos.img:
2.用bximage生成一个软盘映像(安装好bochs后附带的程序,直接bximage运行,按回车提示执行),生成名为pm.img的软盘镜像文件
3. 修改当前工作目录下的bochsrc,确保其中有以下三行:
4.启动bochs ,待FreeDos启动完毕后格式化B盘:format b:回车:
5.将上节的代码pmtest1.asm 中的org 07c00h 改为 org 100h,并重新编译,再将复制到pm.img上:
6.重新运行bochs ,A:/B: 切换到B盘,执行 ,得到下图所示结果,屏幕右侧打印出红色P
实验二 :GDT
1.输入GDT、数据段和堆栈段部分代码如下
2.32位代码段,部分代码如下
3.初始化数据段描述符
4.保护模式到实模式
5.保护模式到实模式的准备工作
6.回到实模式
7.编译
8.挂载
9.运行,结果如下所示,屏幕下方打印红色“in protect mode now”和一串数字
实验三:LDT
1.LDT增加的代码内容:在GDT中增加一个描述符,与描述符对应的选择子,以及初始化代码
2.编译并运行
3. 运行,结果如下所示,屏幕下方打印红色“in protect mode now”和一个L
实验四:调用门
1.通过调用门转移的目标段:
2.上述代码段的描述符:
3.调用门:
4.编译
5. 运行,结果如下所示,屏幕下方打印红色“in protect mode now”和一个L和一个C。
实验五:
(5.1)进入ring3
1.编译
2.运行,结果如下所示,屏幕下方打印红色“in protect mode now”和一个3。
(5.2) 调用门进入有特权级变换的转移
1.进入死循环(pmtest5b.asm):
2.进入死循环之前增加调用门指令(pmtest5c.asm)
3.运行pmtest5c.om,结果如下所示,屏幕下方打印红色“in protect mode now”和一个3和一个C
(5.3) 经由局部任务返回实模式(pmtest5.asm)
调试后运行,屏幕下方打印红色“in protect mode now”和一个3和一个C。
实验六:编写代码启动分页机制(pmtest6.asm
显示全部