嵌入式操作系统

嵌入式操作系统

2025 南京大学《操作系统原理》
嵌入式操作系统

嵌入式系统

“Embedded”: 计算机系统是 “嵌入” 到设备中的

  • 人造卫星、工业控制、家用电器、医疗器械、穿戴设备……
  • 体积小、功耗低、可靠性高
    • 操作系统通常更简单 (领域限定);但 Linux 也是可以的

例子:PLC (Programmable Logic Controller) 和工控

center

2025 南京大学《操作系统原理》
嵌入式操作系统

典型设计:Event-based

通常有实时 (real-time) 保障

  • 严格的时间限制内对外部事件作出可预测响应
  • 例子:无论车机多花哨,最终实时控制的仍然是 MCU

center

(还记得伤人性命的并发 bug 吗?)
2025 南京大学《操作系统原理》
嵌入式操作系统

例子:FreeRTOS

A FreeRTOS application will start up and execute just like a non-RTOS application until vTaskStartScheduler() is called.

BaseType_t xTaskCreate(
    TaskFunction_t pvTaskCode, // 函数指针
    const char * const pcName, // 名称
    const configSTACK_DEPTH_TYPE uxStackDepth, // 堆栈深度
    void *pvParameters,      // 参数
    UBaseType_t uxPriority,  // 任务优先级
    TaskHandle_t *pxCreatedTask);  // 返回句柄
  • (和 thread.h 里的 spawn 差不多)
    • Task 是死循环
    • 操作系统按优先级唤醒 block 的 tasks (高优先级抢占)
    • 没有 hard real-time; 但优先级能实现控制
2025 南京大学《操作系统原理》
嵌入式操作系统

优先级带来的麻烦

def jyy():
    set_priority(1)
    mutex_lock(restroom_lock)

def 马院长():
    set_priority(10)
    long_work()

def 校长():
    set_priority(100)
    mutex_lock(restroom_lock)

如果只有一个处理器

  • jyy 在持有互斥锁的时候被中优先级进程赶下了处理器……
  • “优先级反转 (Priority Inversion)”
2025 南京大学《操作系统原理》
嵌入式操作系统

这个 “事故” 曾经在火星上发生过

center

Sojourner “探路者” (PathFinder),1997 年 7 月 4 日登陆火星
2025 南京大学《操作系统原理》
嵌入式操作系统

“The First Bug on Mars”

登上火星的计算机系统

  • Lander (登陆舱)
    • IBM Rad6000 SC (20 MIPS), 128 MiB RAM, 6 MiB EEPROM
  • Rover (火星车)
    • Intel 80C85 (0.1 MIPS), 512K RAM, 176K Flash
  • VxWorks “实时” 任务操作系统
2025 南京大学《操作系统原理》
嵌入式操作系统

The First Bug on Mars (cont'd)

center

  • (低优先级) select → pipeIoctl → selNodeAdd → mutex_lock
  • (高优先级) pipeWrite → mutex_lock
2025 南京大学《操作系统原理》