Linux
未读进程间通信 —— 匿名管道篇 1. 什么是管道 管道就是一个内核缓冲区,允许一个进程写数据,另一个进程从中读数据。 它像一根水管:一头写入,一头读取,中间是内核帮我们传递数据。 2. 管道的直接原理 1. 底层本质 管道就是操作系统在内核空间里开辟的一块 内存缓冲区,这个缓冲区由内核维护,进程不能直接访问,只能通过 文件描述符 进行读写。 管道使用了 环形缓冲区(循环队列结构),读写两端由内核控制。 当我们调用 pipe(fd),操作系统会: 在内核里创建一个缓冲区。 返回两个文件描述符: fd[0]:读端读进程:read(fd[0], buf, size); 从管道中读取数据(从内核缓冲区读)。 fd[1]:写端写进程:write(fd[1], data, size); 把数据写入管道(进入内核缓冲区)。 pipefd[0] → 0 → 嘴巴 → 读书 → 读端 pipefd[1] → 1 → 钢笔 → 写字 → 写端 3. 匿名管道的接口 1. pipe() 函数原型 在 Linux 中,pipe() 是用于创建 匿名管道 的系统调用,原型如下 ...
Linux
未读进程间通信前言 1. 进程间通信的介绍 1. 进程间通信的目的 进程通信的核心目的是在多个独立运行的进程之间传递数据、同步执行、共享资源。即实现多个进程在数据层面的交互。 实际应用需求: 数据共享: 多个进程处理同一批数据,共享同样的资源。 通知事件: 某一进程完成任务后通知其他进程(如进程终止时要通知父进程)。 某种协同: 控制对临界资源的访问,防止竞争。 服务请求与响应: 客户端请求服务器、子进程向父进程返回结果。 进程控制 :有些进程希望完全控制另一个进程的执行(如 Debug 进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。 [!NOTE] 每个进程本质上是一个 独立的虚拟地址空间(由 MMU/页表保护),天然是“互不相见”的。因为进程独立性的存在,导致进程通信的成本比较高,所以 通信是有成本的!想要通信,必须要构造一个 “公共的资源”(可访问区域)。这个“资源”谁来提供?—— 操作系统。 2. “公共资源”为什么不是由一个进程来提供? 如果由 某个进程创建并拥有 这个资源: 该资源的生命周期就依附于该进程。一旦这个进程结束,资 ...
VS Code 连接 Linux 服务器全流程解析 关于 VS Code 最基本的使用这里就不过多赘述了,因为我这里之前已经装好配置过 VS Code 了,下面开始介绍如何使用 VS Code 连接远端主机进行开发: 1. 使用 VS Code 连接远端主机 首先在 Windows 下打开我们的 VS Code,找到扩展,下载插件 Remote - SSH。 下载完成后,添加远端主机: 摁下键盘的 F1 键,输入 Remote-SSH: Open SSH Host 的字样,在下方找到添加新的主机。 进行登录:基本格式是 ssh root@……(ssh + 空格 + root@ + 自己的公网 IP),就是当初在 Xshell 中进行登录一样。 本地记录: VS Code 会提示将在本地将远端的用户名和密码记录下来。 如何找到这个所谓的 config 文件? 我们的刚刚进行的本地记录文件(config)可以从 C 盘 的用户目录下的 .ssh\config 中找到,用记事本打开该文件,就是本地对远端主机的配置信息。 连接远端主机: 选中左边窗口栏的 远程资源管 ...
C++
未读匿名函数 —— Lambda 表达式 1. 什么是匿名函数(Lambda 表达式)? 在 C++中,匿名函数通常指的是没有名称的函数,也叫做“lambda 表达式”。匿名函数可以在代码中定义并立即使用,常见于临时的、一次性使用的操作。对于类和对象来说,匿名函数常常用于定义类内部的行为或操作。Lambda 表达式的基本形式如下: 1[捕获列表](参数列表) -> 返回类型 { 函数体 } 捕获列表:决定了 lambda 函数是否可以访问外部变量。 参数列表:与普通函数一样,lambda 函数也可以接收参数。 返回类型:指定 lambda 函数返回的类型(如果不指定,编译器会自动推断)。 函数体:包含函数的实际操作。 示例: 1234auto add = [](int a, int b) -> int { return a + b;};std::cout << add(3, 4); // 输出 7 这里,[] 是捕获列表,表示 lambda 函数没有捕获外部变量,int a, int b 是参数列表,-> i ...
Git 的使用 1. Git 版本迭代 1. 查看 Git 版本 1git --version # 查看当前安装的 Git 版本号 2. Windows 系统更新 Git 访问 Git for Windows,下载最新版安装程序。 运行安装程序,如果存在旧版本会直接覆盖升级成新版本。 安装完成后,再次执行 git --version 验证。 2. Git 仓库的基本使用 1. 新建仓库 去 GitHub/Gitee 网页端,点击新建仓库,填写仓库名、介绍等信息。 可选择开源或私有,是否初始化 README、License、.gitignore 等,按需配置。 2. 初始化 Git 仓库(本地仓库) 1git init # 在本地初始化一个空仓库(会生成隐藏的 .git 文件夹) 3. 关联远程仓库 添加 GitHub 或者 Gitee 仓库作为远程地址(默认命名为 origin): 12git remote add origin 仓库链接 # 把远程仓库链接绑到本地,默认叫 origingit remote -v # 查看远程仓 ...
Linux
未读动静态库 —— 动态库 1. 库的制作者 如何制作动态库 1. 编写库的源代码和头文件 创建头文件:声明库的对外接口函数。 创建源文件:实现头文件中声明的函数。 2. 编译为位置无关目标文件 -fPIC 关键作用:生成位置无关代码(Position Independent Code),使代码可被加载到内存任意位置,这是动态库的核心要求。 3. 链接生成动态库文件 -shared 参数:指示链接器生成共享库(.so 文件)。 4. 组织发布文件 将以下文件提供给使用者: 1234├── include/ # 头文件目录│ └── mathlib.h # 接口声明└── lib/ # 库文件目录 └── libmathlib.so # 动态库二进制 2. 动态库 demo 1. mathlib.h(头文件)—— 对外接口声明 12345678//相当于 #pragma once , 用于防止重复包含头文件#ifndef MATHLIB_H#define MATHLIB_Hint add(int a, int ...
4630436162ade97ba2718b7d0c4b3b6345cfbadc0d32b89a1bd3fd7ce10543c112980c579714dbaddada922bb1c5210d84f7f04fda52e137b1cb9270e49d94cbcb6f7b4f2a8382b1e2f940e5ef3b6277756321af41592d0f85e2f3290fe6ea07ba1464b00c849dad4933b82ce09a6614623baaf0923503c5e40bc0bef581ae2c47c628d46ad390d59062dd32a0425ceceb5f83cf472456ea8829584f745a049799478e3af5f9c05694a9ca05cce60716763be78540d366773135d245065c1109a82cac8d68a67445f18390970f15ebbaddc5347a1cc2e528a32ab9afe51fef63551e0e7308e5390d3336b8f68b628bd511d6b750761a280ff ...
Linux
未读动静态库 —— 静态库 稀土掘金 | 动静态库的认识 CSDN | 理解文件系统|文件缓冲区|软硬链接|动静态库 CSDN | 相关好文 CSDN | 相关好文 1. 扩展概要(了解) 一个文件被打开操作系统要做什么:打开文件的流程 = 找 inode ➜ 创建 file 结构 ➜ 建立缓冲 ➜ 用页表映射读写 ➜ 后续 read/write 就操作 page 缓冲。 1. 为什么说“4KB Page”是核心单位? 现代操作系统使用 分页机制(Paging) 管理内存,每一页(Page)是 一块固定大小的内存单元。Linux 默认: 一页大小为 4KB。 物理内存也以页框为单位分配(如 Frame #0,Frame #1…)。 所有虚拟内存地址映射到物理内存页框时,以 4KB 为基本单位。 地址空间 页面大小 含义 虚拟地址空间 4KB/page 每个进程有自己的虚拟地址空间 物理内存 4KB/frame 物理内存被划分为一个个页框 页面表(Page Table) 将虚拟页映射到物理页框 所以:所有读写、分配、预加载、换页,都是以“页”为单位 ...
Linux
未读inode 与软硬链接 先说明一下前面没有解释的东西:文件权限后面的 1 是什么? 1. 软链接(Symbolic Link / Symlink) 1. 概念 软链接是一个特殊类型的文件,它的内容是一个 路径字符串,指向原始文件的路径。 就像 Windows 的 快捷方式; 保存的是目标路径; 用途:可以在任何地方“引用”一个程序、配置文件、目录; 常用于: 给程序创建入口路径(比如 /usr/bin/python 链接到 /usr/bin/python3.11); 让你在任意位置执行程序; 多个配置环境之间切换。 特性 描述 inode 不一致 链接文件有自己的 inode,数据内容是“路径名” 可跨分区 因为只是保存路径字符串,不依赖 inode 可对目录使用 如 /usr/bin/python 链接到 /usr/bin/python3.11 不影响原文件 原文件不变,软链接只是一个指向的“引用” 2. 相关命令 12ln -s 源文件或目录 软链接文件名ln -s /真实路径/程序 /usr/local/bin/程序名 12ln -s ...
Linux
未读理解文件系统 1. 认识磁盘磁带 由于磁盘磁带和操作系统组成原理更相关,而且相关概念用语言太抽象,所以我找到了一些比较好的视频和书籍内容来帮助理解(注意视频、书籍内容有部分知识我们不涉及,所以不懂也没关系,多出的就当是眼界扩展了): 硬盘驱动器是如何工作的?(You Tube) 硬盘的工作原理(B 站) 机械硬盘是如何工作的?(B 站) → 机械磁盘:结构与工作原理详解 → 磁带为何能记录声音?(主要了解其存储原理) 相关文章 | 博客园 相关文章 | CSDN 相关文章 | CSDN 摘自《操作系统概念精要 原书第 2 版》298 页前后(真的是很想将内容直接摘过来,奈何实在是没找到电子版,只能扫描现书将就看吧 😂)。这里的图片已经排好序,直接按照顺序看即可。推荐直接去看原书,也希望有电子版的进行贡献一下,感谢您的开源精神! 自然也少不了鸟哥啦~ 摘自《鸟哥的 Linux 私房菜 基础学习篇(第四版)》210~217 页相关内容。还是推荐看原书,就不过多赘述了。 首先说明一下磁盘的物理组成,整颗磁盘的组成主要有: 圆形的盘片(主要记录数据的部分); 机械 ...











