Linux 内核学习 2 - 用户程序如何被塞进内核进行调度?

news2024/9/25 9:38:12

Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行

fork里copy了父进程的信息,并激活task放到运行队列,当系统发生调度并获得执行机会时开始执行,但这时还不是hello程序,search_binprm_handler找到的是下面这样一个结构体,load_elf_binary才真正的加载了hello文件。

static struct linux_binfmt elf_format = {

    .module     = THIS_MODULE,

    .load_binary    = load_elf_binary,

    .load_shlib = load_elf_library,

    .core_dump  = elf_core_dump,

    .min_coredump   = ELF_EXEC_PAGESIZE,

};

load_elf_binary加载过程中会从ELF文件中获取text、data、bss等段的信息,加载完成之后hello的虚拟内存布局里就是下面这个样子,实际上所有进程的内存布局都是这样,在进程栈里保存了返回地址、argv、envp等信息。

这样一个程序就具备了可以运行的全部条件,在load_elf_binary的最后会调用start_thread->start_thread_common(),改写CPU的寄存器,真正把hello运行起来。

linux程序是如何开始运行的? - 知乎

相对于freeRTOS, 任务在编译前定义好,然后freeRTOS在xCreateTask()里面把任务添加到freeRTOS内核中,linux内核通过shell这个内核与用户交互的接口,动态的加入到任务列表里面。所以freeRTOS更适合小型的嵌入式硬件(功能不复杂,内存较小,处理能力不强)中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1380269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode讲解篇之47. 全排列 II

文章目录 题目描述题解思路题解代码 题目描述 题解思路 初始化一个nums中元素是否被访问的数组used、记录还需要递归的深度deep,遍历nums,如果当前元素被访问过或者当前元素等于前一个元素且前一个元素没被访问过就跳过该次遍历,否则选择当前…

Colab 谷歌免费的云端Python编程环境初体验

最新在学习AIGC的过程中,发现很多教程,demo使用到了Colab这个谷歌工具。 Colab 是什么? Google Colab是一个强大且免费的云端Python编程环境,为学生、研究人员和开发者提供了一个便捷的平台来开展数据科学、机器学习和深度学习项…

大数据之谷歌文件系统论文 GFS The Google File System

原文地址 谷歌文件系统论文 摘要 我们设计并实现了Google文件系统,这是一个面向大规模分布式数据密集型应用的可扩展分布式文件系统。 它在廉价的通用硬件上运行,提供了容错性,并向大量客户端提供高聚合性能。 尽管与先前的分布式文件系统…

怎么理解接口幂等,项目中如何保证的接口幂等

都 2024 年了,竟然还有人不知道接口幂等是什么东西。 hi,大家好,我是 浮生 今天正好有空,给大家分享一下 幂等的实现。 什么是幂等? 一、问题解析 简单来说,就是一个接口,使用相同的参数重复执…

c++算法之二分

目录 二分法简介 解题步骤 整数二分 模板 例题 输入描述 输出描述 样例输入输出 解 浮点二分 模板 二分答案(最重要) 模板 例题 跳石头 题目描述 输入描述 输出描述 输入输出样例 解 例题 肖恩的苹果林 输入描述 输出描述 解 测…

GBASE南大通用数据库如何检索单行

SELECT 语句返回的行集是它的活动集。单个 SELECT 语句返回单个行。您可使用嵌入式 SELECT 语句来从数据库将单个行检索到主变量内。然而,当 SELECT 语句返回多行数 据时,程序必须使用游标来一次检索一行。在 检索多行 中讨论“多行”选择操作。 要检索单…

png格式图片怎么转换?分享3个转换的方法

随着互联网的普及和自媒体的发展,我们每天都会遇到各种图片格式,其中PNG格式因其透明背景和高质量的图像而受到广泛欢迎。然而,有时候我们需要将PNG格式的图片转换成其他格式以满足不同的需求。那么,如何轻松转换PNG格式的图片呢&…

在全志T113-i平台上实现H.265视频解码步骤详解

H.265,也被称为HEVC(HighEfficiency Video Coding),作为H.264的继任者,提供了更好的视频压缩和更高的视频质。H.265通过引入更多先进的编码技术,如更强大的运动估计和更高效的变换编码,对比H.264进行了改进。这些改进使…

代码随想录 Leetcode203. 移除链表元素

题目: 代码(首刷看解析 2024年1月11日): class Solution { public:ListNode* removeElements(ListNode* head, int val) {if(headnullptr) return nullptr;ListNode* BeforeHead new ListNode(0,head);ListNode* temp BeforeHead;while(te…

seata分布式事务(与dubbo集成)

1.seata是什么? Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2.seata的注解 GlobalTransactional:全局事务注解,添加了以后可实现分布式事务的回滚和提交,用法与spring…

C语言从入门到实战——数据在内存中的存储方式

数据在内存中的存储方式 前言1. 整数在内存中的存储2. 大小端字节序和字节序判断2.1 什么是大小端2.2 为什么有大小端2.3 练习2.3.1 练习12.3.2 练习22.3.3 练习32.3.4 练习42.3.5 练习52.3.6 练习6 3. 浮点数在内存中的存储3.1 练习3.2 浮点数的存储3.2.1 浮点数存的过程3.2.2…

模拟退火算法(SA)解决旅行商(TSP)问题的python实现

旅行商问题 旅行商问题(Travelling Salesman Problem, 简记TSP,亦称货郎担问题):设有n个城市和距离矩阵D [dij],其中dij表示城市i到城市j的距离,i, j 1, 2 … n,则问题是要找出遍访每个城市恰好一次的一…

扫码看图怎么做轮播效果?多组图片用扫码查看的方法

图片通过二维码来做展示现在是很常见的一种方式,用这种方式可以用于多种图片格式。那么当我们需要将图片做成多个分组的轮播图样式展示时,有什么好的方法能够做成这个效果呢?下面就来教大家使用二维码生成器制作图片二维码的操作方法&#xf…

BioTech - 蛋白质结构、核酸结构、小分子构象的预测

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/135568438 生物结构预测是指根据生物分子的序列信息,推断其在空间中的三维形状和排列。生物结构预测对于理解生物分子的功能、相互作用…

LLM之RAG实战(十四)| 利用LongContextRetriver克服RAG中的中间丢失现象

人类和大型语言模型(LLM)都有一个共同的行为模式:他们往往擅长处理位于给定内容开头或结尾的信息,而中间的信息往往会被忽视。 来自斯坦福大学、加州大学伯克利分校和Samaya AI的研究人员在论文《Lost in the Middle: How Languag…

精确掌控并发:分布式环境下并发流量控制的设计与实现(一)

这是《百图解码支付系统设计与实现》专栏系列文章中的第(10)篇。 本篇主要讲清楚常用的并发流量控制方案,包括固定窗口、滑动窗口、漏桶、令牌桶、分布式消息中间件等,以及各种方案在支付系统不同场景下的应用。 在非支付场景&a…

【LabVIEW FPGA入门】使用LabVIEW FPGA进行编程并进行编译

在本文中会进行一个简单的FPGA编程演示,这通常可以验证编译工具链是否正常使用。在LabVIEW FPGA中和rt、PC编程一样使用数据流编程,但是需要注意的是FPGA中有些函数是不可以用的,因为这些函数很占用资源,且FPGA只能同时下载运行一…

6.2 声音编辑工具GoldWave5简介(5)

6.2.4录制声音 利用Windows自带的“录音机”录制声音时,只能录制最大时长为1分钟的声音,而利用GoldWave5,可以录制时长长达277小时以上的声音,而且,录制完成后,还可以很方便地对声音进行处理、转换等操作。…

【MIT 6.S081】2020, 实验记录(3),Lab: page tables

目录 TaskTask 1: Print a page table Task Task 1: Print a page table 该实验需要增加一个 vmprint 函数,用于打印一个 page table,实现过程可以参考 vm.c 文件中的 freewalk() 函数。 在 defs.h 中增加 vmprint 的定义: void …

海外融合CDN之火伞云

在当今互联网全球化的时代,出海业务已经成为许多企业的必然选择。在海外市场上,快速、稳定的内容传输对于企业的成功至关重要。然而,如何合理的运用多家CDN供应商的资源实现智能化的调度,以及如何与业务更紧密地结合起来&#xff…