69-70 - 进程创建的优化设计
创始人
2025-05-28 17:13:26

---- 整理自狄泰软件唐佐林老师课程

查看所有文章链接:(更新中)深入浅出操作系统 - 目录

文章目录

  • 1. 当前进程创建方案
    • 1.1 当前方案的缺陷
    • 1.2 缺陷分析
  • 2. 优化设计思路
    • 2.1 深入理解程序(App)与任务(Task)
    • 2.2 优化设计实现
    • 2.3 编程实验:进程创建的优化设计 - 创建AppMain任务
    • 2.4 动态任务创建:完成RegApp()系统调用实现
      • 2.4.1 RegApp()系统调用的实现
      • 2.4.2 AppInfoToRun()内核函数的实现
      • 2.4.3 编程实验:RegApp()系统调用实现
  • 3. 再论生产者消费者问题
    • 3.1 一种多任务程序设计模式
    • 3.2 编程实验:示例重构
  • 4. 小结

1. 当前进程创建方案

在这里插入图片描述
Task模块(内核)直接调用 App模块(应用)中的函数,获取创建任务所需要的数据信息

1.1 当前方案的缺陷

  • 可创建的 任务总数有限(最多16个)
  • 应用程序入口函数 AppMain()在内核态被调用
  • 内核为了创建任务 必须直接调用应用层函数
  • 使用RegApp()动态创建任务 存在临界资源竞争问题

1.2 缺陷分析

在这里插入图片描述

在这里插入图片描述

2. 优化设计思路

  1. AppMain() 作为任务入口函数调用(第1个用户任务
  2. RegApp() 实现为 系统调用(无需用户态全局变量支持)
  3. 在内核中 增加 gAppToRun队列,保存需要执行的应用信息
  4. RegApp()系统调用将应用信息保存到gAppToRun队列
  5. 内核Task模块根据gAppToRun队列中的信息创建任务

2.1 深入理解程序(App)与任务(Task)

  • 程序是静态的代码,仅占用存储空间,不一定被执行
  • 任务是程序的一次执行,占用处理器资源和内存资源
  • 一个任务通常只对应一个程序(可能涉及多个程序)
  • 一个程序可以被用于创建多个任务

2.2 优化设计实现

在这里插入图片描述

2.3 编程实验:进程创建的优化设计 - 创建AppMain任务

【参看链接】:69-70 - 进程创建的优化设计 / 69

在这里插入图片描述

2.4 动态任务创建:完成RegApp()系统调用实现

在这里插入图片描述

2.4.1 RegApp()系统调用的实现

在这里插入图片描述

2.4.2 AppInfoToRun()内核函数的实现

在这里插入图片描述

2.4.3 编程实验:RegApp()系统调用实现

【参看链接】:69-70 - 进程创建的优化设计 / 70 / 00优化设计

在这里插入图片描述

3. 再论生产者消费者问题

  • 为什么是ProducerA创建互斥锁和做相关初始化?

在这里插入图片描述

  • ProducerA创建的互斥锁谁负责销毁?

在这里插入图片描述

3.1 一种多任务程序设计模式

在这里插入图片描述

3.2 编程实验:示例重构

【参看链接】:69-70 - 进程创建的优化设计 / 70 / 01示例重构

  • RunDemo1()

在这里插入图片描述

  • RunDemo2()

在这里插入图片描述

4. 小结

  • 应用层入口函数需要在用户态被调用
  • 应用与内核的交互模式是:应用请求内核提供所需功能
  • 任务通过系统调用RegApp() 启动新任务执行
  • 程序是静态的代码,任务是动态的执行,两者不同
  • 通过等待机制可实现多任务程序设计模式

相关内容

热门资讯

没有人看好美股,但所有人的钱都... 2026年开年这波行情,不少人应该有体感。上证指数1月涨了3.76%,科创50涨超12%,沪深全市场...
AI颠覆式交易抛售潮下,美股科... 今年原本应该是预期中美股首次公开募股(IPO)的爆发之年。然而,对人工智能(AI)的担忧却破坏了这一...
50亿搅局,刘强东如何把游艇价... 游艇行业以一种意想不到的方式进入了大众视野。2月24日,京东集团创始人刘强东以个人名义创立的独立游艇...
太空光伏:万亿蓝海还是概念泡沫... 文丨承承 编辑丨李壮2026年初太空光伏概念股逆势大涨,但行业基本面仍处寒冬。技术瓶颈与商业化距离仍...
我把阿福带回家,70岁爸妈有了... 与阿福对话。我把阿福带回家,70岁爸妈有了AI朋友大巴车颠簸了几个小时,终于缓缓停在熟悉的小镇站台,...