【面试】操作系统

本文详细探讨了Linux操作系统,包括常用命令如查看内存占用、端口和IP地址,以及进程通信和内存管理。讲解了进程、线程、协程的区别,重点解析了进程间通信的十二种方式,尤其是共享内存的实现。还涵盖了虚拟内存和物理内存的原理,以及用户态和内核态的切换与作用。此外,文章还讨论了IO模型和调度策略。

一、Linux常用命令

命令功能补充
cd切换目录-
ls -lht查看文件大小du -sh * :可查看文件/文件夹大小
vim编辑文件:% s / old / new / g :将整个文件old替换为new
move移动文件或目录,或更改名称-
mv重命名或移动目录-
tail查看(正更新)文件尾部-
sed处理文本,具体有增删、替换打印等动作-
ps显示进程状态ps -aux | grep tomcat 查看所有tomcat进程
top显示进程信息,如CPU、内存占用率top -u userIdtop -p PID
netstat观察端口-
df显示磁盘使用-
lsof进程打开文件(夹)信息-
kill杀死端口kill -9 PIDsudo kill 3068

1、Linux查看内存占用【判断进程死循环(*2)】、端口占用、IP地址,用什么命令行发信号?

  • 内存:topps aux | more
  • 端口:sudo lsof -i: testPortnetstat -ap | grep testPort
  • IP:ip addr show / ifconfig
  • 发信号:kill

2、Linux运行命令方式?

方式具体补充
shsh test.sh无需执行权限
././test要执行权限
.. test.shsource test.sh目录增加至Linux path,要执行权限。

3、进程启动方式

system()、exec()、fork()

二、进程

1、进程、线程、协程概念及差异

2、进程间通信种类(*12)

  • 方式:管道(匿名管道、有名管道)、消息队列、信号量、信号、共享内存、套接字

追问1:最快的是哪种?(*2)怎么实现?

  • (1)共享内存
  • (2)不能直接共享,要映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。

3、进程和线程的通信方式对比?(*4)

进程通信线程通信
简介数据和地址空间的独立性决定其通信比较复杂,要通过操作系统。多线程共享地址空间和数据空间,所以可以直接通信,而不必通过操作系统 – 即内核调度。
方式管道
消息队列
信号量
信号
共享内存
套接字
[ 重点 ]
锁机制(互斥锁、条件变量、读写锁)
信号量机制(Semophore)
信号机制(Signal)

三、内存

1、分段分页含义?

分段:分配连续完整的内存,然后将虚拟内存地址映射为物理内存地址的方法。
分页:分段导致外部内存碎片和交换空间太大,为了让交换写入数据更少,出现了内存分页。和分段相比,分页把(虚拟/物理)整块内存切成一段段固定尺寸的大小内存存储单元,减少了内存碎片的大小。

追问1:为什么分段?(*2)

分段引入主要扩大了内存地址,程序地址不再需要原始硬编码,程序调试更简便。
把虚拟地址空间的虚拟内存组织成一些长度可变的内存块单元

追问2:为什么分页?(*2)

分段内存碎片太大,因此提出了分页,用大小相同的页替换大小不同的段。

  • 划分颗粒度更小,然后通过映射将虚拟地址映射为物理地址,映射关系是通过页表实现的。最后将逻辑上连续线性地址转换为可不连续的物理地址,。

2、虚拟内存和物理内存(*6)理解、作用、联系?

虚拟内存地址Virtual Memory Address):指令里用到的内存地址。
定义的虚拟地址空间是连续,使程序编写难度降低。因为每个进程都提供了一个一致的、私有的、连续完整的地址空间,让每个进程都产生了一种自己在独享主存的错觉。
物理内存地址Physical Memory Address):实际在内存硬件里面的空间地址,它是真实的物理地址

追问1:什么时候进行交换?

物理内存不足时,会将最近最少频率使用的页框移出物理内存,放到存储空间(swap分区)。

追问2:不使用虚拟内存可能会出现什么问题?

  • 1)进程地址空间不隔离。有Bug/恶意的程序修改其它程序的内存数据,会导致其它程序运行异常。
  • 2)内存使用效率低。可能有大量的内存数据频拷贝到硬盘,释放空间给另一个程序使用,效率释放低下。
  • 3)程序运行的地址不确定。当内存剩余空间满足程序要求,系统会随机分配一段连续空间,因为随机分配,所以运行地址不确定。

追问3:虚拟内存如何转换为物理地址?

页号+偏移量:通过虚拟页号找到物理内号,再加上偏移量就得到了物理内存地址。

3、地址变换高速缓冲/快表 - TLB(Translation lookaside buffer)的作用?

存储当前最可能被访问到的页表项,是部分页表项的一个副本,减少了因MMU导致的处理器性能下降。

4、用户态和内核态的含义、区别?

  • 内核态:控制计算机的硬件资源,并提供上层应用程序运行的环境,特权级是Ring0
  • 用户态:上层应用程序活动空间,执行依托于内核提供资源。特权级指令是Ring3.
补充:CPU指令分为**特权指令和非特权指令**。特权指令从高到低分为Ring0-Ring3级。

追问1:用户态切换到内核态的方式有几种?

  • 1)系统调用(软中断):用户态通过系统调用申请操作系统提供服务完成工作。
  • 2)异常:执行用户态程序时发生异常会触发处理异常的内核相关程序,如缺页异常。
  • 3)外围设备(硬)中断:当外围设备完成用户请求操作,向CPU发出中断信号,这时CPU会转去执行对应处理程序。
    如果先前执行指令是用户态下,自然切换到内核态,如硬盘读写完成,系统切换到读写中断处理程序执行后续操作

追问2:系统调用是什么?

操作系统中的最小功能单位。让上层应用通过接口访问内核,提供资源。

四、调度(进程、内存)

1

五、IO模型

1、五种IO模型是什么?

IO模型含义问题
BIO应用程序进程在发起IO调用后至内核执行IO操作返回结果之前,发起系统调用的线程一直处于等待状态。用户进程被阻塞,浪费性能
NIO进程在发起IO调用后至内核操作返回结果之前,若发起系统调用不会等待,而是立即返回。频繁轮询导致无效系统调用。并发量大时,浪费严重。
IO多路复用之select/poll内核提供系统调用,支持一次查询多个系统调用的可用状态。本质是内核存在无效循环遍历
1)内核和用户空间存在大量数据拷贝。
2)内核空间遍历无效IO状态。
IO多路复用之epoll基于事件驱动实现,变被动为主动。IO第一阶段 – 数据准备是阻塞的。
SIGIO在IO执行的数据准备阶段,不会阻塞用户进程。IO第二阶段 - 数据从内核复制到用户空间,用户进程还被阻塞。
AIO用户进程发出系统调用后立即返回,内核等待数据准备完成,然后将数据拷贝到用户进程缓冲区,再发信号告诉用户进程IO操作执行完毕。-

1
2
3

追问1、同步和异步的区别是什么?

同步:调用端一直等待服务端响应,直到返回结果;
异步:调用端调用后不会立刻返回,不会等待服务端响应。服务端通过通知机制或回调函数来通知客户端。

追问2、阻塞和非阻塞的区别是什么?

阻塞:服务端返回结果之前,客户端线程会被挂起,此时线程不可被CPU调度,线程暂停运行。
非阻塞:在服务端返回前,函数不会阻塞调用端线程,而会立刻返回。

4

2、select、poll、epoll区别?

SelectPollEpoll
操作方式遍历遍历回调
底层实现数组链表哈希表,红黑树-双向链表
IO效率线性遍历,时间复杂度 O ( n ) O(n) O(n)同select事件通知方式。
每当fd就绪,系统注册回到函数就会调用,将就绪fd放到rdllist(),时间复杂度O(1)
最大连接数1024(x86)或2048(x64)无上限无上限
fd拷贝每次调用都把fd集合从用户拷贝到内核空间同select调用epoll_ctl拷贝进内核并保存,之后每次epoll_wait不拷贝
触发方式水平触发水平触发EPOLLT(默认)模式是水平触发;
EPOLLET(高速)模式是边缘触发(一次)

六、其他

1、CPU执行模型
取指-译码-计算-回写

七、参考

1、【操作系统】Linux常用基础
2、【操作系统】进程间通信
3、【操作系统】虚拟页和物理页
4、【操作系统】用户态和内核态
5、【操作系统】IO模型
6、【操作系统】I/O多路复用网络模型
7、大厂面试爱问的「调度算法」,20 张图一举拿下
8、Linux下做性能分析6:理解一些基础的CPU执行模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值