美文网首页
面试常见问题03 - 操作系统(施工ing)

面试常见问题03 - 操作系统(施工ing)

作者: 第八天的蝉啊 | 来源:发表于2019-07-11 16:36 被阅读0次

    目录

    1. 堆内存与栈内存
    2. 进程和线程
    3. 同步与异步
    4. 阻塞与非阻塞
    5. ...

    1. 内存区域

    • 区域划分
    1. 堆区:由new分配的内存块,由程序员手动分配和释放,分配和释放的过程中可能出现内存泄漏,若
       程序员不释放,程序结束时可能由操作系统回收
    2. 栈区:由操作系统自动分配和释放,无需程序员手动操作
    3. 全局区(静态区):存放全局变量和静态变量,程序开始时分配,结束时释放
    4. 常量区:存放常量的区域,程序开始时分配,结束时释放
    5. 代码区:存放二进制代码的区域
    
    内存区域划分
    • 堆区与栈区的区别
    1. 管理方式:栈类似数据结构中的栈,采用先进后出的方式;堆则是链表
    2. 碎片问题:栈区是一段连续的内存区域,不存在碎片问题;堆区采用链表的方式,内存区域不连续,
       频繁的分配和释放会造成大量的碎片
    3. 空间大小:32位系统下,堆内存可以达到4GB;栈最大不超过8MB,栈空间不足时提示栈溢出
    4. 生长方向:栈由高地址向低地址分配;堆由低地址向高地址分配
    5. 分配方式:栈区内存由系统自动分配和释放;堆区内存由程序员手动控制,分配时需要指明大小,容
       易造成内存泄露,不过进程结束时会由系统回收
    6. 分配效率:栈由系统自动分配,速度较快,程序员无法控制;堆是由new分配的内存,一般速度较慢,
       使用方便
    

    2. 进程和线程

    • 关系
    1. 一个进程中至少含有一个线程(主线程)
    1. 存在多线程时,线程间相互共享进程用户地址空间(虚拟地址空间)
    3. 进程销毁时,进程内的所有线程都会被同时销毁
    
    • 区别
    1. 进程是资源分配的最小单位,线程是程序执行/资源调度的最小单位
    2. 进程有自己的独立地址空间,每启动一个进程系统都会为它分配地址空间,并建立数据表来维护代码
       段、堆栈段和数据段;同一进程中的多个线程共享代码段,数据段(全局变量和静态变量),扩展段(堆
       存储)。但是每个线程拥有自己的栈段,用来存放所有局部变量和临时变量。
    3. 线程之间通信更方便,同一进程的多个线程共享全局变量、静态变量等数据;进程间的通信需要以通
       信的方式(IPC)进行
    4. 多进程程序更健壮,多线程程序只要有线程死掉,整个进程也会跟着死掉,而进程之间则互不影响
    
    • 进程间通信方式
    1. 管道:半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(父子关系)的进程间使用
    2. 命名管道:半双工的通信方式,数据只能单向流动,允许无亲缘关系进程间的通信
    3. 消息队列:消息的链表,存放在内核中并由消息队列标识符标识,是 UNIX 下不同进程之间可实现共
                享资源的一种机制,其中的消息具有特定的格式以及特定的优先级,独立于发送与接收进程
    4. 信号量:用于实现进程间的互斥与同步的计数器,而不是用于存储进程间通信数据
    5. 共享内存:映射一段能被其他进程访问的内存,共享内存由一个进程创建,但多个进程都可以访问
    6. 套接字:可以让不在同一台计算机但通过网络连接计算机上的进程进行通信
    

    3. 同步与异步

    • 同步:在发出一个调用时,在没有得到结果之前,该调用就不返回,调用者主动等待这个调用的结果
    • 异步:调用在发出之后,这个调用就直接返回了,所以没有返回结果,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用

    4. 阻塞与非阻塞

    • 阻塞:调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回
    • 非阻塞:在不能立刻得到结果之前,该调用不会阻塞当前线程

    相关文章

      网友评论

          本文标题:面试常见问题03 - 操作系统(施工ing)

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