美文网首页
操作系统有关程序内存

操作系统有关程序内存

作者: Best博客 | 来源:发表于2021-08-28 17:02 被阅读0次

golang内存

程序运行在操作系统为其创建的进程当中,所需要的所有资源也都是由os对进程进行分配(内存,磁盘,句柄等),具体的资源在真正意义上被程序使用会做一定的转换管理,比如物理内存经过内存管理器虚拟化后被我们的程序使用,程序直接对接的是虚拟内存(是有原有的)。golang程序在运行时会一次性向os要一大块内存,后面程序代码在需要内存的时候直接自己提供无需跟os交互,结构上也是将内存分为好几个部分(栈,堆,text,data等), 规格上,是将内存划为了67个规格对应我们不同数据类型的申请。

存在磁盘的源代码到被cpu执行

我们编写的代码一开始在磁盘,os运行到RAM,再到被转换成指令集到寄存器,最后被cpu执行运算,cpu运算过程需要临时存储,以及需要反复用到某个变量时,L1,L2,L3级别缓存又出来了,缓存出来一致性保障得通过相同总线去保证一致性等等这些都是因为cpu执行太快,为了提高执行效率设计出来的方案。

进程,线程,协程切换区别

进程切换代价:进行切换也就意味着cpu接下来执行的指令是另一个进程,进程资源的隔离性我们知道接下来的指令操作的资源将不一样,上一个进程的虚里内存那一套得全部由内核代为管理切换,然后内核将新的进程的虚里内存又给搬出来,这一进一出意味着接下来的cpu指令集使用到的资源在l1,l2,l3里面一开始肯定是没有了,又得发生一次主存到缓存的过程,其于的倒是跟线程切换一样了
线程切换:由于是一个进程的不同线程切换,所以线程不需要进程虚拟内存的切换,因为资源提供者没有变。但不同的线程有自己的私有栈以及寄存器,所以之前存在于寄存器里面的指令集内存必须将老线程的保存,空出寄存器空间再将新线程的指令集加载进去
协程切换:存户态空间完成,操作系统无感知,要知道线程的切换必须得切换到内核线程去完成呀,其次协程上下文更简单,栈空间,cpu指令集持久化保存与goroutinue的结构体中,加载另一个goroutinue。

参考文献

goroutinue切换
GMP调度

相关文章

  • 操作系统有关程序内存

    golang内存 程序运行在操作系统为其创建的进程当中,所需要的所有资源也都是由os对进程进行分配(内存,磁盘,句...

  • 机器代码层面的函数调用

    2018.04.18 CPU 发出指令把硬盘程序指令搬到内存,操作系统给程序指令分配内存。然后操作系统会告诉 CP...

  • JavaScript垃圾回收机制

    一:内存-内存泄漏 程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。对于...

  • C语言 第14节 考试题

    什么叫分配内存?什么叫释放内存? 操作系统将某一块儿内存空间的使用权利分配给程序。 操作系统把分配给该程序的内存空...

  • 浅谈 JS 内存泄漏问题

    什么是内存泄漏? 程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。 对于...

  • 前端内存泄漏

    什么是内存泄漏? 程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。 对于...

  • 操作系统

    操作系统——内存管理 在运行之初,操作系统完成自启动装入程序,完成系统区程序的装入。在这之后,其他程序的装入和...

  • Android内存泄漏问题

    一、垃圾回收 一般来说,程序使用内存遵循先向操作系统申请一块内存,使用内存,使用完毕之后释放内存归还给操作系统。然...

  • Javascript内存泄漏和常见案例

    1. 什么是Javascript内存泄漏?  我们知道程序的允许需要内存,只要程序提出要求,操作系统或者运行时就要...

  • JavaScript垃圾回收机制

    在介绍垃圾回收机制之前先了解一个概念:内存泄漏。 什么是内存泄漏? 程序的运行需要内存,只要程序提出要求,操作系统...

网友评论

      本文标题:操作系统有关程序内存

      本文链接:https://www.haomeiwen.com/subject/phrkvltx.html