标签: kernel

企业级VMware虚拟机管理程序,ESX,ESXi,它们是用什么编程语言编程的?

我没有在任何地方看到这个问题/答案,所以这里是:有人知道 VMware ESX/ESXi 虚拟机管理程序是用什么编程语言(或语言)编程的吗?我对虚拟机管理程序代码以及高可用性、DRS、容错等功能的代码感兴趣。谢谢您的回答。

virtualization vmware kernel

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

生成 Linux 模块的 tarball?

我正在开发一个嵌入式 Linux 发行版,目前我必须与我的团队共享内核及其内核模块。通常我会使用 Yocto/Openembedded 框架,但现在我只能使用 Linux Makefile。有没有办法生成内核模块的 tarball?

linux kernel linux-kernel

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

解释径向基函数在支持向量机中的工作原理

我无法准确理解 SVM 在使用 RBF 时的工作原理。我的数学知识还可以,但到目前为止我遇到的每一个解释对我来说都太简洁了。我目前的理解如下。假设我使用 SVM 作为不可线性分离的数据集的二元分类器(所以 rbf 是正确的选择?)。当 SVM 被训练时,它会绘制一个超平面(我认为它就像 3d 中的平面,但具有更多维度?),以最好地分离数据。

调整时,改变 gamma 的值会改变超平面的表面(也称为决策边界?)。

这就是我开始感到困惑的地方。

因此,伽马值的增加会导致高斯分布更窄。这是否就像说可以绘制的平面上的凹凸(如果以 3d 形式绘制)可以更窄以更好地拟合训练数据?或者在 2D 中,这就像伽玛定义了分隔数据的线的弯曲程度一样?

我也很困惑这如何从有限数量的特征中产生无限维度的表示?任何好的类比都会对我有很大帮助。

kernel machine-learning gaussian svm

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

如何在 Rspec 3.5 中测试模块中的内核睡眠方法?

我在模块的私有部分有以下方法......

  def add_api_delay
    sleep(retry_delay * (retry_multiplier_adjustment - retries)) if retries.positive?
  end
Run Code Online (Sandbox Code Playgroud)

到目前为止,我正在使用的规范看起来像这样......

  let!(:klass) do
    Class.new do
      include AmazonMws::Shared::Utilities
      attr_accessor :retries, :retry_multiplier_adjustment, :retry_delay
      def initialize
        @retries = 1
        @retry_delay = 1
        @retry_multiplier_adjustment = 2
      end

      def test_add_api_delay
        add_api_delay
      end
    end
  end

  describe '.add_api_delay', focus: true do
    # let(:kernel_spy) { class_spy(Kernel, sleep: true) }

    before do

    end

    it 'sleeps retry api calls' do
      # allow(klass).to receive(:sleep).with(1).and_return(kernel_spy)
      # expect(kernel_spy).to have_received(:sleep)
      # expect(Kernel).to receive(:sleep).with(1)
      expect(Kernel).to receive(:sleep).and_return(true)
      klass.new.test_add_api_delay
    end
  end
Run Code Online (Sandbox Code Playgroud)

我有几个目标和原因想测试这个私有方法,但是如何验证 sleep 是否已被调用。我不想减慢套件的速度,所以理想情况下我尝试对内核使用类间谍。我正在测试的任何东西似乎都不起作用。

更新

  describe …
Run Code Online (Sandbox Code Playgroud)

ruby kernel rspec ruby-on-rails

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

Linux内核的dump_stack结果中后缀“*.part”和“.cold”是什么意思?

有时dump_stack()会在函数名称中添加后缀“.cold”和“.part”,例如,这里是[1]中的部分行,

[  638.115912][    C0] Call Trace:
[  638.115986][    C0]  ? kasan_set_free_info+0x1b/0x30
[  638.115990][    C0]  ? __kasan_slab_free+0xd8/0x120
[  638.115995][    C0]  ? kmem_cache_free.part.0+0x67/0x1f0
[  638.115999][    C0]  ? __put_cred+0x1de/0x250
[  638.116004][    C0]  ? revert_creds+0x1a8/0x1f0
[  638.116008][    C0]  ? do_faccessat+0x2ca/0x820
[  638.116013][    C0]  ? do_syscall_64+0x2d/0x70
[  638.116017][    C0]  ? find_held_lock+0x2d/0x110
[  638.116022][    C0]  ? lock_acquire+0x1f1/0xad0
[  638.116027][    C0]  ? debug_check_no_obj_freed+0xc7/0x41c
[  638.116031][    C0]  ? find_held_lock+0x2d/0x110
[  638.116036][    C0]  ? debug_check_no_obj_freed+0x20c/0x41c
[  638.116041][    C0]  ? lock_downgrade+0x830/0x830
[  638.116045][    C0]  ? lockdep_hardirqs_off+0x89/0xc0
[  638.116050][ …
Run Code Online (Sandbox Code Playgroud)

kernel

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

Linux 内核中的页面错误

读完Mel Gorman这本书后我有几个问题Understanding the Linux Virtual Memory Manager。节4.3 Process Address Space Descriptorkernel threads never page fault or access the user space portion. The only exception is page faulting within the vmalloc space。以下是我的问题。

  1. kenrel 线程从不出现页面错误:这是否意味着只有用户空间代码才会触发页面错误?如果调用kmalloc()or vmalloc(),不会出现页错误吗?我相信内核必须将这些映射到匿名页面。当执行对此页的写入时,会发生页错误。我的理解正确吗?

  2. 为什么内核线程不能访问用户空间?不这样做copy_to_user()或者copy_from_user()这样做吗?

  3. Exception is page faulting within vmalloc space:这是否意味着vmalloc()会触发页面错误,但kmalloc()不会?为什么kmalloc()不出现页面错误?内核虚拟地址的物理帧不需要保留为页表条目?

kernel memory-management linux-kernel page-fault

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

对每个数据包使用 NdisFIndicateReceiveNetBufferLists 还是将它们链接在一起进行接收?

我有一个 NDIS 驱动程序,我将收到的数据包发送到用户服务,然后该服务标记那些正常的数据包(不是恶意的),然后我迭代可以很好接收的数据包,然后通过转换将它们一一发送它们中的每一个都返回到带有一个 NetBuffer 的正确 NetBufferList,然后我使用 NdisFIndicateReceiveNetBufferLists 指示它们。

这导致了通过 SMB(从共享复制文件)传输大文件时出现的问题,从而显着降低了传输速度。

作为一种解决方法,我现在将所有正常的 NBL 链接在一起(而不是逐个发送它们),然后通过 NdisFIndicateReceiveNetBufferLists 立即发送所有这些 NBL。

我的问题是,此更改会导致任何问题吗?逐一发送 X 数量的 NBL 与将它们链接在一起并一次发送所有之间有什么区别?(因为其中大多数可能与不同的流程/应用程序相关)

此外,与通过 FilterSendNetBufferLists 发送多数据包相比,在多数据包接收中将数据包链接在一起的好处要大得多,这是为什么呢?

windows kernel ndis driver

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

内核全局变量存储在哪里?

据我所知,全局变量(在用户空间程序中)存储在相应的数据(和 BSS)段中。但如果是内核代码,它们如何存储以及在哪里存储呢?

variables operating-system kernel linux-kernel

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

x86 硬件/软件 TSS 使用情况

我有一个带有时钟中断的简单工作(32 位保护模式)内核。我可以看到这个中断正在工作,因为它多次打印 \xc2\xab\xc2\xa0clock\xc2\xa0\xc2\xbb 。我还可以看到这个中断将控制权交还给内核,因为它在几次时钟中断后在屏幕上打印 \xc2\xab\xc2\xa0Kernel has stop\xc2\xa0\xc2\xbb ,就像它应该的那样。中断与内核位于同一代码段中。

\n

我没有设置任何 TSS,但它正在工作。我可以在这篇文章( https://web.archive.org/web/20160326062442/http://jamesmolloy.co.uk/tutorial_html/10.-User%20Mode.html )上读到,当发生中断时,CPU将查看选定的 TSS 段以更新寄存器。

\n
    \n
  1. 如果我没有\xe2\x80\x99t 有这个 TSS ,它如何工作?是因为当中断发生时CPU仍然会自动推送EIP、CS、EFLAGS、EPS、SS并在iret上恢复它们​​吗?

    \n
  2. \n
  3. 如果我加载单个 TSS,该中断如何知道它应该使用该 TSS?使用ltr指令将在GDT内获取相应的tss段?

    \n
  4. \n
  5. 并不是真正相关,但是当使用硬件上下文切换并跳转到一个 TSS 时,它会在返回时自动跳转到上一个(没有下一个字段,所以 I\xe2\x80\x99m 有点丢失)tss 段吗?

    \n
  6. \n
\n

这些问题我无法从我的学校课程、osdev 或这个论坛中真正得到明确的答案。

\n

x86 operating-system kernel osdev context-switch

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

堆栈增长和mmap堆栈?

我正在阅读有关内存过度使用的页面,其中提到

The C language stack growth does an implicit mremap. If you want absolute
guarantees and run close to the edge you MUST mmap your stack for the 
largest size you think you will need. For typical stack usage this does
not matter much but it's a corner case if you really really care
Run Code Online (Sandbox Code Playgroud)

当程序编译时(例如通过gcc),定义了堆栈的大小限制(我记得有一个gcc参数可以调整它)。然后,在程序内部,我们可以继续在堆栈上分配。

几个问题:

  1. 在这种情况下,“堆栈增长”意味着什么?这是否意味着如果 C 程序不断在堆栈上分配/释放,有时mremap()会在幕后调用?为什么如果在编译时就定义了堆栈的大小限制呢?
  2. 我们怎样才能mmap堆栈呢?

c linux kernel

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