用户态实现线程调度(任务调度)

股票练习题作业代码 在下水平太拙,用了最简单的探索回溯算法,所以效率很差。 若有算法高手观贴,还望给点指点。 //股票练习题代码 by 孙明保 -- gupiao.h #ifndef __GUPIAO_H__ #define __GUPIAO_H__ #include //may change to float type in future typedef int32_t 阅读详情

代码适用于X86与X86_64架构。

不支持抢占,任务只能自己让出CPU。

下面是代码,将代码全部复制到一个.c文件中,即可编译运行。

/* 
 * 本软件为免费、开源软件。
 * 本软件的版权(包括源码及二进制发布版本)归一切公众所有。
 * 您可以自由使用、传播本软件。
 * 您也可以以任何形式、任何目的使用本软件(包括源码及二进制发布版本),而不受任何版权限制。
 * =====================
 * 作者: 孙明保
 * 邮箱: sunmingbao@126.com
 */


/* 
 * 本程序实现了用户态的任务调度。
 * 适用于X86及X86_64架构。
 * 编译运行方法:
 * [root@localhost ~]# gcc sched.c 
 * [root@localhost ~]# ./a.out
 */

#include <stdio.h>
#include <string.h>

#define    MAX_TASK_NUM       (10)
#define    TASK_STACK_SIZE    (4096)

#define    DBG_PRINT(fmt, args...) \
    do \
    { \
        printf("DBG:%s(%d)-%s:\n"fmt"\n", __FILE__,__LINE__,__FUNCTION__,##args); \
    } while (0)

typedef  void * (*task_entry_ptr) (void *);
typedef struct
{
    char               name[64];
    unsigned long      state;
    task_entry_ptr     entry;
    unsigned long      ret;
    unsigned long      sp;
    unsigned long      pc;
    unsigned long      stack[TASK_STACK_SIZE/sizeof(unsigned long)];
} __attribute__((packed)) t_task;

#define    STATE_INVALID    (0)
#define    STATE_SLEEPING   (1)
#define    STATE_RUNNING    (2)
#define    STATE_FINISHED   (3)

t_task g_at_tasks[MAX_TASK_NUM];
int    g_task_cnt = 0;
#define  task_ptr2idx(ptr)  ((t_task *)(ptr)-g_at_tasks)

unsigned long process_main_thread_sp;
t_task        *pt_cur_running_task;
unsigned long prev_task_sp, prev_task_pc;
unsigned long next_task_sp, next_task_pc;

#if defined( __i386)
#define save_context(mem_var_to_save_sp) \
    do \
    { \
        asm volatile("pushfl\n\t" /* save    flags */ \
                     "pushl %%eax\n\t" \
                     "pushl %%edi\n\t" \
                     "pushl %%esi\n\t" \
                     "pushl %%edx\n\t" \
                     "pushl %%ecx\n\t" \
                     "pushl %%ebx\n\t" \
                     "pushl %%ebp\n\t" \
                     "movl %%esp,%[mem_var_to_store_sp]\n\t" \
            : [mem_var_to_store_sp] "=m" (mem_var_to_save_sp)\
                    ); \
    } while (0)


#define restore_context(mem_var_saved_sp) \
    do \
    { \
        asm volatile("movl %[mem_var_contain_sp],%%esp\n\t" \
                     "popl %%ebp\n\t" \
                     "popl %%ebx\n\t" \
                     "popl %%ecx\n\t" \
                     "popl %%edx\n\t" \
                     "popl
C语言实现操作系统级AI任务调度与并行计算框架 在计算机系统中,任务调度与并行计算是提升计算效率的核心技术。其原理在于通过合理的资源分配与任务管理,使多个计算单元协同工作,从而充分利用硬件性能。在嵌入式与边缘计算等资源受限场景中,这一技术的价值尤为凸显,它直接决定了AI推理等计算密集型任务的实时性与能效。本文聚焦于使用C语言在操作系统原生层构建轻量级AI计算环境,通过设计线程安全的任务队列与工作线程池,实现了高效的队列优化与并行计算。该方案特别适用于智能传感器、边缘设备等缺乏Python解释器与大型框架的平台,为嵌入式AI的落地提供了从底层调度到并行执行 阅读详情

相关推荐

高通平台Camera sensor bring up!

Qualcomm Camera sensor bring up!0. 准确1. Kernel 底层驱动配置1.1 dtsi1.2 pinctrl2. Chi-Cdk XML 配置2.1 sensormodule2.2 sensor3. CHECK 本文主要针对高通平台SM7250进行描述,当然高通平台可能基本都差不多【第一个项目】 —only for sensor probe sucess. 0....

Understand-image 9241

SAE J1939协议详解

SAE J1939协议是由美国汽车工程师协会(SAE)制定的主要针对商用车的CAN总线通讯协议,其基础是CAN2.0B协议,面向对象为客车和载重货车;船舶、农业机械等非路面设备。1.SAE J1939协议文档结构如下图:2.CAN的发展概况20世纪80年代,Bosch的工程人员开始研究用于汽车的串行总线系统,1986年, Bosch在SAE(汽车工程师协会)大会上提出了 CAN,1987年,INTEL就推出了第一片CAN控制芯片—82526;随后Philips半导体推出了82C200。

weixin_46184756的博客 8447

中国1990-2021连续30年土地利用CLCD数据分享

CLCD(China Land Cover Dataset)数据集是由武汉大学黄昕老师基于Google Earth Engine上的335,709景Landsat数据制作的中国年度土地覆盖数据集。为了提高CLCD的时空一致性,还提出了一种包含时空滤波和逻辑推理的后处理方法。该数据集最大的优势在于每年30米的土地利用分类结果,且连续覆盖了30年时间。相比其他产品如GLC_FCS30、Global30、AGLC2000_2015、FROM-GLC10、ESA10、ESRI10等,CLCD在时间分辨率上更高。

qq_48539301的博客 1万+

麒麟OS(Kylin OS)操作系统minikube+docker安装使用及遇到的问题

一 ,安装minikube及操作工具kubectl 1,安装kubectl 使用以下命令下载最新版本: curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" 要下载指定版本(例如v1.22.0版本) ,请键入: curl -LO https://dl.k8s.io/release/v1.22.0/bin/linux/amd..

qq_23396017的博客 2643

Android实现TextToSpeech控件实现语音播报--朗读文字 (附完整源码)

Android实现TextToSpeech控件实现语音播报--朗读文字 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1120

Dify知识库文档批量下载神器:一键导出所有文件到本地

在使用Dify进行知识库管理的过程中,我们经常遇到一个实际问题:如何将已上传到知识库中的文档批量下载到本地?目前Dify的管理界面虽然功能强大,但暂时没有提供直接的UI界面来批量导出或下载知识库内的文档。这意味着如果我们需要将知识库中的文件备份到本地或进行离线处理,只能通过API接口来实现。本文将详细介绍如何利用Dify的REST API构建一个完整的知识库文档下载解决方案,这也是目前实现知识库文件批量下载到本地的唯一可行路径。🎉进入大模型应用与实战专栏 | 🚀查看更多专栏内容首先,我们需要在Dify的

羊城迷鹿的博客 3474

checking OpenSSL library version... configure: error: OpenSSL >= 1.1.1 required (have “100020bf 解决方案

 本文主要介绍了checking OpenSSL library version… configure: error: OpenSSL >= 1.1.1 required (have “100020bf (OpenSSL 1.0.2k-fips 26 Jan 2017)”)解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 2万+

【47】软考软件设计师——全真模拟卷(下午题)|5道案例分析+答题模板+评分标准

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第47篇,属于**模块六:冲刺与模拟**第四篇,严格遵循软考下午题真题规范(5道案例分析题,150分钟,满分75分,45分及格),覆盖数据流图(DFD)、E-R图与关系模式、UML类图与用例图、算法设计与代码填空、设计模式应用五大核心题型。全文采用“真题级案例+分步答题模板+采分点明细+评分标准”的形式,每道题配套“审题技巧→解题步骤→规范作答模板→常见错误扣分点”,深度拆解案例分析题的得分逻辑,帮助考生掌握“按点踩分、规范表述、避坑扣分”的核心能力

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 688

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 一款简单的基于Web的投票工具(PHP+SQLite 实现)
下一篇: Linux内核编译详解
无忧老猪
博客等级 码龄18年 200粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值