操作系统面试问题(4)

32.什么是操作系统

操作系统是一种管理硬件和软件的应用程序 。也是运行在计算机中最重要的软件 。它为硬件和软件提供了一种中间层 ,让我们无需关注硬件的实现 ,把心思花在软件应用上。

通常情况下,计算机上会运行着许多应用程序,它们都需要对内存和CPU进行交互,操作系统就是为了保证这些交互能够准确运行。

33.操作系统的主要功能

进程管理:在单核处理器下,操作系统只需给每个进程一个任务,管理起来很简单。而在多核处理器下,又要为进程分配任务,又要管理处理器的调度、分配、回收。

内存管理:操作系统要管理内存的分配、回收。在进程需要的时候分配内存,进程完成后回收内存,协调内存资源,通过合理的页面置换算法进行页面的换入换出。

设备管理:根据确定的设备分配原则对设备进行分配,使设备和主机能够并行工作。

文件管理:有效管理文件存储空间,让文件访问和文件保护更有效。

提供用户接口:使用户能够通过应用程序发起系统调用操控硬件。

34.操作系统的目的

(1)管理计算机资源,包括CPU、内存、磁盘、打印机

(2)提供图形界面,以供用户操控硬件

(3)为其他软件服务,操作系统与软件交互,为其分配资源。

35.为什么Linux系统下的应用不能在Windows下运行

最本质的原因就是格式不同和API不同,Linux的API指的是系统调用,而Windows的API指的是DLL,这是一个库,里面包含代码和数据。

36.陷入内核

​"陷入内核"(Trap into Kernel)​ ​ 是操作系统中的一种关键机制,指​​用户态程序主动或被动触发切换至内核态​ ​,由操作系统内核接管执行权限的过程。其核心目的是​​安全地访问受保护的硬件或系统资源​​。

38.用户态和内核态

内核态:特权级为0,处于内核态的CPU可以访问任意数据,可以从一个程序切换为另一个程序,并且不会发生抢占情况。

用户态:特权级为3,CPU只能访问受限的内存,不允许访问外围设备(如网卡、硬盘),CPU不允许独占,能够被其他程序获取。

39.用户态和内核态的切换

  1. ​用户程序调用glibc库​

    • glibc作为标准库,封装了系统调用的关键API(如open()write())。
    • 根据CPU体系结构(如ARM/x86)和应用程序二进制接口(ABI)设置参数。
  2. ​触发模式切换​

    • glibc调用​软件中断指令(SWI)​ ,触发特权级切换:
      • 更新​CPSR寄存器​ (ARM架构),将CPU模式改为​超级用户模式​(内核态)。
      • 跳转到固定地址 ​0x08​(ARM的异常向量表入口)。
  3. ​内核态处理​

    • 从地址0x08开始执行​中断处理程序​ (ARM中为vector_swi()):
      • 从SWI指令中提取​系统调用号(SCNO)​
      • 以SCNO为索引,查系统调用表sys_call_table,跳转到对应的内核函数(如sys_write)。
  4. ​返回用户态​

    • 系统调用执行完成后:
      • 恢复用户模式的寄存器状态。
      • CPU切换回​用户模式​,程序继续执行。

40.什么是内核

内核是操作系统的​​最核心程序​ ​,直接控制计算机所有硬件和软件资源,是Bootloader完成初始化后加载的第一个程序​​。

引导加载程序(Bootloader)​
  • ​定义​ :负责将操作系统内核从磁盘​加载到内存​的小型程序。
  • ​工作流程​
    1. ​硬件启动​:电源通电或重启时,BIOS执行硬件自检(POST)。
    2. ​定位Bootloader​ :BIOS读取磁盘的​主引导记录(MBR)​或UEFI查找ESP分区中的引导程序。
    3. ​加载内核​ :Bootloader将内核镜像(如Linux的vmlinuz)从磁盘载入内存,并移交控制权。
启动流程全貌​
  1. ​BIOS​ → 2. ​Bootloader(MBR/ESP)​ → 3. ​内核加载​ → 4. ​操作系统初始化​
相关推荐
Lee川6 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川9 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i11 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有11 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有12 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫13 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫13 小时前
Handler基本概念
面试
Wect13 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼14 小时前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼14 小时前
Next.js 企业级落地
前端·javascript·面试