虚拟内存是个啥 | 一分钟系列

标签: 公众号文章程序员


内存对于用户来讲就是一个字节数组,咱们能够根据地址来访问到某个字节或者某些字节10⁴编程

image_1dkcslk471u4p1ske15ul15f1no9.png-14.1kB

好久以前的内存

好久好久以前,一台机器上只放置一个程序,操做系统仅仅做为一个函数库存在。对于内存来讲,除去操做系统的代码和数据占用的一些空间外,其他空间所有分配给正在运行的那个程序,画个图就是这样:数组

image_1dkcucmbomuv1atf1vn516ge14kim.png-29.3kB

小贴士: 咱们把运行着的程序称之为进程。 函数

同时运行多个程序的内存

后来人们以为同时在一台计算机上只运行一个程序太亏了,就设计了一个能够同时运行多个程序的机制。不过内存条只有一个,因此这些用户程序只能共享同一个内存条,只能把内存的不一样部分划分给不一样的用户程序,画个图就像是这样:操作系统

image_1dkcukdebh3m1qo21o0u1vp1g5713.png-27.4kB

这样子的话也有一些问题:设计

  • 不一样用户程序只能使用给他们规定好的那部份内存,也就是程序员在敲代码的时候就应该当心翼翼的计算本身使用的内存有没有占到别人家的地儿,这样对码农很不友好有木有。code

  • 若是哪一个心眼儿坏的家伙故意去读取别人家的程序使用的内存,这不就暴露了么,更严重的,这个坏家伙直接把别人家程序正在使用的内存的某些字节给更新掉,这就是天坑了~cdn

  • 能使用的内存空间都给规定好了,太少了有木有~blog

虚拟内存

操做系统是个老好人,使命就是解决全部用户感到麻烦的事情。设计操做系统的大叔以为,若是让用户直接去操做内存的话,用户也不知道其余人到底使用了内存的哪些字节,本身可使用哪些字节,若是要作到这一点的话人们在开发程序的时候还要聚到一块儿开个会,把每一个人该用哪块内存都规定好,即便规定好了用户还得当心翼翼的避免使用了不属于本身的那部份内存。干脆,干脆就不让用户直接操做内存了,让用户在编程序的时候直接把内存想象成一个很是很是大的字节数组就行了,,本身在这个字节数组上能够随便折腾,他们把这个很是大的字节数组称之为虚拟内存,由操做系统完成从虚拟内存的虚拟地址到真实内存的真实地址之间的映射工做。画个图就像这样:进程

image_1dkd0mfcifvl19ruvdr176s1c8v1t.png-91.1kB

这样还有问题,用户愈来愈多,即便每一个用户都使用很是少的内存空间,那加起来占用的内存空间均可能超过了真实内存的大小,更况且某些丧心病狂的程序员写的程序里自己就使用了超过真正内存大小的空间,这可怎么办。这难不倒设计操做系统的大叔们,他们机智的把硬盘也拉了进来。

image_1dkd1c1gq1edotve5ea1eean9n4a.png-125.5kB

操做系统完成由虚拟内存地址到真实内存地址或者磁盘地址之间的映射工做,这样子给用户提供的虚拟内存的地址空间就能够很是很是大,用户程序中那些好久都用不到的内存空间能够被操做系统给搞到磁盘上边存储,何时须要用了,又从磁盘中加载到真实内存中,重要的是这个过程所有是操做系统自动完成的,对于咱们这些码农来讲,编写程序就像是在一个炒鸡大的字节数组上将某个地方的数据搬到另外一个地方,或者将某个地方的数据通过CPU的某种加工以后再放到某个字节数组的某个地方,整个过程so easy,彻底不用担忧有没有读取/覆盖掉别人正在使用的内存空间。

小贴士: 对于Windows操做系统来讲,虚拟内存所需的磁盘空间从系统盘,通常是C盘分配,当你的C盘剩余空间不多时就会致使很卡~

虚拟内存结构

咱们说对于敲代码的码农来讲,虚拟内存就是一个超级大的字节数组,不过这个字节数组也是被划分为多个部分的,并非每一个地方用户均可以访问,通常的虚拟内存结构长这样:

image_1dkd28hgakg41obad4a13ag19mj5k.png-66.2kB

用户须要调用函数的时候,通常都会生成一个称之为栈帧的结构,从而致使虚拟内存中的栈空间增加。

用户须要单独申请内存空间时,就会从堆空间分配,从而致使虚拟内存中的堆空间增加。

这里须要强调的一点是,咱们平时所说的操做系统内核不是一个进程,而是指操做系统的代码。

不知不觉我以为超过了一分钟,下次再见~

小贴士: 作个预报,关于虚拟内存的实现,也就是操做系统怎么把虚拟内存的地址映射到真是内存地址以及磁盘地址的,这个就须要炒鸡长的篇幅啦,哈哈,敬请期待《计算机是怎样运行的》。

题外话

写文章挺累的,有时候你以为阅读挺流畅的,那实际上是背后无数次修改的结果。若是你以为不错请帮忙转发一下,万分感谢~ 这里是个人公众号「咱们都是小青蛙」,里边有更多技术干货,时不时扯一下犊子,欢迎关注:

相关文章
相关标签/搜索