30天自制操作系统第一天

30天自制操作系统实验日志1

实验项目:

第1天:从计算机结构到汇编程序入门

一、实验主要内容

1、 内容1:下载“二进制编辑器”。

在这里插入图片描述
注释:某些文件直接复制到硬盘,会带上“只读”属性,如果文件带着只读属性,就无法对该文件进行编辑和覆盖操作。修改时要去掉只读属性。
在这里插入图片描述

2、 内容2:模拟启动打印出“Hello World”字样的操作系统。

步骤:①新建helloos0文件夹,将tolset文件夹下!cons_9x.bat和!cons_nt.bat两个文件复制粘贴到helloos0文件夹里;
②编辑“run.bat”文件;在这里插入图片描述
注释:直接由DOS命令行解释执行的文件,通常后缀名为.bat或.cmd,即批量处理文件;.img后缀的文件,即映像文件,可用于制作操作系统文件。该文件第一行意思为将helloos.img文件复制到z_tools文件夹下的qemu文件夹里,并且重命名为fdimage0.bin,第二行意思为运行这个模拟器。
PS:光盘中项目文件里面还包括一个install.bat文件,这个文件是为了将img文件拷贝到软盘中,由于我们用不到软盘,所以也并不需要这个文件。
③直接用光盘中的img文件或者自己用二进制编辑器写一个,然后双击!cons_nt.bat,输入run启动成功。
在这里插入图片描述

3、内容3:编写汇编程序。

步骤:①编写.nas文件;注释:因为我们用的是笔者写的编译器,所以就要使用相应的后缀名。
②将汇编语言转换为二进制语言,点击!cons_nt.bat后输入…\z_tools\nask.exe
helloos.nas helloos.img或者asm,就会在文件夹中看到出现了helloos.img文件。
③根据内容二进行模拟运行。

4、内容4:汇编代码分析

在这里插入图片描述
注释:
①“;”:这是个注释命令,相当于C语言或是C++中的“//”。
②DB指令可以用于输入信息,输出的信息用””括起来,在写字符串的时候,汇编语言会自动地查找字符串中每一个字符所对应的编码,然后把它们一个字节一个字节地排列起来。
③RESB指令用于输出0x00,$表示前面已经输出的字节数。

二、遇到的问题及解决方法

1、 描述问题1:模拟运行操作系统时,双击"!cons_9x.bat"启动失败。

解决方法:导致该问题的原因是我自己没有仔细看书上的标注,双击"!cons_nt.bat"重试后启动成功。原因是两个文件中的命令不同,"!cons_9x.bat"中命令为command,适合linux一类系统,而"!cons_nt.bat"中命令为cmd.exe适合我现在所用的windows系统。

2、 描述问题2:在光盘的文件中,打开!cons然后在命令行中输入run,显示路径找不到

在这里插入图片描述
解决方法:导致该问题的原因是书上的run.bat中文件路径是当前路径(…),解决方法为①将整个helloos文件夹复制到tolset文件夹下;②将run.bat文件路径改为决定路径;
在这里插入图片描述

三、程序设计创新点

1、描述创新点1:因为书中用的是虚拟机qemu,我们已经有了镜像文件,所以我想尝试用我电脑上的VM虚拟机运行一下。

①新建虚拟机,操作系统选择其他;
在这里插入图片描述
在这里插入图片描述
②在硬盘中添加软盘映像文件;
在这里插入图片描述
③启动虚拟机,也可以看到hello, world。
在这里插入图片描述

2、描述创新点2,直接修改汇编代码,改变打印出来的内容。

在这里插入图片描述
在这里插入图片描述

3、描述创新点3,直接修改汇编代码,使用ASC||改变打印出来的内容。

在这里插入图片描述
在这里插入图片描述

四、实验心得体会

本实验是自制操作系统的第一天,感觉还是挺期待的,希望自己可以做出一个小型的操作系统。以前对linux操作系统有一些简单的了解,有些内容了解了原理但是对如何实现还是一头雾水,希望通过这个实验课可以使我的动手能力有所提高。在本次实验,我通过书上的步骤,学会了通过汇编代码还有二进制代码实现了一个能够显示“hello, world”的os,希望下次课程可以实现更多的功能。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
创建一个完整操作系统是一个复杂而庞大的项目,通常涉及到操作系统内核、驱动程序、系统架构等多个层面,对于30天的时间来说,这是不现实的。然而,如果你对操作系统编程有兴趣,你可以尝试学习和理解操作系统的基本原理,并用一些轻量级的框架或工具如QEMU、Minix等来进行实践。 以下是一个简化的步骤概述: 1. **理论学习**:阅读操作系统相关的书籍,如《深入理解计算机系统》(The Art of Computer Programming, Volume 3),了解进程管理、内存管理、文件系统等基础概念。 2. **选择平台**:决定从用户空间(比如Linux内核的clone() API)还是内核模式(比如使用QEMU模拟)开始,因为内核开发涉及更多底层硬件知识。 3. **编写基本结构**:创建进程控制块(PCB)、内存管理模块,开始实现基本的系统调用接口。 4. **进程管理**:实现进程的创建、调度、同步和通信机制。 5. **内存管理**:设计虚拟内存映射、内存分配和回收算法。 6. **I/O管理**:处理设备驱动程序,实现简单的输入输出操作。 7. **文件系统**:如果要做全功能操作系统,你需要实现一个基本的文件系统,用于存储和读取数据。 8. **构建测试环境**:编写单元测试和系统测试,确保每个部分都能正常工作。 9. **持续学习和改进**:在整个过程中,不断查阅文档、源代码和参考资料,以解决遇到的问题。 记住,这是一个高度概括的过程,实际操作中每一步都需要大量的研究和编码。如果你是初学者,可能需要投入更多时间来学习相关基础知识。关于30天的具体代码示例,由于这个项目的规模和复杂性,这里无法提供详细的代码片段,但你可以通过在线教程和开源项目如MINIX的学习来找到起点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值