问题标签 [kernel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kernel - 将内核映像从 ELF 转换为 PE
我正在使用 Msys 构建我在 Linux 下编写的 home brew 内核。Linux 使用 ELF 作为其二进制格式,而 Msys 使用 PE。我有源设置以允许 Grub 使用 Multiboot 规范启动它。在构建结束时,我得到一些未定义的符号:
这些似乎是面向 ELF 的符号。如果有人可以建议我如何在 PE 世界中处理这些问题,例如,如果有等价物,那将对我有很大帮助!
boost - 在应用程序的 WDK 构建环境中使用 boost?
我正在使用 Windows 驱动程序工具包 (WinDDK 6001.18001) 来构建我的用户空间应用程序,而不是 Visual Studio 2005。我采用这种方法是因为我们还必须构建驱动程序组件,所以我希望有一个单一的构建环境来构建一切. Microsoft 本身将这种方法用于多种产品。
在我开始使用 Boost 1.38.0 之前,这一切正常。我没有在内核模式组件中使用 C++,只是在用户空间应用程序中使用。在 C++ 代码中,使用 boost 库是很自然的。不幸的是,WDK 不同意。
我注意到的第一个错误是“#include <cstddef>”没有ptrdiff_t
按照附件 D 的要求放入 std 命名空间。解决这个问题在boost\lambda\detail\operator_return_type_traits.hpp
about中留下了几个错误,error C2976: 'std::basic_string' : too few template arguments.
它似乎与 iostream 是多余的。
有没有人成功地将 Boost、iostream 和 WDK 组合在一起工作?
我的源文件:
服务.cpp:
c++ - 2 个或更多进程如何与键盘交互?
我一直在考虑键盘处理。它是如何工作的?我似乎无法用谷歌搜索我的解释。
我知道每次按下一个键都会产生一个键盘中断。处理器暂停它正在处理的任何事情,并从键盘缓冲区加载键盘数据,将其存储在系统级缓冲区中。
但接下来会发生什么?让我们举一个实际的例子。当我运行以下代码时会发生什么:
是否cin
从系统级键盘缓冲区的用户级表示中读取?这在我的脑海中非常有意义,因为可以从同一个缓冲区读取 2 个或更多进程,这样我就不会松开任何按键。但它是这样工作的吗?
我知道我说的是非常笼统的说法。我使用的操作系统是 OS X。
multithreading - 操作系统了解线程如何使用的特性是否有优势?
操作系统了解线程如何使用的特性是否有优势?例如,如果在 Java 中有一种方法可以在创建新线程时指示它将用于密集的 CPU 计算而不是阻塞 I/O。如果这是一种能力,线程调度不会改进吗?
multithreading - 1024 个 CPU 的内核调度
Azul Systems 的设备支持数千个缓存一致的 CPU。我很想深入了解操作系统需要发生哪些更改才能安排数千个同时运行的线程。
linux - Git克隆挂起
作为一名潜在的 Linux 开发人员,我想克隆 Torvalds 的 git 存储库。问题是当我在 git clone 进程挂起一段时间后调用 git clone 时。没有错误消息没有超时没有。所以我按 ctrl+c 并重新启动,同样的事情。
它以随机百分比挂起。它在“检索对象”过程中挂起。
有人知道吗?
open-source - 有使用 SANOS 操作系统内核的经验吗?
当我遇到SANOS时,我正在浏览一个开源内核,这感觉像是值得作为开源保持活力的东西。为了使其达到现代标准,需要进行以下增强:
- 支持多个 CPU/内核
- 添加 IPv6(目前仅支持 IPv4)
- 能够运行 8192 个并发线程
- 能够支持 JDK 1.6 所需的附加仿真
所以,我有以下问题:
- 这里有没有人想分享他们使用 sanos 的经验?
- 什么是吸引其他愿意贡献时间以使其变得更好的人的最方便的方法?
- 它在哪些方面比 BSD 和/或 Linux 中使用的内核更好?
- 将 Ruby 移植到这个平台有什么好处吗?
performance - 哪些 Java 应用程序可用于对虚拟机进行压力测试?
我对压力测试以及对SANOS操作系统内核进行基准测试的方法很感兴趣。
unix - 进程调度问题
例如,等待磁盘 I/O 完成的进程将在与正在传输的数据对应的缓冲区头的地址上休眠。当磁盘驱动程序的中断例程注意到传输完成时,它会在缓冲区头上调用唤醒。中断使用内核堆栈来处理当时正在运行的任何进程,并且从该系统进程中完成唤醒。
您能否解释一下我强调的段落中的最后一行。它是关于唤醒一直在等待某些事件发生并因此已经休眠的进程。这一段来自高尔文。顺便问一下,你能推荐一些学习unix操作系统的好书或链接吗?
谢谢。
c - sched_setaffinity() 是如何工作的?
我试图了解 linux 系统调用 sched_setaffinity() 的工作原理。这是我的问题here的后续内容。
我有这个指南,它解释了如何使用系统调用并且有一个非常简洁(工作!)的例子。
所以我下载了 Linux 2.6.27.19内核源代码。
我对包含该系统调用的行进行了“grep”,得到了 91 个结果。没有希望。
最终,我试图了解内核如何为特定内核(或处理器)设置指令指针。
我熟悉单核单线程程序的工作原理。有人可能会发出“jmp foo”指令,这基本上将 IP 设置为“foo”标签的内存地址。但是当一个有多个内核时,必须说“在内存地址 foo 处获取下一条指令,并将指令指针设置为2 号内核开始执行”。
在汇编代码中,我们在哪里指定执行该操作的内核?
回到内核代码:这里重要的是什么?文件 'kernel/sched.c' 有一个名为 sched_setaffinity() 的函数,但返回类型“long” - 这与它的手册页不一致。那么这里重要的是什么?这些模块中的哪些显示了发出的汇编指令?什么模块正在读取“task_struct”,查看“cpus_allowed”成员,然后将其转换为指令?(我还翻阅了 glibc 源代码——但我认为它只是调用内核代码来完成这项任务。)