操作系统内部机制学习

切换线程时需要保存什么

  • 函数需要保存吗?函数在Flash上,不会被破坏,无需保存。
  • 函数执行到了哪里?需要保存吗?需要保存。
  • 全局变量需要保存吗?全局变量在内存上,无需保存。
  • 局部变量需要保存吗?局部变量在栈里,也是在内存里,只要避免栈不会被破坏即可,局部变量无需保存。
  • 运算的中间值需要保存吗?中间值保存在CPU寄存器里,另一个线程也需要用到寄存器,所以CPU寄存器要保存。
  • 函数运行到了哪里:也是一个CPU寄存器,名为“PC”。

总结:CPU寄存器需要保存,保存在线程的栈里。

ARM架构

ARM芯片属于精简指令计算机(RISC:Reduced Instruction Set Computor),它所用的指令比较简单,有如下特点:

  1. 对内存只有读、写指令。
  2. 对于数据的运算都是在CPU内部实现。
  3. 使用RISC指令的CPU复杂度小一点,易于设计。

在这里插入图片描述
在这里插入图片描述

几条汇编指令

  • 读内存指令:LDR,即Load之意。
  • 写内存指令:STR,即Store之意。
  • 加减指令:ADD、SUB
  • 跳转:BL,Branch And Link
  • 入栈指令:PUSH
  • 出栈指令:POP

加载指令LDR:LDR r0,[addrA],意思是将地址addrA的内容加载到r0里面。
存储指令STR:STR r0,[addr A],把r0的值存储到地址addrA上。
加法运算指令(ADD):ADD r0,r1,r2,意思为r0=r1+r2。
减法运算指令(SUB):SUB r0,r1,r2,意思为r0=r1-r2。
寄存器入栈/出栈指令(PUSH/POP)

寄存器入栈(PUSH):PUSH {r3, lr}意思是将寄存器r3和lr写入内存栈。

  • 本质是写内存STR指令,高标号寄存器写入高地址的栈里,低标号寄存器写入低地址的栈里。
  • lr即r14,写入地址为sp-4的内存,然后sp=sp-4。
  • r3,写入地址为sp-4的内存,然后sp=sp-4。

寄存器出栈指令(POP):POP {r3,pc}意思是取出内存栈的数据放入r3和pc中。

  • 本质是读内存LDR指令,高标号寄存器的内容来自高地址的栈,低标号寄存器的内容来自低地址的栈。
  • 读地址为sp的内容存入r3,然后sp=sp+4。
  • 读地址为sp的内容存入pc,然后sp=sp+4。

寄存器别名

在这里插入图片描述
PUSH指令=多次调用STR指令,并且会调整SP的值。

BL A:会记录返回地址,保存在R14里,然后跳转到A执行,执行完后,PC会跳转到R14所指向的地址。

在这里插入图片描述
在这里插入图片描述
初始化栈

IPC

引入IPC,主要是为了两项功能:

  1. 线程间互斥
  2. 休眠-唤醒机制

队列
在这里插入图片描述
队列里有多个消息块,消息块里面可以存储消息(数据),每个消息块大小相同。

队列里有两个链表:Sender List、Receiver List。
在这里插入图片描述
在这里插入图片描述
挂起线程也就是将线程从就绪链表中移出。
再将线程挂到队列的等待链表中。
启动定时器。

互斥量如何实现

对于互斥变量a

  1. 关中断
  2. 汇编指令:原子地修改a

IPC

在这里插入图片描述
消息队列的读取都是使用memcpy()

邮箱的读取直接赋值即可。
链表、定时器、环形缓冲区(读、写位置)

信号量的缺点:

  1. 谁都可以释放信号量
  2. 优先级反转

Mutex解决

  1. 谁拥有谁释放
  2. 优先级继承

一个互斥量可以被同一个线程多次take

信号不是信号量,是一种异步通知机制。
**信号就是线程的软件中断。 **

信号处理流程

信号就是线程的“软件中断”,跟“硬件中断”类似:
要安装信号处理函数,相当于给硬件中断提供处理函数。

/* thread1 安装信号,自定义处理函数 */rt_signal_install(SIGUSR1, thread1_signal_handler);/* thread1 要使能信号,相当于使能硬件中断,解除屏蔽 */
rt_signal_unmask(SIGUSR1);/* 向thread1发出信号,相当于触发硬件中断 */
rt_thread_kill(thread1, SIGUSR1);

什么是块设备?

有存储功能:写入数据到pos位置,再读pos可以得到一样的数据。
数据的传输单位是:扇区。

挂载

挂载点(path)
文件系统
块设备
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一练 | 华为认证真题练习Day146

1、某台路由器OSPFv3接口信息如下,下列说法正确的是?(多选) A. 本接口网络类型为P2P B. 本接口的Router-ID为10.0.6.6 C. 本接口没有建立邻接关系 D. 本接口区域号为1 2、OSPFv3在以下哪种类型网络中需要选举DR? A…

tp5 rewrite nginx重写

tp框架,默认的访问路径是 www.xxxx.com/index.php/admin/shop/index格式的,为了方便和更规范,也看起来有逼格一些,需要将index.php去掉 无index.php就会报404 我这里是宝塔 #地址重写if (!-e $request_filename) {rewrite ^(.*)$ /index.…

基于单个参数线性回归的机器学习代码

本文为学习吴恩达版本机器学习教程的代码整理,使用的数据集为https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes/blob/f2757f85b99a2b800f4c2e3e9ea967d9e17dfbd8/code/ex1-linear%20regression/ex1data1.txt 将数据集和py代码放到同一目录中,使…

Dijkstra求最短路 I(Dijkstra算法)

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…

使用JLink仿真器实现调试打印的N种方法

方法一:使用MCU的串口 这是最古老也是最简单的方法。 电脑上面插一个USB转TTL,然后与MCU的UART_RX/UART_TX/GND连接起来。PC端再打开一个串口调试助手。两边的波特率一致,就可以收到MCU发过来的打印信息了。 方法二:使用JLink仿…

低代码开发平台通常提供哪些功能?发挥什么作用?

目录 一、低代码助力开发 二、低代码核心功能 1.业务建模: 2.表单建模: 3.页面建模: 4.流程建模: 5.报表建模: 6.门户建模: 7.大屏建模: 8.移动建模: 三、解放程序员的双…

使用人工智能优化常见业务流程

在现代商业环境中,人工智能(AI)正在改变企业的运营方式。将人工智能集成到业务流程中可以提高效率和准确性,从而节省大量时间和成本。 这使员工能够专注于更具战略性的任务。人工智能在商业中的应用范围从自动化日常任务到提供高级分析,以做…

【实用】sklearn决策树怎么导出规则

目录 一、什么是决策树模型 0.1 什么是决策树 02.决策树模型有哪些 二、在sklearn中怎么训练一棵决策树 三、什么是决策树的规则 0.1决策树的决策规则 02. 决策树的决策规则是怎么存储的 四、怎么导出决策树的规则 4.1 导出决策树文本规则 4.2 导出可视化决策树 4.3…

MS1242,替代ADS1242,24bit 高精度、低功耗模数转换器

产品简述 MS1242/MS1243 是一款高精度、宽动态范围、 ∆-Σ 模数转 换芯片,其工作电压为 2.7V 至 5.25V ,可以达到 24bit 无失码转 换,有效精度可达 21bit 。 MS1242/MS1243 可以广泛使用在工 业控制、称重、液体 / 气体化学分析、血液分…

利用Rclone将阿里云对象存储迁移至雨云对象存储的教程,对象存储数据迁移教程

使用Rclone将阿里云对象存储(OSS)的文件全部迁移至雨云对象存储(ROS)的教程,其他的对象存储也可以参照本教程。 Rclone简介 Rclone 是一个用于和同步云平台同步文件和目录命令行工具。采用 Go 语言开发。 它允许在文件系统和云存储服务之间或在多个云存储服务之间…

如何公网访问内网的群晖NAS随时随地远程访问本地存储的学习资源

文章目录 前言本教程解决的问题是:按照本教程方法操作后,达到的效果是前排提醒: 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机:1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

伪原创API,一文快速了解伪原创API

伪原创API,听起来可能对许多人来说是一个陌生的术语。然而,在当今数字化时代,尤其是在内容创作和网络营销领域,伪原创API正逐渐崭露头角。在本文中,我将向您深入介绍伪原创API是什么,以及它如何在实际应用中…