自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 NUMA体系结构详解

1. NUMA的几个概念(Node,socket,core,thread) 对于socket,core和thread会有不少文章介绍,这里简单说一下,具体参见下图: 一句话总结:socket就是主板上的CPU插槽; Core就是socket里独立的一组程序执行的硬件单元,比如寄存器,计算单元等; Thread:就是超线程hyperthread的概念,逻辑的执行单元,独立的执行上下文,但是共享core内的寄存器和计算单元。 NUMA体系结构中多了Node的概念,这个概念其实...

2022-02-18 17:35:37 2731

原创 Linux中的preempt_count

preempt_count本质上是一个per-CPU的32位变量,它在各种处理器架构下的存放位置和命名不尽相同,但其值都可以使用preempt_count()函数统一获取。preempt_count逻辑相关的核心代码位于include/linux/preempt.h,虽然只是一个32位变量,但由于其和中断、调度/抢占密切相关,因此在系统中发挥的作用不容小觑。来看下preempt_count是怎样构成的:hardirq相关preempt_count中的第16到19个bit表示hardirq

2021-12-03 18:23:39 975

原创 Linux内核同步机制之(二):Per-CPU变量

一、源由:为何引入Per-CPU变量?1、lock bus带来的性能问题在ARM平台上,ARMv6之前,SWP和SWPB指令被用来支持对shared memory的访问:SWP <Rt>, <Rt2>, [<Rn>]Rn中保存了SWP指令要操作的内存地址,通过该指令可以将Rn指定的内存数据加载到Rt寄存器,同时将Rt2寄存器中的数值保存到Rn指定的内存中去。我们在原子操作那篇文档中描述的read-modify-write的问题本质上是一个保持对

2021-12-03 11:50:43 132

原创 计算机基础系列一:计算机硬件

计算机(Computer),俗称电脑,是一种能够按照事先存储的程序,自动、高速地进行大量数值运算和各种信息处理的现代化智能电子设备。计算机硬件发展史(From Egon)  计算机系统  一台完整的计算机硬件系统由以下5部分构成:运算器、存储器、控制器、输入设备、输出设备。  运算器:负责算术运算与逻辑运算,与控制器共同组成了中央处理器(CPU)。  存储器:用来存储正在进行程序、将要进行程序的数据及刚处理完的数据。  控制器:负责发送和接收指令。  输入设备:用来进行输入的设备,如

2021-12-03 10:10:00 577

原创 计算机科学基础知识(一):The Memory Hierarchy

一、前言最近一个问题经常萦绕在我的脑海:一个学习电子工程的机械师如何称为优秀的程序员?(注:本文作者本科学习机械设计,研究生转到电子工程系学习,毕业后却选择了系统程序员这样的职业)。经过思考,我认为阻挡我称为一个优秀程序员的障碍是计算机科学的理论知识。自然辩证法告诉我们:理论源于实践,又指导实践,她们是相辅相成的关系。虽然从业十余年,阅code无数,但计算机的理论不成体系,无法指导工程面具体技能的进一步提升。计算机科学博大精深,CPU体系结构、离散数学、编译器原理、软件工程等等。最终选择从下面这本书

2021-12-03 10:08:34 269

原创 KDB命令

dmesg:该命令用于打印内核的相关信息kill:向进程发送信号语法:kill -<signalnumber> <pid>lsmod:列出了系统中所有的当前系统中可装载模块的信息第一列:模块名第二列:模块的代码量第三列:模块对象的地址第四列:模块的计数第五列: 模块的状态(loading,unloading,live)第六列:模块的初始装载地址第七列:使用该模块的模块env:列出kdb中的所有环境变量。使用set命令

2021-12-01 20:17:42 2776

原创 spin_lock spin_lock_irq spin_lock_irqsave、spin_lock_bh

1,为啥需要自旋锁很多时候我们并不能采用其他的锁,比如读写锁、互斥锁、信号量等。一方面这些锁会发生上下文切换,他的时间是不可预期的,对于一些简单的、极短的临界区完全是一种性能损耗;另一方面在中断上下文是不允许睡眠的,除了自旋锁以外的其他任何形式的锁都有可能导致睡眠或者进程切换,这是违背了中断的设计初衷,会发生不可预知的错误。基于两点,我们需要自旋锁,他是不可替代的。2,为啥自旋锁禁止抢占这一点其实很好理解,当一个 CPU 获取到一把自旋锁之后,开始执行临界区代码,此时假设他的时间片运转完毕,..

2021-12-01 09:57:01 2543

原创 Linux 进程调度浅析

进程调度含义进程调度决定了将哪个进程进行执行,以及执行的时间。操作系统进行合理的进程调度,使得资源得到最大化的利用。在单片机上,常常使用的方式是:系统初始化---->while(1){}。(当然,单片机也可以跑类似 FreeRTOS,也可以有进程切换)在带操作系统的 CPU 上跑的逻辑是,允许多个进程(其实就是程序) ”同时” 跑。比如,你可以在操作鼠标的同时,进行音乐播放,文字编辑等。宏观上看上去是多个任务并行执行,事实的本质是 CPU 在不断的调度每一个进程,使得每个进程都得以响应,与

2021-11-29 20:29:05 465

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除