![](https://img-blog.csdnimg.cn/direct/f39870aa105f4db48f2deb340dc068f9.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【操作系统】
文章平均质量分 93
本人在学习操作系统时整理的笔记
我要成为C++领域大神
code
展开
-
【高性能服务器】poll模型
🔥❤️poll 不再用 BitsMap 来存储所关注的文件描述符,取而代之用动态数组,以链表形式来组织,突破了 select 的文件描述符个数限制,当然还会受到系统文件描述符限制。但是 poll 和 select 并没有太大的本质区别,都是使用「线性结构」存储进程关注的 Socket 集合,因此都需要遍历文件描述符集合来找到可读或可写的 Socket,时间复杂度为 O(n),而且也需要在用户态与内核态之间拷贝文件描述符集合,这种方式随着并发数上来,性能的损耗会呈指数级增长。原创 2024-07-19 18:51:09 · 1085 阅读 · 7 评论 -
【Linux】锁|死锁|生产者消费者模型
🔥❤️互斥锁可以避免多线程同时访问资源,避免资源异常,结果异常。在读写全局数据时加上锁,读写完成后解锁。pthread_mutex_t lock 互斥锁的数据类型原创 2024-06-26 21:41:37 · 1189 阅读 · 10 评论 -
【Linux】线程Thread
🔥❤️线程是进程中的一个执行单元经典的并发模型,多进程模型,占用大量的内存开销,庞大的进程间调度开销,提供一种开销更小,更轻量级的并发解决方案,多线程技术。线程在进程中,与进程共享资源和数据,进程是容器,线程是执行单元,进程退出可能导致所有线程退出。每个进程中都有一个主控线程,还有其他的普通线程,操作系统会给进程分配需要的内存单元。不支持线程技术的操作系统可以忽略线程概念,进程是调度单位。多线程操作系统下,进程是内存管理单位,线程才是唯一的调度单元。原创 2024-06-26 21:27:59 · 1181 阅读 · 2 评论 -
【Linux】使用信号进行进程间通信
🔥❤️父进程屏蔽SIGUSR1,然后将这个屏蔽集继承给子进程,子进程创建后默认屏蔽SIGUSR1,而后子进程完成信号捕捉。捕捉设定完毕,解除对SIGUSR1的屏蔽。这样可以避免子进程还未捕捉完成,就被先抵达的信号杀死。函数是一个用于向指定进程发送信号的函数,并附带一个额外的整数或指针值。提供了一个更高级的接口,可以携带附加数据,从而实现更复杂的进程间通信。结构体用于绑定捕捉函数,可以绑定的捕捉函数的原型取决于结构体中的。联合体,可以包含一个整数或一个指针值。函数可以携带数据进行传递,整型或者指针,取决于。原创 2024-06-25 18:12:28 · 440 阅读 · 0 评论 -
【操作系统】信号Signal超详解|捕捉函数
🔥❤️内核层与用户层就是不同级别的CPU访问权限。可以参考 Intel单核处理器的特权级别(Privilege Levels),也称为保护环(Protection Rings)。这种模式在操作系统中也存在,用于管理和限制不同层次的软件对硬件资源的访问权限。防止低权限的代码(如用户进程)直接访问高权限的资源(如操作系统内核),减少系统被恶意攻击。Level 0(环0)特权级别:最高级别的CPU权限,内核层(Kernel Mode)。访问权限:可以访问所有的硬件资源和执行所有的CPU指令。原创 2024-06-23 18:58:27 · 1192 阅读 · 8 评论 -
【Linux】孤儿进程|守护进程|Shell脚本设置守护进程开机自启
🔥❤️守护进程是孤儿进程的一种特殊情况,开发者创建父子进程模型,让父进程退出,子进程变为守护进程。是一种人为的孤儿进程。守护进程(Daemon Process)是在计算机系统中以后台方式运行的特殊进程,经典的后台服务进程。持续执行在后台完成特定服务,不干预前台任务。不依赖于终端或会话,它独立于终端控制并在系统级别执行特定的任务。普通的软件进程随用户持续,生命周期较短。守护进程的生命周期较长,开机启动关机结束,持续服务于平台。守护进程不能持续占用系统资源(CPU、内存等),长时间处于低开销模式。原创 2024-06-22 10:10:05 · 1909 阅读 · 10 评论 -
【操作系统】进程组Group|进程会话Session
🔥❤️一个进程组一般由一个组长和若干组员组成。终端进程被创建,默认就是进程组的组长进程(系统会分配一个进程组)。组长进程的唯一标志:组id==进程id原创 2024-06-21 13:57:50 · 550 阅读 · 0 评论 -
【操作系统】MMAP内存映射|零拷贝
🔥❤️MMAP:将文件映射到进程的用户空间,使得进程之间可以直接通过内存访问文件内容,从而实现文件内容的共享,而不需要通过传统的读写方式来操作。适用于大型数据的共享和持久化。使用mmap完成进程间的通信,也是确定通信方向,一个负责编辑修改映射内存,一个负责打印映射内存数据,不要让两端同时修改访问映射内存,会出现数据异常。私有映射:拷贝映射,将映射文件的数据拷贝一份到映射内存,两份数据独立无关联。原创 2024-06-20 14:59:01 · 1182 阅读 · 6 评论 -
【操作系统】pipe&mkfifo|管道详解
🔥❤️在进程的内核块创建管道缓冲区,由循环队列(circular buffer)实现。遵循先进先出,具有一定的暂存能力。管道缓冲区的大小是4k,老版本Ubuntu的管道大小都是64k管道通过pipe函数创建的读写文件描述符实现向管道写入和读取数据。原创 2024-06-19 11:27:59 · 1260 阅读 · 0 评论 -
【操作系统】进程间通信IPC
🔥❤️进程间通信(Inter-Process Communication)的简写是IPC,可以利用这种技术完成多个进程间的数据传递,信息收发。原创 2024-06-19 11:20:22 · 887 阅读 · 1 评论 -
【操作系统】多进程拷贝|进程重载
🔥❤️多进程模式下,如果某个进程失败,只需重新启动该进程或重新分配任务,而不必重新开始整个文件拷贝,提高了拷贝任务的健壮性。:通过将文件拷贝任务分散到多个进程,可以减小单个进程的负载,使系统在执行大文件拷贝时仍能保持较好的响应性。:在多进程环境下,进程在时间片内与CPU进行交互,时间片用完时进程会被中断,等待下一次CPU使用权限。:通过多进程处理,可以更高效地利用系统资源(CPU、内存),减少大文件拷贝任务的完成时间。在需要同时执行多个文件拷贝任务的场景,多进程可以同时处理多个任务,提高整体处理效率。原创 2024-06-18 16:00:47 · 1029 阅读 · 1 评论 -
【Linux】深入剖析Linux文件系统
🔥❤️块组描述符表(Block Group Descriptor Table)是在 ext2、ext3 和 ext4 等文件系统中用于存储关于文件系统块组的信息的数据结构。块组描述符表存储了每个块组的描述符Block bitmap起始位置。块组中空闲inode(理论存储文件数量)和已分配inode的数量。inode bitmap起始位置。inode table起始位置。data block起始位置。块组描述符表通常存储在文件系统的固定位置,以便文件系统在挂载时能够快速访问。它是文件系统的原创 2024-05-29 10:23:09 · 1372 阅读 · 1 评论 -
【Linux】僵尸进程|wait&waitpid函数详解
🔥❤️僵尸进程(Zombie Process)是指一个已经完成执行(终止)的子进程,在父进程没有调用wait()或waitpid()来获取子进程的终止状态之前,该子进程的进程描述符仍然存在于系统中的状态。原创 2024-06-17 17:40:34 · 945 阅读 · 6 评论 -
【Linux】execl函数详解|进程重载
🔥❤️execl函数用于执行一个新的程序,为一个进程的0-3G用户空间进行重载。执行一个指定的可执行文件,来替代当前进程,也就是说,它会加载一个新的程序映像并运行它,取代当前进程。原创 2024-06-17 12:39:40 · 742 阅读 · 0 评论 -
【Linux】文件I/O操作
🔥❤️当我们在程序中调用C标准库函数,比如printf,send,cout,会传递相应的参数给该函数。这些函数虽然具体功能不同,但是底层调用的都是。C标准库函数的内部实现通常会调用底层的系统函数来完成所需的功能。举例来说,printf函数内部可能会调用write系统函数来将格式化的输出写入标准输出设备。系统函数(例如write)是由操作系统提供的函数,用于执行底层的系统操作。这些操作可能涉及到与设备、文件系统、网络等底层资源的交互。系统函数通常会调用底层的系统调用来实际执行操作。原创 2024-05-24 11:19:09 · 779 阅读 · 0 评论 -
【Linux】虚拟文件系统
🔥❤️虚拟文件系统(Virtual File System, VFS)是操作系统内核的一部分,它提供了一个抽象层,使得不同文件系统能够统一接口进行操作。VFS使得应用程序可以以统一的方式访问不同类型的文件系统,如本地文件系统、网络文件系统等,而不需要关心底层文件系统的具体实现。原创 2024-05-30 17:10:09 · 862 阅读 · 0 评论 -
【Linux】fork函数详解|多进程
🔥❤️fork()函数用于创建一个新的进程,该进程称为子进程。原有的进程称为父进程。子进程是父进程的副本,但是它们有不同的进程ID(PID)。默认情况下所有进程都有父进程,除了init进程,init是系统启动初始化首个服务进程,所有系统下的进程都是它的子集fork()fork()fork()我们写一段demo程序,发现会输出两次Running。fork()函数被调用一次,导致当前进程(父进程)被复制出一个新的进程(子进程)。子进程会复制父进程的地址空间、寄存器状态,包括父进程的输出缓冲区。原创 2024-06-16 11:55:03 · 1262 阅读 · 2 评论 -
【操作系统】进程|进程管理
🔥❤️我们编写的程序是存储在电脑磁盘中的静态数据,是进程的静态表现,例如微信,包含程序文件、程序数据、程序配置。当我们执行可执行文件exe后(启动),会创建进程,装载到内存中去,CPU会执行程序中的指令,这个运行中的程序,就被称为「进程」(Process)。进程属于系统中的逻辑单位,没有实体。原创 2024-06-15 17:32:11 · 1083 阅读 · 2 评论 -
【操作系统】五分钟读懂内存管理
🔥❤️内存(Memory),通常指计算机内存,是计算机系统中的一种存储设备,用于临时存储数据和指令,以便处理器能够快速访问和处理。内存是计算机系统的重要组成部分,主要用于存储正在运行的程序和操作系统的数据,确保系统能够高效地执行任务。内存通常分为两大类:随机存取存储器(RAM)和只读存储器(ROM)。原创 2024-05-30 21:22:48 · 1469 阅读 · 3 评论