操作系统学习-05-01-进程、线程基础知识
进程、线程基础知识
先来看看一则小故事
我们写好的一行行代码,为了让其工作起来,我们还得把它送进城(进程)里,那既然进了城里,那肯定不能胡作非为了。
城里人有城里人的规矩,城中有个专门管辖你们的城管(操作系统),人家让你休息就休息,让你工作就工作,毕竟摊位不多,每个人都要占这个摊位来工作,城里要工作的人多着去了。
所以城管为了公平起见,它使用一种策略(调度)方式,给每个人一个固定的工...
2023-04-03 00:00:00 |
Linux
操作系统学习-04-07-深入理解 Linux 物理内存管理
前文回顾
在上篇文章 《深入理解 Linux 虚拟内存管理》中,我分别从进程用户态和内核态的角度详细深入地为大家介绍了 Linux 内核如何对进程虚拟内存空间进行布局以及管理的相关实现。
在我们深入理解了虚拟内存之后,那么何不顺带着也探秘一下物理内存的管理呢?
所以本文的目的是在深入理解虚拟内存管理的基础之上继续带大家向前奋进,一举击破物理内存管理的知识盲区,使大家能够俯瞰整个 Lin...
2023-04-03 00:00:00 |
Linux
操作系统学习-04-06-深入理解 Linux 虚拟内存管理
深入理解 Linux 虚拟内存管理
内存管理子系统可谓是 Linux 内核众多子系统中最为复杂最为庞大的一个,其中包含了众多繁杂的概念和原理,通过内存管理这条主线我们把可以把操作系统的众多核心系统给拎出来,比如:进程管理子系统,网络子系统,文件子系统等。
由于内存管理子系统过于复杂庞大,其中涉及到的众多繁杂的概念又是一环套一环,层层递进。
如何把这些繁杂的概念具有层次感地,并且清晰地,...
2023-04-03 00:00:00 |
Linux
操作系统学习-04-05-
如何避免预读失效和缓存污染的问题?
咋一看,以为是在问操作系统的问题,其实这两个题目都是在问如何改进 LRU 算法。
因为传统的 LRU 算法存在这两个问题:
「预读失效」导致缓存命中率下降
「缓存污染」导致缓存命中率下降
Redis 的缓存淘汰算法则是通过实现 LFU 算法来避免「缓存污染」而导致缓存命中率下降的问题(Redis 没有预读机制)。
MySQL 和 Linux 操...
2023-04-03 00:00:00 |
Linux
操作系统学习-04-04-在 4GB 物理内存的机器上,申请 8G 内存会怎么样?
Q
问题「在 4GB 物理内存的机器上,申请 8G 内存会怎么样?」
存在比较大的争议,有人说会申请失败,有的人说可以申请成功。
这个问题在没有前置条件下,就说出答案就是耍流氓。
这个问题要考虑三个前置条件:
操作系统是 32 位的,还是 64 位的?
申请完 8G 内存后会不会被使用?
操作系统有没有使用 Swap 机制?
...
2023-04-03 00:00:00 |
Linux
操作系统学习-04-03-内存满了,会发生什么?
Q
(1)为什么操作系统需要内存管理和虚拟内存,除了给进程分配内存和防止进程间相互影响,还有什么用?
(2)除了 OOM,内存满了之后会有什么处理?
先来说说第一个问题:虚拟内存有什么作用?
第一,虚拟内存可以使得进程对运行内存超过物理内存大小,因为程序运行符合局部性原理,CPU 访问内存会有很明显的重复访问的倾向性,对于那些没有被经常使用到的内存,我们可以把它换出到物理内存之外,比...
2023-04-03 00:00:00 |
Linux
操作系统学习-04-02-malloc 是如何分配内存的?
malloc 是如何分配内存的?
这次我们就以 malloc 动态内存分配为切入点,我在文中也做了小实验:
malloc 是如何分配内存的?
malloc 分配的是物理内存吗?
malloc(1) 会分配多大的内存?
free 释放内存,会归还给操作系统吗?
free() 函数只传入一个内存地...
2023-04-03 00:00:00 |
Linux
操作系统学习-04-01-为什么要有虚拟内存?
为什么要有虚拟内存?
本篇跟大家说说内存管理,内存管理还是比较重要的一个环节,理解了它,至少对整个操作系统的工作会有一个初步的轮廓,这也难怪面试的时候常问内存管理。
干就完事,本文的提纲:
虚拟内存
如果你是电子相关专业的,肯定在大学里捣鼓过单片机。
单片机是没有操作系统的,所以每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。
另外,单片机的 CPU 是直接操作内...
2023-04-03 00:00:00 |
Linux