- 博客(57)
- 收藏
- 关注
原创 学习笔记:进程与线程(1)
我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个。现在我们考虑有一个会读取硬盘文件数据的程序被执行了,那么当运行到读取文件的指令时,就会去从硬盘读取数据,但是硬盘的读写速度是非常慢的,那么在这个时候,如果 CPU 傻傻的等硬盘返回数据的话,那 CPU 的利用率是非常低的。做个类比,你去煮开水时,你会傻傻的等水壶烧开吗?很明显,小孩也不会傻等。我们可以在水壶烧开之前去做其他事情。
2024-07-01 09:45:29 808
原创 学习笔记:系统内存紧张时会发生的一系列事情
后台内存回收:在物理内存紧张的时候,会唤醒 kswapd 内核线程来回收内存,这个回收内存的过程异步的,不会阻塞进程的执行。直接内存回收:如果后台异步回收跟不上进程内存申请的速度,就会开始直接回收,这个回收内存的过程是同步的,会阻塞进程的执行。文件页的回收:对于干净页是直接释放内存,这个操作不会影响性能,而对于脏页会先写回到磁盘再释放内存,这个操作会发生磁盘 I/O 的,这个操作是会影响系统性能的。
2024-06-20 15:54:16 551
原创 学习笔记:malloc动态内存分配
笔记目录malloc是如何分配内存的?malloc() 分配的是物理内存吗?malloc(1) 会分配多大的虚拟内存?free 释放内存,会归还给操作系统吗?为什么不全部使用 mmap 来分配内存?既然 brk 可以大大降低CPU消耗,为什么不全部使用 brk 来分配?free() 函数只传入一个内存地址,为什么能知道要释放多大的内存?malloc是如何分配内存的?实际上,malloc() 并不是系统调用,而是 C 库里的函数,用于动态分配内存。malloc 申
2024-06-20 14:05:49 785 1
原创 学习笔记:计算机内存管理
为了在多进程环境下,使得进程之间的内存地址不受影响,相互隔离,于是操作系统就为每个进程独立分配一套虚拟地址空间,每个程序只关心自己的虚拟地址就可以,实际上大家的虚拟地址都是一样的,但分布到物理地址内存是不一样的。作为程序,也不用关心物理地址的事情。每个进程都有自己的虚拟空间,而物理内存只有一个,所以当启用了大量的进程,物理内存必然会很紧张,于是操作系统会通过内存交换技术,把不常使用的内存暂时存放到硬盘(换出),在需要的时候再装载回物理内存(换入)。
2024-06-19 10:37:48 933
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人