OS lab1 实验报告

OSlab1实验报告

实验步骤

1:填充helloworld.c。已经被助教填了,这一步直接搞定- -
2:编译出带elf的helloworld,使用命令
gcc helloworld.c -T boot.lds -nostdlib uart.o -m16 -o helloworld.
3: objcopy -O binary helloworld bin得到去掉elf头的可执行代码段
dd if=bin of=out count=1 bs=512 conv=sync扩充到512个字节
然后在511,512字节处加入magic number 55 aa
具体使用vim -b out ,通过:%!xxd 可将其变成可修改的二进制文件形式来修改
4: qemu-system-i386 -m 1024 -hda out -nographic

思考题

1:qemu-system-i386 -m 1024 -hda out -nographic -s -S可以使qemu驻留并且等待一个gdb来调试
另外开启一个终端,进入gdb
通过命令target remote localhost:1234来使得gdb与qemu相连,之后正常使用gdb就行了
2:在helloworld.c的main()函数的最开始加入
asm volatile(“mov $0x7f00,%bp”);
这样就能给bp赋上一个初始值,找一块内存去读写,也就是初始化了一个栈。
3:我们给定的代码默认就会触发这一个问题,经过一系列处理得到最后去执行的文件out,
将其反汇编可以发现port_out()的代码段出现在了main()的代码段前面
在没有了elf文件以后,qemu去运行out只会从代码段的初始开始一个指令一个指令执行
这样就导致了问题。
解决思路有两个:
1>让port_out()不出现在main前面,我们将port_out()从uart.h放到helloworld.c就行了
2>让有函数出现在main前面也不影响,在整个程序的最开始加入一个函数call_main()就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、实验目的 多道系统中,进程与进程之间存在同步与互斥关系。当就绪进程数大于处理机数时,需按照某种策略决定哪些进程先占用处理机。在可变分区管理方式下,采用首次适应算法实现主存空间的分配和回收。 本实验模拟实现处理机调度及内存分配及回收机制,以对处理机调度的工作原理以及内存管理的工作过程进行更深入的了解。 二、实验内容及要求 1.实验内容 (1)选择一个调度算法,实现处理机调度; (2)结合(1)实现主存储器空间的分配和回收。 2.实验具体要求 (1)设计一个抢占式优先权调度算法实现多处理机调度的程序,并且实现在可变分区管理方式下,采用首次适应算法实现主存空间的分配和回收。 (2)PCB内容包括:进程名/PID;要求运行时间(单位时间);优先权;状态;进程属性:独立进程、同步进程(前趋、后继)。 (3)可以随机输入若干进程,可随时添加进程,并按优先权排序; (4)从就绪队首选进程运行:优先权-1;要求运行时间-1;要求运行时间为0时,撤销该进程;一个时间片结束后重新排序,进行下轮调度; (5)考虑两个处理机,考虑同步进程的处理机分配问题,每次调度后,显示各进程状态,运行进程要显示在哪个处理机上执行。 (6)规定道数,设置后备队列和挂起状态。若内存中进程少于规定道数,可自动从后备队列调度一作业进入。被挂起进程入挂起队列,设置解挂功能用于将制定挂起进程解挂入就绪队列。 (7)结合实验一pcb增加所需主存大小,主存起始位置;采用首次适应算法分配主存空间。 (8)自行假设主存空间大小,预设操作系统所占大小并构造未分分区表。表目内容:起址、长度、状态(未分/空表目)。 (9)进程完成后,回收主存,并与相邻空闲分区合并。 (10)最好采用图形界面;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值