[Linux学习]从0到1
文章平均质量分 96
从0到1,为Linux初学者提供一个简捷提升Linux认知的渠道
Chris在Coding
我们仍在旅途
展开
-
【Linux学习】线程池
线程池(Thread Pool)是一种管理和重用线程的机制,在多线程编程中,创建和销毁线程是一项开销较大的操作,因为涉及到操作系统的资源管理和线程上下文切换的成本。线程池通过预先创建一组线程并维护它们,可以避免频繁地创建和销毁线程,从而降低了系统的开销。原创 2024-02-15 17:28:59 · 1488 阅读 · 16 评论 -
【Linux学习】生产者-消费者模型
生产者 - 消费者模型( Producer-consumer problem) 是一个非常经典的多线程并发协作的模型。在多线程开发中,为了解决生产者和消费者之间速度不匹配的问题,常常会引入一个缓冲区来平衡生产和消费的速度差异。阻塞队列(Blocking Queue)是一种常用于实现生产者和消费者模型的数据结构缓冲区的作用是暂时存储生产者生产的数据,以便消费者在需要时取出。这样一来,即使生产者的速度比消费者快,生产者也不需要等待消费者立即处理数据,而是可以继续生产新的数据并将其放入缓冲区。同样,如果消费者的原创 2024-02-14 14:44:01 · 1492 阅读 · 34 评论 -
【Linux学习】线程互斥与同步
线程互斥,临界资源,互斥锁,死锁问题,避免死锁,多线程编程,临界线程互斥是一种同步机制,用于控制对共享资源的访问,以确保在任意给定的时刻只有一个线程可以访问该资源。在多线程编程中,当多个线程同时竞争访问某个共享资源时,如果没有适当的同步机制,可能会导致竞争条件和数据不一致性的问题。线程互斥通过引入互斥锁等机制,使得在任意时刻只能有一个线程持有资源的访问权限,从而避免了竞争条件和数据不一致性的发生。进程线程间的互斥相关背景概念多线程执行流共享的资源叫做临界资源。每个线程内部,访问临界资源的代码,就叫做临界区。原创 2024-02-13 19:04:38 · 1238 阅读 · 29 评论 -
【Linux学习】线程详解
【Linux学习】线程详解,在内核中,LWP(轻量级进程)和 struct pthread(线程结构体)是一一对应的关系。在用户层,如果存在多个线程结构体,为了创建一个新线程的开销比创建一个新进程小得多,线程之间的切换也相对较快。线程相比进程占用的资源要少很多,因为线程共享了相同进程的资源,如地址空间、文件等。能够充分利用多处理器系统的并行性,提高程序的并发性能。pthread_t 类型取决于实现。对于Linux目前实现的NPTL实现而言,pthread_t类型的线程ID,本质就是一个进程地址空间上的一个地原创 2024-02-12 19:42:03 · 1492 阅读 · 25 评论 -
【Linux学习】进程信号
当检测到信号的处理动作是自定义时,理论上是可以在内核态执行用户空间的代码的,因为内核态拥有极高的权限。然而,绝对不能采用这样的设计方案。如果允许在内核态直接执行用户空间的代码,用户就有可能在其代码中包含一些非法操作,比如尝试清空数据库等。虽然在用户态时没有足够的权限执行这类敏感操作,但如果在内核态执行这种非法代码,由于内核态权限的高度,这些操作就有可能被成功执行,导致潜在的系统数据损坏或丧失。简而言之,不应该让操作系统直接执行用户提供的代码,因为操作系统无法信任任何用户提供的代码。原创 2024-01-21 15:45:42 · 1350 阅读 · 35 评论 -
【Linux学习】进程间通信
【Linux学习】进程间通信 管道的概念:管道想必大家都不陌生,它是Unix中最古老的进程间通信的形式,允许一个进程的输出成为另一个进程的输入。在操作系统中,管道是一种特殊的文件,常用于在父进程和子进程之间或者在两个独立的进程之间传递数据在命令行中,我们常常用管道连接多个命令,形成了一个数据处理的流水线。原创 2023-12-20 07:30:00 · 5393 阅读 · 55 评论 -
【Linux学习】深入理解动态库与静态库
【Linux学习】深入理解动态库与静态库最终的选择取决于项目的具体需求、开发团队的偏好以及目标平台的要求。在实际开发中,有时候也会选择混合使用,即某些库采用静态链接,而另一些采用动态链接,以充分发挥各自的优势在Linux当中,以.so为后缀的是动态库,以.a为后缀的是静态库。在Windows当中,以.dll为后缀的是动态库,以.lib为后缀的是静态库。原创 2023-12-13 07:30:00 · 1242 阅读 · 42 评论 -
【Linux学习】磁盘结构与寻址原理&EXT2文件系统&inode&软硬链接
【Linux学习】磁盘结构与寻址原理&EXT2文件系统&inode&软硬链接磁盘分区(Disk Partitioning):磁盘分区是将一个物理硬盘分割成若干个逻辑部分的过程。每个分区在逻辑上看起来就像是一个独立的硬盘,有自己的文件系统、目录结构和存储空间。磁盘分区的主要目的是将一个大的硬盘划分成多个小的逻辑单元,这样可以更有效地管理数据和操作系统。每个分区可以被用于不同的目的,例如安装操作系统、存储用户数据、备份等。磁盘通常被称为块设备,一般以扇区为单位,一个扇区的大小通常为512字节。原创 2023-12-10 08:00:00 · 1176 阅读 · 35 评论 -
【Linux学习】文件描述符&重定向&缓冲区
指针,表示要写入的文件的FILE结构,而对应的FILE结构体中存有文件描述符(fd),这个时候fwrite()会底层调用write(fd,.....),来执行操作系统内部的write(),它能找到进程的task_struct,再通过里面的files指针再找到files_struct,而files_struct中的fd_array[fd]便指向打开的文件的file结构体,这时候便内存文件便找到了,也就可以后续操作.例如,在网络通信中,如果无法立即发送所有数据,缓冲区可以保存部分数据,等待合适的时机重新发送。原创 2023-11-30 19:47:42 · 1055 阅读 · 42 评论 -
【Linux学习】基础IO
这些宏定义选项的共同点就是,它们的二进制序列当中有且只有一个比特位是1(O_RDONLY选项的二进制序列为全0,表示O_RDONLY选项为默认选项),且为1的比特位是各不相同的,这样一来,在open函数内部就可以通过使用“与”运算来判断是否设置了某一选项。C 语言标准库的文件 I/O 函数实际上是建立在系统文件 I/O 操作的基础上的。总的来说,C 语言标准库的文件 I/O 函数是建立在系统文件 I/O 操作之上的高级接口,提供了更便捷、抽象的文件操作方式,同时隐藏了底层系统调用的复杂性。原创 2023-11-26 16:41:10 · 981 阅读 · 28 评论 -
【Linux学习】进程替换
同时,由于父子进程的代码是共享的,子进程只能执行父进程的代码块,但是通过进程替换后,我们不仅可以让子进程能够执行父进程的代码块,而且子进程也能够做一些额外的工作,执行一个全新的代码(程序),这样就能实现父子进程做的事情有所差异,大大提高了办事效率,同时也使父子进程的代码彻底分离,但是一般情况下,我们用什么语言写程序,就只能去使用对应语言的接口.如C++就不能直接去调用Python中的库去使用.于是这时候这个时候,我们就可以朝着让不同的程序相互切换的方向思考.运行运行我们编译后的程序,使之变成进程。原创 2023-11-15 10:15:20 · 1022 阅读 · 31 评论 -
【Linux学习】进程等待
2.设置为WUNTRACED时: 挂起调用进程的执行,直到等待集合中的一个进程变成已终止或者被停止 返回的PID 为已终止或被停止子进程的 PID(默认的行为是只返回已终止的子进程.当你想要检査已终止和被停止的子进程时,这个选项会有用)这里我们观察到父进程在等待子进程退出时仍然可以打印出child is running的语句,说明此时父进程并没有处于阻塞等待的状态,最后我们仍然可以观察到子进程被成功回收.,即:该参数传入的地址后,操作系统会顺着地址,更改这个地址对应的值,这里就好像函数返回值一样.原创 2023-11-03 19:49:56 · 1570 阅读 · 32 评论 -
【Linux学习】初识进程 | 进程概念
1946年,第一台计算机ENIAC诞生,人类进入计算机时代,后来,美籍匈牙利数学家:冯.诺依曼提出了计算机“存储程序”的计算机设计理念,即将计算机指令进行编码后存储在计算机的存储器中,需要的时候可以顺序地执行程序代码,从而控制计算机运行,这就是冯.诺依曼计算机体系的开端。输入设备,存储器,输出设备,运算器,控制器输入设备:包括键盘, 鼠标,扫描仪, 写板等中央处理器(CPU):含有运算器和控制器等输出设备:显示器,打印机等这里的存储器指的是内存。原创 2023-10-24 12:44:35 · 1724 阅读 · 18 评论 -
【Linux学习】进程状态
进程在Linux系统的调度中,具有不同的状态,下面的状态在kernel源代码里定义:/**/并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列 里。意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠 (interruptible sleep))。有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的 进程通常会等待IO的结束。可以通过发送 SIGSTOP 信号给进程来停止(T)进程。原创 2023-10-25 23:53:38 · 2144 阅读 · 8 评论 -
【Linux学习】进程优先级&环境变量
cpu资源分配的先后顺序,就是指进程的优先权(priority)优先权高的进程有优先执行权利,配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相原创 2023-10-26 21:15:14 · 2474 阅读 · 13 评论 -
【Linux学习】进程终止
按照正常的退出,此时应该会弹出Hello world,但是由于_exit()的强制终止,使得存在于。可以说exit()是一种对_exit()的包装,其底层仍然会调用在kernel内核的_exit()这些退出码和含义是人为规定的,在不同的情况下可能有不同的一套标准,甚至我们可以自己定义。导致系统崩溃的原因有许多,但本质上都是OS为了防止继续犯下更大的错误,决定让进程崩溃。_exit()是系统专门用于终止进程的接口,使用_exit()会使。,因为调用完main时,会自动将main的返回值当做exit的参数。原创 2023-10-29 23:35:54 · 1084 阅读 · 12 评论