我正在研究linux内核,有时我不明白内核开发人员在特定代码中需要什么。因此,我在内核中读取定时器,并使用一个struct timer_list变量创建一个计时器,该变量包含每个cpu指针。我试图更好地理解每个cpu变量,所以我在linux中查看了如何创建这些内容。因此,我从内核中提取了不同的结构,并列出了#defines来集成事物,并看到了一个清晰的画面,实际发生了什么。
结构从这一切开始
struct timer_list {
/*
* All fields that change during normal runtime grouped to the
* s
我已经在电脑上安装了ubuntu。现在我想知道它的CPU架构。我已经读到,可以使用uname -a来实现这一点:
~$ uname -a
Linux desknode1 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
从本页:
我推断它是AMD的cpu。但如果我跑了
~$ grep --color "model name" /proc/cpuinfo
model name : Intel(R) Xeon(R) CPU E
这个内核使用ARM的GCC工具链构建得很好..由于某些原因,aarch64工具链抛出了这个错误。
kernel/sched/core_ctl.c: In function 'cpufreq_gov_cb':
kernel/sched/core_ctl.c:1086:25: error: dereferencing pointer to incomplete type
core_ctl_set_busy(info->cpu, info->load);
^
kernel/sched/core_ctl.c:1086:
philip@philip-HP-Tablet-PC-Tx1100:~$ sudo -s
[sudo] password for philip:
Sorry, try again.
[sudo] password for philip:
root@philip-HP-Tablet-PC-Tx1100:~# apt-get install
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run ‘apt-get -
所以我把lscpu输入到我的终端中,看到了以下内容:
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
没有。由于公式:No. of CPUs = Sockets X Cores per socket X Threads per Core,CPU(s)在这里是4。
但问题是,CPU到底是什么?为什么我们在上面的公式中包括线程?
我一直在研究Linux内核的子系统。在这里,编写的是Linux内核负责上下文切换(允许另一个进程使用CPU)。下面是内核执行上下文切换的步骤:
CPU (实际硬件)基于内部定时器中断当前进程,切换到内核模式,并将控制交给内核。内核记录CPU和内存的当前状态,这对于恢复interrupted.The内核执行前一段时间可能出现的任何任务(例如从输入和输出收集数据,或者I/O,operations).The内核现在准备好让另一个进程运行)是必不可少的。内核分析准备运行的进程列表并选择一个进程。内核为这个新进程准备内存,然后准备CPU。内核告诉CPU新进程的时间切片将持续多长时间。内核将CPU切换到用
我知道clock()没有给出挂钟时间,而CLOCKS_PER_SEC是系统相关的值。假设我不关心系统依赖的问题,我是否可以假设下面的代码在GNU/Linux和Windows中总是等待1秒,因为我测试过它对我来说似乎还可以。还是应该继续使用依赖于系统的睡眠()/usleep()函数?
void wait_a_sec()
{
clock_t start = clock();
do
{
// wait 1 sec
/**
* Second call to clock() gives the processor time in