Linux的运行原理

操作系统的加载

CPU被设计成只能对内存寻址,不能对磁盘寻址,所以磁盘上的信息都需要加载到内存才能运行。

但是上电后,内存中什么都没有,所以需要通过纯硬件方式将BIOS内存映射到内存的 0xFFFF0 处,并且将CS的值置为0xF000、IP的值置为0xFFF0,这样CS:IP就指向了BIOS的入口地址 0xFFFF0。

BIOS程序在内存最开始的位置(0x00000)用1KB的内存空间(0x00000~0x003FF)构建中断向量表。

通过0x19中断,将磁盘的第一扇区(512B)加载到内存0x07C00处,这个扇区就是启动扇区,其程序叫做引导程序bootsect。

bootsect使用0x13中断,将第二扇区开始的4个扇区,即setup.s对应的程序加载至内存的SETUPSEG(0x90200)处,获取机器信息和硬件参数。

bootsect使用0x13中断,将其余内核代码加载到内存。

由bootsect转为执行setup。

关中断,并将内核代码移到内存起始处(0x00000),此时硬件中断表被覆盖,然后会建立软件中断表。

打开A20,寻址模式由16位变为32位,将CR0寄存器的PE位设置为1,由实模式进入保护模式,至此setup执行完毕。

程序跳转到head,bootsect和setup都是汇编,但是head是.o文件,会在main之前执行。

head会做一些main执行前的准备,以及建立分页框架,即在0x000000的位置创建了页目录表、页表、缓冲区、GDT、IDT。

head会废除setup创建的IDT,并重新构建一套IDT,以适应16位到32位的转变。

之后head给main函数准入入参,通过手工压栈,最后程序跳转到main。

main函数

设置系统盘为根目录,内存分页,初始化输入输出设备。

init进程

手工用汇编创建进程0,开启时钟中断和系统调用。

开中断。

进程0由特权级转变为用户级。

进程1和进程2

进程0 fork 出进程1。
进程1设置硬盘信息、格式化虚拟盘、加载根文件系统等工作。

进程1 fork 出进程2。
进程2会打开中断和加载Shell,最后进程进入怠速状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux Wine(即"Wine Is Not an Emulator")是一种允许在Linux操作系统上运行Windows应用程序的兼容层。它的原理是通过重新实现Windows API(应用程序接口)来模拟Windows环境,从而使得Windows程序能够在Linux上正常运行。 首先,Wine使用了一种名为"Wine API"的工具库来替代Windows API。这些库中包含了许多与Windows API相同或相似的函数,允许Windows应用程序在Linux环境中执行相同的任务。Wine还提供了一套以二进制形式存储的Windows系统文件,如.dll文件和.exe文件。这些文件可以被应用程序加载和运行,使得它们能够在Linux中模拟Windows环境。 其次,Wine还提供了一个称为"Winelib"的开发工具集。Winelib允许开发者将他们的Windows应用程序源代码编译为Linux下可执行文件。这使得开发者能够在Linux上编译Windows应用程序,而不需要对代码进行大幅修改。Winelib还提供了一些转换工具,使得开发者能够将原本只能在Windows上编译的代码转换为可在Linux上正常编译的代码。 另外,Wine还提供了一些其他的支持,如对图形和音频的处理、对Windows注册表的模拟、对.NET框架的支持等。这些功能进一步提升了在Linux运行Windows应用程序的成功率和性能。此外,Wine还允许用户通过配置文件来调整和优化其性能和行为。 总之,Linux Wine通过重新实现Windows API、提供相关的工具库和文件,以及提供其他支持功能,使得Windows应用程序能够在Linux运行。它为Linux用户提供了一种便捷的方式来使用和享受Windows应用程序的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多弗朗强哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值