操作系统八股题
1.电脑从摁下开机键到所有程序运行好,这个过程都经历了什么?
这是一个典型的计算机系统启动过程问题,需要涵盖从硬件到软件的完整流程。我会分阶段说明,确保逻辑清晰。
详细步骤
1.硬件初始化阶段(按下电源键)
电源键触发主板电源管理芯片(PMIC),启动电源供应单元(PSU)向各组件供电
主板进行电源自检(Power Good信号),确认电压稳定后发送复位信号给CPU
CPU重置为初始状态,设置指令指针指向固件入口地址(如x86的0xFFFFFFF0)
2.固件阶段(BIOS/UEFI)
POST(加电自检):检测CPU、内存、显卡等关键硬件
硬件枚举:通过ACPI/PCIe协议识别所有连接设备
启动设备选择:按预设顺序从硬盘/SSD/USB等寻找启动扇区
MBR/GPT解析:加载硬盘第一个扇区(MBR)或EFI分区中的引导程序
3.引导加载阶段(Bootloader)
GRUB/Windows Boot Manager:接管控制权,显示启动菜单
内核加载:将操作系统内核(如Linux的vmlinuz或Windows的ntoskrnl.exe)加载到内存
初始化RAMDisk:加载initrd(Linux)或WinPE(Windows)提供临时根文件系统
4.内核初始化阶段
底层初始化:
设置CPU保护模式、分页机制
初始化中断描述符表(IDT)和全局描述符表(GDT)
驱动加载:
扫描PCIe总线加载存储控制器、显卡等驱动
通过ACPI获取硬件配置信息(如APIC中断路由)
启动第一个用户空间进程:Linux执行/sbin/init(PID 1),Windows启动wininit.exe
5.用户空间初始化阶段
系统服务启动:
Linux:根据/etc/systemd/system/default.target启动服务(如sshd、crond)
Windows:通过services.exe启动Win32服务(如RPC、Event Log)
图形界面初始化:
Linux:启动X11/Wayland服务,加载桌面环境(如GNOME)
Windows:启动winlogon.exe显示登录界面
用户会话阶段
登录验证:通过PAM(Linux)或LSA(Windows)验证用户凭据
6.用户环境初始化:
加载用户配置(.bashrc/注册表)
启动用户级守护进程(如gnome-keyring)
应用程序启动:执行.xinitrc或注册表Run键中的程序
关键技术点
UEFI Secure Boot:验证引导加载程序的数字签名
多核启动:主CPU启动后通过SIPI消息激活其他核心
C-State转换:CPU在空闲时进入节能状态(如C1/C3)
ASLR/KASLR:内核和用户空间的地址空间布局随机化
时间线示例(现代NVMe SSD系统)
阶段 | 耗时范围 |
---|---|
硬件自检 | 200-500ms |
Bootloader | 100-300ms |
内核加载 | 500-800ms |
用户空间启动 | 2-5s |
总计 | 3-7s |
2.计算机网络问题:在路由器的tcp协议的传输过程中,如果路由器的限定速度是20kb每秒,请问这是因为什么决定的上限?
20 kB/s 这个上限并不是“路由器里跑 TCP 协议”决定的,而是由人为策略(管制/整形)强加的一条速率阈值。真正起作用的只有两类机制:
1.流量整形(Traffic Shaping)
管理员在路由器出口接口上挂了一个 token-bucket 或 leaky-bucket 整形器:
bucket 大小 = burst(字节)
填充速率 = 20 kB/s
任何时刻 bucket 里没有足够 token 时,多余的分组就被缓存或丢弃,于是宏观速率被钳在 20 kB/s。
2.流量管制(Traffic Policing)
如果只是简单地“超过 20 kB/s 就立即丢包/标记”,那就是 policing,效果同样是 20 kB/s 上限。
这两类策略通过:
Linux TC(tc tbf、tc htb、tc police)
Cisco IOS 的 police / shape
MikroTik 的 Queue
OpenWrt 的 SQM/QoS
……等命令配置。
TCP 本身不会主动限速,它只是根据丢包/延迟信号调整拥塞窗口;20 kB/s 是人为给它的“天花板”。