相关疑难解决方法(0)

如何在没有操作系统的情况下运行程序?

如何在没有运行操作系统的情况下自行运行程序?你能创建计算机可以在启动时加载和运行的汇编程序,例如从闪存驱动器启动计算机并运行cpu上的程序吗?

x86 assembly operating-system osdev bootloader

227
推荐指数
3
解决办法
8万
查看次数

操作系统中的用户和内核模式有什么区别?

用户模式和内核模式之间有什么区别,为什么以及如何激活它们中的任何一个,以及它们的用例是什么?

operating-system

94
推荐指数
5
解决办法
18万
查看次数

CPU权限环:为什么不使用环1和2?

有关x86 CPU权限的几个问题:

  • 为什么大多数操作系统都没有使用环1和环2?是仅仅维护代码与其他架构的兼容性,还是有更好的理由?

  • 是否有任何操作系统实际使用这些环?或者他们完全没用?

cpu privileges x86

89
推荐指数
3
解决办法
3万
查看次数

x86分页如何工作?

这个问题旨在填补关于该主题的良好免费信息的真空.

我相信一个好的答案将适合一个大的答案或至少在几个答案.

主要目标是为完整的初学者提供足够的信息,以便他们可以自己学习手册,并能够理解与分页相关的基本操作系统概念.

建议的指导方针:

  • 答案应该是初学者友好的:
    • 具体但可能简化的例子非常重要
    • 欢迎使用所示概念的应用
  • 引用有用的资源是好的
  • 我们欢迎操作系统如何使用分页功能
  • PAE和PSE的解释是受欢迎的
  • 我们欢迎对x86_64进行小规模的讨论

相关问题以及为什么我认为它们不是愚蠢的:

paging x86 virtual-memory

78
推荐指数
2
解决办法
3万
查看次数

什么是更好的"int 0x80"或"系统调用"?

我研究Linux内核并发现,对于int 0x80体系结构,中断syscall不能用于调用系统调用.

问题是:在int 0x80架构的情况下什么是更可取的int 0x80syscall为什么?

编辑:我使用内核3.4

linux x86 assembly system-calls

57
推荐指数
3
解决办法
3万
查看次数

为什么Linux不通过TSS使用硬件上下文切换?

我读了以下声明:

x86架构包括称为任务状态段(TSS)的特定段类型,用于存储硬件上下文.尽管Linux不使用硬件上下文切换,但它仍然被迫为系统中的每个不同CPU设置TSS.

我想知道:

  • 为什么Linux不使用硬件支持进行上下文切换?
  • 硬件方法不是比软件方法快得多吗?
  • 是否有任何操作系统可以利用硬件上下文切换?Windows使用它吗?

最后一如既往,感谢您的耐心和回复.

- - - - - -添加 - - - - - - -

http://wiki.osdev.org/Context_Switching得到了一些解释.

像我这样迷茫的人可以看看它.8 ^)

linux x86 low-level linux-kernel

39
推荐指数
3
解决办法
1万
查看次数

内核如何获得在linux下运行的可执行二进制文件?

内核如何获得在linux下运行的可执行二进制文件?

这似乎是一个简单的问题,但任何人都可以帮助我深入挖掘?如何将文件加载到内存以及如何启动执行代码?

任何人都可以帮助我,一步一步地告诉我们发生了什么吗?

c linux

26
推荐指数
4
解决办法
1万
查看次数

如何从用户空间访问内核空间?

用户内存和内核内存究竟与Linux内核有何区别(在为内核空间提供安全性方面)?

我可以在用户空间的内核地址空间中编写哪些不同的方法?

我知道的一种方法是通过系统调用.我们可以使用多个系统调用,但最后它们都是系统调用.即使在系统调用中,我们也会将数据发送到内核空间,在那里它(驱动程序或各个模块)调用copy_from_user()等函数将数据从用户空间复制到内核空间.在这里,我们完全没有写入地址空间.我们只是传递一个用户指针,其中包含需要复制到内核缓冲区的数据.

我的问题是,我们有什么方法可以访问内核空间中存在的物理地址并对其执行操作?

第二,除了系统调用之外还有其他方法可以从用户应用程序写入内核空间吗?

我从stackoverflow中提到了这个链接.但我认为我的问题没有得到回答,而且是从不同的角度来看.因此,我想问一个不同的问题.

请分享您的知识...谢谢.

linux memory-management mmap linux-kernel

20
推荐指数
2
解决办法
4万
查看次数

ARM的构造SWI和SVC是完全一样的吗?

ARM程序集具有用于进入"管理员模式"的SWI和SVC指令.

令我困惑的是,为什么有两个?这里据说SVC是以前的SWI.这是否意味着基本上他们改变了助记符?它们是一样的吗?我可以互换使用吗?其中一个存在于架构之前,还有其他之后?

embedded assembly arm instruction-set

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

如何从程序中访问控制寄存器cr0,cr2,cr3?获得分段错误

我编写了一个程序,试图读取和写入控制寄存器.

程序编译很好,但是当即将执行内联汇编时,它会产生分段错误.

码:

void instructions(int val)
{
    int i;
    int value;
    for(i = 0; i < val; i++)
         __asm__("mov %cr0, %eax");
}
Run Code Online (Sandbox Code Playgroud)

我使用了GDB并逐步完成了每个装配线,并且mov %cr0,%eax正在发生分段故障.

谁知道什么是错的?

x86 inline-assembly cpu-registers

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

qemu-system-aarch64 模拟 a53 开机时进入 el1

我已经下载了最新的 qemu Windows 版本,然后在下面运行

qemu-system-aarch64 -M virt,gic_version=3 -cpu cortex-a53 -smp 2 -nographic 
-m 2048 -kernel mybaremetal.axf -s -S
Run Code Online (Sandbox Code Playgroud)

为了模拟双核 cortex-a53,我可以使用 aarch64 gdb 客户端连接到它,在 mybaremetal.axf 的入口处,我通过以下方式检查了执行的异常级别:

mrs x1, CurrentEL
Run Code Online (Sandbox Code Playgroud)

我总是在 x1 中得到值 4,但这里预期值 0xc,如 ARM 文档中所示,它说:在加电和复位时,处理器进入 EL3

有人知道原因吗?

arm qemu arm64

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

什么是当前的执行模式/异常级别等?

我是ARMv8架构的新手.我有以下基本问题:

  1. 我怎么知道当前执行模式AArch32或AArch64是什么?我应该阅读CPSR或SPSR来确定这一点吗?

  2. 当前的例外级别EL0/1/2/3是多少?

  3. 一旦异常到来,我可以读取任何寄存器以确定我是否处于Serror/Synchronous/IRQ/FIQ异常处理程序中.

TIA.

arm exception-handling arm64

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