C语言:x86 64_Linux汇编笔记
x86-64 Linux 汇编笔记(Intel 语法,System V ABI)
本文结合实际 ELF 二进制反汇编输出,整理出常见指令、字段、操作类型,以及它们在函数、初始化、PLT/ GOT 中的作用。
本文结合实际 ELF 二进制反汇编输出,整理出常见指令、字段、操作类型,以及它们在函数、初始化、PLT/ GOT 中的作用。
本文本文参考OSDev Wiki上关于CPU缓存的介绍,原文地址:https://wiki.osdev.org/CPU_Caches
最初,内存的速度和 CPU 一样快。随着时间推移,CPU 的速度越来越快。内存速度也在提升,但无法跟上 CPU 提升的速度,这意味着 CPU 需要花越来越多的时间等待来自 RAM 的数据(这会对性能造成严重影响)。
本文参考OSDev Wiki上关于“堆”的介绍及实现,原文地址:https://wiki.osdev.org/Heap
堆是应用程序和内核都离不开的重要组成部分。通常,它位于更高层次的内存管理机制之下,而高层机制负责处理更大粒度的内存块。在大多数操作系统中,内存是按页(page)或其他较大的块进行分配的。在 X86 和 X64 架构中,一页通常是 4KB,但也可能更大。然而,对于较小的分配需求,如果直接占用整页会造成大量浪费。例如,只需要 24 字节却分配整整 4KB 页,将导致严重的内存浪费。因此,大多数应用程序和内核都会实现第二层内存管理:在以 4KB(或更大)为单位分配得到的内存块基础上,根据需求将这些一组页面或单独页面拆分成更小的部分进行分配。
本文译自 OSDev Wiki 上的一篇文章,原文链接为 Memory management - Overview and Introduction。
内存管理是任何操作系统内核中的关键组成部分。为程序提供一种快速、可重复地分配和释放内存的机制是内核的一项主要职责。针对物理内存的分配存在多种实现方法,包括位图法、伙伴分配算法,以及基于树结构或队列/栈的内存管理方式。
本文译自 OSDev Wiki 上的一篇文章,原文链接为 Brendan’s Memory Management Guide。
内存管理是所有操作系统开发者迟早都需要处理的问题。这个主题非常广泛;起初看起来似乎很简单,但往往会演变成比最初预想的更复杂的内容。这就容易导致人们在操作系统规模较小时做出一些看似合理(并且最初运行良好)的设计决策,但这些决策在系统变大后可能会成为严重的问题。
Linux 支持多种任务调度策略(Scheduling Policy),其中:
| 调度策略 | 类型 | 优先级范围 | 时间片机制 | 特点 | 典型应用 |
|---|---|---|---|---|---|
| SCHED_FIFO | 实时调度 | 1–99 | 无时间片 | 高优先级任务永不主动让出 CPU,直到阻塞或结束 | 电机控制、传感器采样 |
| SCHED_RR | 实时调度 | 1–99 | 有时间片(默认 100ms) | 多个相同优先级任务轮流执行 | 多任务实时控制 |
| SCHED_DEADLINE | 实时调度 | 无优先级 | 通过 runtime/deadline/period 控制执行预算 | 最严格的周期性任务调度 | 视频渲染、实时信号处理 |
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <sys/prctl.h>
#include <pthread.h>
#include <sched.h>
int main() {
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(0, &mask);
if (sched_setaffinity(0, sizeof(mask), &mask) != 0)
perror("sched_setaffinity");
// 设置实时调度
struct sched_param param = { .sched_priority = 80 };
if (sched_setscheduler(0, SCHED_FIFO, ¶m) != 0)
perror("sched_setscheduler");
printf("Running under SCHED_FIFO with priority %d on CPU 0\n", param.sched_priority);
while (1) {
for (volatile int i = 0; i < 100000000; i++);
printf(".");
fflush(stdout);
usleep(500000); // 防止完全占满CPU
}
}编译与运行: