0

0

操作系统面试高频考点

嵌入式Linux充电站

嵌入式Linux充电站

发布时间:2023-07-31 16:23:07

|

1454人浏览过

|

来源于嵌入式Linux充电站

转载

操作系统面试高频考点

1、进程与线程的区别

  • 进程是资源分配的最小单位,线程是CPU调度的基本单位。
  • 进程拥有独立的地址空间,线程没有独立的地址空间,但拥有独立的堆栈和局部变量。
  • 在多进程和多线程中,多进程比多线程更健状。由于进程拥有独立的地址空间,所以一个进程异常结束时,不会影响到其它进程;线程没有独立的地址空间,当线程异常结束时,可能会影响到其它线程。
  • 创建进程的开销比创建线程的开销大;进程上下文切换的开销比线程上下文切换开销大。

2、进程间通信的方式有哪些

  • 管道:(1)无名管道:用于具有亲缘关系的进程间通信,以字节流的形式。(2)有名管道:打破了情缘关系的界限,使两个不相干的进程用管道通信,以字节流的形式。
  • 消息队列:数据以块的方式进行传输,但要把数据从用户空间往内核空间拷贝,开销大。
  • 共享内存:存在资源竞争的问题
  • 信号:异步通信
  • 信号量:同步互斥
  • socket通信:实现两台计算机间的通信。

3、进程调度算法

  • 先来先服务调度算法;按照入队的先后顺序一个进程一个进程的执行
  • 最短作业优先调度算法;优先选择运行时间最短的进程运行
  • 高响应比优先调度算法;进程调度时,先计算响应比优先级,然后选则响应比优先级最高的进程运行
  • 时间片轮转调度算法;每个进程能运行的时间是一样的,进程根据时间片轮流运行
  • 最高优先级调度算法;选择优先级最高的进程
  • 多级反馈队列调度算法;设置多级队列,队列优先级从高到底、时间片从小到大

4、孤儿进程是什么

(1)父进程先于子进程结束,此时子进程成为一个孤儿进程。

(2)Linux系统规定:所有孤儿进程都成为一个特殊进程(进程1,也就是init进程)的子进程。

5、多线程同步机制有哪些

  • 互斥量
  • 读写锁
  • 条件变量
  • 信号量
  • 自旋锁

6、简述进程内存分区

操作系统面试高频考点
  • 内核空间:存放操作系统代码和数据
  • 栈区:存放局部变量、函数的参数值等,该区域由操作系统控制
  • 动态库/共享内存映射区:可执行程序运行依赖的动态库加载在该区域;mmap映射的共享内存也在该区域
  • 堆区:提供给程序员自行操作的内存区域,malloc/free和new/delete操作的就是这块内存
  • 可读写数据区

(1).bss段:存储未初始化的、初始化为0的全局变量和静态变量。

(2).data段:存储初始化不为0的全局变量和静态变量、const型常量。

  • 只读数据区:存放二进制代码、一些const修饰变量、字符串常量等

7、内存碎片

  • 如何产生内存碎片

程序员在程序中用malloc向虚拟内存的堆空间动态申请内存,用free释放内存。如果程序存在大量的malloc/free操作且长时间运行,则虚拟内存的堆空间很容易产生内存碎片

  • 什么是内存碎片

内存碎片是指堆空间剩余很多离散的空闲内存,但不能满足malloc的分配请求。内存碎片分为外部碎片和内部碎片。下图描述了部分堆空间的内存分配情况,将堆空间以4字节为单位划分为许多分配块,白色块表示空闲内存,浅蓝色和深蓝色块表示已分配的内存。假设内存分配的最小单位是一个分配块(4字节)。

  1. 外部碎片:由于堆空间中不存在连续4个分配块大小的空闲内存(白色块),但有许多离散的、小于4个分配块大小的空闲内存。所以当malloc(16)申请16字节时会分配失败,原因是没有连续4个分配块的空闲内存,但有小于4个分配块的空闲内存,这些内存称为外部碎片
  2. 内部碎片:由于分配内存的最小单位是一个分配块(4字节),所以当malloc(5)申请5字节时,堆空间分配两个空闲块共8字节,但程序只需要5字节,剩余的3字节(深蓝色)没有用到,这3字节内存称为内部碎片
操作系统面试高频考点

8、堆和栈的区别?

  • 分配方式不同

栈:由系统自动分配

堆:由程序员手动申请

  • 申请大小不同

栈:栈区的内存大小是固定的,只要申请的内存小于栈区剩余的内存,就可以分配成功,否则栈会溢出。

堆:堆区的内存大小是由计算机的虚拟内存决定的,

9、互斥锁与信号量的区别

(1)信号量用于线程同步,互斥锁用于线程互斥。

(2)信号量可以为非负整数,可以实现多个同类资源的多线程同步;互斥锁只能为0/1,只能用于一个资源的互斥访问。

(3)信号量可以由一个线程释放,另一个线程得到;互斥锁的加锁和解锁必须由同一线程分别对应使用,且多个线程使用多个互斥锁必须注意统一顺序,否则可能造成死锁。

10、同步和异步的区别

  • 同步:A调用B,必须等B处理结束后返回,A才能继续往下执行
  • 异步:A调用B,不用等B处理结束,A可以继续往下执行,等B处理结束后通过回调等方式通知A

11、死锁

什么是死锁?产生死锁的原因是什么?

(1)死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程将无法向前推进。

(2)原因:①系统资源不足。②资源分配不当。③进程推进的顺序不合适

死锁的四个必要条件是什么?

(1)互斥条件:一个资源每次只能被一个进程使用,其他进程只能等待。

(2)请求与保持条件:进程已经获得至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时该进程被阻塞,但对已获得资源依然保持不放。

(3)不可剥夺条件:进程所获得的资源不能被其他进程剥夺,只能被自己释放。

(4)循环等待条件:若干进程形成首尾相接循环等待资源的关系。

注意:以上四个条件缺一不可。

死锁的处理方法?

(1)预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件。

(2)避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁。

(3)检测和解除死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉。

怎样预防死锁?

(1)破坏“请求与保持条件”

①静态分配,即每个进程在开始执行时就申请它所需要的全部资源:

②动态分配,即每个进程在申请所需要的资源时它本身不占用系统资源。

(2)破坏“不可剥夺条件”:一个进程在阻塞等待期间,其占有的资源被隐式释放后被其他进程使用,而阻塞等待的资源只有获得所有需要的资源才能重新启动。

(3)破坏“循环等待条件”:采用资源的有序分配,将所有资源进行编号,紧缺的资源采用  比较大的编号,一个进程只有获得较小编号的资源才可以申请较大编号的资源

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1497

2023.10.24

字符串常量的表示方法
字符串常量的表示方法

字符串常量的表示方法:1、使用引号;2、转义字符;3、多行字符串;4、原始字符串;5、字符串连接;6、字符串字面量和对象;7、编码问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

139

2023.12.26

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

527

2023.09.20

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

78

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

96

2025.09.18

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1497

2023.10.24

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

27

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 4.9万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.8万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号