• 【操作系统】基础知识


    1. 简述操作系统中的缺页中断

    缺页异常: malloc和mmap函数在分配内存时只是建立了进程虚拟地址空间,并没有分配虚拟内存对应的物理内存。当进程访问这些没有建立映射关系的虚拟内存时,处理器自动触发一个缺页异常,引发缺页中断。
    缺页中断: 缺页异常后将产生一个缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。

    缺页中断与一般中断一样,需要经历四个步骤:保护CPU现场、分析中断原因、转入缺页中断处理程序、恢复CPU现场,继续执行。
    缺页中断与一般中断区别:
    (1)在指令执行期间产生和处理缺页中断信号
    (2)一条指令在执行期间,可能产生多次缺页中断
    (3)缺页中断返回的是执行产生中断的一条指令,而一般中断返回的是执行下一条指令。

    2. malloc底层实现:

    当开辟的空间小于 128K 时,调用 brk()函数;当开辟的空间大于 128K 时,调用mmap()。malloc采用的是内存池的管理方式,以减少内存碎片。先申请大块内存作为堆区,然后将堆区分为多个内存块。当用户申请内存时,直接从堆区分配一块合适的空闲快。采用隐式链表将所有空闲块,每一个空闲块记录了一个未分配的、连续的内存地址。

    3. 进程、线程、协程

    进程: 程序是指令、数据及其组织形式的描述,而进程则是程序的运行实例,包括程序计数器、寄存器和变量的当前值。
    线程: 微进程,一个进程里更小粒度的执行单元。一个进程里包含多个线程并发执行任务。
    协程: 协程是微线程,在子程序内部执行,可在子程序内部中断,转而执行别的子程序,在适当的时候再返回来接着执行。

    (1)一个线程从属于一个进程;一个进程可以包含多个线程。
    (2)一个线程挂掉,对应的进程挂掉;一个进程挂掉,不会影响其他进程。
    (3)进程是系统资源调度的最小单位;线程CPU调度的最小单位。
    (4)进程系统开销显著大于线程开销;线程需要的系统资源更少。
    (5)进程在执行时拥有独立的内存单元,多个线程共享进程的内存,如代码段、数据段、扩展段;但每个线程拥有自己的栈段和寄存器组。
    (6)进程切换时需要刷新TLB并获取新的地址空间,然后切换硬件上下文和内核栈,线程切换时只需要切换硬件上下文和内核栈。
    (7)通信方式不一样。
    (8)进程适应于多核、多机分布;线程适用于多核。
    (9)协程执行效率极高。协程直接操作栈基本没有内核切换的开销,所以上下文的切换非常快,切换开销比线程更小。
    (10)协程不需要多线程的锁机制,因为多个协程从属于一个线程,不存在同时写变量冲突,效率比线程高。
    (11)一个线程可以有多个协程。

    4. 使用虚拟内存的好处:

    优点
    (1)扩大地址空间。每个进程独占一个4G空间,虽然真实物理内存没那么多。
    (2)内存保护:防止不同进程对物理内存的争夺和践踏,可以对特定内存地址提供写保护,防止恶意篡改。
    (3)可以实现内存共享,方便进程通信。
    (4)可以避免内存碎片,虽然物理内存可能不连续,但映射到虚拟内存上可以连续。
    缺点
    (1)虚拟内存需要额外构建数据结构,占用空间。
    (2)虚拟地址到物理地址的转换,增加了执行时间。
    (3)页面换入换出耗时。
    (4)一页如果只有一部分数据,浪费内存。

  • 相关阅读:
    内存管理之内存寻址(笔记)
    centos7下升级gcc版本
    视频监控系统/视频汇聚平台EasyCVR有下级平台注册时出现断流情况该如何排查解决?
    node.js多版本管理器nvm的安装和使用
    浅谈请求中数据转换
    猿创征文 |【SpringBoot2】快速上手SpringBoot
    linux可执行程序的编译、链接、装载
    【音视频】Linux | FFmpeg源码搭建
    postgresql逻辑备份工具pg_dump和pg_resotre学习
    使用gtest和lcov测试代码覆盖率
  • 原文地址:https://blog.csdn.net/lyk82698/article/details/127978023