当前位置: 首页 > news >正文

操作系统_内存管理学习心得

1. 操作系统结构

1.1 内核

计算机是由各种外部硬件设备组成的,比如内存、cpu、 硬盘等,如果每个应用都要和这些硬件设备对接通信协议,那这样太累了,所以这个中间人就由内核来负责,让内核作为应用连接硬件设备的桥梁,应用程序只需关心与内核交写,不用关心硬件的细节。

 内核的基本能力:

内核的工作方式

 

内核程序执行在内核态,户程序执行在用户态。当应用程序使用系统调用时,产生一个中断。 发
生中断后,CPU 会中断当前在执行的用户程序,转而跳转到中断处理程序,也就是开始执行内核程
序。内核处理完后,主动触发中断,把CPU执行权限交回给用户程序,回到用户态继续工作。

1.2 linux的设计

 MultiTask:多任务,多任务的操作系统;

SMP:SMP的意思是对称多处理,代表着每个CPU的地位是相等的,对资源的使用权限也是相同的,多个CPU共享同一个内存,每个CPU都可以访问完整的内存和硬件资源。
 ELF:ELF的意思是可执行文件链接格式,它是Linux操作系统中可执行文件的存储格式,你可以从下图看到它的结构:

那ELF文件怎么生成的呢?
我们编写的代码,首先通过「编译器」编译成汇编代码,接着通过「汇编器」变成目标代码,也就是目标文件,最后通过|链接器」把多个目标文件以及调用的各种函数库链接起来,形成一个可执行文件,也就是ELF文件。
那ELF文件是怎么被执行的呢?
执行ELF文件的时候,会通过「装载器」把ELF文件装载到内存里,CPU读取内存中的指令和数据,于是程序就被执行起来了。
 Monolithic Kernel:Monolithic Kernel的意思是宏内核,Linux 内核架构就是宏内核,意味着Linux的内核是一个完整的可执行程序,且拥有最高的权限。
宏内核的特征是系统内核的所有模块,比如进程调度、内存管理、文件系统、设备驱动等,都运行在内核态。

1.3 windows设计

Windows和Linux一样,同样支持MultiTask和SMP,但不同的是,Window 的内核设计是混合型内核,在上图你可以看到内核中有一个MicroKernel模块,这个就是最小版本的内核,而整个内核实现是一个完整的程序,含有非常多模块。
Windows的可执行文件的格式与Linux也不同,所以这两个系统的可执行文件是不可以在对方上运行的。Windows的可执行文件格式叫PE,称为可移植执行文件,扩展名通常是.exe 、.d11、 .sys 等。PE的结构你可以从下图中看到,它与ELF结构有一点相似。

2. 虚拟内存的必要性

 2.1 虚拟内存

2.2 内存分段

在上面,知道了虚拟地址是通过段表与物理地址进行映射的,分段机制会把程序的虚拟地址分成4个段,每个段在段表中有一个项,在这一项找到段的基地址,再加上偏移量,于是就能找到物理内存中的地址,
如下图:

 

内存碎片的问题:

实则还是碎片问题导致的,因为碎片所以要交换内存区域整理碎片,但硬盘速度太慢,从而内存交换效率很低。

2.3 内存分页

 

页表是存储在内存里的,内存管理单元 (MMU)就做将虚拟内存地址转换成物理地址的工作。 

单页表分页缺陷:每个进程需要额外的内存消耗产生页表,进程越多消耗的内存就越多。 

多级页表:

64位系统:

TLB:页表缓存,利用它加快程序执行速度。

2.4 段页式内存管理

2.5 Linux内存布局

3. malloc 是如何分配内存的

3.1 Linux 进程的内存分布

3.2 malloc 是如何分配内存的?

 

 

4. 内存满了会发生什么

4.1 内存分配的过程

4.2 哪些内存可以被回收

4.3 回收内存带来的性能影响

kswapd 内核线程异步回收内存:

4.4 非一致存储访问结构(Non-uniform memory access,NUMA)

4.5 SWAP机制

6. 避免预读失效和缓存污染

6.1 预读机制

6.2 预读失效

影响:

解决办法:

6.3 缓存污染的定义

影响:

6.4 缓存污染的解决办法

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Mojo编程语言与云服务及微服务架构的协同之道
  • K8S 卸载旧版本安装其他版本
  • Win10系统,使用钉钉会议共享屏幕的时候,别人看到的都是全黑或全白屏幕
  • LabVIEW 使用 I/O 服务器
  • 院人全年无休计划背后,芒果把To C综艺玩明白了
  • 魔术方法的优缺点和实现原理
  • 42 字典创建与删除
  • 浏览器指纹技术:如何更改浏览器指纹?
  • 计算机基础(Windows 10+Office 2016)教程 —— 第6章 电子表格软件Excel 2016(下)
  • Ubuntu20.04安装Angular CLI
  • 基于SpringBoot实现验证码功能
  • 从零开始的MicroPython(四) 串口
  • 【智能时代的创新工具】LangChain快速入门指南:轻松掌握语言模型的集成与运用
  • [C++] vector对比list deque的引出
  • TImyWebServer项目详解(1)-线程同步机制封装类
  • 【Leetcode】101. 对称二叉树
  • [译]CSS 居中(Center)方法大合集
  • 【comparator, comparable】小总结
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • ES6语法详解(一)
  • javascript 哈希表
  • Laravel核心解读--Facades
  • log4j2输出到kafka
  • rabbitmq延迟消息示例
  • 阿里云应用高可用服务公测发布
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 关于springcloud Gateway中的限流
  • 和 || 运算
  • 你真的知道 == 和 equals 的区别吗?
  • 前端之Sass/Scss实战笔记
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 思维导图—你不知道的JavaScript中卷
  • 算法-图和图算法
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 一份游戏开发学习路线
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • Mac 上flink的安装与启动
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​queue --- 一个同步的队列类​
  • ​卜东波研究员:高观点下的少儿计算思维
  • #Linux(帮助手册)
  • #QT(一种朴素的计算器实现方法)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (备份) esp32 GPIO
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (三十五)大数据实战——Superset可视化平台搭建
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)可以带来幸福的一本书
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ******IT公司面试题汇总+优秀技术博客汇总