我将在即将到来的学期担任操作系统课程的助教.实验室将专门处理Linux内核.
有关Linux内核或整体操作系统设计的任何建议都将非常感激.
我已经使用Linux多年了,但从未超越从CD/DVD安装.如果应用程序管理器没有我在软件中寻找的东西,那么我就是一个失败的原因.
但是现在我正试图抓住"Linux"的含义.
突然出现在我脑海中的第一个词是"内核".在维基百科上阅读之后,我了解到内核是运行的软件,可以让其他软件(OS +应用程序)访问硬件(CPU,RAM +++).它还处理内存,但不是操作系统应该做什么(我记得从OS类)?
Linux发行版只是一个包装软件列表吗?
拿我最喜欢的发行版:Fedora.它现在在14版本中,并附带内核2.6.35.
内核是否来自中心,是每个 Linux发行版的核心?如果这是真的,那么Linux发行版是否只是让内核的计算机更加用户友好?通过这种方式,发行版+内核是操作系统,因为没有另一个的操作系统不可用(可能是纯内核,但是谁坐在那里?).
pthread和fork wrt linux在实现差异以及调度如何变化(它是否变化?)方面的基本区别是什么?
我在两个类似的程序上运行strace,一个使用pthreads而另一个使用fork,最后make clone()syscall都有不同的参数,所以我猜这两个在linux系统上基本相同,但是pthreads更容易处理在代码中.
有人可以给出深刻的解释吗?
编辑:另见相关问题
我试图测量NUMA的非对称内存访问效果,但都失败了.
采用Intel Xeon X5570 @ 2.93GHz,2个CPU,8个内核.
在固定到核心0的线程上,我使用numa_alloc_local在核心0的NUMA节点上分配大小为10,000,000字节的数组x.然后我迭代数组x 50次并读取和写入数组中的每个字节.测量进行50次迭代所用的时间.
然后,在我的服务器中的每个其他核心上,我固定一个新线程并再次测量经过50次迭代读取和写入数组x中每个字节的时间.
数组x很大,可以最大限度地减少缓存效 我们想要测量CPU必须一直到RAM加载和存储的速度,而不是在缓存有帮助的时候.
我的服务器中有两个NUMA节点,因此我希望在分配了数组x的同一节点上具有亲缘关系的核心具有更快的读/写速度.我没有看到.
为什么?
也许NUMA仅与8-12核心的系统相关,正如我在别处看到的那样?
http://lse.sourceforge.net/numa/faq/
#include <numa.h>
#include <iostream>
#include <boost/thread/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <pthread.h>
void pin_to_core(size_t core)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(core, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
}
std::ostream& operator<<(std::ostream& os, const bitmask& bm)
{
for(size_t i=0;i<bm.size;++i)
{
os << numa_bitmask_isbitset(&bm, i);
}
return os;
}
void* thread1(void** x, size_t core, size_t N, size_t M)
{
pin_to_core(core);
void* y …Run Code Online (Sandbox Code Playgroud) 我是内核开发的新手,我想知道如何使用QEMU和gdb运行/调试linux内核.我实际上正在阅读Robert Love的书,但遗憾的是它无法帮助读者如何安装适当的工具来运行或调试内核......所以我所做的就是按照本教程http://opensourceforu.efytimes.com/2011/02/kernel-development-debugging-using-eclipse /.我正在使用eclipse作为IDE在内核上开发,但我想首先让它在QEMU/gdb下运行.所以我到目前为止所做的是:
1)用以下代码编译内核:
make defconfig (then setting the CONFIG_DEBUG_INFO=y in the .config)
make -j4
Run Code Online (Sandbox Code Playgroud)
2)编译完成后,我使用以下命令运行Qemu:
qemu-system-x86_64 -s -S /dev/zero -kernel /arch/x86/boot/bzImage
Run Code Online (Sandbox Code Playgroud)
它以"停止"状态启动内核
3)因此我必须使用gdb,我尝试以下命令:
gdb ./vmlinux
Run Code Online (Sandbox Code Playgroud)
正确运行但是...现在我不知道该怎么办...我知道我必须在端口1234(Qemu使用的默认端口)上使用远程调试,使用vmlinux作为符号表文件调试.
所以我的问题是:我应该怎样做才能在Qemu上运行内核,将调试器附加到它上面,从而使它们协同工作,使内核开发更轻松.
Linux perf工具(前一段时间命名perf_events)有几个内置的通用软件事件.其中最基本的两个是:task-clock和cpu_clock(内部称为PERF_COUNT_SW_CPU_CLOCK和PERF_COUNT_SW_TASK_CLOCK).但他们的错误在于缺乏描述.
ysdx用户报告说man perf_event_open有简短的描述:
PERF_COUNT_SW_CPU_CLOCK
This reports the CPU clock, a high-resolution per-
CPU timer.
PERF_COUNT_SW_TASK_CLOCK
This reports a clock count specific to the task
that is running.
Run Code Online (Sandbox Code Playgroud)
但描述很难理解.
有人可以提供有关如何以及何时权威的答案task-clock和cpu-clock事件都占?它们与linux内核调度程序有什么关系?
当task-clock并cpu-clock会给出不同的价值观?我应该使用哪一个?
我在initramfs.c中发现了这个,我之前没有看过这个语法,有人可以解释它在做什么吗?
static __initdata int (*actions[])(void) = {
[Start] = do_start,
[Collect] = do_collect,
[GotHeader] = do_header,
[SkipIt] = do_skip,
[GotName] = do_name,
[CopyFile] = do_copy,
[GotSymlink] = do_symlink,
[Reset] = do_reset,
};
Run Code Online (Sandbox Code Playgroud)
源代码(第366行):initramfs.c
我是dnotify/inotify命令的新手.任何人都可以帮助我编写一个脚本,以便它持续监视一个目录,并指出它有一些变化或修改.
有人可以举个proc_create()例子吗?
早些时候他们create_proc_entry()在内核中使用但现在他们正在使用proc_create().
我很好奇有没有办法确定是否加载/安装了特定的模块.
$ lsmod列出所有模块(加载设备驱动程序).
有没有办法检查或在轮询模块名称时返回true/false布尔输出的命令.例如.如果keyboard.o存在则返回true,否则返回false.我需要这个提示来完成我的驱动程序自动刷新程序.
PS:试过modinfo.我在我的测试DUT中使用busybox客户端,那么除了modinfo之外你能给出一些替代方案吗?
linux-kernel ×10
linux ×4
c ×2
c++ ×1
fork ×1
gdb ×1
insmod ×1
linux-distro ×1
numa ×1
perf ×1
performance ×1
pthreads ×1
qemu ×1
scheduler ×1
unix ×1