嵌入式岗位面试八股文(篇三 操作系统(下))

devtools/2025/1/8 6:48:36/

wx:嵌入式工程师成长日记

ddd39e6b19e14e33897aa6213919c759.png

1.僵尸进程有什么危害?

僵尸进程的进程号并不会被释放,但是系统的进程号是有限的,如果出现大量僵尸进程就会导致系统无进程号可用就无法产生新进程。

2.进程调度算法即策略有哪些?

先来先服务,短作业优先调度,高优先级优先,时间片轮,多级反馈队列

3.有抢占式和非抢占式的区别

非抢占式优先权算法在这种方式下,系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成

抢占式优先权调度算法:在这种方式下,系统同样是把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程

4.并发和并行

并发是对于单个cpu来说,只能一个进程运行,但是线程的切换时间则是减少到纳秒数量级,多个任务不停的来回切换;并行是对于多个CPU来说,多个进程同时运行

区别:并行的"同时"是同一时刻可以多个任务在运行(处于running),并发的"同时"是经过不同线程快速切换

5.什么是死锁,产生的条件,如何解决?

死锁是指多个进程在执行过程中,因争夺资源而造成互相等待,此时系统产生了死锁

产生条件:

1.互斥条件:进程对所分配的资源不允许其他进程访问,若其他进程需要访问,只能等待,知道该进程使用完毕后释放资源

2.请求保持条件进程获得一定资源后,又对其他资源发出请求,但该资源被其他进程占用,此时请求阻塞,而且这个进程不会释放自己已经占有的资源

3.不可剥夺条件:进程获得资源,只能自己释放,不可剥夺

4.环路等待条件:若干进程之间形成一种头尾相接等待资源关系

解决:

资源一次性分配,从而解决请求保持的问题;

可剥夺资源:当进程新的资源未得到满足时,释放已有的资源;

资源有序分配:资源按序号递增,进程请求按递增请求,释放则相反;

6.互斥锁机制

互斥锁机制:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒

7.进程、线程的中断切换的过程是怎样的

上下文切换指的是内核(操作系统的核心)在CPU上对进程或者线程进行切换

进程上下文切换:

1)保护被中断进程的处理器现场信息

2)修改被中断进程的进程控制块有关信息,如进程状态等

3)把被中断进程的进程控制块加入有关队列

4)选择下一个占有处理器运行的进程

5)根据被选中进程设置操作系统用到的地址转换和存储保护信息

6)根据被选中进程恢复处理器现场

8.多路IO复用技术有哪些,区别是什么?

1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大;而epoll保证了每个fd在整个过程中只会拷贝一次。

2)每次调用select都需要在内核遍历传递进来的所有fd,才知道哪些fd是被设置了;而epoll只需要轮询一次fd集合,同时查看就绪链表中有没有就绪的fd就可以了。

select设置监听的集合不能被重新使用

3)select支持的文件描述符数量太小了,默认是1024;而epoll没有这个限制,它所支持的fd上限是最大可以打开文件的数目,这个数字一般远大于2048

epoll为什么高效:拷贝、查询、返回

1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间

2)select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,并且要把当前进程往设备等待队列中挂一次,而epoll只要一次拷贝,而且把当前进程往等待队列上挂也只挂一次,这也能节省不少的开销。

3)当我们调用 epoll_wait() 函数返回的不是实际的描述符,而是一个代表就绪描述符数量的值,这个时候需要去epoll指定的一个数组中(epoll_event定义的结构体)依次取得相应数量的 socket 描述符即可,这个数组里面保存的都是可以的文件描述符,而不需要遍历扫描所有的 socket描述符,因此这里的时间复杂度是O(1),这里和select的区别是select返回的也是可用的数量,但是并没有告诉你可用的文件描述符是谁,你必须得遍历全部的文件描述符,才知道是那些就绪了。

epoll最大的优点就在于它只管就绪的socket描述符,而跟socket描述符的总数无关


http://www.ppmy.cn/devtools/148827.html

相关文章

《Flutter 学习笔记》Flutter Windows Android 环境搭建

1. android 环境搭建 安装 JDK,并且配置环境变量;安装 android studio;配置 flutter sdk 环境变量。 2. 下载地址 JDK 下载;android studio 下载;flutter sdk 下载。 3. 配置 JDK 3.1 系统变量新增 JAVA_HOME 找到…

Vulnhub靶场Who Wants To Be King 1

一、信息收集 使用arp-scan -l,获取靶机ip 使用nmap对IP进行扫描,获取开放的端口服务 nmap -sV -p- -A -O 192.168.19.129 有个80端口进去是这个下载并放到kali攻击机桌面上 下载好文件后,通过file命令查看下载文件的文件属性 file skeyl…

导入sklearn库时报错的解决方法

1 sklearn库时报错 使用《安装scikit-learn库》中提到的方法安装好sklearn库后,在IDLE中导入该库时,会报错,如图1所示。 图1 导入sklearn库后报错 2 问题分析 从图1中可以看出,当导入sklearn库时,产生一个“值错误”…

Clisoft SOS与CAD系统集成

Clisoft SOS与CAD系统集成 以下内容大部分来自官方文档,目前只用到与Cadence Virtuoso集成,其他还未用到,如有问题或相关建议,可以留言。 与Keysight ADS集成 更新SOS客户端配置文件sos.cfg,以包含支持ADS的模板&am…

如何优化亚马逊广告以提高ROI?

在竞争激烈的亚马逊市场中,优化广告以提高投资回报率(ROI)是卖家的关键任务。以下是一些实用的策略: 一、精准的关键词研究与选择 深入了解产品特性和目标受众 详细分析产品的功能、用途、优势和适用人群。例如,如果你…

基于Elasticsearch8的向量检索实现相似图形搜索

Elasticsearch8版本增加了KNN向量检索,可以基于此功能实现以图搜图功能。 1、首先创建索引,es提供了类型为dense_vector的字段,用于存储向量,其中dims是向量维度,可以不配置,es会根据第一条插入的向量维度…

开源平台Kubernetes的优势是什么?

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的使用范围广泛。 Kubernetes 这个名字源于希腊语,意…

基于Qlearning强化学习的机器人迷宫路线搜索算法matlab仿真

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 Q-learning理论 2.2 机器人迷宫路线搜索具体实现 状态与动作定义 Q 表初始化 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印)&#…