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() 启动新任务执行
  • 程序是静态的代码,任务是动态的执行,两者不同
  • 通过等待机制可实现多任务程序设计模式

相关内容

热门资讯

分享实测“天天鄱阳麻将到底有挂... 您好:天天鄱阳麻将这款游戏可以开挂,确实是有挂的,需要软件加微信【69174242】,很多玩家在天天...
今日重大通报“哪吒重生到底能开... 您好:哪吒重生这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8700483】很多玩家在哪吒重生...
[实测讲解]“三哥玩真的有挂吗... 您好:三哥玩这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9951342】很多玩家在这款游戏中...
实测分享“皇后牛牛究竟有透视挂... 您好:皇后牛牛这款游戏可以开挂,确实是有挂的,需要软件加微信【4194432】,很多玩家在皇后牛牛这...
重磅来袭“顺意哪里有挂”真的有... 您好:顺意这款游戏可以开挂,确实是有挂的,需要了解加客服微信【3398215】很多玩家在这款游戏中打...