当前位置: 首页 > news >正文

操作系统八股题

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
Bootloader100-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 是人为给它的“天花板”。

http://www.dtcms.com/a/329815.html

相关文章:

  • Mysql——如何做到Redolog崩溃后恢复的
  • “PDA采集→WMS智慧化分析→AGV执行”全链路管理的仓储系统
  • Qwen大模型加载与文本生成关键参数详解
  • I2c、SPI、USB驱动架构类比
  • Torch -- 卷积学习day1 -- 卷积层,池化层
  • 第四十四天:动态规划part11(第九章)
  • 存量竞争下的破局之道:品牌与IP的双引擎策略|创客匠人
  • scrapy 爬虫
  • sqli-libs通关教程(51-65)
  • YOLOv11+TensorRT部署实战:从训练到超高速推理的全流程
  • 【后端】Spring框架控制反转(IoC)与依赖注入(DI)解析
  • 从零用 NumPy 实现单层 Transformer 解码器(Decoder-Only)
  • 《红黑树驱动的Map/Set实现:C++高效关联容器全解析》
  • 基于微信小程序的生态农产销售管理的设计与实现/基于C#的生态农产销售系统的设计与实现、基于asp.net的农产销售系统的设计与实现
  • Ubuntu24.04桌面版安装wps
  • 深入分析Linux文件系统核心原理架构与实现机制
  • RS485转profinet网关接M8-11 系列 RFID 读卡模块实现读取卡号输出
  • 元数据与反射:揭开程序的“自我认知”能力
  • 【递归、搜索与回溯算法】穷举、暴搜、深搜、回溯、剪枝
  • 第七章:OLED温湿度显示系统
  • 数据库连接池如何进行空闲管理
  • 光伏板横铺VS竖铺,布局决定发电量!
  • MySQL数据库知识体系总结 20250813
  • iOS混淆工具有哪些?数据安全与隐私合规下的防护实践
  • [ai]垂直agent|意图识别|槽位提取
  • 基于Tensorflow2.15的图像分类系统
  • MySQL三大存储引擎对比:InnoDB vs MyISAM vs MEMORY
  • 【Unity3D】Spine黑线(预乘问题)、贴图边缘裁剪问题
  • Effective C++ 条款39:明智而审慎地使用private继承
  • RabbitMQ:Windows版本安装部署