首页 > 其他分享 >实验楼操作系统学习记录

实验楼操作系统学习记录

时间:2023-10-12 22:31:55浏览次数:36  
标签:操作系统 记录 Image 代码 mov bootsect 课程 实验楼

链接

哈尔滨工业大学 李治军老师 操作系统课程 实验楼配套实验课

实验1 熟悉实验环境

  1. 课程说明
  2. 主要平台和工具介绍
  3. 实验环境的工作模式
  4. 使用方法

这一章节主要是一些对于课程以及实验楼环境的说明,没什么可说的

实验2 操作系统的引导

  1. 评分标准
  2. 实验提示

实验2的第一个任务是 完成bootsect.s的屏幕输出功能,最简单的一个任务,卡了我好久。 我的做法是把 ~/oslab/linux-0.11/boot 下的bootsect.s文件中的内容根据课程提示进行了一个替换。 在这里插入图片描述

在这里插入图片描述

在这里插入图片描述 我是将上面这三部分根据下面这张图进行了修改

在这里插入图片描述 结果是bootsect的大小为548字节,去掉 Minix 可执行文件头部(在6.3中有说明)后还剩516字节,没有办法用引导扇区进行存储,所以做法一定是错的。我就改来改去,但无论怎么改bootsect的大小都没法改变。 我一直认为这个bootsect必须做很多准备工作才行,否则系统就没有办法启动。但是经过了一番奇奇怪怪的思考,我突然发觉我可能想多了,因为我们根本就没到启动系统那一步,看过课程视频的大家都应该知道这个bootsect是位于BIOS之后,也就是说BIOS的工作做完之后执行的就是bootsect,只是执行一个代码,如果在这个代码中我们写了后续系统启动的代码那后续就可以启动系统,如果在这个代码中我们写了在屏幕显示一串字符的代码那就可以在屏幕显示一段代码,我想让它执行什么就可以执行什么,显示字符串和启不启动系统完全没有关系,因为他们两个是属于同一个层级的任务。 想到这里我就明白了,我需要做的就是打开一个新的bootsect.s,只需要写 下面这段在屏幕上显示字符的代码即可

entry _start
_start:
    mov ah,#0x03
    xor bh,bh
    int 0x10
    mov cx,#36
    mov bx,#0x0007
    mov bp,#msg1
    mov ax,#0x07c0
    mov es,ax
    mov ax,#0x1301
    int 0x10
inf_loop:
    jmp inf_loop
msg1:
    .byte   13,10
    .ascii  "Hello OS world, my name is LZJ"
    .byte   13,10,13,10
.org 510
boot_flag:
    .word   0xAA55

之后使用以下命令进行编译,链接,去除Minix 可执行文件头部就可以运行了

$ as86 -0 -a -o bootsect.o bootsect.s //编译生成bootsect.o
$ ld86 -0 -s -o bootsect bootsect.o //链接生成bootsect
$ dd bs=1 if=bootsect of=Image skip=32 //去除Minix 可执行文件头部生成Image
$ cp ./Image ../Image
$ ../../run

最终结果 在这里插入图片描述 完成了这一小步我才明白课程的设计思路是我们需要把原有文件中的内容全部删除,从头开始写,逐步完成系统的各个过程,哎,我真是智商堪忧啊。

标签:操作系统,记录,Image,代码,mov,bootsect,课程,实验楼
From: https://blog.51cto.com/u_14882565/7836081

相关文章

  • [Unraid 系列 v6.10+] 4 UNRAID Flash 备份目录记录
    说明UNRAID/boot一般为以下目录:root@unraid:/boot#tree-L1.├──EFI├──config├──logs├──syslinux└──......其中./EFI、./logs、syslinux为系统文件夹,一般不涉及用户数据。./config为具体用户数据配置文件。DockerCompose自建STACK......
  • 2020,2021 年 CF 简单题精选 做题记录
    2023.10.12开坑,打了几场div.2之后一直觉得这方面水平差太多,今天刚好在洛谷看到这个题单就准备开始做了,里面从黄到黑都有,我会尽量都做,并在这里记录。总共49题,我可能平时有时间就做一两题,估计是个长期坑了((。题单链接[Y]表示独立完成,[N]表示看题解之后完成。......
  • 记录--h5调用手机摄像头踩坑
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助1.背景一般业务也很少接触摄像头,有也是现成的工具库扫个二维码。难得用一次,记录下踩坑。2.调用摄像头的方法2.1. input<!--调用相机--><inputtype="file"accept="image/*"capture="camera"><!--调用......
  • 博学谷学习记录 自我总结 用心分享 | OpenResty中间件
    1.什么是OpenRestyOpenResty是一个基于Nginx与Lua的高性能Web平台,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。OpenResty通过汇聚各种设计精良的Nginx模块,从而将Nginx有效地......
  • R 脚本Trycatch在for循环中的使用记录
    点击查看代码x=list()p=list()outdir=paste0(getwd(),'/8.metabolites.connect.enrichment')if(dir.exists(outdir)){print("direxists")}else{dir.create(outdir)}for(iinc(2:length(each))){x[[i]]=e......
  • CentOS7操作系统防火墙设置和开放端口方法
     一、firewalld常用命令1、查看firewall状态systemctlstatusfirewalld.service2、开启firewall防火墙systemctlstartfirewalld.service3、停止firewall防火墙systemctlstopfirewalld.service4、重启firewall防火墙systemctlrestartfirewalld.service5、禁......
  • 系统文件损坏+重装系统微信记录保留
    系统文件损坏——不能启动进入系统;1、winPE进入命令提示符——输入sfc/scannow/offbootdir=c:\/offwindir=c:\windows等待执行完成,显示修复成功,重启即可进入系统(winPE可以是U盘PE) 重装系统微信记录保留办法;重置系统前备份2个文件:1、C:\Users或者用户\你电脑的用户名\AppDa......
  • 查找一个表中存在而另一个表中不存在的记录
    例如:两个表:t1,t2,查询在表t1中存在,而在表t2中不存在的记录。     假设以id字段为关联字段。方法1:需要两个表的字段完全一致select*fromt1minusselecct*fromt2方法2:select*fromt1wherenotexists(select1fromt2wheret1.id=t2.id)方法3:select*fromt1......
  • ESPnet搭建记录
    https://blog.csdn.net/nwnu_908/article/details/117665566?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-1-117665566-blog-103500422.235^v38^pc_relevant_anti_t3&spm=1001.2101.3001.4242.1&utm_relevant_index=4 ES......
  • 【日常收支账本】【Day05】编辑账本界面增加删除、更新记录功能——提高代码复用性
    一、项目地址https://github.com/LinFeng-BingYi/DailyAccountBook二、新增1.增加删除记录功能1.1功能详述点击删除按钮后,获取对应行的数据组成字典,用字典的键值对匹配到对应日期的记录元素;接着用该字典数据冲正存款账户余额(实现思路为新增记录时的反向操作),同时删除记录......