加载用户程序的监控程序之Python

加载用户程序的监控程序 一,操作系统实验报告 实验题目: 加载用户程序的监控程序 实验目的: 设计四个(或更多)有输出的用户可执行程序

本文包含相关资料包-----> 点击直达获取<-------

加载用户程序的监控程序

一、操作系统实验报告

实验题目:

加载用户程序的监控程序

实验目的:

设计四个(或更多)有输出的用户可执行程序,再设计一个监控程序放在首扇区作为裸机引导程序,再将这四个程序分别放在监控程序之后的四个扇区。利用 bios 功能调用,实现键盘输入指定运行这四个有输出的用户可执行程序之一。

实验要求:

设计四个有输出的用户可执行程序,分别在屏幕 1/区域动态输出字符,如将用字符‘A’从屏幕左边某行位置 45 度角下斜射出,保持一个可观察的适当速度直线运动,碰到屏幕相应/区域的边后产生反射,改变方向运动,如此类推,不断运动;在此基础上,增加你的个性扩展,如同时控制两个运动的轨迹,或炫酷动态变色,个性画面,如此等等,自由不限。还要在屏幕某个区域特别的方式显示你的学号姓名等个人信息。

修改参考监控程序代码,允许键盘输入,用于指定运行这四个有输出的用户可执行程序之一, 512

自行组织映像盘的空间存放四个用户可执行程序

实验方案:

文本编辑器:VScode

软盘操作工具:WinHex

1.1 实验思想及实验过程:

安装主要工具:

在 VMware 官网下载虚拟机的体验版安装包,再在网上找到破解的密钥输入永久破解。接着按照要求安装并创建一个无操作系统的裸机。

Figure 1: 安装 VMware 虚拟机

Figure 2: 创建无操作系统裸机

Figure 3: 为裸机配置属性

设计监控程序:

以老师给的监控程序模板为基础进行创作,首先需要增加一段清屏功能,能让监控程序和子程序相互切换的时候把上一次显示的内容清除干净,我们利用 BIOS 的功能调用 int 10h 的 6 号功能,将整个显示器的值都填为 0,这样就实现了清零。具体代码如 figure4,之后使用 int10 的 1 号功能输出字符串,将要显示给用户的提示语句展示在屏幕上如 figure5。

Figure 4: 清除屏幕内容

Figure 5: 显示提示信息

利用 int 16h 的 BIOS 功能调用,读取键盘输入,再按照输入的值跳转到需要运行的程序段,使用 BIOS 功能 13H 来加载不同的扇区号内的程序段到内存中使用,如 figure6 figure7。

Figure 6: 获取键盘输入 Figure 7: 通过键盘输入跳转

设计用户程序:

用户程序 1:

在用户程序前都要有语句 org 0A100h,它是让计算机将程序加载到 0A100 开始的内存上运行,每个用户程序都加载到这个地址上,监控程序就可以统一跳转到这个地址上来运行所选扇区的内容。

利用 bios 提供的中断 int10 的 13h 号功能,实现在显示器上输出字符串。bx 可以设置显示姓名序号的前景色背景色等属性。在展示学号姓名等学生信息的同时,不断改变字符的属性和显示字符串的位置,让信息在显示屏上不断的上下移动变化位置和属性,实现动态展示的效果。

因为实验要求在屏幕的四个位置分别展示四个用户程序,所以我需要先用纸笔大概衡量边界,再编写程序

在程序末端,利用 int 16h 的 1 号功能,实现捕捉键盘输入(不阻塞等待)来检查用户是否输入的空格,再使用 jmp 语句返回监控程序的内存地址 7c00 处,其他几个用户程序都有类似的代码段,就不在下面赘述。代码和实验效果如 figure 8 和 figure 9:

Figure 8: 展示姓名学号 Figure 9: 按空格返回

用户程序 2

沿用第一个实验中的 stone 的程序,当小球在屏幕上弹动的时候,不断改变小球显示字符的属性,实现动态展示的效果,代码类似实验一中的 stone,部分截图示例如下图 figure 10 和 figure 11:

Figure 10: 跳转到当前方向 Figure 11: 展示小球属性和字符

用户程序 3:

第三个用户程序是在屏幕的中间显示一个程序员们刚入门一定会看到的,字符串”hello world”,在四周沿着边缘用字符 0 画出一个五彩的边框作为装饰,边框不断改变着它的属性和颜色,呈现出一个动态的展示效果,代码类似实验 1 中的弹球实验,不过要做一些修改,因为字符在矩形边框上移动只有上下左右四种运动方式。实验代码举例如下图 figure 12 和 figure 13

Figure 12: 展示 hello world 字符串

Figure 13: 向右和向下示例

用户程序 4:

第四个程序是制作一个沙漏一样的图形,字符动态移动并在碰到预设好的边缘后发生转向,在画沙漏图形的时候,只有下,左下和左上三种运动的情况,示例代码如下图:

Figure 14: 向下移动情况 Figure 15: 向左上和坐下移动情况

使用 NASM 编译程序:

打开 nasm,并输入指令 nasm+ 文件名.asm,编译完后在同一个目录下会生成一个同名的二进制文件。重复操作将 4 个用户程序和监控程序都编译一次并生成各自的二进制文件。举例如图:

Figure 16: nasm 编译 Figure 17: 生成 bin 文件

使用 winHex 修改软盘:

使用 WinHex 打开刚刚生成的所有二进制文件和软盘 flp 文件,首先将监控程序 myos 的二进制文件内容替换到 WinHex 的第一个扇区(512Byte)中。注意:程序的大小不能超多 512B,否则会出错,替换后软盘的大小也不能改变。然后在第二个 512 字节的扇区中放第一个监控程序,在第三个 512 字节的扇区内放第二个,依次类推。用户程序之间不能重叠在同一个扇区。如图 figure18 和 figure19:

Figure 18: 监控程序的二进制文件 Figure 19: 将监控程序拷贝到软盘首扇区

用软盘启动裸机:

将软盘的前五个扇区分别替换为自己编写的汇编指令的二进制代码后,就可以开启虚拟机,选择以虚拟软盘启动,启动后虚拟机就会立刻将我们的程序加载到虚拟机的内存空间中并运行,监控程序和各个用户程序效果如下图:

Figure 20: 监控程序

Figure 21: 用户程序 1 Figure 22: 用户程序 2

Figure 23: 用户程序 3 Figure 24: 用户程序 4

实验心得和总结:

这次实验是建立在上一次实验的基础上的进阶。上一次我们在一个没有操作系统的裸机上使用软盘的首扇区引导裸机启动,而这次我们需要自己写一个监控程序,模拟最原始的操作系统的功能,可以控制执行哪个扇区里的用户程序,用户程序在执行完成或者接收到讯号后立刻将控制权交还给监控程序,这其实就是用 jmp 指令在内存中的地址间跳转的结果,这也让我对”操作系统其实就是一个程序”这句话渐渐有了更深刻的理解和体会,同时在实验中,我使用了很多的 BIOS 提供的中断指令,它们不同的功能帮助我更轻松了使用汇编语言编写出了想要的效果,包括 int 10h、int 13h 等指令,在使用过程中慢慢的熟练也不需要经常翻阅资料就懂得如何去使用和改换参数了。

这次实验因为有了上一次实验的基础,所以在设计的过程中,大致有了方向和方法,不像上次那样一直在查询资料,但这次还是和上次实验有很多不同的地方,例如监控程序的设计,如何使用键盘输入在内存中跳转,为什么要使用 org a100h 指令等等,这些都让我十分的困惑。其中让我思考最久的,是在我设计监控程序跳转到用户程序的时候,键盘输入经常无法被捕捉,之后慢慢调试才发现,可能是因为键盘缓冲区没有被清空,为了解决这个问题,我选择了使用一个循环嵌套在输入外面,要求用户一定要输入是 1、2、3、4 其中一个值才能离开循环,这样也不会出现键盘缓冲区有回车或者空格导致跳过输入这一部分了。

在用户程序返回监控程序的时候也遇到了问题,因为用户程序我不能用一个循环要求用户输入,因为程序必须一直在执行,所以我查看了 BIOSint 16h 的 1 号功能调用,发现了可以在不阻塞的条件下反复查看键盘缓冲区内容,一旦发现空格就立刻返回监控程序,但如果键盘缓冲区为空,也不会阻塞用户程序的进行,这样就成功实现了我的目的。在使用 nasm 和 winhex 将用户的二进制代码覆盖软盘扇区的时候也经常遇到困难,因为需要很细心的删除和复制,否则很容易就会删多或者删少导致软盘大小改变被损坏,所以操作系统的实验其实是一个考验人的耐心的过程,包括汇编语言、覆盖扇区、找 BUG 等都是十分的困难的,也让我深刻体会了以前的程序员是多么的痛苦。总之,实验二顺利结束了,希望我能继续努力,面对下一个挑战,继续加油!

参考文献

  • 基于多数据源以及业务流程分析的数据监控平台的设计与实现(北京邮电大学·吕云霄)
  • 基于Android的视频监控客户端的设计与实现(武汉邮电科学研究院·陈峰)
  • 专网应用系统用户行为监控系统设计与实现(西南交通大学·李伟伟)
  • 信息安全监控平台的研究与实现(浙江工业大学·张曾嵘)
  • 网站信息监管系统设计与实现(大连理工大学·王俊驰)
  • 山东移动集团客户业务系统告警监控的设计与实现(山东大学·杜超)
  • 网络视频监控管理平台的设计与实现(浙江工业大学·王政)
  • 主动数据库主动功能在场站货运交易系统中的应用(吉林大学·孙亚楠)
  • 监所管理信息系统的设计与实现(电子科技大学·夏超)
  • 基于Web的远程监控系统实现技术的研究(武汉理工大学·卓祯雨)
  • 网站文本数据采集系统的设计与实现(北京交通大学·田丹)
  • 基于.NET列车行车安全远程监控系统研究(大连理工大学·李响)
  • 基于多数据源以及业务流程分析的数据监控平台的设计与实现(北京邮电大学·吕云霄)
  • 基于J2EE权限管理系统平台设计与实现(吉林大学·任翔)
  • 基于J2EE架构的系统监测平台设计与实现(中国人民解放军国防科学技术大学·黄晋军)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码客栈 ,原文地址:https://bishedaima.com/yuanma/36015.html

相关推荐

发表回复

登录后才能评论