Firefox OS启动过程分析-nuwa创建新进程
来源:互联网 发布:图片大小修改软件 编辑:程序博客网 时间:2024/06/06 08:47
本节讲述nuwa是如何创建一个新进程的。
在Firefox OS启动过程分析-nuwa进程启动中,我们了解到,当b2g进程创建nuwa进程时,在收到nuwa进程ready事件后,就会直接创建一个空壳进程。方便日后要启动的程序直接使用该空壳进程。
那么,如果该空壳进程已经被占用,又要启动新的程序,新的空壳进程是如何被系统创建的呢?
js::jit::DoCallFallback() (js/src/jit/BaselineIC.cpp) | |-js::Invoke() (js/src/vm/Interpreter.cpp) | |-js::RunScript() | |-Interpret() | |-js::Invoke() | |-CallJSNative() (js/src/jscntxtinlines.h) | |-mozilla::dom::GenericBindingMethod() (dom/bindings/BindingUtils.cpp) | |-mozilla::dom::NodeBinding::appendChild() (NodeBinding.cpp) | |-AppendChild() (dom/base/nsINode.h) | |-InsertBefore() | |-nsINode::ReplaceOrInsertBefore() (dom/base/nsINode.cpp) | |-mozAutoDocUpdate::~mozAutoDocUpdate() (dom/base/mozAutoDocUpdate.h) | |-nsHTMLDocument::EndUpdate() (dom/html/nsHTMLDocument.cpp) | |-nsDocument::EndUpdate() (dom/base/nsDocument.cpp) | |-nsDocument::MaybeInitializeFinalizeFrameLoaders() | |-MaybeInitializeFinalizeFrameLoaders () | |-nsFrameLoader::ReallyStartLoading() (dom/base/nsFrameLoader.cpp) | |-nsFrameLoader::ReallyStartLoadingInternal() | |-nsFrameLoader::TryRemoteBrowser() (dom/base/nsFrameLoader.cpp) | |-mozilla::dom::ContentParent::CreateBrowserOrApp() (dom/ipc/ContentParent.cpp) | |-mozilla::dom::ContentParent::GetNewOrPreallocatedAppProcess() | |-mozilla::PreallocatedProcessManager::Take () (dom/ipc/PreallocatedProcessManager.cpp) | |-GetSpareProcess() | |-mozilla::dom::ContentParent::ForkNewProcess() | |-mozilla::dom::NuwaParent::ForkNewProcess() (dom/ipc/NuwaParent.cpp)
从代码上看,由于运行一个应用其实就是由b2g进程在system窗口中加载一个iframe,一步步调用到
ContentParent::CreateBrowserOrApp(),
在随后的:
ContentParent::GetNewOrPreallocatedAppProcess()
中,b2g进程会去PreallocatedProcessManager中获取下空壳进程,由于没有空壳进程(即mSpareProcesses为空),会调用
NuwaParent::ForkNewProcess
以便发送”SendFork”命令,去创建一个新的空壳进程。
PreallocatedProcessManager::Take() | |-GetSpareProcess() | |-ContentParent::ForkNewProcess() | |-NuwaParent::ForkNewProcess()
ContentParent::ForkNewProcess(aBlocking),
其中,aBlocking可以取false(不用等待空壳进程创建完毕)或true(需要等待空壳进程创建完毕)。
b2g进程需要保证当前系统中一直存在一个空壳进程。
该空壳进程的创建时机是 - 当nuwa进程ready时 - 当前有空壳进程,被占用后 - 当前无空壳进程,b2g阻塞模式创建一个空壳进程后
分析完b2g进程、nuwa进程以及空壳进程后,我们在下篇文章中再分析下Firefox OS是如何加载第一个程序的。
0 0
- Firefox OS启动过程分析-nuwa创建新进程
- Firefox OS启动过程分析-nuwa进程启动
- Firefox OS启动过程分析-b2g进程启动(序)
- Firefox OS启动过程分析-b2g进程启动
- Firefox OS启动过程分析-序
- Firefox OS启动过程分析-system应用启动
- Firefox OS启动过程分析-Shell入口
- Service启动过程and新进程创建全过程源码分析
- OS应用程序的启动过程和进程的创建
- 分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程(Linux)
- 分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程
- vlfeat--caltech101.m个人注释
- 内核导言之进程概述
- 第十一章 散列表
- MyBatis 通过包含的jdbcType类型
- ubuntu virtualbox 无缝模式变灰了
- Firefox OS启动过程分析-nuwa创建新进程
- 密码学基本知识
- java MD5加密
- bug调试的教程
- 彻底搞定C指针-函数名与函数指针
- REST简介
- hadoop误删PID文件
- Intelligence test(test)题解
- [Effective Java]第三话:使用私有构造方法或者枚举来实现单例