嵌入式面经篇八——进程线程

news2024/9/23 17:15:11

文章目录

  • 前言
  • 一、进程&线程
    • 1、异步 IO 和同步 IO 区别?
    • 2、进程间通信方式?
    • 3、进程的地址空间模型?
    • 4、进程的五种状态分别是?
    • 5、子进程从父进程继承的资源有哪些?
    • 6、什么是进程上下文、中断上下文?
    • 7、如何防止僵尸进程过多导致系统空间爆满?
    • 8、/proc目录下,以数字命名的目录表示什么?
    • 9、进程和线程有什么区别?
    • 10、什么时候用多进程?什么时候用多线程?
    • 11、线程可以独立运行吗?一个线程崩溃会导致整个进程崩溃吗?
    • 12、写出下列线程、互斥锁、信号量相关代码。
    • 13、线程间通信和同步方式有哪些?
    • 14、如何防止同时产生大量的线程?
    • 16、互斥锁与信号量的区别?
    • 17、孤儿进程是什么?


前言

记录一些招聘公司在招聘嵌入式软件岗位时的一些问题,此文为第八篇。


一、进程&线程

1、异步 IO 和同步 IO 区别?

答:如果是同步 IO,当一个 IO 操作执行时,应用程序必须等待,直到此 IO 执行完。相反,异步 IO 操作在后台运行,IO 操作和应用程序可以同时运行,提高系统性能,提高 IO 流量。

解读:在同步文件 IO 中,线程启动一个 IO 操作然后就立即进入等待状态,直到 IO 操作完成后才醒来继续执行。而异步文件 IO 中,线程发送一个 IO 请求到内核,然后继续处理其他事情,内核完成 IO 请求后,将会通知线程 IO 操作完成了。

2、进程间通信方式?

在这里插入图片描述

3、进程的地址空间模型?

在这里插入图片描述
在这里插入图片描述

4、进程的五种状态分别是?

在这里插入图片描述

  • 就绪态:所有运行条件已就绪,只要得到了CPU时间就可运行。
  • 运行态:得到CPU时间正在运行。
  • 僵尸态:进程已经结束了但父进程还没来得及回收。
  • 等待态:包括浅度睡眠跟深度睡眠。进程在等待某种条件,条件成熟后即进入就绪态。浅度睡眠时进程可以被信号唤醒,但深度睡眠时必须等到条件成熟后才能结束睡眠状态。
  • 暂停态:暂时停止参与CPU调度(即使条件成熟),可以恢复。

5、子进程从父进程继承的资源有哪些?

答:子进程继承父进程的绝大部分资源,包括堆栈、内存、用户号和组号、打开的文件描述符、当前工作目录、根目录。

6、什么是进程上下文、中断上下文?

  • 进程上文:是指进程由用户态切换到内核态时需要保存用户态时CPU寄存器中的值,进程状态以及堆栈上的内容。即保存当前进程的状态,以便再次执行该进程时,能够恢复切换时的状态,继续执行。
  • 进程下文:是指切换到内核态后执行的程序,即进程运行在内核空间的部分。
  • 中断上文:硬件通过中断触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。中断上文可以看作硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被中断的进程环境)。
  • 中断下文:执行在内核空间的中断服务程序。

7、如何防止僵尸进程过多导致系统空间爆满?

答:每当子进程退出,父进程都会收到 SIGCHLD 信号,故可在父进程中设置 SIGCHLD 信号的捕获函数,在捕获函数中回收子进程。

void handler(int sig)  
{  
    int status;  
    if(waitpid(-1, &status, WNOHANG) >= 0)  
    {  
        printf("child is die\n");  
    }  
}  
int main()  
{  
    signal(SIGCHLD, handler);  
    int pid = fork();  
    if(pid > 0)  //父进程循环等待  
    {  
        while(1)  
        {  
            sleep(2);  
        }  
    }  
    else if(0 == pid)  
    {   //子进程说自己die后就结束生命周期,之后父进程就收到SIGCHLD  
        //信号调用handler函数接收结束子进程,打印child is die。  
        printf("i am child, i die\n");  
        exit(0);  
    }  
} 

解读:

  • 僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
  • 可用 top 命令查看僵尸进程的数量(zombie),也可用 ps -aux | grep Z(僵尸进程的状态显示为Z)来查看僵尸进程的 PID 等信息。

8、/proc目录下,以数字命名的目录表示什么?

以数字命名的目录表示当前一个运行的进程,目录名即为进程PID,其内的目录和文件给出了一些关于该进程的信息。

9、进程和线程有什么区别?

  • 进程是系统中程序执行和资源分配的基本单位,线程是 CPU 调度的基本单位。
  • 一个进程个拥有多个线程,线程可以访问其所属进程地址空间和系统资源(数据段、已经打开的文件、I/O设备等),同时也拥有自己的堆栈。
  • 同一进程中的多个线程可以共享同一地址空间,因此它们之间的通信实现也比较简单,而且切换开销小、创建和消亡的开销也小。而进程间的通信则比较麻烦,而且进程切换开销、进程创建和消亡的开销也比较大。

10、什么时候用多进程?什么时候用多线程?

  • 程序的安全性、稳定性要求较高时用多进程。
  • 需要频繁通信/切换程序/创建跟销毁程序时用多线程。

11、线程可以独立运行吗?一个线程崩溃会导致整个进程崩溃吗?

答:

  • 线程不能独立运行,但一个线程崩溃不一定导致整个进程崩溃。

解读:

  • 线程属于进程,线程的运行需要依赖进程的地址空间和系统资源。
  • 线程崩溃的本质就是内存出错,若出错的内存没有被其他线程访问,则不会导致其他线程出错,也就不会导致进程崩溃。

12、写出下列线程、互斥锁、信号量相关代码。

在这里插入图片描述

13、线程间通信和同步方式有哪些?

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

14、如何防止同时产生大量的线程?

  • 方法是使用线程池。
  • 线程池可以提高调度效率和限制资源使用,线程池中的线程达到最大数时,其他线程就会排队等候。

16、互斥锁与信号量的区别?

  • 信号量用于线程同步,互斥锁用于线程互斥。
  • 信号量可以为非负整数,可以实现多个同类资源的多线程同步;互斥锁只能为0/1,只能用于一个资源的互斥访问。
  • 信号量可以由一个线程释放,另一个线程得到;互斥锁的加锁和解锁必须由同一线程分别对应使用,且多个线程使用多个互斥锁必须注意统一顺序,否则可能造成死锁。

17、孤儿进程是什么?

  • 父进程先于子进程结束,此时子进程成为一个孤儿进程。
  • Linux系统规定:所有孤儿进程都成为一个特殊进程(进程1,也就是init进程)的子进程。

我的qq:2442391036,欢迎交流!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2050649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

写了一个分页 sql,因为粗心出了 bug 造成了 OOM!

大家好,我是君哥。 最近上完线后,凌晨收到一个生产告警,一个 OOM 异常导致了服务重启。今天来分享一下这个事故。 1.事故现场 事故的代码逻辑并不复杂,从一个大概有 8 万数据的表里面查出数据,汇总后对数据做处理。…

高校宣讲会管理系统--论文pf

TOC springboot370高校宣讲会管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的…

【myz_tools】Python库 myz_tools:Python算法及文档自动化生成工具 - 0.2.0版更新

文章目录 0.2.0 更新内容如下函数generate_2d_combinations_iter函数generate_row_permutations函数calculate_total_permutations函数display_combinations函数evaluate_list_similarity函数check_unique 写在前面关于库库使用库内所有函数目录文件名称: common_maths.py函数部…

ZooKeeper分布式协调系统介绍

1. ZooKeeper概述 1.1 ZooKeeper介绍 ZooKeeper 是 Apache 软件基金会的一个项目,它确实提供了一种非常有用的服务,用于维护分布式系统中的配置信息、命名、提供分布式同步和提供组服务等。它的核心是原子广播和大约一致性模型,这使得它能够…

CCF-GESP五级考级——初等数论,全网最精简的求最大公约数gcd和最小公倍数lcm方法(100%好使)

👑一、约数和因数的区别 约数必须在整除的前提下才存在,而因数是从乘积的角度来提出的。如果数与数相乘的积是数,是的因数。 1.约数只能对在整数范围内而言,而因数就不限于整数的范围。 举个栗子:。2和8是16的…

中仕公考:国考往年招录情况对比

2025年国考预计10月中旬启动,11月进行笔试。中仕为大家总结了往年的国考招录情况,希望能给大家一些参考。 2024年计划招录3.96万人。截止到考试结束,共有225.2万人参加了考试,参加考试人数与录用计划数之比约为57:1,2…

CSP-J 2023真题一轮

选择题 阅读题 第1题 第2题 第3题 完善程序 第1题 第2题 答案: 一、单选题 1-5 BDAAC 6-10 BCADA 11-15 ABBAD 二、阅读程序 1) 16. √ 17. √ 18. ⅹ 19.A 20.B 2) 21. √ 22. ⅹ 23. √ 24. D 25.B 26.D 3) 27. √ 28. √ 29…

EasyCVR视频汇聚平台构建远程安防监控:5大亮点解析,助力安防无死角

随着科技的飞速发展,远程安防监控系统已经成为现代社会中不可或缺的一部分,无论是在小区、公共场所还是工业领域,安防监控都发挥着至关重要的作用。而EasyCVR作为一款功能强大的视频监控综合管理平台,其在构建远程安防监控系统方面…

谷歌浏览器下载文件被阻止怎么解除

在工作生活中,我们会使用谷歌浏览器下载各种各样的文件,不过偶尔会遇到文件下载被阻止的情况。为了解决这一问题,本文为大家分享了实用的措施建议,一起来了解一下吧。(本文由https://chrome.cmrrs.com/站点的作者进行编…

python爬取豆瓣电影数据

目录 一、背景 二、分析网站 1、ajax请求 三、代码实现 1、导包 2、面向对象实现 3、发送请求 4、解析数据 5、保存数据 6、定义主函数 7、实例化对象运行主函数 8、运行效果 四、以下是全部完整代码 五、报错解决 1、数据库连接报错 2、数据插入报错 一、背景…

136 只出现一次的数字

解题思路: \qquad 这道题目明确要求了时间复杂度为O(N),空间复杂度为O(1),不然借助哈希表很容易能够在O(N)的空间复杂度下解决。特殊的要求只能特殊处理,解这道题只能记住异或这种较特殊的运算方式。 \qquad 异或是对二进制数进…

《深入探究 @SpringBootApplication 注解的内部原理》

《深入探究 SpringBootApplication 注解的内部原理》 SpringBootApplication注解涵盖了 Spring Boot 的包扫描原理、自动装配原理等众多重要原理。接下来,我们将对该注解展开深入且详尽的研究。而研究上述原理的关键,在于剖析SpringBootApplication内部…

网上商品订单转手系统bootpf

TOC springboot408网上商品订单转手系统bootpf 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的…

【SpringBoot】SpringBoot框架的整体环境搭建和使用(整合Mybatis,Druid,Junit4,PageHelper,logback等)

目录 1.介绍 1.1 配置文件 1.2 目录结构 2.基于SpringBoot的SpringMVC 4.整合Mybatis 5.整合Druid连接池 6.整合Junit4 7.整合Logback 8.整合PageHelper 9.SpringBoot整合Thymeleaf ​编辑 【附录】springboot的pom.xml 1.介绍 Spring框架的优点是方便解耦、简化开…

openEuler系统安装Visual Studio Code

openEuler系统安装Visual Studio Code 背景安装密钥和存储库更新包缓存并使用dnf安装包Fedora 22及以上版本旧版本使用yum 安装过程截图安装成功看桌面效果 背景 openEuler(openEuler-24.03-LTS)安装了麒麟UKUI桌面但是没有麒麟软件商店想安装Visual Studio Code 安装密钥和…

计算机毕业设计选什么题目好? springboot 大学志愿填报系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

东晟时尚服饰文化传承与发展研发中心成立

近期,东晟时尚创新科技(北京)有限公司宣布成立东晟时尚服饰文化传承与发展研发中心,此举标志着公司在促进中国传统文化与现代时尚产业结合方面迈出了关键步伐。 作为一家在时尚科技推广和设计研发应用服务领域具有战略眼光的企业&…

微信云开发云存储 下载全部文件

一、安装 首先按照这个按照好依赖,打开cmd 安装 | 云开发 CloudBase - 一站式后端云服务 npm i -g cloudbase/cli 安装可能遇到的问题 ‘tcb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。-CSDN博客 二、登录 在cmd输入 tcb login 三、…

导出运营数据Excel报表

文章目录 概要整体架构流程技术细节小结 概要 产品原型 在数据统计页面,有一个数据导出的按钮,点击该按钮时,其实就会下载一个文件。这个文件实际上是一个Excel形式的文件,文件中主要包含最近30日运营相关的数据。表格的形式已经…

C语言(16)——初识单链表

1.链表的概念及结构 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 结构图: 补充说明: 1、链式机构在逻辑上是连续的,在物理结构上不⼀定连续 2、…