标签: linux-kernel

Linux操作系统类的内容

我将在即将到来的学期担任操作系统课程的助教.实验室将专门处理Linux内核.

  1. 您认为Linux内核的哪些概念/组件在课堂上最重要?
  2. 您遗漏的研究涵盖了您所希望的内容?

有关Linux内核或整体操作系统设计的任何建议都将非常感激.

c linux linux-device-driver linux-kernel

34
推荐指数
3
解决办法
1082
查看次数

Linux操作系统和内核之间的关系是什么?

我已经使用Linux多年了,但从未超越从CD/DVD安装.如果应用程序管理器没有我在软件中寻找的东西,那么我就是一个失败的原因.

但是现在我正试图抓住"Linux"的含义.

突然出现在我脑海中的第一个词是"内核".在维基百科上阅读之后,我了解到内核是运行的软件,可以让其他软件(OS +应用程序)访问硬件(CPU,RAM +++).它还处理内存,但不是操作系统应该做什么(我记得从OS类)?

Linux发行版只是一个包装软件列表吗?

拿我最喜欢的发行版:Fedora.它现在在14版本中,并附带内核2.6.35.

内核是否来自中心,是每个 Linux发行版的核心?如果这是真的,那么Linux发行版是否只是让内核的计算机更加用户友好?通过这种方式,发行版+内核是操作系统,因为没有另一个的操作系统不可用(可能是纯内核,但是谁坐在那里?).

linux-kernel linux-distro

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

gnu/Linux上pthread和fork的区别

pthread和fork wrt linux在实现差异以及调度如何变化(它是否变化?)方面的基本区别是什么?

我在两个类似的程序上运行strace,一个使用pthreads而另一个使用fork,最后make clone()syscall都有不同的参数,所以我猜这两个在linux系统上基本相同,但是pthreads更容易处理在代码中.

有人可以给出深刻的解释吗?

编辑:另见相关问题

fork pthreads linux-kernel

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

测量NUMA(非统一内存访问).没有可观察到的不对称性.为什么?

我试图测量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/

numatest.cpp

#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)

c++ linux performance linux-kernel numa

33
推荐指数
5
解决办法
9114
查看次数

如何使用GDB和QEMU调试Linux内核?

我是内核开发的新手,我想知道如何使用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 gdb qemu linux-kernel

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

Linux perf事件:cpu-clock和task-clock - 有什么区别

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会给出不同的价值观?我应该使用哪一个?

scheduler linux-kernel perf

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

我在linux内核中发现了一些奇怪的代码,有人可以向我解释一下吗?

我在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

c linux-kernel

32
推荐指数
2
解决办法
814
查看次数

如何使用dnotify/inotify命令持续监视目录

我是dnotify/inotify命令的新手.任何人都可以帮助我编写一个脚本,以便它持续监视一个目录,并指出它有一些变化或修改.

linux linux-kernel

32
推荐指数
2
解决办法
5万
查看次数

proc_create()内核模块的示例

有人可以举个proc_create()例子吗?

早些时候他们create_proc_entry()在内核中使用但现在他们正在使用proc_create().

linux-device-driver linux-kernel

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

如何确定Linux内核中是否加载了特定模块

我很好奇有没有办法确定是否加载/安装了特定的模块.

$ lsmod列出所有模块(加载设备驱动程序).

有没有办法检查或在轮询模块名称时返回true/false布尔输出的命令.例如.如果keyboard.o存在则返回true,否则返回false.我需要这个提示来完成我的驱动程序自动刷新程序.

PS:试过modinfo.我在我的测试DUT中使用busybox客户端,那么除了modinfo之外你能给出一些替代方案吗?

unix insmod linux-kernel

32
推荐指数
6
解决办法
7万
查看次数