首页 文章
  • 0 votes
     answers
     views

    QEMU在方法执行时崩溃

    我写了一个非常简单的C内核和一个bootloader . 我正在QEMU中加载内核,如下所示: qemu-system-i386 kernel.image 当我加载内核并从实模式切换到保护模式(该步骤成功完成)和 main 方法开始执行其他方法,如 void foo(int a, int b, int c, int d, int e) {return;} . 但它的执行会导致QEMU崩溃 . ...
  • 0 votes
     answers
     views

    在linux中通信和同步内核和用户空间的最佳方式

    我的目标是从内核记录很多活动 . 为此,我需要写入基于磁盘的文件系统 . 因此,我实现了一个字符设备驱动程序,以及一个从该虚拟设备读取的用户空间进程 . 驱动程序将数据复制到用户空间缓冲区,用户进程将其写入文件 . 我的问题是如何同步数据 . 我开始在fifo的内核实现中使用kfifo . 因此,无论我想记录哪里,我都使用kfifo API将数据复制到fifo中 . 虚拟设备驱动程序从fifo读取...
  • 12 votes
     answers
     views

    mmap比ioremap慢

    我正在开发运行Linux 2.6.37的ARM设备 . 我试图尽可能快地切换IO引脚 . 我制作了一个小内核模块和一个用户空间应用程序 . 我尝试了两件事: 使用 ioremap 直接从内核空间处理GPIO控制寄存器 . mmap() GPIO控制寄存器没有缓存并在用户空间中使用它们 . 两种方法都有效,但第二种方法比第一种方法慢3倍(在示波器上观察) . 我想我禁用了所有缓存机制 ...
  • 1 votes
     answers
     views

    评估TensorFlow中多维输入之间的成对欧氏距离

    我有两个形状的二维张量,比如m X d和n X d . 什么是优化的(即没有for循环)或评估这两个张量之间的成对欧氏距离的张量流方式,以便得到形状m X n的输出张量 . 我需要它来创建高斯核的平方项,以最终具有大小为m×n的协方差矩阵 . 等效的未经优化的numpy代码看起来像这样 difference_squared = np.zeros((x.shape[0], x_.shape[0])...
  • 0 votes
     answers
     views

    通过unix域套接字传递的数据是否跨越内核边界?

    我们正在为网络服务器编写代理,而不是直接通过TCP连接,客户端程序将连接到本地unix域套接字以发送其数据,然后代理应用程序将通过TCP转发它 . 我的问题是:在代理接收之前,应用程序通过unix域套接字发送的数据是否跨越内核边界?我问的原因是,如果是这样,我们可以期望看到使用splice(2)带来的好处 . 如果没有,我们不会 .
  • 0 votes
     answers
     views

    在xeon-phi上启动自定义内核

    我试图在Xeon-phi上启动自定义内核而不是默认的Linux内核 . 在this link,我找到了一种交叉编译我的内核的方法,该内核使用k1om-mpss-linux-gcc交叉编译器成功编译 . 交叉编译足够吗?我收到了错误 mykernel.img不是k1om Linux bzImage 编辑:所以,我使用/usr/linux-k1om-4.7/bin/x86_64-k1om-linu...
  • 3 votes
     answers
     views

    如何在CR0中设置PE标志启用保护模式?

    我试图了解一台机器如何从开机到运行内核 . 从我收集到的内容来看,在启动期间切换到保护模式以获得对更多可寻址内存的访问是有用的,即使我们最终将切换到更常规的虚拟内存计划,页面目录和页面表并关闭分段 . 似乎要切换到保护模式3必须要做的事情: 设置全局描述符表(gdt)并使用 lgdt 指令加载它 将控制寄存器CR0中的PE标志位设置为使能(即,值为1) 用 ljmp 执行长跳 我想...
  • 3 votes
     answers
     views

    Mac OS X内核扩展CPU选择

    我正在阅读英特尔性能计数器监视器(http://software.intel.com/en-us/articles/intel-performance-counter-monitor-a-better-way-to-measure-cpu-utilization)附带的模型特定寄存器(MSR)驱动程序内核扩展的源代码 . 由于MSR /性能计数器的独立副本存储在不同的CPU上,因此需要指定要读取的...
  • 1 votes
     answers
     views

    重新定位线程控制块

    我目前处于需要重新定位TCB(线程控制块)的情况 . 根据我的理解,调用VDSO时进程执行中有以下方案(根据this article) 全部由指令 *call %gs:0x10 触发 %gs是使用全局描述符表的段寄存器 . GDT是存储在与进程相关联的内核堆栈中的关联表,并保持段寄存器值与进程的地址空间中的地址之间的对应关系 . 它是随机初始化并由加载器选择(glibc库的一部分) ...
  • 0 votes
     answers
     views

    Linux中gdtr的地址

    我不清楚gdtr的地址 . 来自“了解Linux内核”一书 . 2.2.2段描述符(第38页) “主存储器中GDT的地址包含在gdtr处理器寄存器中,当前使用的LDT的地址包含在ldtr处理器中 . ” 我的问题:是gdtr逻辑地址/线性地址或物理地址中的地址? 我认为它应该是物理地址,因为之前没有实现分页 . 需要有人帮助确认并提供更好的解释 关于段落的另一个问题:书“理解Linux内核”...
  • 0 votes
     answers
     views

    Bochs:组装远程跳转在虚假内存区域丢失(无效的操作码错误)

    我开始在(NASM)装配中开发一个小玩具操作系统,仅供我娱乐 . 我编写了一个引导加载程序,它将第一个(也是唯一一个)文件从一个名为"kernel.sys"的FAT12文件系统加载到偏移 0x7E00 的内存中 . 在实模式下,内核仅通过BIOS设置适当的视频模式,并进入32位(保护)模式 . 这就是我的问题所在 . 首先,我设置了一个带有3个描述符(null,ring 0代码...
  • 0 votes
     answers
     views

    保护模式初始化期间的堆栈结构

    我'm working on a simple kernel that follows the multiboot specification. This is for a class project, so I can' t直接发布我的代码,但对于我的问题,它's sufficient to say that we'重新使用multiboot sample code的修改版本 . 我一直在关注O...
  • 3 votes
     answers
     views

    A20线在保护模式下扮演什么角色?

    我正在经历x86的保护模式部分 . 我刚刚了解了GDT . 之前,我已经研究过进入保护模式(即:使用所有32位地址线)必须启用A20门 . 那么,启用A20的代码必须是16位吗?最近,当我浏览wiki.osdev网站时,我发现启用A20的代码是用x86汇编编写的 . X86汇编产生的32位操作码无法以16位模式加载吗? 请尽可能解释 . 谢谢 .
  • 3 votes
     answers
     views

    为什么这个mov gs指令导致运行Windows 7操作系统的VMWare Workstation guest虚拟机出现故障?

    当我在VMWare Workstation虚拟机中运行的Windows 7 x64的内核模式下运行以下汇编序列时: xor eax, eax mov ax, gs mov gs, ax ; this instruction 最后一条 mov gs, ax 指令会立即导致该VM崩溃(或可能是错误检查),并显示以下弹出消息: 发生故障导致虚拟CPU进入关闭状态 . 如果此故障发生在虚拟...
  • 0 votes
     answers
     views

    击键输入不适用于汇编内核

    在64位Ubuntu上,我编写了一个加载内核的引导程序,它提供了一个echo程序(输出输出的内容): 引导程序代码: [BITS 16] org 0x7C00 bootdrive db 0 start: mov [bootdrive], dl mov ah, 0 int 13h ...
  • 0 votes
     answers
     views

    调度 - 每个进程具有一个或多个内核堆栈的上下文切换

    考虑到Linux的情况,我们有每个用户堆栈的内核堆栈,据我所知,每当发生上下文切换时,我们都会切换到当前进程的内核模式 . 在这里,我们保存当前进程的当前状态,寄存器,程序数据等,然后调度程序(不确定它是否在此内核中运行)保存PCB并加载下一个要调度的进程的PCB . 现在第一个问题是,如果上面的解释似乎对你有意义,考虑一个上下文切换,其中每个进程也有一个“专用”内核堆栈 . 我的问题的另一部分是...
  • 14 votes
     answers
     views

    linux调度程序是否需要进行上下文切换?

    我有一个关于linux调度程序和一些其他类似的内核系统调用的一般性问题 . linux调度程序是否被视为“进程”,并且对调度程序的每次调用都需要上下文切换,就像它只是另一个进程一样? 假设我们有一个时钟标记,它会中断当前正在运行的用户模式进程,现在我们必须调用调度程序 . 对调度程序本身的调用是否会引发上下文切换?调度程序是否有自己的一组寄存器和U区域以及每次调用时必须恢复的内容? 并且所述问题适...
  • 59 votes
     answers
     views

    上下文切换内部

    在这个问题的帮助下,我想学习并填补我的知识空白 . 因此,用户正在运行一个线程(内核级),它现在调用 yield (我假设的系统调用) . 调度程序现在必须将当前线程的上下文保存在TCB中(存储在内核中的某个地方)并选择另一个线程来运行并加载其上下文并跳转到其 CS:EIP . 为了缩小范围,我正在开发基于x86架构的Linux . 现在,我想了解详细信息: 所以,首先我们有一个系统调用: 1)...
  • -3 votes
     answers
     views

    如何改变antminer s9j粉丝

    我已经更改了我的antminer s9j粉丝,现在在内核日志中,它停在文本“检查粉丝” . 我将问我怎样才能在我的antminer s9j设置中禁用粉丝检查 .
  • 0 votes
     answers
     views

    如何可靠地监控CPU频率(在linux中)?

    我想要监控各个内核的CPU工作频率 . 我不确定监控CPU频率的正确方法是什么,以更低的开销可靠地形成内核级别和硬件级别 . 如果有人能回答我的几个问题,我将非常感激 . 假设我通过将应用程序固定到核心来运行应用程序 . 我想监视它在执行阶段(开始到结束)所需的频率并捕获它 . 我想要从硬件级别(从MSR可能)获得所需的准确频率 . 不确定捕获这个的准确方法是什么?有办法吗?是否有任何工具或命令可...
  • 12 votes
     answers
     views

    sched_setaffinity()如何工作?

    我试图了解linux系统调用sched_setaffinity()的工作原理 . 这是我的问题here的后续内容 . 我有this guide,它解释了如何使用系统调用并且有一个非常整洁(工作!)的例子 . 所以我下载了Linux 2.6.27.19 kernel sources . 我对包含该系统调用的行进行了'grep',得到了91个结果 . 没有前途 . 最后,我试图了解内核如何为特定内核(...
  • 4 votes
     answers
     views

    在待机状态下有多个UDP数据报套接字是否有意义? “同时”数据包是由内核丢弃还是排队?

    我在Android上编写网络应用程序 . 我正在考虑使用单个UDP端口和数据报套接字来接收发送给它的所有数据报,然后为这些消息提供不同的处理队列 . 我怀疑我是否应该备用第二个或第三个UDP套接字 . 有些消息会很短(100字节左右),但其他消息必须传输文件 . 我担心的是,如果Android内核忙于处理较大的消息,Android内核是否会丢弃这些小消息? Update “后一个函数调用sock_...
  • 23 votes
     answers
     views

    Windows和Native API中的系统调用?

    最近我在* NIX操作系统中使用了很多汇编语言 . 我想知道Windows域名 . Calling convention in linux: mov $SYS_Call_NUM, %eax mov $param1 , %ebx mov $param2 , %ecx int $0x80 而已 . 这就是我们应该如何在linux中进行系统调用 . Reference of all system c...
  • 18 votes
     answers
     views

    为什么linux内核使用非标准C(gcc特定功能)编码? [关闭]

    Linux内核代码使用“statement-expression”和typeof扩展,使其只能在gcc下编译 . 我想的更多,更没有意义 . 它违背了可移植性和标准C的目的 . (现在linux内核代码需要一个支持gcc扩展的特定编译器) . 这是一个糟糕的设计选择还是有特定的理由让linux内核代码特定于gcc? 编辑:当我说它破坏了可移植性时,我在不同的环境中使用它 . 我在思考,通过符合标准...
  • 127 votes
     answers
     views

    陷阱和中断有什么区别?

    陷阱和中断有什么区别? 如果不同系统的术语不同,那么它们在x86上意味着什么?
  • 2 votes
     answers
     views

    支持分页的Intel 32位保护模式会导致三重故障

    我正在开发一个业余爱好者操作系统,我在身份映射和启用分页方面遇到了麻烦 . 我正在使用Bochs模拟器,我有以下错误消息:= 00691299602e [CPU0] interrupt():门描述符无效sys seg(vector = 0x0e) 00691299602e [CPU0] interrupt():门描述符无效sys seg(vector = 0x08) 00691299602i [C...
  • 0 votes
     answers
     views

    中断的OS例程

    我正在阅读如何在过程映像中执行模式切换,而我对为什么过程映像有内核堆栈而不仅仅是用户堆栈感到困惑?这是在发生中断时完成的 . 用户堆栈和内核堆栈是否做同样的事情?
  • 1 votes
     answers
     views

    Bluez5.7耳机配对但未连接HSP / HFP

    我需要你帮助解决Bluez5.7耳机连接问题 . 目标是使用兼容WBS的耳机实现宽带语音 . 为了支持宽带语音,我理解应该集成HFP1.6 . 为了支持HFP 1.6 Profile,我们集成了Bluez 5.7(或5.5.7)和Ofono 1.16,dBus v 1.4.16 . 主机处理器使用UART(用于信令)和TDM(用于I2S / PCM接口中的音频数据)连接到BT芯片 我可以按如下方式...
  • 0 votes
     answers
     views

    在项目外访问和加载symfony Dependency Injection Container?

    在MyProject symfony项目目录结构之外(比它高一级)我使用一个简单的文件进行测试: <?php use Symfony\Component\VarDumper\VarDumper; require __DIR__.'/MyProject/vendor/autoload.php'; require_once __DIR__.'/MyProject/app/AppKernel.p...
  • 4 votes
     answers
     views

    QEMU和KVM问题

    我尝试安装qemu,但我应该先安装kvm,并检查我的cpu是否支持虚拟化,所以我不知道为什么 . 当我输入kvm时,这是错误 . open /dev/kvm: No such file or directory Could not initialize KVM, will disable KVM support qemu的新窗口出来,但启动失败....无法读取启动盘,无法从CDROM读取(代码0...

热门问题