69-70 - 进程创建的优化设计

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

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

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() 启动新任务执行
  • 程序是静态的代码,任务是动态的执行,两者不同
  • 通过等待机制可实现多任务程序设计模式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uuxiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值