面试操作系统八股文五问五答第一期

2023-12-07 14:54

本文主要是介绍面试操作系统八股文五问五答第一期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

面试操作系统八股文五问五答第一期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!

⭐点赞⭐收藏⭐不迷路!⭐

1.死锁产生的条件

1.互斥条件,即当资源被一个线程使用(占有)时,别的线程不能使用

2.不可剥夺条件,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放

3.请求和保持条件,即当资源请求者在请求其他的资源的同时保持对原有资源的占有

4.循环等待条件,即存在一个等待循环队列:p1 要 p2 的资源,p2 要 p1 的资源,形成了一个等待环路

四个条件都成立的时候,便形成死锁。死锁情况下打破上述任何一个条件,便可让死锁消失

2.线程的生命周期

java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态:

●NEW: 初始状态,线程被创建出来但没有被调用 start() 。

●RUNNABLE: 运行状态,线程被调用了 start()等待运行的状态。

●BLOCKED:阻塞状态,需要等待锁释放。

●WAITING:等待状态,表示该线程需要等待其他线程做出一些特定动作(通知或中断)。

●TIME_WAITING:超时等待状态,可以在指定的时间后自行返回而不是像 WAITING 那样一直等待。

●TERMINATED:终止状态,表示该线程已经运行完毕。

img

3.查看线程状态的工具

1.使用Thread类的getState()方法

2.使用Java VisualVM Jconsole JMC

都在jdk的bin目录

3.使用命令行工具jstack 进程ID,

4.Linux使用top命令 top -H -p 查看进程内运行的线程情况

5.Linux先使用ps -aux (a显示所有用户的进程,不仅仅是当前用户,u显示用户为主的格式显示进程信息,包括用户,进程ID,CPU使用率,内存使用率,x 显示没有中断的进程,通常用于显示守护进程) 或者使用ps -ef命令,e显示所有进程,不限于当前终端会话,-f完整的格式显示进程信息,包括父进程,用户,UID,TTY,状态。

ps -T -p pid 查看进程PID12345的线程列表

4.用户态和内核态的区别?

用户态(User Mode)和内核态(Kernel Mode)是操作系统中的两种不同的执行权限级别。这两种级别决定了程序的运行环境和可执行的操作。

1用户态:

○用户态是指程序运行在较低的权限级别,不具有直接访问和控制系统底层资源的能力。

○在用户态下运行的程序只能访问用户空间中的资源,如用户进程的堆栈、内存、文件和网络连接等。

○用户态下运行的程序需要通过系统调用(System Call)向操作系统请求执行特权操作,如读写文件、创建进程等。

2内核态:

○内核态是操作系统的最高权限级别,拥有对系统底层资源的完全控制权。

○在内核态下运行的程序可以直接访问和操作底层硬件资源,如磁盘、进程控制块、中断控制器等。

○内核态下的程序可以执行特权指令和访问系统级数据结构,能够完成系统管理和控制的任务,如调度进程、分配内存等。

用户态和内核态之间的切换是通过系统调用和中断(异常)来实现的。当用户态程序需要执行特权操作时,需要通过系统调用将控制权切换到内核态,由操作系统来处理特权操作。而当内核态的任务完成后,通过上下文切换将控制权返回给用户态程序。

总结:用户态和内核态的区别主要在于权限级别和资源访问能力。用户态程序只能运行在受限的环境中,不能直接访问底层资源,而内核态程序拥有完全的系统权限和资源访问能力。

5.为什么用户态和内核态之间的切换会影响到线程的执行效率,真正慢的点在哪里?

用户态和内核态之间的切换会影响线程的执行效率,主要是由于涉及到以下方面的开销和延迟:

1上下文切换开销:当从用户态切换到内核态时,需要保存用户态的上下文信息并加载内核态的上下文信息,这涉及到寄存器状态的保存和恢复,堆栈切换等操作,会引入一定的开销。

2内核调度开销:在切换到内核态之后,操作系统需要进行调度决策来确定下一个要执行的线程或进程,这涉及到查找、选择合适的线程,进行调度算法的计算和决策,可能会消耗较多的运算时间。

3内核资源访问延迟:在内核态中,线程可以访问并操作内核资源,如文件系统、设备驱动程序等。但由于同一时间可能有多个线程或进程同时请求访问某个资源,需要进行锁机制或其他同步机制,以保证资源的安全访问,这可能引入额外的延迟。

4缓存失效:当线程从用户态切换到内核态时,可能会导致CPU缓存中的数据失效,因为内核态和用户态的数据访问权限不同,可能会引起缓存的刷新和重新加载,这也会导致额外的延迟。

真正影响线程执行效率的慢点主要在于上下文切换开销和内核调度开销。这些开销都需要耗费时间和计算资源,因此频繁的上下文切换和内核调度会导致线程的执行效率下降。为了优化线程的执行效率,可以采取一些策略,如减少不必要的上下文切换,优化调度算法,避免过度的内核态访问等。

1操作系统有一个锁的概念,谈谈你对它的理解?

锁是操作系统中用于控制并发访问共享资源的机制。它用于保证在同一时间只有一个线程或进程可以访问被锁定的资源,从而避免数据竞争和不一致性。

锁的实现方式有多种,常见的包括互斥锁(Mutex)、读写锁(ReadWrite Lock)、自旋锁(Spinlock)、信号量(Semaphore)等。

互斥锁(Mutex)是最常见的锁类型,它提供了两个基本操作:上锁(Lock)和解锁(Unlock)。当一个线程需要访问共享资源时,首先尝试去获取锁,如果锁已经被其他线程占用,则线程进入阻塞状态,等待锁被释放;当某个线程完成对共享资源的访问后,会释放锁,从而允许其他线程获取锁并访问资源。

读写锁(ReadWrite Lock)是一种特殊的锁类型,它允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。这样可以提高读操作的并发性能,但写操作会变得串行化,保证了数据的一致性。

自旋锁(Spinlock)是一种忙等待的锁,当一个线程需要获取锁时,它会循环忙等待,不断尝试获取锁,直到成功获取为止。自旋锁适用于对锁的占用时间较短的情况。

信号量(Semaphore)是一种更为通用的同步机制,除了可以用作锁,还可以用于线程间的信号通知。它基于计数器的概念,当计数器大于0时,线程可以获取信号量,当计数器减至0时,线程需要等待其他线程释放信号量。

锁的作用是保护共享资源的一致性和完整性,避免多个线程同时访问和修改共享资源导致的数据竞争和不确定性。但锁的过度使用或不合理使用可能会引起死锁、饥饿等问题,因此在应用中需要合理设计和使用锁机制。

这篇关于面试操作系统八股文五问五答第一期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/466296

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的

毕业前第二次面试的感慨

距面试已经过去了有几天了,我现在想起来都有说多的恨感慨。 我一直都是想找刚刚起步的企业,因为这能让我学到更多的东西,然而正好有一家企业是刚起步的,而且他还有自己的产品专利,可以说这是一家,即是创业又是刚起步的公司,这家公司回复了我投给他的简历,这家企业想进一步了解我的情况,因为简历上我符合这家企业的基本要求,所以要进一步了解。 虽然面试的过程中,他给我的面试题,我做得并不是很理想,

腾讯社招面试经历

前提:本人2011年毕业于一个普通本科,工作不到2年。   15号晚上7点多,正在炒菜做饭,腾讯忽然打电话来问我对他们的Linux C++的职位是否感兴趣,我表达了我感兴趣之后,就开始了一段简短的电话面试,电话面试主要内容:C++和TCP socket通信的一些基础知识。之后就问我一道算法题:10亿个整数,随机生成,可重复,求最大的前1万个。当时我一下子就蒙了,没反应过来,何况我还正在烧