多核初始化过程

2024-05-13 04:38
文章标签 过程 初始化 多核

本文主要是介绍多核初始化过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

平台介绍:

loongson3A-4核cpu(mips架构),vxWorks6.8

多核cpu启动时,刚开始时是cpu0在运行,后面才会初始化其他三个核,这里就说一些其他三个核的初始化过程。

函数调用关系:

usrRoot-->usrSmpInit-->usrEnableCpu-->kernelCpuEnableInternal-->vxCpuStateInit

kernelCpuEnableInternal-->sysCpuEnable-->sysCpuStart-->godson3_cpu_start-->sysCpuInit-->kernelCpuEntry-->idleTask

在这些函数调用完了之后呢,其他三个核就进入了一个可使用状态。

现在呢咱们一步一步分析一下这个初始化的过程:

void usrSmpInit (void){
/*这里挂接cpu调度的中断函数,并使能。主要用于核间通信*/if ((vxIpiConnect (IPI_INTR_ID_SCHED,(IPI_HANDLER_FUNC) windRescheduleNotify,NULL) == ERROR) ||vxIpiEnable (IPI_INTR_ID_SCHED) == ERROR)){return;}
/*使能cpu*/usrEnableCpu();}

LOCAL void usrEnableCpu (void){UINT cpu;UINT numCpus = vxCpuConfiguredGet (); /*获取配置的cpu的个数*/cpuset_t enabledCpus;ULONG timeoutTicks, timeoutStart, currentTickCount;CPUSET_ZERO (enabledCpus);
/*cpu0已经run起来了,先记录cpu0*/    CPUSET_SET (enabledCpus, 0);	/*设置超时时间*/vxCpuEnableTimeout = VX_ENABLE_CPU_TIMEOUT;timeoutTicks = vxCpuEnableTimeout * sysClkRateGet ();
/*对多核cpu进行使能*/for (cpu = 1; cpu < numCpus; cpu++){if (kernelCpuEnableInternal (cpu) == ERROR){}elseCPUSET_SET (enabledCpus, cpu);}timeoutStart = vxAbsTicksGet ();
/*如果没有使能就等待*/  do{currentTickCount = vxAbsTicksGet ();if ((currentTickCount - timeoutStart) > timeoutTicks){for ( cpu = 1 ; cpu < numCpus ; cpu ++){if (!CPUS

这篇关于多核初始化过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984702

相关文章

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.