自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(189)
  • 资源 (15)
  • 收藏
  • 关注

原创 【Linux内核设计与实现】第三章——进程管理(完整版01~05)

  进程是 操作系统抽象概念中最基本的一种。本文将和读者一起学习有关 内核中对进程、线程的概念;然后再一起研究在 内核中是如何管理每个进程,本文只涉及对进程以及线程生命周期的介绍(进程是如何创建、消亡)。我们的操作系统存在的目的就是为了更好的运行用户程序,由此可见进程管理在操作系统中的地位可谓是至关重要的。而有关进程调度内容笔者将放在下一篇文章中详述,虽然这些都属于进程管理的范畴,不过由于笔者是按照《Linux 内核设计与实现》第三版并结合 内核代码来展开讨论,因此这里的探讨顺序将会与书籍原文保持一

2025-04-29 10:15:59 677

原创 【Linux内核设计与实现】第三章——进程管理01

内核栈的定义如下,内核栈在理论上被定义为一个union,该结构被称之为联合体或者共用体,该类型的特性是 “一个联合体的大小等于其内部所占空间最大的成员大小,并且所有成员都共享同一段内存”。根据这个特性,我们也就知道了一个内核栈的大小就是。#endif为什么这里笔者要强调“理论上”一词,这是由于在以往较旧版本的内核中的确是这样做的,在网络上有很多博客和文章都在介绍内核栈也是用的较老版本的内核代码,因此他们的说法也是对的。较老版本的内核中的内核栈是将与 真正的内核栈stack绑定在一起通过。

2025-04-25 17:24:17 767

原创 【实现操作系统 03】使用 FAT12 文件系统实现简单的 Boot 加载 Loader 到内存

基于 BIOS 实现 Boot 程序并加载 Loader 文件执行。

2022-08-19 18:08:47 1614 19

原创 【实现操作系统 01】CentOS 9 安装配置 Bochs 2.7 虚拟机,及编写简单的 bootloader 并写入软盘启动

在 CentOS 9 下安装 Boch 2.7,并运行一段简单的 boot 代码——从零开始写操作系统的第一步

2022-08-11 14:26:55 4123 4

原创 【实现操作系统 00】x86 与 x64 架构下函数参数传递的区别

本文分析了在 x86 和 x86_64 架构下函数参数传递的区别。

2022-08-09 16:19:22 1412 7

原创 GCC编译流程:从源代码到可执行程序——浅析编译原理

2022-05-06文章待更新》》》敬请期待!!

2022-05-06 10:39:20 1354

原创 Linux内存管理子系统——mmap内存映射原理分析(dax文件系统的mmap)

Linux mmap分析内核版本:linux-5.161. 虚拟内存概要内容简介1.1. mm_struct 和 vm_area_struct// mm_struct 和 vm_area_struct 的简要成员 struct mm_struct { unsigned long start_brk, brk, start_stack;} __attribute__((preserve_access_index));struct vm_area_struct { unsigned lo

2022-04-18 10:29:50 3117

原创 CPU性能测试——CoreMark篇

本文将介绍使用CoreMark测试程序对我们研究所内我所在的小组自研芯片进行性能的测试,记录了CoreMarK工具的使用以及对其测试结果进行分析测试环境:PC OS: Ubuntu20.04 LTSCPU: 自研CPU(ARCH=riscv64,ISA=rv64imafdc)Kernel: CPU使用的内核为Linux4.15CoreMark: CoreMark v1.01GNU: riscv64-unknown-linux-gnu1、CoreMark简介  CoreMark是由EEMBC.

2020-12-24 17:04:08 16325 5

原创 VMware Workstation Ubuntu 20.04 LTS无法连接网络问题

VMware Workstation Ubuntu 20.04 LTS无法连接网络问题本文记录了自己使用的安装在VMware Workstation上的Ubuntu20.04无法连接到网络的解决过程——终于解决困扰我两个小时的问题出现问题毫无征兆,平时使用正常的Ubuntu在今天打开后发现无法连接到网络,wire图标也莫名的消失,并且在打开网络设置,也没有对wired的设置模块,至于为何会出现这种问题目前没有任何头绪。解决1、将虚拟机网络设置为NAT模式在菜单栏中依次选择:虚拟机 >

2020-06-01 15:18:51 21176 68

原创 Linux 6.15 内核发布,新功能

这是内核发布周末,Linux 6.15刚刚发布,它有大量的改进,但也有一些变化在开发人员中引起了一些分歧。以其标志性的自由放任风格在Linux内核邮件列表 (LKML) 上宣布Linux 6.15稳定版本发布,并指出在最后的冲刺中 “nothing looks particularly scary”(“看起来没有什么特别可怕的”),所以他很高兴签字。他指出:“各种随机的小修复,大部分都是驱动程序问题,但其中也有一些 bcachefs 修复、一些核心网络问题和一些 mm 修复。

2025-05-27 17:55:13 157

原创 【Linux内核设计与实现】第三章——进程管理(完整版01~05)

  进程是 操作系统抽象概念中最基本的一种。本文将和读者一起学习有关 内核中对进程、线程的概念;然后再一起研究在 内核中是如何管理每个进程,本文只涉及对进程以及线程生命周期的介绍(进程是如何创建、消亡)。我们的操作系统存在的目的就是为了更好的运行用户程序,由此可见进程管理在操作系统中的地位可谓是至关重要的。而有关进程调度内容笔者将放在下一篇文章中详述,虽然这些都属于进程管理的范畴,不过由于笔者是按照《Linux 内核设计与实现》第三版并结合 内核代码来展开讨论,因此这里的探讨顺序将会与书籍原文保持一

2025-04-29 10:14:55 78

原创 【Linux内核设计与实现】第三章——进程管理05

举个例子来说,假如我们有一个包含四个线程的进程,在提供专门线程支持的系统中,通常会有一个包含指向四个不同线程的指针的进程描述符。中父进程的打印,而后执行子进程的打印,这更进一步的验证了笔者的分析,即子进程的运行时机是在父进程更早的指令处开始执行。是的,还有一个点,那就是线程,让我们继续来学习吧。),并作相关的初始化工作,其原理就是利用当前进程的信息拷贝作为一个新的进程存在,而在这其中较为关键的一步就是调用。它会首先将自己设置为。是内核线程的管理线程,是所有内核线程的“工厂”,负责统一、安全地创建内核线程。

2025-04-28 15:15:30 74

原创 【Linux内核设计与实现】第三章——进程管理05

举个例子来说,假如我们有一个包含四个线程的进程,在提供专门线程支持的系统中,通常会有一个包含指向四个不同线程的指针的进程描述符。中父进程的打印,而后执行子进程的打印,这更进一步的验证了笔者的分析,即子进程的运行时机是在父进程更早的指令处开始执行。是的,还有一个点,那就是线程,让我们继续来学习吧。),并作相关的初始化工作,其原理就是利用当前进程的信息拷贝作为一个新的进程存在,而在这其中较为关键的一步就是调用。它会首先将自己设置为。是内核线程的管理线程,是所有内核线程的“工厂”,负责统一、安全地创建内核线程。

2025-04-28 15:14:27 733

原创 【Linux内核设计与实现】第三章——进程管理04

exit()函数定义是一个宏,用于定义一个系统调用。表示exit系统调用接受一个参数error_code,表示进程的退出状态。参数处理:将error_code的低 8 位提取出来。<< 8:将提取的值左移8位。这是因为在Linux中,进程的退出状态通常存储在高16位中,而低8位用于其他信息。调用do_exitdo_exit是内核中实际处理进程退出的核心函数。它负责完成进程退出的所有工作,包括资源释放、通知父进程等。if (!return;/** In!*/if (!return;

2025-04-25 17:26:50 834

原创 【Linux内核设计与实现】第三章——进程管理03

由于将具体拷贝页面的任务更变为,当新进程需要修改时才发生实际拷贝,这样能够加快进程的执行速度,也不会浪费额外内存空间(进程无需修改时便不需要拷贝页面)。,这时陷入页面错误处理程序,才开始为子进程分配新的物理页面,并将之前的只读页面内容复制到新页面中。函数只会复制父进程的页表项,并将子进程的页表项标记为只读权限,而不直接拷贝物理页面给子进程。,子进程能够继承或共享父进程的内存布局,从而实现高效的进程创建。函数,按照道理,该函数就是为新进程拷贝父进程的内存空间,那么现在就具体来看看其中发生了什么。

2025-04-25 17:26:13 769

原创 【Linux内核设计与实现】第三章——进程管理02

   系统的进程之间存在一个明显的继承关系,在 系统中也是如此。所有的进程都是 为 的 进程的后代#05(关于这一点笔者将会在文末附中 对其说明和验证)。内核在系统启动的最后阶段启动 进程。该进程读取系统的初始化脚本()并执行其他的相关程序,最终完成系统启动的整个过程。系统中的每个进程必有一个父进程,相应的,每个进程也可以拥有零个或多个子进程。拥有同一个父进程的所有进程被称为兄弟。进程间的关系存放在进程描述符中。每个 都包含一个指向其父进程 、叫做 的指针,还包含一个称为 的子进程链表。 

2025-04-25 17:25:05 1005

原创 【Linux内核设计与实现】第三章——进程管理04

  在了解完进程的创建流程后,我们也应该学习一下一个进程是如何退出操作系统的。相信大家都知道 系统调用,就是用来终止一个进程。它会清理进程的资源、通知父进程,并最终将进程从系统中移除。接下来就来仔细分析该函数。 系统调用的实现如下:函数定义:参数处理:调用 : 函数的实现位置:8.2.0. do_exit() 的参数和返回值参数 : 表示进程的退出状态,通常由 系统调用或其他导致进程终止的事件传递。: 表示该函数不会返回。8.2.1. 检查和同步线程组退出检查中断状态:确保中断未

2025-04-25 17:07:51 161

原创 【Linux内核设计与实现】第三章——进程管理03

由于将具体拷贝页面的任务更变为,当新进程需要修改时才发生实际拷贝,这样能够加快进程的执行速度,也不会浪费额外内存空间(进程无需修改时便不需要拷贝页面)。,这时陷入页面错误处理程序,才开始为子进程分配新的物理页面,并将之前的只读页面内容复制到新页面中。函数只会复制父进程的页表项,并将子进程的页表项标记为只读权限,而不直接拷贝物理页面给子进程。,子进程能够继承或共享父进程的内存布局,从而实现高效的进程创建。函数,按照道理,该函数就是为新进程拷贝父进程的内存空间,那么现在就具体来看看其中发生了什么。

2025-04-21 20:05:20 189

原创 【Linux内核设计与实现】第三章——进程管理02

而本文仅涉及进程管理的内容,因此并不算完全分析该函数,在后面的文章中笔者将会和大家一同更加深入的学习完全透彻的理解整个过创建进程的所有细节过程。设置新进程的标志位和链表结构,为后续的调度和管理做好准备。系统中的每个进程必有一个父进程,相应的,每个进程也可以拥有零个或多个子进程。函数中对新进程的资源和上下文进行初始化和复制的部分,涉及共享内存、权限、安全性、文件系统、信号处理、内存管理、命名空间、IO 上下文、线程上下文等多个方面。)进程的机制,首先在新的地址空间里创建进程,读入可执行文件,最后开始执行。

2025-04-21 20:01:36 142

原创 【Linux内核设计与实现】第三章——进程管理01

内核栈的定义如下,内核栈在理论上被定义为一个union,该结构被称之为联合体或者共用体,该类型的特性是 “一个联合体的大小等于其内部所占空间最大的成员大小,并且所有成员都共享同一段内存”。根据这个特性,我们也就知道了一个内核栈的大小就是。#endif为什么这里笔者要强调“理论上”一词,这是由于在以往较旧版本的内核中的确是这样做的,在网络上有很多博客和文章都在介绍内核栈也是用的较老版本的内核代码,因此他们的说法也是对的。较老版本的内核中的内核栈是将与 真正的内核栈stack绑定在一起通过。

2025-04-21 19:41:27 227

原创 【ChCore Lab 01】Bomb Lab 拆炸弹实验(ARM汇编逆向工程)

在实验中提供了一个二进制炸弹程序bomb以及它的部分源码bomb.c。在bomb.c中,你可以看到一共有6个phase。对每个phasebomb程序将从标准中输入中读取一行用户输入作为这一阶段的拆弹密码。若这一密码错误,炸弹程序将异常退出。你的任务是通过GDB以及阅读汇编代码,判断怎样的输入可以使得炸弹程序正常通过每个phase。如果没有汇编基础的同学可以通过以下链接熟悉ARM ISA,如果之前只学过X86指令的话,看起来会更快一点。由于每个phase前都使用到了read_line。

2025-04-11 17:17:41 1065

原创 【Rust】集合的使用——Rust语言基础16

看过上一篇博客的长篇大论一定很疲惫,不过笔者保证这一篇我们将会很轻松的度过~在其它编程语言中也会有集合这样的类似概念,例如在C++中将这种数据结构称为容器,而在Rust中则将这些数据结构称为集合集合是一种非常有用的数据结构,当有一类具有相同属性或者共同点的东西归类或统计时,集合就会派上大用处。在Rustvector:存储一系列同类型数量可变的值;字符串(string):这时字符的集合,本文将会着重介绍它;哈希 map(hash map):每个成员是由一个唯一存在的关键字(key。

2025-03-20 17:27:21 923

原创 【Rust】包和模块管理,以及作用域等问题——Rust语言基础15

use:将路径引入作用域;pub:使对应项变为公有性质;as:为同名函数起别名。rust项目是从crate根节点开始检索代码:这很好理解,对于一个二进制crate的根就是,而库则是src/lib.rs,就类似在C/C++中总是以main函数开始;声明模块:在crate根文件中用mod关键字可以声明一个模块,如:// 中国最大的保时捷&法拉利元素融合高性能新能源汽车集团这便是声明了一个xiaomi_car模块,而当后是一个大括号时,这样的方式成为内联。

2025-03-19 20:53:06 1365 4

原创 【Rust】枚举和模式匹配——Rust语言基础14

的极为强大的控制流运算符,它允许我们将一个值与一系列的模式相比较,并根据相匹配的模式执行相应代码。语法是一个泛型参数,虽然目前还没学习到,但相信大家也不陌生,泛型在其它编程语言中也是很常见和重要的存在。的概念,由于考虑到所有变量都存在一种空值和非空值的状态会为编程语言带了巨大问题甚至是会引起各种漏洞,因此。匹配是穷举匹配,必须要为所有可能的结果编写对应的匹配处理过程,否则编译器将会阻止这种情况。这样以来,条件控制语句我们也掌握的差不多了,看完了,也懂了,让我们试着用一下吧。,如果其中含有一个值,将其加一。

2025-03-14 16:15:26 832

原创 Linux 常用测试网络带宽命令

有关iPerf使用方式可参考笔者这篇博客介绍。

2025-03-10 12:03:21 341

原创 【iperf】Linux 下使用 iperf 测试网卡带宽

iPerf是一款开源的网络性能测试工具,用于测量网络带宽、延迟、抖动和数据包丢失等指标。它支持TCP和UDP协议,广泛用于评估网络吞吐量、服务器性能及网络配置优化。带宽测试,测量 TCP 和 UDP 的最大吞吐量。支持单线程或多线程(并行连接)测试。TCP:测试可靠传输下的最大带宽。UDP:评估丢包率、抖动和指定带宽限制的性能。

2025-03-10 11:09:31 915

原创 【EXO】在家用日常设备就可以搭建自己的 AI 集群

exo项目的口号是 “在家中使用日常设备运行自己的AI集群”。exo是一个开源项目,旨在利用日常设备(如iPhoneiPadAndroidMacLinux等)运行自己的AI集群。通过动态模型分区和自动设备发现,exo能够将多个设备统一成一个强大的GPU,支持多种模型如LLaMAMistralLlaVAQwen和Deepseek。Exo 还提供了一个ChatGPT兼容的API,使用户可以轻松地在自己的硬件上运行模型。

2025-02-27 15:40:27 1114

原创 【Deepseek】Linux 本地部署 Deepseek

本文介绍在Linux系统上部署。本文教程是面向所有想体验AI玩家的一个简易教程,因此即使是小白也可以轻松完成体验,话不多说立马着手去干。

2025-02-20 15:24:09 7729 6

原创 【Deepseek】Windows本地部署Deepseek——小白版

本文介绍在Windows系统上部署Windows系统版本必须是Windows10或以上版本。本文教程是面向所有想体验AI玩家的一个简易教程,因此即使是小白也可以轻松完成体验,话不多说立马着手去干。

2025-02-13 17:45:58 1287

原创 Centos7.9 开机进入紧急模式 (Entering emergency mode, xit the shell to cont inuelupeiourna lctlto view suste)

异常断电后再次开机就自动进入紧急救援模式,并无法再重启开机。

2024-11-01 10:34:14 1603

原创 CentOS 7 编译安装 sqlite3

解压源码包,并进入源码目录。编译并安装,会默认安装到。目录下,也可通过添加。

2024-07-10 15:35:19 764

原创 CentOS8 解决错误:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist*

【代码】CentOS8 解决错误:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist*

2024-06-27 16:44:24 400 1

原创 Linux 上清理 SSSD Cache

只需删除存储缓存记录的文件即可轻松删除SSSD缓存,或者可以使用sss_cache工具更干净地完成此操作,该工具将使缓存中的指定记录无效。

2024-04-23 09:52:50 1268

原创 为 OpenBMC 添加一个新的系统

在上一篇文章中向大家介绍了OpenBMC的是什么以及它的作用和应用场景,并且以一个自带的示例平台romulus展示了从下载源码包开始到启动系统并访问Web控制页面的整体构建流程。通过前文已经了解到如何为已有的平台构建系统镜像,下面我们来探索一下如何为我们自己的平台构建OpenBMC的系统镜像。

2024-03-06 15:35:05 1437

原创 OpenBMC 示例的编译和构建

OpenBMC项目是一个Linux基金会协作开源项目,它生成底板管理控制器(BMC) 固件堆栈的开源实现。OpenBMC是BMC的Linux发行版,旨在跨异构系统工作,包括企业、高性能计算(HPC)、电信和云规模数据中心。2014年,四名Facebook程序员在Facebook黑客马拉松活动中创建了一个名为OpenBMC的开源BMC固件堆栈原型。2015年,IBM与Rackspace合作开发了开源BMC固件堆栈(也称为OpenBMC这些项目仅在名称和概念上相似。2018年3月,OpenBMC成为Linux。

2024-02-27 15:43:06 4055 7

原创 Linux 测试远程端口是否连通

【代码】Linux 测试远程端口是否连通。

2024-01-09 14:09:28 802

原创 【ChCore Lab 00】ChCore Lab 环境简单搭建

安装交叉编译工具链。

2024-01-08 11:58:47 930

原创 CentOS 9 (stream) 安装 Docker

Docker是一个开源的容器化平台,可帮助开发者轻松地创建、部署和运行应用程序。Docker使开发人员能够在一个独立的容器中打包应用程序及其依赖项,这样他们就可以轻松地将应用程序移植到任何其他环境中。DockerDockerDockerDockerDockerDockerDockerDockerDockerDockerDockerDockerDockerDockerDockerDocker使用DockerDockerDockerDockerDockerDocker。

2024-01-05 11:07:49 2435

转载 eBPF 介绍

eBPF.io 是学习和协作 eBPF 的地方。eBPF 是一个开放的社区,每个人都可以参与和分享。无论您是想阅读第一个介绍 eBPF 文档,或是寻找进一步的阅读材料,还是迈出成为大型 eBPF 项目贡献者的第一步,eBPF.io 将一路帮助你。下面的章节是对 eBPF 的快速介绍。如果您想了解更多关于 eBPF 的信息,请参阅 eBPF & XDP 参考指南。无论您是希望构建 eBPF 程序的开发人员,还是对 eBPF 的解决方案感兴趣,了解这些基本概念和体系结构都是有帮助的。

2023-12-26 16:18:54 1188

原创 浪潮信息 KeyarchOS 安全可信攻防体验

EDR作为KeyarchOS的安全工具,通过安装在KeyarchOS主机上的本地客户端(Agent)与管理中心联动,提供病毒木马、勒索软件、暴力破解等攻击的查杀防护功能,防御未知程序运行和关键业务文件篡改。为主机提供安全稳定的运行环境,为业务的开展保驾护航。

2023-12-05 11:50:25 1177

OS-Course-Lab20250411.tar.gz

OS-Course-Lab20250411.tar.gz

2025-04-11

wallpaper01

wallpaper01

2024-07-25

Excel Process-IM

具体代码解析课查看下面博客。 https://blog.csdn.net/qq_36393978/article/details/132492246#comments_31024061 https://imaginemiracle.blog.csdn.net/article/details/132542318

2024-01-23

【Qt QAxObject】使用 QAxObject 高效任意读写 Excel 表

【Qt QAxObject】使用 QAxObject 高效任意读写 Excel 表

2023-08-29

windows-win32-com.pdf

Windows 的组件模型对象介绍。

2023-08-29

zlib-1.2.13.tar.gz

zlib-1.2.12.tar.gz

2022-12-06

lmbench-3.0

lmbench是个用于评价系统综合性能的多平台开源benchmark 也可作为内存测试工具,带宽、延时

2022-07-26

cffi-1.14.0.tar.gz cffi-1.15.0.tar.gz

cffi-1.14.0.tar.gz cffi-1.15.0.tar.gz

2022-06-21

《GCC编译流程:从源代码到可执行程序——浅析编译原理》—— 程序的基本编译流程

《GCC编译流程:从源代码到可执行程序——浅析编译原理》—— 程序的基本编译流程

2022-05-09

《GCC编译流程:从源代码到可执行程序——浅析编译原理》—— 程序的基本编译流程.pdf

《GCC编译流程:从源代码到可执行程序——浅析编译原理》—— 程序的基本编译流程.pdf

2022-05-09

gcc-12.1.0.tar.gz

GCC 12.1.0源码,仅用于个人学习。

2022-05-09

驱动程序-pl2303_2.7z

pl2303 windows驱动

2021-06-03

libpango_for_easyconnect.tar.gz

libpango_for_easyconnect.tar.gz

2021-08-25

gmp-6.2.0.tar.bz2

gmp-6.2.0.tar.bz2

2021-07-12

ckermit 9.0.zip

C-kermit Linux上的一款串口链接软件

2021-07-14

perl-5.24.1.tar.gz

perl-5.24.1.tar.gz

2021-07-14

perl-cross.tar.gz

perl-cross.tar.gz

2021-07-14

mpfr-im-4.1.0.tar.gz

mpfr-im-4.1.0.tar.gz

2021-07-12

mpc-1.2.0.tar.gz

mpc-1.2.0.tar.gz

2021-07-12

mmap.tar(与Linux内存管理详细讲解文章的匹配代码)

与Linux内存管理详细讲解文章的匹配代码,需要参考的朋友们可自行下载。(注:仅供学习使用!)

2019-11-07

空空如也

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

TA关注的人

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