标签: osdev

RPL从哪里来?

我有点困惑,我从许多不同的网站上阅读,但我不清楚:

每个段寄存器都有可见部分和不可见部分。可见部分称为段选择器,并且有直接指令来加载段选择器。

请求者特权级别(RPL):该字段标识提供受保护的数据访问的特权级别。

好的,我知道我可以在汇编中使用指令,例如加载选择器,但我无法修改 RPL,对吧?它从何而来?CPU是如何选择的呢?谢谢

privileges x86 assembly osdev memory-segmentation

1
推荐指数
1
解决办法
553
查看次数

如何实现终端滚动

我按照 Bare Bones 教程创建了一个内核。我添加了一些对终端滚动的支持,但它并没有真正起作用。当我在 VirtualBox 中运行最终的 ISO 映像时,出现了严重错误。日志文件充满了乱码。目前,我的终端滚动功能是:

void terminal_scroll()
{
    uint8_t attribyte = (0 << 4) | (15 & 0x0F);
    uint16_t blank = 0x20 | (attribyte << 8);

    unsigned int i;
    for (i = 0*80; i < 24*80; i++)
        terminal_buffer[i] = terminal_buffer[i + 80]

    for (i = 24*80; i < 25*80; i++)
        terminal_buffer[i] = blank;
}
Run Code Online (Sandbox Code Playgroud)

c terminal scroll bare-metal osdev

1
推荐指数
1
解决办法
3389
查看次数

为什么不能将共享库链接到内核代码中?

有什么影响?内核是用静态库编译的还是内在实现的?

此外,根据this,内核代码不能使用任何浮点运算。这是为什么?

x86 assembly osdev linux-kernel

1
推荐指数
1
解决办法
1456
查看次数

带有 intel x86-32 位程序集的 gcc:访问 C 函数参数

我在做一个操作系统的实现工作。
首先是代码:

//generate software interrupt
void generate_interrupt(int n) {

    asm("mov al, byte ptr [n]");
    asm("mov byte ptr [genint+1], al");
    asm("jmp genint");
    asm("genint:");
    asm("int 0"); 
}
Run Code Online (Sandbox Code Playgroud)

我正在用-masm=intelgcc 中的选项编译上面的代码。此外,这不是生成软件中断的完整代码。

我的问题是我收到错误n undefined,我该如何解决,请帮忙?

它也在链接时而不是在编译时提示错误,下面是一个图像在此处输入图片说明

x86 assembly gcc inline-assembly osdev

1
推荐指数
1
解决办法
893
查看次数

如何修复“qemu:致命:尝试在 0x000a0000 处的 RAM 或 ROM 之外执行代码”

我正在开发自己的引导加载程序 + 内核。我创建了一个项目放在github上:https : //github.com/rprata/ubootlua(分支tmp-libc-implementation)

我尝试使用 QEMU 运行我的 boot.bin:

qemu-system-i386 -fda boot.bin -nographic -serial stdio -monitor none

但是会发生崩溃:

> qemu-system-i386 -fda ./deploy/boot.bin -nographic -serial stdio -monitor none
> WARNING: Image format was not specified for './deploy/boot.bin' and probing guessed raw.
>         Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
>         Specify the 'raw' format explicitly to remove the restrictions.
> qemu: fatal: Trying to execute code outside RAM or …
Run Code Online (Sandbox Code Playgroud)

x86 assembly qemu osdev bootloader

1
推荐指数
1
解决办法
1737
查看次数

操作系统如何检测进程崩溃

操作系统如何知道 EIP 不再是有效/合法的指令并且该应用程序已崩溃?它如何知道何时生成故障转储数据?

c++ crash x86 osdev

1
推荐指数
1
解决办法
306
查看次数

引导加载程序未加载内核

我正在开发我的操作系统。

我在启动操作系统时出错。

错误是:

未找到 KERNEL.BIN!

以下是代码:

启动文件

; The Aqua_Seven_OS Operating System bootloader
; ==================================================================


    BITS 16

    jmp short bootloader_start  ; Jump past disk description section
    nop             ; Pad out before disk description


; ------------------------------------------------------------------
; Disk description table, to make it a valid floppy
; Note: some of these values are hard-coded in the source!
; Values are those used by IBM for 1.44 MB, 3.5" diskette

OEMLabel        db "MIKEBOOT"   ; Disk label
BytesPerSector      dw 512      ; Bytes per …
Run Code Online (Sandbox Code Playgroud)

x86 assembly nasm osdev x86-16

1
推荐指数
1
解决办法
564
查看次数

GDT是如何被调用的?

我知道GDT(全局描述符表)是如何实现的以及段寄存器和段描述符的使用。然而,如何/何时访问 GDT 条目呢?

是否可以通过基本 mov 指令访问,例如

mov [eax],ebx 
Run Code Online (Sandbox Code Playgroud)

这是否隐式调用 ds 段寄存器,然后访问 GDT 段描述符,或者是否有其他方式访问 GDT 条目?

memory x86 assembly osdev gdt

1
推荐指数
1
解决办法
463
查看次数

AMD 是否支持 x2APIC?

我是 OS 的学习者,正在尝试编写内核。

我在谷歌上搜索了“AMD x2APIC”,发现一些关于 EPYC 7002 系列的信息似乎支持它。

但我找不到相关文档。

所以我想问一下最近的AMD处理器是否支持它,如果是,我在哪里可以找到文档。

cpu x86 osdev apic amd-processor

1
推荐指数
1
解决办法
928
查看次数

究竟什么是分页?OSDEV

我正在尝试编写自己的操作系统,但到了需要设置分页的地步。我写了一些似乎有效的代码,但我意识到我不明白分页是如何工作的。现在我将尝试解释我是如何理解事物的,我将有一些问题!

所以据我所知,分页是一种将地址映射到其他地址的方式,以便每个应用程序都可以看到完整的地址空间(?)。有一种叫做页目录的东西,它存储 1024 个 4 字节的条目,每个条目包含一个指向页表的指针,该页表也有 1024 个条目。页表的每个条目都有一个指向 4 KiB 物理地址块开头的指针。这意味着 4096 字节 * 页表中的 1024 个条目 * 页目录中的 1024 个条目 = 可以映射的 4 GiB 内存。例如,我可以将应用程序加载到 0x80000000 并将该地址映射到 0x00000000,应用程序将看到其地址从 0x00000000 开始。

问题:

  1. 每个应用程序都有自己的页面目录还是只有一个页面目录,应用程序如何访问页面以及它们具体做什么?
  2. 如果应用程序获得 4 KiB 的空间块或一页,他们应该如何查看完整的地址空间?
  3. 你如何将页面写入硬盘驱动器?
  4. 我们应该如何分配页面供应用程序使用?

paging x86 osdev virtual-memory page-tables

1
推荐指数
1
解决办法
232
查看次数