内存管理6_缺页异常
1、介绍
什么是缺页异常?
当进程尝试访问当前不在其工作集内存中的页面时,就会发生缺页异常。这种事件触发缺页异常中断,导致内核采取特定行动来处理这种情况。
缺页异常的类型
* 次要缺页异常(Minor Page Faults): 当页面不在进程的当前工作集中,但仍然驻留在内存的某个地方时发生。
* 主要缺页异常(Major Page Faults): 当需要从磁盘(如交换区或内存映射文件)
linux进程管理-2进程创建
0、前言
主要分析进程创建fork,线程、进程关系、copy_on_write。
1、复制进程
fork是通过复制父进程的方式来创建一个新的进程,内核中相关键函数和流程主要是被定义在了kernel/fork.c之中,通过fork.c里我们可以看到,有几个常用的sys_call:
* fork
* vfork
linux进程管理-1描述符和状态
1、task_struct数据结构
描述进程状态的基础数据结构名称是task_struct,在内核的include/linux/sched.h中定义。
随着内核的发展,这个结构体里的内容越来越多,6.6的版本上,现在直接800+行,下边截取一些关键的片段。
struct task_struct {
#ifdef
Makefile指南
0、前言
内核编译以及工具开发过程中,经常会涉及到Makefile文件,这一次详细来看一下Makefile相关的内容。
官方手册:Learn Makefiles
很好的学习文章:跟我一起写Makefile
1、入门
1.1-Makefile的作用
编译一个最简单的.c文件通常会使用到
gcc main.c
但是在大型复杂项目在构建的时候,
ghost配置总结
[TOC]
1、配置安装
腾讯云指引文档:手动搭建 Ghost 博客
2、post配置评论区
官方指引:Disqus + Ghost
1.
首先注册Disqus账号:Disqus sign up
2.
然后选择comment on
linux进程管理-kthread
0、背景
kthread是指代特殊的在内核态运行的线程,其创建、管理的逻辑与普通集成有所区别,但在调度上还是与其他进程或者线程是类似的。
1、创建
内核线程的创建主要是通过kthread_create,另外kthread_run也可创建线程,区别是在创建的同时还会直接运行这个线程。
可以看到kthread_create的实际原型是kthread_create_on_node。
#define kthread_
内存管理4-页面回收
1、概述
内核中的内存页面回收算法叫做PFRA(page frame reclaiming algorithm)。
其那边我们分析了物理页内存的管理和申请流程,但是如果内存一直不进行回收,那么系统中可用的物理内存很快就会耗尽,因此PFRA的作用就是在合适的时机找到合适的page进行回收,从而保证其他进程在新申请内存时有内存可用。
所以PFRA就有如下几个核心点需要实现:
1.
什么样的页可以回收
2.
什么时候回收
3.
怎么安全的回收页
2、
CPU虚拟化
1、CPU虚拟化概述
CPU虚拟化是一种技术,它允许单个物理CPU模拟多个虚拟CPU(VCPU)。这使得多个操作系统(OS)实例能够在同一个物理服务器上并行运行,每个实例都在自己的隔离环境中执行。在虚拟化环境中,操作系统通常运行在被称为虚拟机(VM)的封装环境中。每个VM都像拥有独立的物理硬件一样运行,尽管实际上它们共享着同一台物理机的资源。
1.1-虚拟化技术的关键挑战
1. 特权指令和敏感操作:在没有硬件支持的情况下,
内存管理3_slab_slub
1、SLAB 内存分配器
SLAB 内存分配器是 Linux 内核中用于管理内核对象的一种机制,它通过预分配和重用对象来优化性能。
The Slab Allocator: An Object-Caching Kernel Memory Allocator
1.1-基本原理
操作系统中内存碎片是一个常见的需要解决严重问题,我们上一片文章已经分析了Linux内核中的一种解法:
内存管理2_伙伴系统
1、背景分析
Linux内核需要有效地管理内存,以支持各种类型的应用和服务。传统的内存分配方法(如连续内存分配)存在一些不足,例如内存碎片和分配效率低下。频繁的申请和释放不同大小的连续页框必然会导致已分配的页框块分散了许多小块的空闲页框,可能会产生的问题就是:即使内存页框是充足的,但要申请一个大的页框可能也会因为没有足够的连续页框而失败。
为了避免内存碎片化而引发上述问题,通常可以有两种方法:
1. 使用分页单元把不连续的页框映射到连续的线性空间。
2. 使用一种适当的技术用以记录当前连续页框的情况,避免分配小组连续页框的时候对大的页框进行切割。
为了解决上述问题,