操作系统面试点

一、操作系统的基本特性

1、并发:同一段时间内多个程序执行
注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件
2、共享:系统中的资源可以被内存中多个并发执行的进线程共同使用
互斥访问:如打印机
同时访问:只是看起来是同时的,其实底层不是同时的
3、虚拟:通过时分复用(如分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟 为多个
4、异步:系统中的进程是以“走走停停”的方式执行的,且以一种不可预知的速度推进

二、操作系统的功能
1、处理机管理
进程控制、进程同步、进程通信、调度
2、存储器管理
内存分配 、内存保护、地址映射、内存扩充
3、设备管理功能
4、文件管理功能
文件存储空间的管理、目录管理、文件读/写保护和管理
5、操作系统和用户之间的接口
6、现代操作系统的新功能
三、进程状态与转换
在这里插入图片描述
四、进程与线程的区别
看我的另一篇帖子
https://blog.youkuaiyun.com/ProgramMonika/article/details/83007145

五、进程通信

在线程间的通信是较为方便的,
线程间的通信就要复杂点了。


0、进程通信是指进程间的信息交换。由于进程的互斥和同步,需要在进程间交换一定的信息,故不少学者归为进程通信,但只能把它们称为低级通信。效率低、通信对用户不透明

高级通信:
1、共享存储

a、基于共享数据结构的通信方式。
b、基于共享存储区的通信方式。

2、管道通信系统

所谓“管道”,是指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件

3、消息传递系统(Message passing system)

1、直接通信方式,是指发送进程利用OS所提供的发送原语,直接把消息发送给目标进程
2、间接通信方式,是指发送和接受进程,都通过共享中间实体(称为邮箱)的方式进行消息的发送和接受,完成进程间的通信。

4、客户机-服务器系统

1、套接字
2、远程过程调用和远程方法调用

六、进程同步
多进程虽然提高了系统资源利用率和吞吐量,但是由于进程的异步性可能造成系统的混乱。进程同步的任务就是对多个相关进程在执行顺序上进行协调,使并发执行的多个进程之间可以有效的共享资源和相互合作,保证程序执行的可再现性

同步机制需要遵循的原则:

空闲让进:当没有进程处于临界区的时候,应该许可其他进程进入临界区的申请

忙则等待:当前如果有进程处于临界区,如果有其他进程申请进入,则必 须等待,保证对临界区的互斥访问

有限等待:对要求访问临界资源的进程,需要在有限时间内进入临界区,防止出现死等

让权等待:当进程无法进入临界区的时候,需要释放处理机,边陷入忙等 经典的进程同步问题:生产者-消费者问题;哲学家进餐问题;读者-写者问题 同步的解决方案:管程,信号量。

七、死锁
1、产生原因:

a、竞争资源
b、进程推进顺序不合理

2、死锁产生的必要条件

互斥条件:进程对所分配的资源进行排他性的使用
请求和保持条件:进程被阻塞的时候并不释放锁申请到的资源
不可剥夺(抢占)条件:进程对于已经申请到的资源在使用完成之前不可以被剥夺
环路等待条件(循环等待条件):发生死锁的时候存在的一个 进程-资源 环形等待链

3、处理死锁的方法

预防死锁:破坏产生死锁的4个必要条件中的一个或者多个;实现起来比较简单,但是如果限制过于严格会降低系统资源利用率以及吞吐量
!:银行家算法后期展开

避免死锁:在资源的动态分配中,防止系统进入不安全状态(可能产生死锁的状态)-如银行家算法

检测死锁:允许系统运行过程中产生死锁,在死锁发生之后,采用一定的算法进行检测,并确定与死锁相关的资源和进程,采取相关方法清除检测到的死锁。实现难度大

解除死锁:与死锁检测配合,将系统从死锁中解脱出来(撤销进程或者剥夺资源)。对检测到的和死锁相关的进程以及资源,通过撤销或者挂起的方式,释放一些资源并将其分配给处于阻塞状态的进程,使其转变为就绪态。实现难度大

八、进程调度算法

先来先服务调度算法FCFS:既可以作为作业调度算法也可以作为进程调度算法;按作业或者进程到达的先后顺序依次调度;因此对于长作业比较有利;

短作业优先调度算法SJF:作业调度算法,算法从就绪队列中选择估计时间最短的作业进行处理,直到得出结果或者无法继续执行;缺点:不利于长作业;未考虑作业的重要性;运行时间是预估的,并不靠谱 ;

高响应比算法HRN:响应比=(等待时间+要求服务时间)/要求服务时间;

时间片轮转调度RR:按到达的先后对进程放入队列中,然后给队首进程分配CPU时间片,时间片用完之后计时器发出中断,暂停当前进程并将其放到队列尾部,循环 ;

多级反馈队列调度算法:目前公认较好的调度算法;设置多个就绪队列并为每个队列设置不同的优先级,第一个队列优先级最高,其余依次递减。优先级越高的队列分配的时间片越短,进程到达之后按FCFS放入第一个队列,如果调度执行后没有完成,那么放到第二个队列尾部等待调度,如果第二次调度仍然没有完成,放入第三队列尾部…。只有当前一个队列为空的时候才会去调度下一个队列的进程。

九-1、基于顺序搜索的动态分区算法

首次适应(First Fit)算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。

循环首次适应算法:从上次找到的空闲分区的下一个空闲分区开始查找,直到找到合适的。到了最后再返回重新找

最佳适应(Best Fit)算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。

最坏适应(Worst Fit)算法:又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。

九-2、基于索引搜索的动态分区分配算法
1、快速适应算法

step1:根据进程长度,从索引表中去寻找能容纳的最小空闲分区表
step2:从链表中取下一块分区就好

2、伙伴系统

十、页面置换算法

最佳置换算法:只具有理论意义的算法,用来评价其他页面置换算法。置换策略是将当前页面中在未来最长时间内不会被访问的页置换出去。

先进先出置换算法:简单粗暴的一种置换算法,没有考虑页面访问频率信息。每次淘汰最早调入的页面。

最近最久未使用算法LRU:算法赋予每个页面一个访问字段,用来记录上次页面被访问到现在所经历的时间t,每次置换的时候把t值最大的页面置换出去(实现方面可以采用寄存器或者栈的方式实现)。

时钟算法clock(也被称为是最近未使用算法NRU):页面设置一个访问位,并将页面链接为一个环形队列,页面被访问的时候访问位设置为1。页面置换的时候,如果当前指针所指页面访问为为0,那么置换,否则将其置为0,循环直到遇到一个访问为位0的页面。

改进型Clock算法:在Clock算法的基础上添加一个修改位,替换时根究访问位和修改位综合判断。优先替换访问位和修改位都是0的页面,其次是访问位为0修改位为1的页面。

最少使用算法LFU:设置寄存器记录页面被访问次数,每次置换的时候置换当前访问次数最少的。


### 回答1: 作为一个AI语言模型,我可以回答你的问题。Prometheus是一个开源的监控系统,用于记录和查询大型分布式系统的时间序列数据。以下是Prometheus面试中可能涉及的一些主题: 1. Prometheus基础知识:Prometheus的工作原理、数据模型、查询语言等。 2. 监控指标(metric):Prometheus中的指标,如何选择指标以及如何使用指标。 3. PromQL:Prometheus查询语言,包括选择、聚合和过滤时间序列数据的方法。 4. 报警(alerting):如何设置和使用Prometheus的报警规则,以及如何处理报警通知。 5. 指标采集器(metric collectors):如何编写和使用Prometheus的指标采集器,以便监控各种应用程序和系统。 6. 存储和可视化:如何存储Prometheus的数据以及如何使用Grafana等工具进行可视化。 希望这些信息可以帮助你更好地准备Prometheus面试。 ### 回答2: Prometheus是一个开源的监控和告警工具,面试时可以涉及以下几个关键点: 1. Prometheus的架构:面试官可能会询问Prometheus的组件,如Prometheus服务器、exporter、推送网关等,以及它们之间的工作原理和通信方式。 2. 数据收集和存储:面试官可能会问到Prometheus如何采集被监测对象的指标数据,以及如何存储和处理这些数据。你可以讨论Prometheus的Pull模型、指标数据格式、时间序列数据库等相关内容。 3. 监控指标和告警规则:面试官可能会询问如何定义和配置Prometheus的监控指标和告警规则,以及如何通过查询语言PromQL来查询和分析指标数据。你可以介绍Prometheus提供的查询函数、操作符,以及如何创建自定义指标和告警规则。 4. 可视化和报表:面试官可能会关注Prometheus的可视化和报表功能,如如何使用Grafana搭配Prometheus进行仪表盘展示和报表生成。 5. 高可用和扩展性:面试官可能会询问Prometheus的高可用性和扩展性,例如如何设置Prometheus高可用集群,如何水平扩展Prometheus服务器等。 6. 监控业务应用和系统:面试官可能会问到如何使用Prometheus监控具体的业务应用和系统,例如如何采集Java应用程序的JVM指标、如何监控Kubernetes集群等。你可以分享相关的exporter、instrumentation库以及现有的最佳实践。 7. 社区支持和生态系统:面试官可能会关注Prometheus的社区支持和生态系统,如它有哪些相关的开源项目、有哪些主要用户,以及如何参与和贡献给Prometheus社区。 针对这些面试点,你可以准备一些相关的概念和实际应用经验,展示你对Prometheus监控工具的理解和实践能力。 ### 回答3: Prometheus是一款开源的监控和报警系统,用于收集和记录系统和应用程序的指标数据。在面试过程中,以下是一些可能涉及到的Prometheus的面试点: 1. Prometheus的基础概念:面试官可能会问到Prometheus的核心概念,例如指标(metric)、标签(label)和时间序列(time series)等。回答时需要清晰地解释这些概念与Prometheus的工作原理之间的关系。 2. 监控数据收集:面试官可能会问到如何通过Prometheus来收集监控数据,回答时可以提到Prometheus通过HTTP协议主动拉取(target scraping)和服务发现(service discovery)两种方式来获取指标数据,并且可以配合其他工具实现自动化的监控数据收集。 3. Prometheus的查询语言(PromQL):面试官可能会问到PromQL的语法和使用方法。回答时可以说明PromQL用于查询和分析已收集的指标数据,可以进行聚合(aggregation)、筛选(filtering)和计算计算等操作。 4. 报警规则和警报通知:面试官可能会问到如何在Prometheus中设置报警规则,并如何配置警报通知。回答时可以提到Prometheus的报警规则语法和配置文件,以及警报通知方式(如发送邮件、短信或其他集成工具)等。 5. 高可用性和容错性:面试官可能会问到如何保证Prometheus监控系统的高可用性和容错性。回答时可以说明Prometheus支持多副本集群部署、数据备份和恢复、自动发现故障、水平扩展等特性来保证系统可靠性。 6. 可视化和监控仪表盘:面试官可能会问到如何使用Prometheus来创建和展示监控数据的可视化仪表盘。回答时可以说明Prometheus提供了自带的Web界(Graphana)和API接口,也可以通过其他工具和库来创建和自定义监控仪表盘。 总之,在面试过程中,理解和掌握Prometheus的核心概念、数据收集、查询语言、报警设置、高可用性以及监控仪表盘等方的知识是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值