随笔分类 -  操作系统

内存管理、中断管理、进程管理、设备管理、网络管理。 任重而道远——
摘要:《Linux内核修炼之道》 之 高效学习Linux内核-CSDN博客 Linux内存管理 内存的访问路径 虚拟内存与物理内存(内存分段分页机制) 内存分配方式(buddy、slab) 内存换页机制 malloc与kmalloc、vmalloc Cache Memory 底层拓展:内存基础知识 内存相 阅读全文
posted @ 2025-09-09 00:34 Ethan'Chen 阅读(15) 评论(0) 推荐(0)
摘要:缓存一致性问题 问题1:多核CPU与cache的缓存一致性问题 多核CPU在访问内存时,每个核都有自己的cache,由于cache的写回机制,部分数据没有及时更新到内存,那么在不同线程访问同一个变量的时候就会出现不一致的情况 比如核心A访问address1,把address1的数据加载到A的cach 阅读全文
posted @ 2022-09-04 11:30 Ethan'Chen 阅读(1130) 评论(0) 推荐(0)
摘要:在4G主存机器申请8G内存会发生什么 在 32 位操作系统,因为进程最大只能申请 3 GB 大小的虚拟内存,所以直接申请 8G 内存,会申请失败。 在 64 位操作系统,因为进程最大可以申请 128 TB 大小的虚拟内存,即使物理内存只有 4GB,申请 8G 内存也是没问题,因为申请的内存是虚拟内存 阅读全文
posted @ 2022-08-26 15:37 Ethan'Chen 阅读(1756) 评论(0) 推荐(0)
摘要:内存回收的方式 前文提到malloc的内存分配方式,malloc申请的是虚拟内存,只有在程序去访问时,才会触发缺页异常进入内核态,在缺页中断函数中建立物理内存映射。 如果物理内存充足,则直接建立页框与页的映射。当物理内存不足时,内核会进行物理内存回收,内存回收的方式主要有: 后台内存回收(kswap 阅读全文
posted @ 2022-08-26 14:41 Ethan'Chen 阅读(4471) 评论(0) 推荐(0)
摘要:内核的内存分区 32位机中的虚拟内存大小为4GB,其中0~3GB用于用户空间,3~4GB用于内核空间。 内核的内存空间只有1G,这一部分内存在进程中共享,与用户空间隔离,用户空间不能访问。 内核空间在虚拟内存上分为三个区间:从低到高分别是: ZONE_DMA(16M) ZONE_NORMAL(16~ 阅读全文
posted @ 2022-08-26 09:33 Ethan'Chen 阅读(843) 评论(0) 推荐(0)
摘要:malloc分配内存的方式 学C语言时我们知道,malloc是动态内存分配,也就是在程序运行执行到malloc函数时才会从堆上分配指定的内存大小。 首先要知道Linux的把内存分为6个区:栈区、文件映射区、堆区、BSS区、数据区、代码区。 分区只在虚拟内存上进行逻辑划分,物理内存上不存在逻辑分区的概 阅读全文
posted @ 2022-08-24 20:08 Ethan'Chen 阅读(4721) 评论(0) 推荐(0)
摘要:分段与分页的区别 分段: 分页: 分段和分页的工作方式相似,都是非连续存储。 分段的逻辑地址=段号+段内偏移。段表存放段描述符。段描述符=段基址+段界限。物理地址=段基址+段内偏移。 分页的虚拟地址=页号+页内偏移。页表存放页面映射。页面映射=虚拟页号+物理页号。物理地址=物理页号+页内偏移。 但是 阅读全文
posted @ 2022-08-23 21:16 Ethan'Chen 阅读(22) 评论(0) 推荐(0)
摘要:虚拟内存 为什么要有虚拟内存? 让每个进程都有独立的内存空间,每个进程都有自己的私有页表,提供一个可以执行多进程的环境。 利用程序运行局部性原理,允许进程的内存空间超过物理内存大小。 页表中维护着页的权限属性,使内存访问更安全。 假如没有虚拟内存,则会有进程空间不隔离的问题,比如进程A会改写进程B的 阅读全文
posted @ 2022-08-22 16:04 Ethan'Chen 阅读(1547) 评论(0) 推荐(0)