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 中找到,用记事本打开该文件,就是本地对远端主机的配置信息。 连接远端主机: 选中左边窗口栏的 远程资源管理器 ...
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. 动态库 demo1. mathlib.h(头文件)—— 对外接口声明12345678//相当于 #pragma once , 用于防止重复包含头文件#ifndef MATHLIB_H#define MATHLIB_Hint add(int a, int b);int s ...
纪念“一周年”,我的成长、蜕变与收获 今天是 2025 年 5 月 22 日,一个值得纪念的日子 —— 一年前的今天,我毅然选择报班学习,踏上了改变命运的征程。在这一年里,我经历了从迷茫到觉醒的成长蜕变,踩过无数坑后总结出血泪教训,也收获了宝贵的心得与经验。这篇文章分成三个部分展开:我的成长故事、成长心得分享与总结,以及大学避坑指南。 1. 初入象牙塔:从志愿时长 100+ 到安逸下的不安我来到“大学”的日子是 2023 年 8 月 26 日,那时候倒是天真得不行,时间也多得用不完。每天就是老老实实去上课,下课后就呆在宿舍玩一玩,偶尔出去搞点志愿活动,对了,当时加入了青年志愿者社团,短短小半年时间,志愿时长已经有 100 多小时了。有时候也会去打打球,放松一下。可是这样的生活让我渐渐觉得很乏味,也不能说是乏味吧,就觉得看不到未来,如果一直这么混下去,终将一事无成,沦落到街头混饭吃。所以,我就萌生了做点什么去挣点钱的想法,当时的想法很朴实很简单,就是赚点小钱补贴生活费,顺便也为以后谋生积攒经验。 2. 搬砖记:跌跌宕宕换来的碎银几两于是,我就一头扎进了搞钱的路子。初期什么都不了解,没人 ...
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` 页相关内容。还是推荐看原书,就不过多赘述了。 首先说明一下磁盘的物理组成,整颗磁盘的组成主要有: 圆形的盘片(主要记录数据 ...
Linux
未读缓冲区 相关文章 | CSDN 1. 为什么需要缓冲区?(核心原因)先出结论:格式化 ➔ 拼接成大数据块 ➔ 缓冲 ➔ 统一输出 ➔ 保证数据连贯,减少系统调用,提高效率! 1. 提高 I/O 效率!硬件设备(尤其是磁盘、网络、终端)操作 很慢很慢,每次读写都直接操作设备 ➔ 太耗时 ➔ 系统负担重。 所以: 少量多次 ➔ 聚集成大量一次。 把「很多小的写操作」放到内存中,攒到一定量再「统一批量」写入磁盘/屏幕。 减少系统调用(syscall)次数 ➔ 提高整体程序运行效率。 简单比喻:你买菜如果每买一根葱就跑一次超市,累不累?当然要一次性买一堆,装个购物袋带回来!(这就是缓冲思想) 2. 配合格式化printf("名字:%s, 年龄:%d\n", name, age); 这种格式化输出,本质上做了两件事: 格式化处理(Format) %s、%d 等占位符 ➔ 根据数据类型,把 name 和 age 这两个变量 格式化成字符串。 例如:把整数 23 转成 "23",字符串 "Tom" 保持原样。 ...
Linux
未读重定向 相关好文 | CSDN 1. 什么是重定向?重定向本质上就是操作文件描述符(每一个打开的文件或设备在内核中都有一个编号,称为文件描述符),即 修改标准输入/输出/错误 这三个文件描述符(file descriptor,简称 FD)的指向,让它们 不再指向默认终端(屏幕、键盘),而是指向 文件、设备或者其他地方。 文件描述符编号 描述 默认指向 0 标准输入 stdin 键盘 1 标准输出 stdout 屏幕 2 标准错误 stderr 屏幕 比如常见的 shell 命令: 1ls > output.txt 背后的本质动作是: 关闭文件描述符 1(stdout) 打开或创建 output.txt 将描述符 1 指向 output.txt 文件 这样,所有本应该显示在屏幕上的内容,都会写入 output.txt 文件。 2. 常见的重定向符号 符号 含义 功能描述 示例 效果 > 输出重定向(覆盖),stdout 把标准输出写入到指定文件,若文件存在则 清空 后写入,否则创建 ls > out.tx ...











