操作系统的引导区块

pdf地址:https://pan.baidu.com/s/1ix6rDfE4rLxazcwwKPlbNQ,仅供学习之用。

 

按照上图使用二进制编辑器BZ写一个512字节的引导区块,中间*  为省略的零,做成VMware镜像,然后开启虚拟机,但是出现operating system not found的情况:

代码说明如下:

这里的magic number(幻数)为0x aa55,使用小端方式书写如下:

 

 

检查了文件大小,也没错,512字节。

 

 

不知道哪里引导错误,按照原文说法应该会出现无限循环,不会出现如上提示。

结合30天自制操作系统的教程,使用模拟器却可以模拟,正是进入了不断地引导循环之中,锅应该是Vmware 的了。

 

### 关于操作系统课程设计第5题的相关资料 #### 主存分配与回收的设计思路 在操作系统的内存管理中,主存分配和回收是一个核心部分。假设位示图的初始状态已知[^1],可以基于此构建一个简单的主存分配算法。当有一个信息量为5页的新作业需要装入时,可以通过扫描位示图找到连续可用的空间并标记这些空间已被占用。 对于新作业所需页面数(即5页),应从位示图中查找至少能容纳这5页大小的一组连续空闲块,并更新该区域的状态为“已使用”。接着按照指定格式生成对应于此作业的页表。 随后,在另一个场景下如果有其他作业完成执行并将释放其使用的特定物理地址范围内的区块(如本例中的第4、5、6及31块),则需再次访问位示图表以重新设定上述提及到那些位置上的标志位回至"未被利用"状况之下从而完成整个归还动作过程。 以下是用于实现这一逻辑的一个简化Python伪代码表示: ```python def allocate_memory(bit_map, job_pages=5): start_index = -1 count = 0 for i in range(len(bit_map)): if bit_map[i] == '0': if count == 0: start_index = i count += 1 if count >= job_pages: break else: start_index = -1 count = 0 if start_index != -1 and count >= job_pages: for j in range(start_index, start_index + job_pages): bit_map[j] = '1' page_table = [(i-start_index+1,j) for (i,j) in enumerate(range(start_index,start_index+job_pages))] return True,page_table return False,None def free_memory(bit_map, blocks=[4,5,6,31]): for block in blocks: if block<len(bit_map): bit_map[block]='0' bit_map=['0']*100 # 假设总共有100个块 success, table = allocate_memory(bit_map) if success: print("Page Table:",table) else: print("Not enough memory") free_memory(bit_map) ``` 以上代码片段展示了如何通过遍历位示图来进行内存分配以及之后的释放工作。 #### 计算机系统启动流程概述 作为补充理解背景知识的一部分,了解计算机系统的整体启动顺序有助于更好地掌握内存管理环节在整个体系架构里的角色定位。通常情况下,计算机会经历BIOS自检阶段、加载引导装载程序、读取硬盘分区表直至最终把控制权交给操作系统内核等一系列步骤才能进入正常运作模式[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值