《操作系统真象还原》第一章——环境配置

安装并配置Bochs

下载Bochs

Download bochs-2.6.8.tar.gz (Bochs x86 PC emulator) (sourceforge.net)

解压

tar -zxvf bochs-2.6.8.tar.gz

编译安装

配置

进入bochs-2.6.2文件夹,执行以下语句,其中我把bochs安装在了我的/home/minios/bochs目录下,读者可自行修改

./configure \
--prefix=/home/minios/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x --with-x11

配置过程中如有报错,可自行网上查阅修改

本人遇到的错误:

ERROR: pkg-config was not found, or unable to access the gtk+-2.0 package. Install pkg-config and the gtk+ development p

解决方案:

sudo apt-get install libgtk2.0-dev

配置成功界面:

编译

执行make命令进行编译

make

注意,刚开始我使用bochs2.6.2版本编译的时候会报错,但是我换成bochs2.6.8版本后就直接编译成功了

编译成功界面

安装

make install

安装成功的标志:
在安装路径(/home/minios/bochs)下生成了bin文件夹

 配置Bochs

进入bochs目录(安装目录),新建boot.disk文件,写入以下配置,注意将相应目录修改为自己设置的目录

vim boot.disk
# 设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
megs: 32

# 设置对应真实机器的 BIOS 和 VGA BIOS
romimage: file=/home/minios/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/minios/bochs/share/bochs/VGABIOS-lgpl-latest

# 设置 Bochs 使用的磁盘
# floppya: 1_44=a.img, status=inserted

# 选择启动盘符
# boot: flopy # 默认从软盘启动
boot: disk # 从硬盘启动,我们的任何代码都将直接写在硬盘上,所以不会再有读写软盘的操作。

# 设置日志文件输出
log: bochs.out

# 关闭鼠标,打开键盘,按照书上写会报错
mouse: enabled=0
#keyboard: enabled=1,
keyboard: keymap=/home/minios/bochs/share/bochs/keymaps/x11-pc-us.map


# 硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

# 增加 Bochs 对 GDB 的支持,GDB 远程连接到此机器的 1234 端口便可调试
# gdbstub: enabled=1, port=1234, test_base=0, data_base=0, bss_base=0

保存退出

启动bochs

./bin/bochs -f boot.disk

如下图所示, 看到数字[6]就直接按下回车,之后再按键盘c,否则报错就检查错误,如配置文件中的路径是否写对等

安装成功!

创建启动盘

仔细观察上述运行成功的bochs,可以看到bochs会报错显示

Boot failed:could not read the boot disk

那是因为此时系统中还没有启动盘,接下来我们需要创建启动盘

bochs给我们提供了创建虚拟硬盘的工具,使用如下命令可以查看相关指令

./bin/bximage --help

接下来我们来根据帮助创建虚拟硬盘,在终端输入

./bin/bximage

其余具体步骤如下所示

接下来,我们需要将创建的虚拟硬盘的信息写入到配置文件中,注意柱面、磁道和扇区信息(上图红框中的CHS信息)也要写进去

打开配置文件

vim boot.disk

 加入以下代码

ata0-master: type=disk, path="hd60M.img", mode=flat,cylinders=121,heads=16,spt=63

完整文件内容

# 设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
megs: 32

# 设置对应真实机器的 BIOS 和 VGA BIOS
romimage: file=/home/minios/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/minios/bochs/share/bochs/VGABIOS-lgpl-latest

# 设置 Bochs 使用的磁盘
# floppya: 1_44=a.img, status=inserted

# 选择启动盘符
# boot: flopy # 默认从软盘启动
boot: disk # 从硬盘启动,我们的任何代码都将直接写在硬盘上,所以不会再有读写软盘的操作。

# 设置日志文件输出
log: bochs.out

# 关闭鼠标,打开键盘,按照书上写会报错
mouse: enabled=0
#keyboard: enabled=1,
keyboard: keymap=/home/minios/bochs/share/bochs/keymaps/x11-pc-us.map


# 硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

#新加入的代码,虚拟硬盘配置
ata0-master: type=disk, path="hd60M.img", mode=flat,cylinders=121,heads=16,spt=63

# 增加 Bochs 对 GDB 的支持,GDB 远程连接到此机器的 1234 端口便可调试
#gdbstub: enabled=1, port=1234, test_base=0, data_base=0, bss_base=0

保存退出,再次运行bochs

./bin/bochs -f boot.disk

 可以看到,虽然仍旧报错,但是报错信息不再是不能读取启动盘,说明启动盘已经创建好了

Boot failed:not a bootable disk

安装开源汇编调试器NASM

安装

安装很简单,直接在终端输入以下命令即可

sudo apt-get install nasm

安装完成后,如果可以查看到nasm的版本号即可视为安装成功

nasm -version

测试

创建汇编文件

创建一个asm文件

vim hello.asm

文件内容如下

section .data
  hello:     db 'Hello world!',10    ; 'Hello world!' plus a linefeed character
  helloLen:  equ $-hello             ; Length of the 'Hello world!' string
                                     ; (I'll explain soon)

section .text
  global _start

_start:
  mov eax,4            ; The system call for write (sys_write)
  mov ebx,1            ; File descriptor 1 - standard output
  mov ecx,hello        ; Put the offset of hello in ecx
  mov edx,helloLen     ; helloLen is a constant, so we don't need to say
                       ;  mov edx,[helloLen] to get it's actual value
  int 80h              ; Call the kernel

  mov eax,1            ; The system call for exit (sys_exit)
  mov ebx,0            ; Exit with return code of 0 (no error)
  int 80h

编译

nasm -f elf64 hello.asm

链接

ld -s -o hello hello.o

运行

./hello

输出hello world! 

参考:

《操作系统真象还原》第一章 ---- 安装Vmware Station 安装Ubuntu 装载配置Bochs 安装Vmware tools 开始乘帆历险!_学习操作系统真相还原安装虚拟机-CSDN博客

操作系统真象还原环境搭建-详细实践版 - 知乎 (zhihu.com)

### 操作系统简介 #### 1. 概述 操作系统是管理和协调计算机硬件与软件资源的核心程序,同时也是用户和计算机之间的接口[^1]。通过提供一系列服务和支持机制,操作系统使得应用程序能够高效、安全地执行。 #### 2. 主要功能 操作系统的主要职责在于全面管理计算机系统内的各类资源,具体包括但不限于处理器(CPU)[^2]、存储器(RAM)以及其他外设如打印机、显示器等。其中尤为重要的两项工作是对进程的调度控制以及文件系统的维护: - **进程管理**:负责创建并销毁用户级进程;同时实施有效的CPU分配策略来保障多任务环境下的性能表现。 - **文件管理系统**:定义了如何组织、存取数据结构化信息单元即“文件”,并且提供了相应的访问权限设定等功能。 此外,在现代计算环境中,网络通信能力也成为了不可或缺的一部分,它允许不同机器间共享资源和服务。 #### 3. 用户界面 对于终端使用者而言,操作系统通常会呈现两种形式的人机对话模式——图形化的桌面环境或是基于文本指令集构成的shell命令行工具[^3]。这两种方式各有特色,满足不同程度的技术需求偏好。 #### 4. 运作原理 为了支持更加灵活的任务处理流程,传统单道批处理模型逐渐被改进为可以允许多个作业并发执行的新架构。这不仅意味着让多个用户的请求能够在短时间内得到响应,同时也促进了实时性和交互性的提升。为此引入了一些关键技术概念,比如时间片轮转算法用于平衡各待办事项之间的时间配给量[^4]。 ```python # Python代码示例展示了一个简单的模拟操作系统调度过程 import time def simulate_os_scheduling(jobs): """简单模拟OS调度""" while jobs: current_job = jobs.pop(0) print(f"正在运行 {current_job}") time.sleep(1) # 假定每个job耗时一秒完成 if not jobs: break else: print("切换到下一个任务...") simulate_os_scheduling(['Job A', 'Job B', 'Job C']) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值