APP冷啟動(dòng)加載進(jìn)程線程內(nèi)存分配流程代碼

int __mac_execve(proc_t p, struct __mac_execve_args *uap, int32_t *retval)

{

? ? // 字段設(shè)置

? ? ...

? ? int is_64 = IS_64BIT_PROCESS(p);

? ? struct vfs_context context;

? ? struct uthread? *uthread; // 線程

? ? task_t new_task = NULL;? // Mach Task

? ? ...

? ?

? ? context.vc_thread = current_thread();

? ? context.vc_ucred = kauth_cred_proc_ref(p);

? ?

? ? // 分配大塊內(nèi)存,不用堆棧是因?yàn)?Mach-O 結(jié)構(gòu)很大绒净。

? ? MALLOC(bufp, char *, (sizeof(*imgp) + sizeof(*vap) + sizeof(*origvap)), M_TEMP, M_WAITOK | M_ZERO);

? ? imgp = (struct image_params *) bufp;

? ?

? ? // 初始化 imgp 結(jié)構(gòu)里的公共數(shù)據(jù)

? ? ...

? ?

? ? uthread = get_bsdthread_info(current_thread());

? ? if (uthread->uu_flag & UT_VFORK) {

? ? ? ? imgp->ip_flags |= IMGPF_VFORK_EXEC;

? ? ? ? in_vfexec = TRUE;

? ? } else {

? ? ? ? // 程序如果是啟動(dòng)態(tài)妹田,就需要 fork 新進(jìn)程

? ? ? ? imgp->ip_flags |= IMGPF_EXEC;

? ? ? ? // fork 進(jìn)程

? ? ? ? imgp->ip_new_thread = fork_create_child(current_task(),

? ? ? ? ? ? ? ? ? ? NULL, p, FALSE, p->p_flag & P_LP64, TRUE);

? ? ? ? // 異常處理

? ? ? ? ...

? ? ? ? new_task = get_threadtask(imgp->ip_new_thread);

? ? ? ? context.vc_thread = imgp->ip_new_thread;

? ? }

? ?

? ? // 加載解析 Mach-O

? ? error = exec_activate_image(imgp);

? ?

? ? if (imgp->ip_new_thread != NULL) {

? ? ? ? new_task = get_threadtask(imgp->ip_new_thread);

? ? }

? ? if (!error && !in_vfexec) {

? ? ? ? p = proc_exec_switch_task(p, current_task(), new_task, imgp->ip_new_thread);

? ?

? ? ? ? should_release_proc_ref = TRUE;

? ? }

? ? kauth_cred_unref(&context.vc_ucred);

? ?

? ? if (!error) {

? ? ? ? task_bank_init(get_threadtask(imgp->ip_new_thread));

? ? ? ? proc_transend(p, 0);

? ? ? ? thread_affinity_exec(current_thread());

? ? ? ? // 繼承進(jìn)程處理

? ? ? ? if (!in_vfexec) {

? ? ? ? ? ? proc_inherit_task_role(get_threadtask(imgp->ip_new_thread), current_task());

? ? ? ? }

? ? ? ? // 設(shè)置進(jìn)程的主線程

? ? ? ? thread_t main_thread = imgp->ip_new_thread;

? ? ? ? task_set_main_thread_qos(new_task, main_thread);

? ? }

? ? ...

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末排龄,一起剝皮案震驚了整個(gè)濱河市蜒灰,隨后出現(xiàn)的幾起案子吏垮,更是在濱河造成了極大的恐慌祈搜,老刑警劉巖缕减,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捞奕,居然都是意外死亡牺堰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門缝彬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)萌焰,“玉大人,你說(shuō)我怎么就攤上這事谷浅“歉” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵一疯,是天一觀的道長(zhǎng)撼玄。 經(jīng)常有香客問我,道長(zhǎng)墩邀,這世上最難降的妖魔是什么掌猛? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上荔茬,老公的妹妹穿的比我還像新娘废膘。我一直安慰自己,他們只是感情好慕蔚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布丐黄。 她就那樣靜靜地躺著,像睡著了一般孔飒。 火紅的嫁衣襯著肌膚如雪灌闺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天坏瞄,我揣著相機(jī)與錄音桂对,去河邊找鬼。 笑死鸠匀,一個(gè)胖子當(dāng)著我的面吹牛蕉斜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缀棍,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蛛勉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了睦柴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤毡熏,失蹤者是張志新(化名)和其女友劉穎坦敌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痢法,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狱窘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了财搁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蘸炸。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖尖奔,靈堂內(nèi)的尸體忽然破棺而出搭儒,到底是詐尸還是另有隱情,我是刑警寧澤提茁,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布淹禾,位于F島的核電站,受9級(jí)特大地震影響茴扁,放射性物質(zhì)發(fā)生泄漏铃岔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一峭火、第九天 我趴在偏房一處隱蔽的房頂上張望毁习。 院中可真熱鬧智嚷,春花似錦、人聲如沸纺且。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)隆檀。三九已至摇天,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恐仑,已是汗流浹背泉坐。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裳仆,地道東北人腕让。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像歧斟,于是被迫代替她去往敵國(guó)和親纯丸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 最近的狀態(tài)嘚吧嘚 最近工作有些忙碌静袖,不停追趕著迭代觉鼻,修復(fù)問題填坑…已經(jīng)不記得上次自己寫文章是什么時(shí)候了,導(dǎo)致之前的...
    Mac_guan閱讀 922評(píng)論 0 1
  • 如果你看完書中的所有例子队橙,你很可能已經(jīng)做完你的實(shí)驗(yàn)和在已經(jīng)越獄的iPhone上的研究坠陈。因?yàn)楹驮S多人一樣,幾乎所有的...
    fishmai0閱讀 16,103評(píng)論 2 42
  • 又來(lái)到了一個(gè)老生常談的問題捐康,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢仇矾? 今天就這個(gè)問題開始,來(lái)談?wù)劜?..
    tangsl閱讀 4,134評(píng)論 0 23
  • 文/tangsl(簡(jiǎn)書作者) 原文鏈接:http://www.reibang.com/p/2b993a4b913e...
    西葫蘆炒胖子閱讀 3,776評(píng)論 0 5
  • 看了中央電視臺(tái)第十科教頻道《人物》欄目紀(jì)念專輯《先生 南懷瑾》解总,了解到一代大師不為人知的點(diǎn)點(diǎn)滴滴贮匕, 更為南老師花費(fèi)...
    所謂珈人閱讀 547評(píng)論 8 1