当前位置:网站首页>操作系统常见面试题目:
操作系统常见面试题目:
2022-04-23 14:08:00 【白马非马·】
1. 操作系统基础
1.1 什么是操作系统:
定义:管理计算机硬件和软件资源的程序,是计算机的基石
硬件资源:硬件设备的管理
软件资源:内存管理,文件系统管理和应用程序管理。
1.2 什么是系统调用:
根据进程访问资源的特点,进程在系统的运行分为两个状态:
1)用户态:运行的进程能够访问用户程序的数据
2)系统态:进程能够访问所有资源
3)系统调用:在用户态的情况,如何访问系统态的数据?就是通过系统调用,由操作系统进行访问。
4)相互关系:用户态 <----进程调用----> 系统态
2.进程和线程
2.1 进程和线程的区别?
- 进程定义:并发执行的程序在执行过程中,资源分配的基本单位。拥有系统资源。
- 线程定义:是进程的一个执行单元,处理器独立调度的基本单位。不拥有系统资源。
- 进程和线程的区别:
1)地址空间:进程独享一个;共享本进程地址空间
2)资源:进程资源是独立的(便于管理和保护};线程共享本进行的资源,不独立。(不利于保护)
3)健壮性:进程之间不用相互影响;线程之间相互影响耦合
4)执行过程:进程执行开销大,线程开销小
5)进程是资源分配的基本单位,线程是独立调度的基本单位。
6)进程包含多个线程
7)进程之间是独立的,但是线程之间经常相互耦合。
8)线程执行开销小,但是不利于资源的管理和保护;进程执行开销大,利于资源的管理和保护
2.2 进程有哪几种状态?
进程的五种状态:
- 创建状态: 进程正在被创建,操作系统为进程分配资源,初始化PCB
- 就绪状态: CPU : × 其他所需资源:
- 运行状态: CPU : 其他所需资源: ×
- 阻塞状态: CPU : × 其他所需资源: × 正在等待某一事件而暂停运行/等待IO操作
- 结束状态:进程正在从系统中撤销,操作系统会回收进程拥有的资源,撤销PCB
2.3 进程之间状态的状态转换?
- 就绪态-> 运行态: 进程被调度
- 运行态-> 就绪态:时间片到,或CPU被其他高优先级的进程抢占。
- 运行态->阻塞态:等待系统资源分配或等待某事件发生(主动行为)
- 阻塞态->就绪态:资源分配到位,等待的事件发生(被动行为)
- 创建态-> 就绪态:系统完成创建进程相关的工作
- 运行态-> 终止态:进程运行结束,或进程过程中遇到了不可修复的错误
2.4 进程间的通信方式(7种)
- 共享内存:多个进程可以互斥访问同一块内存空间。(最有用,通过能过互斥锁和信号量实现同步操作)
- 匿名管道(Pipes) :具有亲缘关系的父子进程间或者兄弟进程之间的通信。只存在于内存中的文件。
- 有名管道(Names Pipes) :严格遵循先进先出(first in first out),以磁盘文件的方式存在。
- 信号(Signal):通知接收进程某个事件已经发生
- 信号量(Semaphores:信号量是一个计数器,意图在于进程间同步。
- 消息队列:传递结构化消息。消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。
- Sockets:客户端和服务器之间通过网络进行通信。是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
- 消息队列优势明显:
1)克服了信号承载信息量少
2)管道只能承载无格式
3)字节流缓冲区大小受限等缺点。
2.5 进程同步和进程异步的区别?
- 进程同步:
概念:进程的并发执行带来异步性,但是进程有时是有顺序的,通过进程同步解决异步性问题。 - 进程同步方法:
1)软件
(1)单标志法:公用整形变量记录。两个进程交替进入临界区。一个进程在访问完临界区,会把访问权限给另一个进程。
(2)双标志先检查:先检查对象状态,再置自己的标志。
(3)双标志后检查:先置自己的标志,再检查对象状态。双标志法的缺点:可能同时访问和不访问,因为修改和判断不能同时完成。
(4)皮尔逊算法:单标志和双标志后检查的结合,避免无限等待。
2)硬件
(1)TestAndSet使用指令进行原子操作
中断屏蔽 - 进程异步:多个进程不能对临界资源同时进行访问,需要互斥访问,同一时间,有一个访问。
2.6 那线程间的同步的方式有哪些呢?
-
为什么需要线程间的同步?
因为线程间共享本进程的资源,如果多个线程并发执行,需要避免关键共享资源变量的使用冲突。 -
如何进行线程同步:
1)临界区:在任意时刻只允许一个线程对共享资源变量进行访问, 如果有多个线程试图访问公共资源,后来者会被挂起。
2)互斥量(Mutex):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。(互斥对象只有一个)。例子:比如 Java 中的 synchronized 关键词和各种 Lock 都是这种机制。锁是其互斥对象。
3)信号量(Semphares):允许同一时刻多个线程访问同一资源,控制同一时刻访问此资源的最大线程数量。
4)事件(Event):通过通知操作来保持多线程同步。
2.7 操作系统中进程的调度算法有哪些吗?
-
先到先服务(FCFS)调度算法(对短进程不友好) :
先来的先服务,直到运行结束或者被阻塞,和银行派对一样。 -
短作业优先(SJF)的调度算法 (照顾短进程,忽略长进程,会饥饿):
从就绪队列中选出一个估计运行时间最短的进程为之分配资源,直到运行结束或者被阻塞。 -
最高响应比优先:
响应比=响应时间/服务时间 -
优先级调度 :
根据进程的优先级进行调度,直到调度完。 -
时间片轮转调度算法 :
每个进程都运行时间片的时间,进行遍历执行。 -
多级反馈队列调度算法 :
公认最好调度算法:既能使高优先级作业得到响应,又能使短作业迅速完成。
多级优先对列,高优先级低时间片,然后先处理高优先级消耗完时间片,然后处理次优先级时间片。
2.8 什么是死锁?
- 死锁是描述如下一种情况:
各进程相互等待对手的资源,导致进程堵塞,无法前进。
对不可剥夺资源的分配不合理,可能导致死锁。 - 死锁,饥饿和死循环的区别是是什么?
1)死锁:至少两个进程同时被阻塞 —操作系统解决
2)饥饿:只能是一个进程被阻塞 -----操作系统解决
3)死循环:可能只有一个。 ------出现bug,程序员解决 - 死锁产生的必要条件:
1)互斥:资源必须处于非共享状态,一次只能一个进程使用。
2)非抢占:资源不能够被抢占
3)占有并等待:进程至少占有一个资源,并等待另一个资源
4)循环等待:资源等待形成闭环
5)四个条件同时满足,才能够出现死锁。
2.9 如何解决死锁问题?
解决死锁问题的四种方法:
- 预防:不允许死锁发生;静态:预防死锁;破坏死锁产生的四个必要条件
- 避免:不允许死锁发生;动态:避免死锁;避免系统进入不安全状态(银行家算法)
- 检测:允许死锁发生;死锁发生时,精确检测到与死锁发生的位置和相关资源
- 解除:允许死锁发生;与检测相互配合,将进程从死锁中释放出来
- 预防是避免四大条件发生,避免是利用四大条件,找出最合理的;
- 预防和避免是死锁不会发生;检测和解除是死锁发生后的操作。
- 避免中的银行家算法:通过试探分配进程的资源,通过安全性算法判断分配后系统是否处于安全状态。
3. 操作系统内存管理基础
3.1 操作系统的内存管理主要是做什么?
主要是完成内存的分配与回收;地址的转换;内存空间的扩充和存储保护。
- 内存的分配,回收:malloc函数,申请内存;free函数,释放内存
- 地址转换:逻辑地址转变为物理地址。
- 内存空间的扩充:虚拟存储技术或者自动覆盖技术
- 存储保护:各道作业在各自存储空间运行,互不干扰。
3.2 常见的内存管理机制
内存管理分为两个大类,四个小类:
1)连续分配管理方案:单一连续,固定分区和动态分区
2)非连续分配管理方案:基本分页管理;基本分段管理和段页式管理;
- 块管理:将内存分为固定的块,进程/作业连续存储;
- 基本分页管理:把内存分为若干块,进程也分为对应大小的块。提高内存利用率;页表对逻辑地址和物理地址
- 基本分段管理:分页管理,每一页没有具体意义,分段管理赋予每一段具体意义(主程序段,子程序段等),通过段表对应逻辑地址与物理地址。
- 基本段页管理:把主存先分段,再分页,结合两者的优点
3.3 什么是快表和多级页表?
3.4 分页机制和分段机制的共同点和区别?
3.5 逻辑(虚拟)地址和物理地址的区别?
3.6 CPU 寻址了解吗?为什么需要虚拟地址空间?
4. 虚拟内存
4.1 什么是虚拟内存?
4.2 什么是局部性原理
4.3 什么是虚拟存储器
4.4 虚拟内存的实现技术
4.5 页面置换算法
版权声明
本文为[白马非马·]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_42974034/article/details/124258387
边栏推荐
- 不同时间类型的执行计划计算
- ThreadGroup ThreadGroup implémente l'interface threadfactory en utilisant la classe Introduction + Custom thread Factory
- Easyexcel读取excel表地理位置数据,按中文拼音排序
- findstr不是内部或外部命令解决方法
- 如何快速批量创建文本文档?
- Can I compile the header file and source file of the template separately
- 报表FCRA考试题集及答案(错了11题)
- 微信小程序客服接入,实现发送和接收消息
- 帆软实现分页时第一行和最后两行冻结方式
- 关于Jmeter启动闪退问题
猜你喜欢
MySQL数据库讲解(八)
Wechat applet positioning and ranging through low-power Bluetooth device (2)
金融行业云迁移实践 平安金融云整合HyperMotion云迁移解决方案,为金融行业客户提供迁移服务
OpenStack如何跨版本升级
关于NodeJS中JSON5的相关配置和使用
回顾2021:如何帮助客户扫清上云最后一公里的障碍?
About the configuration and use of json5 in nodejs
什么是云迁移?云迁移的四种模式分别是?
VMWare安装64位XP中文教程
查询2013年到2021年的数据,只查询到2020的数据,遇到了这个问题所进行的解决办法
随机推荐
帆软实现一个单选按钮,可以统一设置其他单选按钮的选择状态
百度图片识别自定义实现(替代AipOcr)
云容灾是什么意思?云容灾和传统容灾的区别?
星界边境文本自动翻译机使用说明
gzip和gunzip 解压参数详解
Wechat applet input hidden and inoperable settings
Subscription number development of wechat applet (message push)
mysql 5.1升级到5.610
Use of WiFi module based on wechat applet
Recyclerview advanced use (II) - simple implementation of vertical drag and drop sorting
Easyexcel读取excel表地理位置数据,按中文拼音排序
按实际取,每三级分类汇总一次,看图知需求
MYSQL 主从同步避坑版教程
01-NIO基础之ByteBuffer和FileChannel
MySQL数据库讲解(八)
postman批量生产body信息(实现批量修改数据)
JDBC详解
01-nio basic ByteBuffer and filechannel
返回数组排序后下标
Wechat applet obtains login user information, openid and access_ token