2.1 操作系统 杂项
一、RTOS 和 Linux 最主要的区别
RTOS 采用基于优先级的抢占式调度算法,高优先级任务可以随时抢占低优先级任务的执行权,且调度算法的时间复杂度是确定的。需要的内存、处理资源较小,可靠性好。
Linux 的调度算法复杂,整体调度机制更侧重系统的整体性能和资源利用率。需要较多的资源,可靠性稍差。
二、系统调用的作用
系统调用是操作系统提供的接口,允许应用程序请求操作系统的服务。它们充当了应用程序与操作系统之间的桥梁,通过系统调用,应用程序可以执行一些只有内核态才能进行的特权操作,如文件读写、设备访问、网络通信、进程管理等。
三、系统调用流程
用户态调用标准库函数——切换到内核态——内核进行处理——返回到用户态
四、Linux 系统下一共 7 种文件类型
普通文件(-)——目录文件(d)——字符设备文件(c)——套接字文件(s)——块设备文件(b)——管道文件(p)——符号链接文件(l)
五、文件系统概念
文件系统(File System)是操作系统用来管理、存储和组织数据的一种机制和结构。它将物理存储设备(如硬盘、固态硬盘、USB 驱动器等)上的原始数据组织成文件和目录,并为用户和应用程序提供访问这些数据的接口。文件系统是存储介质的抽象层,为文件提供了管理、检索、访问控制等功能。
六、文件系统作用
存储管理——文件组织——文件访问控制——文件操作和管理——文件共享和备份
七、文件系统的工作原理
文件系统的工作原理可以通过几个关键概念来理解。
1、会把每个打开的文件映射到文件描述符,来追踪文件的打开状态。
2、文件系统借助目录来实现文件位置和层次结构管理,它存储着文件名以及指向文件实际位置的指针。
3、文件系统一般采用 块分配策略 来组织磁盘上的存储空间,决定数据在磁盘上的物理存储位置。
4、文件系统运用索引节点(inode)来描述文件的元数据,像权限、大小、创建时间、数据块位置等信息都包含其中,而实际的数据则存于数据块中,并且每个文件都有唯一的 inode。
八、常见的文件系统类型
- Ext4:Linux 常用的文件系统,支持大文件、高效存储和文件恢复。
- NTFS:Windows 系统的主要文件系统,支持大文件和高级功能如加密、压缩等。
- FAT32:早期的文件系统,支持多种操作系统,但对文件大小有较大的限制(最大 4GB)。
- HFS+:Mac OS 系统使用的文件系统,专为 Apple 设备优化。
- XFS:一种高性能的日志文件系统,适用于大容量存储。
九、Bootloader 的两个阶段
(1)预引导阶段(Pre-boot Stage):
- 第一阶段:该阶段也被称为硬件初始化阶段。在此阶段,Bootloader负责进行硬件初始化和基本系统设置。这包括检测和初始化处理器、内存、时钟、总线和其他外设的操作。
- 第二阶段:在此阶段,Bootloader负责加载第二阶段的Bootloader代码。此代码位于存储介质上(例如闪存、硬盘等),并负责执行更高级的系统配置和初始化,包括加载文件系统驱动程序等。这一阶段还可以提供用户界面、bootloader配置和固件升级等功能。
(2)操作系统加载阶段(Operating System Load Stage):
- 该阶段是引导加载程序加载并启动操作系统(通常是Linux内核)的阶段。Bootloader会加载操作系统内核的映像文件,并执行一系列操作,例如设置内核参数、初始化设备树等。然后,它将控制权转移到操作系统的入口点,使操作系统接管系统的控制和管理。
bootloader 将 linux 内核加载到内存的具体步骤:
- 硬件初始化:引导加载程序首先初始化系统的硬件环境,包括处理器、内存、外设等。
- 确定内核位置:引导加载程序根据配置文件或启动参数确定 Linux 内核在存储介质上的位置,通常是磁盘或闪存。
- 加载内核到内存:引导加载程序从存储介质读取 Linux 内核映像文件,并将其加载到内存中指定的地址。这时,内核映像通常还包括了压缩文件,需进行解压缩。
- 内核启动参数:引导加载程序可能会设置内核的启动参数(如内核调试模式、设备驱动等)。在某些情况下,引导加载程序还会根据配置文件修改内核映像的头部。
- 转交控制权:引导加载程序在加载完成后,将控制权交给内核,通常是内核的入口点(如start_kernel)。此时,Linux内核开始执行,系统开始进入内核模式。
十、用户态向内核态的切换
方式:系统调用(软中断)——硬件中断
代价:涉及上下文切换:保存和恢复 CPU 寄存器的状态;栈的切换;页表切换
一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。


