操作系统高频考点(一)
1、进程与线程的区别
- 进程是资源分配的最小单位,线程是CPU调度的基本单位。
- 进程拥有独立的地址空间,线程没有独立的地址空间,但拥有独立的堆栈和局部变量。
- 在多进程和多线程中,多进程比多线程更健状。由于进程拥有独立的地址空间,所以一个进程异常结束时,不会影响到其它进程;线程没有独立的地址空间,当线程异常结束时,可能会影响到其它线程。
- 创建进程的开销比创建线程的开销大;进程上下文切换的开销比线程上下文切换开销大。
2、简述进程内存分区
- 内核空间:存放操作系统代码和数据
- 栈区:存放局部变量、函数的参数值等,该区域由操作系统控制
- 动态库/共享内存映射区:可执行程序运行依赖的动态库加载在该区域;mmap映射的共享内存也在该区域
- 堆区:提供给程序员自行操作的内存区域,malloc/free和new/delete操作的就是这块内存
- 可读写数据区:
(1).bss段:存放未初始化的全局变量、static修饰的局部变量等
(2).data段:存放初始化的全局变量、static修饰的局部变量等
- 只读数据区:存放二进制代码、一些const修饰变量、字符串常量等
3、内存碎片
- 如何产生内存碎片
程序员在程序中用malloc向虚拟内存的堆空间动态申请内存,用free释放内存。如果程序存在大量的malloc/free操作且长时间运行,则虚拟内存的堆空间很容易产生内存碎片
- 什么是内存碎片
内存碎片是指堆空间剩余很多离散的空闲内存,但不能满足malloc的分配请求。内存碎片分为外部碎片和内部碎片。下图描述了部分堆空间的内存分配情况,将堆空间以4字节为单位划分为许多分配块,白色块表示空闲内存,浅蓝色和深蓝色块表示已分配的内存。假设内存分配的最小单位是
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式软件面试笔记 文章被收录于专栏
该笔记涵盖嵌入式软件工程师技术面试中的知识点,归纳总结为:C/C++、操作系统、计算机网络、数据结构与算法、linux常用命令等章节。