active_mm = mm; ( 1 )cpu_uninstall_idmap(); ( 2 )…ops = get_cpu_ops(cpu); if (ops- >cpu_postboot)ops- >cpu_postboot(); ( 3 )…set_cpu_online(cpu, true ); ( 4 )" />

一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

secondary cpu執(zhí)行流程介紹

麥辣雞腿堡 ? 來(lái)源:TrustZone ? 作者:Hcoco ? 2023-12-05 16:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

secondary cpu執(zhí)行流程

aarch64架構(gòu)secondary cpu的內(nèi)核入口函數(shù)為secondary_entry(arch/arm64/kernel/head.S),以下為其執(zhí)行主流程:

圖片
由于其底層相關(guān)初始化流程與primary cpu類(lèi)似,因此此處不再介紹。我們這里主要看一下它是如何通過(guò)secondary_start_kernel啟動(dòng)idle線(xiàn)程的:

asmlinkage notrace void secondary_start_kernel(void)
{
	struct mm_struct *mm = &init_mm;              			
	…
	current- >active_mm = mm;                               (1)

	cpu_uninstall_idmap();                                 (2)
	…
	ops = get_cpu_ops(cpu);
	if (ops- >cpu_postboot)
		ops- >cpu_postboot();                           (3)
	…
	set_cpu_online(cpu, true);                             (4)
	complete(&cpu_running);                                (5)
	…
	cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);               (6)
}

(1)由于內(nèi)核線(xiàn)程并沒(méi)有用于地址空間,因此其active_mm通常指向上一個(gè)用戶(hù)進(jìn)程的地址空間。而cpu初始化時(shí),由于之前并沒(méi)有運(yùn)行過(guò)用戶(hù)進(jìn)程,因此將其初始化為init_mm

(2)idmap地址映射僅僅是用于mmu使能時(shí)地址空間的平滑切換,在mmu使能完成后已經(jīng)沒(méi)有作用。更進(jìn)一步,由于idmap頁(yè)表所使用的ttbr0_elx頁(yè)表基地址寄存器,正常情況下是用于用戶(hù)空間頁(yè)表的,在調(diào)度器接管該cpu之前也必須要將其歸還給用戶(hù)空間

(3)執(zhí)行cpu_postboot回調(diào)

(4)由secondary cpu已經(jīng)啟動(dòng)成功,故將其設(shè)置為online狀態(tài)

(5)喚醒cpu hotplug線(xiàn)程

(6)讓cpu執(zhí)行idle線(xiàn)程,其代碼實(shí)現(xiàn)如下:

void cpu_startup_entry(enum cpuhp_state state)
{
	arch_cpu_idle_prepare();
	cpuhp_online_idle(state);
	while (1)
		do_idle();
}

至此,cpu已經(jīng)啟動(dòng)完成,并開(kāi)始執(zhí)行idle線(xiàn)程了。最后當(dāng)然是要通知調(diào)度器,將該cpu的管理權(quán)限移交給調(diào)度器了。它是通過(guò)cpu hotplug的以下回調(diào)實(shí)現(xiàn)的:

static struct cpuhp_step cpuhp_hp_states[] = {
…
[CPUHP_AP_SCHED_STARTING] = {
		.name			= "sched:starting",
		.startup.single		= sched_cpu_starting,
		.teardown.single	= sched_cpu_dying,
}
…
}

以下為該函數(shù)的實(shí)現(xiàn):

int sched_cpu_starting(unsigned int cpu)
{
…
sched_rq_cpu_starting(cpu);        (1sched_tick_start(cpu);             (2)
…
}

(1)用于初始化負(fù)載均衡相關(guān)參數(shù),此后該cpu就可以在其后的負(fù)載均衡流程中拉取進(jìn)程

(2)tick時(shí)鐘是內(nèi)核調(diào)度器的脈搏,啟動(dòng)了該時(shí)鐘之后,cpu就會(huì)在時(shí)鐘中斷中執(zhí)行調(diào)度操作,從而讓cpu參與到系統(tǒng)的調(diào)度流程中

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11077

    瀏覽量

    217024
  • SMP
    SMP
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    20279
  • 線(xiàn)程
    +關(guān)注

    關(guān)注

    0

    文章

    508

    瀏覽量

    20207
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    U-boot的執(zhí)行流程

    本文主要講述了U-boot的執(zhí)行流程。
    發(fā)表于 07-14 16:58 ?962次閱讀
    U-boot的<b class='flag-5'>執(zhí)行</b><b class='flag-5'>流程</b>

    RK3568 SMP啟動(dòng)不成功,rt-thread已經(jīng)調(diào)用psci成功,但是沒(méi)有執(zhí)行到_secondary_cpu_entry

    , this is RT-Thread!! msh />I/TC: Secondary CPU 1 initializing I/TC: Secondary CPU 1 swit
    發(fā)表于 11-22 17:05

    求芯片內(nèi)部的程序執(zhí)行流程

    想了解仿真連接仿真后,芯片內(nèi)部的程序執(zhí)行流程,請(qǐng)問(wèn)有相關(guān)介紹的資料嗎?
    發(fā)表于 05-25 12:08

    SOC的多核啟動(dòng)流程詳解

    , COLD_BOOT_SINGLE_CPU=1, _secondary_cold_boot=0,則下面代碼不被編譯, 則無(wú)論主核還是從核都不需要走 _secondary_cold_boot
    發(fā)表于 02-21 15:11

    什么是CPU分枝預(yù)測(cè)和推測(cè)執(zhí)行技術(shù)?

    什么是分枝預(yù)測(cè)和推測(cè)執(zhí)行技術(shù)?  分枝預(yù)測(cè)(branch prediction)和推測(cè)執(zhí)行(speculation execution)是CPU動(dòng)態(tài)執(zhí)行技術(shù)中的主要內(nèi)容,
    發(fā)表于 02-04 10:47 ?866次閱讀

    ATMEL的CPU介紹

    ATMEL的CPU介紹ATMEL的CPU介紹ATMEL的CPU介紹ATMEL的
    發(fā)表于 10-30 18:08 ?5次下載

    mfc程序執(zhí)行流程小結(jié),MFC程序的執(zhí)行順序

     摘要:本文章主要以MFC程序的執(zhí)行流程執(zhí)行順序等執(zhí)行過(guò)程的剖析做出的結(jié)論,下面一起來(lái)看看原文的具體介紹。
    發(fā)表于 12-08 15:48 ?9773次閱讀
    mfc程序<b class='flag-5'>執(zhí)行</b><b class='flag-5'>流程</b>小結(jié),MFC程序的<b class='flag-5'>執(zhí)行</b>順序

    關(guān)于如何判斷CPU是否正在執(zhí)行中斷函數(shù)?

    如何判斷CPU是否正在執(zhí)行中斷函數(shù)?
    的頭像 發(fā)表于 03-12 11:25 ?2928次閱讀

    如何寫(xiě)出讓CPU執(zhí)行更快的代碼?

    轉(zhuǎn)自:小林coding 前言 代碼都是由 CPU 跑起來(lái)的,我們代碼寫(xiě)的好與壞就決定了 CPU執(zhí)行效率,特別是在編寫(xiě)計(jì)算密集型的程序,更要注重 CPU
    的頭像 發(fā)表于 10-29 11:21 ?2586次閱讀
    如何寫(xiě)出讓<b class='flag-5'>CPU</b><b class='flag-5'>執(zhí)行</b>更快的代碼?

    reset_primary函數(shù)的執(zhí)行流程

    reset_primary函數(shù)的執(zhí)行 以CONFIG_BOOT_SYNC_CPU使能為例, 在使能PSCI系統(tǒng)中,不需要使能此宏 。 reset_primary函數(shù)執(zhí)行流程
    的頭像 發(fā)表于 11-02 18:06 ?861次閱讀
    reset_primary函數(shù)的<b class='flag-5'>執(zhí)行</b><b class='flag-5'>流程</b>

    cpu執(zhí)行程序內(nèi)部變化

    CPU(Central Processing Unit)是計(jì)算機(jī)的核心部件之一,它負(fù)責(zé)執(zhí)行計(jì)算機(jī)程序的指令,并進(jìn)行數(shù)據(jù)處理和控制操作。CPU執(zhí)行程序時(shí)會(huì)經(jīng)歷一系列復(fù)雜的內(nèi)部變化。本文
    的頭像 發(fā)表于 12-05 11:26 ?873次閱讀

    secondary cpu初始化狀態(tài)設(shè)置

    spin-table spin-table啟動(dòng)流程的示意圖如下: 芯片上電后primary cpu開(kāi)始執(zhí)行啟動(dòng)流程,而secondary
    的頭像 發(fā)表于 12-05 15:27 ?1528次閱讀
    <b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>初始化狀態(tài)設(shè)置

    如何在內(nèi)核中啟動(dòng)secondary cpu

    啟動(dòng)secondary cpu 內(nèi)核在啟動(dòng)secondary cpu之前當(dāng)然需要為其準(zhǔn)備好執(zhí)行環(huán)境,因?yàn)閮?nèi)核中
    的頭像 發(fā)表于 12-05 15:46 ?910次閱讀
    如何在內(nèi)核中啟動(dòng)<b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>

    SMP多核secondary cpu啟動(dòng)流程

    secondary cpu啟動(dòng) 由于psci方式啟動(dòng)secondary cpu流程,除了其所執(zhí)行
    的頭像 發(fā)表于 12-05 17:41 ?1238次閱讀
    SMP多核<b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>啟動(dòng)<b class='flag-5'>流程</b>

    CPU的各種指令和執(zhí)行流程

    、數(shù)據(jù)傳輸?shù)裙δ?。要深入理?b class='flag-5'>CPU的指令,我們需要從多個(gè)維度進(jìn)行分析,尤其是指令的構(gòu)成、分類(lèi)、執(zhí)行流程以及與不同架構(gòu)的關(guān)系。
    的頭像 發(fā)表于 04-18 11:24 ?824次閱讀