ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

操作系统面试题

操作系统面试题 1. 进程和线程之间的区别是什么进程操作系统资源分配的最小单位。每个进程拥有独立的地址空间、文件描述符、堆等资源进程之间默认隔离。创建进程开销大要分配内存、建立页表。线程进程内部的执行调度单元CPU调度的最小单位。一个进程至少有1个主线程同一个进程内所有线程共享进程的虚拟地址空间、全局变量、文件句柄但每个线程有自己独立栈、寄存器。区别总结资源进程资源独立同进程线程共享资源开销进程创建/切换开销大线程切换开销小不用切换页表隔离进程相互隔离同一个进程线程不隔离一个线程崩溃大概率干掉整个进程通信进程间通信麻烦IPC线程直接读写共享变量即可要加锁类比进程独立公寓线程公寓里的打工人。公寓之间墙隔开同一个公寓里所有人共用客厅但每个人有自己的小书桌栈。2. 进程之间互相隔离是怎么实现的依靠MMU内存管理单元 页表 虚拟地址空间硬件操作系统配合。OS给每个进程分配一套独立的虚拟地址空间并且为每个进程维护单独的页表。CPU访问内存时MMU硬件自动把虚拟地址翻译成物理地址翻译规则就是当前进程的页表。切换进程的时候OS会切换页表基址寄存器MMU就会使用新进程的页表。A进程的虚拟地址只会映射到A进程允许访问的物理内存A进程的页表里没有B进程物理内存的映射项。 如果进程尝试访问没有映射的虚拟地址触发缺页异常/段错误操作系统直接杀死进程。简单说每个进程有自己单独的地址翻译手册页表看不到别人的物理内存。3. 虚拟地址和物理地址有什么不一样物理地址内存条硬件真实地址是内存芯片的编号只有CPU硬件能直接访问。所有进程共用同一块物理内存。虚拟地址程序代码、指针看到的地址是操作系统抽象出来的地址不是真实内存地址。每个进程都拥有一套完整独立的虚拟地址空间。核心差异虚拟地址进程视角每个进程都觉得自己独占整块内存不同进程可以有相同虚拟地址但映射到不同物理内存。物理地址硬件视角全局唯一。转换每次内存读写MMU自动把虚拟地址翻译成物理地址。例子进程A和进程B里都有指针指向0x1000这个虚拟地址但是经过MMU翻译指向两块完全不同的物理内存互不干扰。4. 什么是虚拟内存应用能看到/使用的虚拟内存有上限吗虚拟内存虚拟内存是OS利用物理内存 磁盘交换分区swap实现的内存抽象机制。 核心两点给每个进程提供独立、连续的虚拟地址空间程序不用关心物理内存碎片化。内存不够的时候把暂时不用的内存页写到磁盘swap需要的时候再换回物理内存缺页中断。 好处进程隔离、内存复用、让程序可用内存大于实际物理内存。虚拟内存上限有上限上限由CPU的地址总线位数决定不是物理内存大小。32位进程虚拟地址空间上限 4GB。64位进程理论地址空间极大但操作系统会做限制不是完整2^64内核会截断一般是几十TB级别。注意区分虚拟地址空间上限 ≠ 物理内存大小也不等于swap大小。只是地址编号的最大范围。5. 进程间通信有哪些方式面试常用附带简单特点进程互相隔离不能直接访问对方内存必须用IPC机制管道匿名管道单向只能父子进程通信基于内核缓冲区用完销毁。命名管道FIFO文件形式无关进程也能通信单向。消息队列内核维护消息链表可以收发带类型消息支持多个进程读写内核持久不读还在。共享内存最快IPC。直接映射同一块物理内存到多个进程虚拟空间没有内核拷贝缺点没有同步机制需要配合信号量。信号量不是传数据是同步互斥工具保护共享资源。信号简单异步通知传递少量信息比如kill发信号终止进程。Socket网络套接字本机或者跨机器进程都能通信。面试精简记忆管道、FIFO、消息队列、共享内存、信号量、信号、socket。6. 共享内存是怎么做到让两个进程共享一块内存的共享内存本质同一块物理内存页挂载到多个进程各自的虚拟地址空间里。 流程某个进程调用系统调用向操作系统申请一块共享内存OS在物理内存分配物理页并且在内核维护这个共享内存对象。进程A调用挂载接口OS在A进程的页表增加映射A的某个虚拟地址 → 这块共享物理内存。进程B同样调用挂载接口OS在B进程的页表新增映射B的某个虚拟地址 →同一个物理内存。之后A、B读写自己对应的虚拟地址就直接读写同一块物理内存数据不需要在内核缓冲区拷贝速度最快。重点共享内存本身不带锁多个进程同时读写会有竞态问题一般搭配信号量使用。7. 两个进程访问系统分配的内存必须访问同一个地址吗虚拟内存地址也要相同吗不需要虚拟地址不需要相同。分两种场景普通私有内存A进程虚拟地址0x2000B进程虚拟地址也可以是0x2000但页表映射到不同物理内存互相独立。地址只是进程本地的编号。共享内存底层物理内存是同一块。但是进程A映射到虚拟地址0x300000进程B完全可以映射到0x500000。两个进程用不一样的虚拟地址但是MMU翻译后指向同一个物理内存。一句话总结虚拟地址是进程局部编号物理地址才是全局唯一编号。共享内存只要求物理页相同虚拟地址可以各自随便选。8. 虚拟机和容器的区别一句话概括虚拟机是套完整的操作系统容器只是打包应用和依赖共用宿主机内核。1. 原理差异虚拟机VM如VMware、KVM虚拟化硬件。Hypervisor 在物理机之上虚拟出 CPU、内存、磁盘每个 VM 都独立安装完整操作系统Linux/Windows有自己独立内核。容器Docker、containerd虚拟化操作系统层。不虚拟硬件共享宿主机的内核靠 Linux 的 Namespace隔离资源 Cgroup限制资源实现隔离没有独立内核。2. 对比表对比项虚拟机容器内核每个实例独立内核共用宿主机内核镜像大小GB级别带完整OSMB级别只打包程序依赖库启动速度分钟/数十秒秒级甚至毫秒资源开销大OS本身占用大量内存CPU轻量几乎只有应用本身开销隔离强度强硬件级隔离一个VM崩不影响其他弱于VM内核共享宿主机内核漏洞会影响所有容器移植性差依赖虚拟化平台很好一次打包到处运行典型场景需要完整独立OS、不同内核版本、Windows虚拟机微服务、CI/CD、批量部署应用3. 形象比喻虚拟机一栋独立房子自带水电、地基每套房子一套完整设施。容器公寓里的单间。地基和大楼水电内核共用房间之间做隔断只放自己家具程序和依赖。4. 常见误区❌ 容器 轻量虚拟机 ✅ 不是没有独立内核是本质差别。❌ 容器完全安全隔离 ✅ 隔离是进程级。如果宿主机内核被攻破所有容器都可能受影响多租户强隔离场景优先虚拟机。❌ Windows容器可以跑Linux程序 ✅ Windows容器只能WindowsLinux容器只能Linux内核不能跨。5. 怎么选要不同操作系统/内核、高安全隔离 →虚拟机批量部署微服务、快速启停、节省资源、CI流水线 →容器
返回列表