- 博客(16)
- 收藏
- 关注
原创 透过 /proc 看见内核:Linux 虚拟文件系统与 systemd 初始化初探
通过这篇文章,我们从/proc是每个进程实时的状态镜像,提供了强大的观察与调试能力;/proc/1/揭示了systemd的诞生过程,以及内核如何启动第一个用户空间进程;本质上是一个功能强大的 ELF 可执行程序,承担整个系统初始化和服务调度任务;/proc文件系统并非来自磁盘,而是由内核动态生成,与sysctl等内核数据结构紧密耦合;在容器中,/proc则体现出 Namespace 隔离的魔力,是进程、资源和安全视图隔离的核心接口。
2025-04-02 17:11:32
1020
原创 Linux进程间通信方式
在现代操作系统中,进程是独立运行的基本单位,而进程间通信是确保多个进程协同工作的关键机制。由于不同进程运行在各自的虚拟地址空间中,彼此无法直接访问对方的数据,因此需要IPC机制来交换信息、同步状态,甚至共享内存。在Linux系统中,进程间通信方式多种多样,包括管道(Pipe)、消息队列(MessageQueue)、共享内存(SharedMemory)、信号量(Semaphore)、信号(Signal)、套接字(Socket)等,每种方式适用于不同的应用场景。
2025-03-20 15:23:27
824
原创 Linux 进程的一生(二):从 CFS 到 EEVDF,调度器的演进与原理
回顾了 Linux 进程调度器的演进,从早期的 O(n) 调度算法,到 O(1) 调度器,再到目前主流的 CFS,并分析了 EEVDF 在 CFS 之上的改进。
2025-03-12 11:16:50
706
原创 从简单 Rocket 实现到 RESTful API:计算机网络中的 Web 通信解析
本文将从计算机网络的角度,结合 Rocket 框架,深入解析 HTTP、TCP 连接管理等关键概念。
2025-03-11 13:24:18
790
原创 Rust基础学习
是Rust中的包管理工具,可以帮助创建、构建和管理 Rust 项目,同时还能管理项目的依赖关系。一共做了四件事:Cargo文件: cargo编译默认为Debug模式,在该模式下编译器不会对代码进行任何优化。也可以使用**–release**参数来使用发布模式。release模式,编译器会对代码进行优化,使得编译时间变慢,但是代码运行速度会变快。 官方编译器rustc,负责将rust源码编译为可执行的文件或其他文件。使用new加要创建的包的名称: 它创建一个带有包名称的目录,并且在该目录内有一个
2025-03-08 19:41:10
807
原创 Linux 脏页写回流程
在 Linux 系统中,write()系统调用不会立即将数据写入磁盘,而是利用进行缓冲,提高写入性能。实际的磁盘写入由内核的后台线程异步完成,从而减少用户进程的阻塞时间。下面详细分析write()的执行流程以及数据写回(Writeback)机制。
2025-03-04 20:09:51
869
原创 Linux资源隔离基础(一):cgroup
Linux内核负责系统中所有硬件的可靠交互。这不仅包括使操作系统理解硬件的必要代码,还涉及限制特定程序对系统资源的占用。内核必须将系统内存合理分配给各个应用程序,以确保计算机的正常运行。通常情况下,Linux系统可以让大多数应用程序无限制地运行,而不会出现问题,因为应用程序间能够良好地协同工作。但是,如果某个程序出现故障并开始占用所有可用内存,会发生什么呢?为应对此类情况,内核引入了OOM(Out Of Memory) Killer机制。
2024-10-29 23:00:20
1608
1
原创 Linux CPU 多级缓存与实践
博文内容为 Linux CPU 多级缓存与实践,内容涉及:物理核与逻辑核的概念,CPU多级缓存,CPU的L1/L2/L3缓存查看,缓存流程写入策略,缓存一致性策略,CPU缓存分析。
2024-10-15 15:29:38
805
原创 Linux:并发与同步(二)----排队自旋锁、互斥锁及源码分析
然而,自旋锁(spinlock)和其他锁不同,虽然它们存在于进程中,但对一个 CPU 来说,自旋锁的数量是固定的。最终,通过自旋锁和等待机制确保锁的正确获取,同时处理各种错误和信号情况。 顾名思义,即认为锁的持有者正在临界区执行时,可以断定锁的持有者可以很快退出临界区并且释放该锁,比起进入睡眠队列,不如像自旋锁一样等待,由于睡眠和唤醒付出的代价可能更高。MUTEX_FLAG_HANDOFF:对互斥锁的等待队列中的第一个等待者会设置这个标志位,锁持有者在解锁的时候把锁直接传递给第一个等待者。
2024-06-17 21:32:10
979
3
原创 Linux:并发与同步(一)
本博客将深入探讨Linux中的并发与同步机制,从原理到实践,逐步揭示其中的奥秘。我们将介绍Linux中常见的并发编程概念,例如进程、线程、锁和信号量,以及它们在实际应用中的使用技巧和最佳实践。 并发访问,指的是多个内核代码路径同时访问和操作数据,这个代码可执行路径有以下几种情况: 临界区指的是访问和操作共享数据的代码段,其中的资源不能被多个执行线程访问。为了防止并发访问,就需要保证访问临界区的原子性,即在临界区内不能有多个并发源同时执行。 在内核中产生并发访问的并发源主要有以下几种,但是分单处理器系统
2024-06-11 23:52:04
1177
3
原创 打印虚拟地址空间中的字段
预处理(Prepressing)—>编译(Compilation)—>汇编(Assembly)—>链接(Linking)gcc -E test.c -o test.i命令,可以查看预处理之后的test.i文件,预处理器把所有的头文件替换为实际文件的内容,并去掉了注释等等。gcc -S test.c -o test.s命令,可以查看编译后的汇编代码:接下来是汇编,将编译后的汇编代码翻译为机器码,几乎每一条汇编指令对应一句机器码。
2023-10-16 15:50:58
188
1
原创 【哈尔滨工业大学李治军】操作系统学习笔记:系统调用及【实验 3】系统调用实现
操作系统接口连接了上层用户和操作系统软件。命令行首先应用程序编写的程序将编译成一个可执行文件。而与此同时,系统在刚开始的初始化完成后,会循环停留在shell里(可以理解为桌面,不断等你施加命令),当用户输入命令行指令后,系统将运行上面的那个可执行文件。图形按钮由getmessage函数把消息从内核的队列中抽出来,然后根据消息调用消息处理函数,做相应的反应。操作系统接口(系统调用)操作系统接口连接谁?连接操作系统和应用软件,并不是直接与硬件交互了。如何连接?
2023-10-11 13:34:52
555
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人