随笔分类 -  操作系统OS

摘要:目录 在linux中,每一个进程都被抽象为task_struct结构体,称为进程描述符,存储着进程各方面的信息;例如打开的文件,信号以及内存等等;然后task_struct的一个属性mm_struct管理着进程的所有虚拟内存,称为内存描述符。在mm_struct结构体中,存储着进程各个内存段的开始以 阅读全文
posted @ 2024-12-04 09:10 guanyubo 阅读(327) 评论(0) 推荐(0)
摘要:目录文件系统布局 文件系统布局 文件系统存放在磁盘上。多数磁盘划分为一个或多个分区,每个分区中有一个独立的文件系统。磁盘的0号扇区称为主引导记录(Master Boot Record,MBR),用来引导计算机。在MBR的结尾是分区表。该表给出了每个分区的起始和结束地址。表中的一个分区被标记为活动分区 阅读全文
posted @ 2024-12-02 16:22 guanyubo 阅读(60) 评论(0) 推荐(0)
摘要:目录主引导记录 (MBR)GUID 分区表 (GPT)引导过程安全性Linux系统启动流程 操作系统中的引导块,也称为引导扇区(Boot Sector)或主引导记录(Master Boot Record, MBR),是硬盘或其他存储设备上的一个特殊区域。它通常位于磁盘的第一个扇区(512字节),在计 阅读全文
posted @ 2024-12-01 15:41 guanyubo 阅读(567) 评论(0) 推荐(0)
摘要:目录写时复制(copy-on-write) 写时复制(copy-on-write) 参考 阅读全文
posted @ 2024-08-30 08:24 guanyubo 阅读(18) 评论(0) 推荐(0)
摘要:目录 Linux文件描述符和打开文件之间的关系 阅读全文
posted @ 2024-08-26 15:06 guanyubo 阅读(44) 评论(0) 推荐(0)
摘要:目录什么是自旋锁自旋锁较互斥锁之类同步机制的优势休眠与忙循环自旋过程自旋锁和互斥锁的区别使用C++实现自主实现自旋锁 什么是自旋锁 自旋锁(Spinlock)是一种广泛运用的底层同步机制。自旋锁是一个互斥设备,它只有两个值:“锁定”和“解锁”。它通常实现为某个整数值中的某个位。希望获得某个特定锁得代 阅读全文
posted @ 2024-07-10 13:38 guanyubo 阅读(613) 评论(0) 推荐(0)
摘要:在C++11及之后的版本中,我们可以使用std::shared_mutex和相关的读写锁机制来同步对共享资源的访问。这里我会提供一个基本的例子,展示如何使用std::shared_mutex、std::shared_lock和std::unique_lock来实现读写锁的功能。 首先,我们定义一个包 阅读全文
posted @ 2024-07-04 17:08 guanyubo 阅读(291) 评论(0) 推荐(0)
摘要:目录 参考 阅读全文
posted @ 2024-06-15 12:12 guanyubo 阅读(18) 评论(0) 推荐(0)
摘要:在处理大量数据发送时,如尝试通过send函数发送10GB的数据,由于TCP socket缓冲区大小限制,单次send调用可能并不会完全发送所有数据。例如,首次调用可能仅成功发送约256KB的数据,之后再次调用send可能会因为缓冲区已满而立即返回错误码EAGAIN,这表明必须等待缓冲区有更多空间才能 阅读全文
posted @ 2024-05-30 16:58 guanyubo 阅读(143) 评论(0) 推荐(0)
摘要:目录简介实现原理使用方法示例参考 简介 Libevent是一个开源的高性能事件通知库,它旨在为多种I/O模型和事件处理提供一个统一的接口。这一库设计用于帮助开发者编写高效、可扩展的网络服务器和客户端程序,特别适合需要处理大量并发连接的应用场景,如Web服务器、聊天服务器、游戏服务器等。 主要特点 跨 阅读全文
posted @ 2024-05-29 09:11 guanyubo 阅读(255) 评论(0) 推荐(0)
摘要:目录shm_openserverclientshmgetclientserver shm_open server C++ 可以使用 POSIX 共享内存 API 来创建和管理共享内存 server.cpp #include <fcntl.h> #include <sys/mman.h> #inclu 阅读全文
posted @ 2024-05-13 18:06 guanyubo 阅读(630) 评论(0) 推荐(0)
摘要:目录mmap/shmgetshmfile文件夹为空ipcs/ipcrm常用函数shmxxx系列1. ftok()2. shmget()3. shmat()4. shmdt()5. shmctl()shm_open系列1. shm_open2. ftruncate3. mmap4. munmap5. 阅读全文
posted @ 2024-05-13 17:59 guanyubo 阅读(1229) 评论(0) 推荐(0)
摘要:目录进程ID与线程ID内核级线程ID和用户级线程ID 进程ID与线程ID 在Linux中,进程和线程之间的关系有些特殊。传统的Unix系统(包括Linux)将线程实现为“轻量级进程”或“LWP”(Light Weight Process)。这意味着线程在内核中基本上被视为进程,但它们共享许多资源(如 阅读全文
posted @ 2024-05-13 17:57 guanyubo 阅读(457) 评论(0) 推荐(1)
摘要:ps -Lf 进程ID ps -T 进程ID gettid()系统调用 gettid() 是一个Linux系统调用,用于获取当前进程的线程ID。在使用此系统调用时,你需要包含 <sys/syscall.h> 头文件,并且可以通过直接调用或使用 syscall() 函数来进行系统调用。 注意:ps 中 阅读全文
posted @ 2024-05-11 14:51 guanyubo 阅读(151) 评论(0) 推荐(0)
摘要:目录文件系统的IO操作一、阻塞I/O(BIO)二、非阻塞I/O(NIO)三、信号驱动I/O四、异步IO五、I/O多路复用 文件系统的IO操作 在Linux中,以及大多数现代操作系统中,文件系统的IO操作通常是通过缓存IO来完成的。这种设计主要是为了提高IO性能,减少直接对磁盘的访问次数,并通过页缓存 阅读全文
posted @ 2024-03-05 10:08 guanyubo 阅读(125) 评论(0) 推荐(0)
摘要:目录selectpollepollepoll中的阻塞和非阻塞行为的设定时机epoll可读和可写是什么意思用户程序和内核程序的视角优质文章 select select() 是 Unix/Linux 系统中的一个系统调用,用于监视多个文件描述符的状态变化,从而得知哪些文件描述符是可读、可写或有异常待处理 阅读全文
posted @ 2024-03-04 21:21 guanyubo 阅读(104) 评论(0) 推荐(0)
摘要:目录概述readv 示例 (文件I/O)recv 示例 (套接字通信)recvmsg 示例 (套接字通信) 概述 readv、recv和recvmsg三个函数都是用于从文件或套接字接收数据的函数,但它们在功能和使用场景上存在一些区别。 readv函数: readv函数主要用于从文件描述符读取数据到多 阅读全文
posted @ 2024-02-07 21:32 guanyubo 阅读(1031) 评论(0) 推荐(0)
摘要:目录解释一解释二 解释一 在 socket 通信中,分散读和集中写是两种常见的 I/O 模型。 分散读(scatter read):在分散读模型中,应用程序可以在一次 readv() 系统调用中从socke读取多个缓冲区的数据。这意味着可以一次性读取多个数据包,而不必为每个数据包执行单独的 read 阅读全文
posted @ 2024-02-07 13:27 guanyubo 阅读(154) 评论(0) 推荐(0)
摘要:目录简介示例 简介 在Linux下的socket通信中,带外数据(Out-of-Band,简称OOB)是一种特殊的数据传输方式。通常,socket通信中的数据是按照顺序发送和接收的,即所谓的带内数据(In-Band)。然而,在某些情况下,可能需要发送一些紧急或重要的数据,这些数据不适合通过常规的带内 阅读全文
posted @ 2024-02-07 13:04 guanyubo 阅读(387) 评论(0) 推荐(0)
摘要:目录主机字节序和网络字节序通用socket地址专用socket地址ip地址转换函数 主机字节序和网络字节序 在 Linux 系统中,主机字节序(Host Byte Order)和网络字节序(Network Byte Order)是两个重要的概念。 主机字节序是指 CPU 直接处理数据时使用的字节序。 阅读全文
posted @ 2024-02-06 19:26 guanyubo 阅读(77) 评论(0) 推荐(0)