Linux

收录 Linux 相关的实战问题、工程习惯与开发环境经验。

13 篇文章,持续沉淀 Linux 相关实践。

2023年12月21日

操作系统:计算机基本结构

计算机基本结构为 5 个部分,分别是运算器、控制器、存储器、输入设备、输出设备, 即冯诺依曼模型 程序和数据都是存储在内存,存储的区域是线性的 计算机数据存储中,存储数据的基本单位是字节(byte) ,1 字节等于 8 位(8 bit)。每…

2023年12月21日

操作系统:CPU缓存一致性

CPU 和内存的访问性能相差大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cache 离 CPU 核心相当近,因此它的访问速度是很快的,于是它充当了 CPU 与内存之间的缓存角色 CPU Cache 通常分为三级…

2023年12月21日

操作系统:内核(Linux)

计算机是由各种外部硬件设备组成的,比如内存、cpu、硬盘等,如果每个应用都要和这些硬件设备对接通信协议,那这样太累了,所以这个中间人就由内核来负责,让内核作为应用连接硬件设备的桥梁,应用程序只需关心与内核交互,不用关心硬件的细节 内核的能力…

2023年12月21日

操作系统:内存管理

如果 CPU 直接操作内存的「物理地址」,想在内存中同时运行两个程序是不可能的 如何解决: 操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。 如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址,这样不同的…

2023年12月21日

操作系统:内存分配

在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分 每个进程都各自有独立的虚拟内存,但是每个虚拟内存中的内核地址,其实关联的都是相同的物理内存。这样,进程切换到内核态后,就可以很方便地访问内核空间内存 用户空间分…

2023年12月21日

操作系统:进程

我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就被称为「进程」(Process) 当进程要从硬盘…

2023年12月21日

操作系统:线程

线程是进程当中的一条执行流程 同一个进程内多个线程之间可以共享代码段、数据段、打开的文件等资源,但每个线程各自都有一套独立的寄存器和栈,这样可以确保线程的控制流是相对独立的 线程的优点: 一个进程中可以同时存在多个线程; 各个线程之间可以并…

2023年12月21日

操作系统:进程间通信

管道传输数据是单向的 所谓的管道,就是内核里面的一串缓存 缺点:效率低,FIFO 消息队列是保存在内核中的消息链表 在发送数据时,会分成一个一个独立的数据单元,也就是消息体(数据块),消息体是用户自定义的数据类型,消息的发送方和接收方要约定…

2023年12月21日

操作系统:零拷贝

直接内存访问(Direct Memory Access) 在进行 I/O 设备和内存的数据传输的时候,数据搬运的工作全部交给 DMA 控制器,而 CPU 不再参与任何与数据搬运相关的事情,这样 CPU 就可以去处理别的事务 用户进程调用 r…

2023年12月21日

MySQL:buffer pool

Innodb 存储引擎设计了一个缓冲池(Buffer Pool) ,来提高数据库的读写性能,当数据从磁盘中取出后,缓存内存中,下次查询同样的数据的时候,直接从内存中读取 有了缓冲池后: 当读取数据时,如果数据存在于 Buffer Pool…

2023年12月21日

网络:TCP(1)

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议 面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的; 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保…

2023年12月21日

网络:TCP(2)

在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息 常见的重传机制: 超时重传 快速重传 SACK D-SACK 重传机制的其中一个方式,就是在发送数据时,设定一个定时器,当超过指定的时间后,没有…

2023年12月21日

关于内存逃逸那些事儿

又某一日,葫芦被十三问的Golang基础知识吊打 十三: 葫芦你知道Golang的内存逃逸么,举几个栗子,以及你在项目中如何优化的 葫芦: Golang会自己进行内存分配,开发者不需要关系内存分配到哪了。内存逃逸指的是内存从栈上逃到了堆上…