Linux系统编程
文章平均质量分 93
讲解Linux下的系统编程
Insisting.
每天进步一点点ing。
展开
-
【Linux】守护进程
像平时,当我们觉得Windows卡顿的时候,我们可能会重新注销一下。注销就是让用户退出登录后再重新登陆,那么此时就相当于给你新建一个会话。卡顿是因为你本次登陆过程中启动了很多任务,且都属于同一个会话,注销本质就是把你内部会话的所有进程组删掉。原创 2023-10-21 15:48:38 · 1245 阅读 · 17 评论 -
【Linux】线程池
线程虽然比进程轻量了很多,但是每创建一个线程时,需要向操作系统申请空间创建,如果需要开辟大量的线程,申请和销毁的开销也是很大的。所以如果能够提前申请一块空间,专门用来创建线程,那么就能提高一些效率。一种线程使用模式,线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过度。原创 2023-10-03 21:28:09 · 848 阅读 · 10 评论 -
【Linux】线程同步和互斥
为什么要进行线程间的同步互斥?线程类似于工厂里的流水线,当某条流水线在生产时使用了工厂的公共资源时,在使用完之前,我们肯定不想其它流水线占用这个公共资源。所有我们一般在使用时都会将公共资源上锁。在使用完之后再释放。所谓的“公共资源”,严格来讲称为临界区。线程锁的使用就是为了实现对临界区的有序访问。也就是实现线程的同步互斥原创 2023-09-28 08:34:10 · 1354 阅读 · 80 评论 -
【Linux】多线程
在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 一切进程至少都有一个执行线程,线程在进程内部运行,本质是在进程地址空间内运行,在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化,透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流原创 2023-09-25 17:03:07 · 1552 阅读 · 69 评论 -
【Linux】进程信号
1.信号产生的方式虽然不同,但是最终一定都是通过OS向目标进程发送的信号!2,由于收到信号后可能不会立即执行对应操作,在Linux内核中使用变量会保存信号。3.进程中,采用位图来标识进程是否收到信号。4.所以OS发送信号的本质是向指定进程的task_struct中的信号位图写入比特为1,所以信号的发送也可称为信号的写入。原创 2023-09-23 14:31:50 · 995 阅读 · 64 评论 -
【Linux】进程间通信
进程间不能直接相互传递数据,因为进程具有独立性,所有的数据操作都会发生写时拷贝 进程间通信一定通过中间媒介(OS提供的内存空间)的方式来进行通信的 通信的本质就是传递数据,这些数据需要一个进程向公共资源里面去放,另一个进程从公共资源向外拿,而公共资源还需要有暂存数据的能力,通信的本质就是两个独立的进程看到同一快资源。原创 2023-09-20 16:50:09 · 1531 阅读 · 73 评论 -
【Linux】动静态库
静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking)动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。原创 2023-09-16 08:45:54 · 1898 阅读 · 80 评论 -
【Linux】文件系统
目录是文件嘛?是的。目录有iNode嘛?有目录有内容嘛?有任何一个文件,一定在一个目录内部,所以一个目录的内容是什么?需要数据块,目录的数据库里面保存的是该目录下对应的映射关系。原创 2023-09-06 20:23:20 · 3368 阅读 · 108 评论 -
【Linux】文件缓冲区
提到文件缓冲区这个概念我们好像并不陌生,但是我们对于这个概念好像又是模糊的存在脑海中,之间我们在介绍c语言文件操作已经简单的提过这个概念,今天我们不妨深入理解什么是文件缓冲区。原创 2023-09-04 10:36:30 · 2386 阅读 · 90 评论 -
【Linux】基础IO
我们要打开文件时,文件被加载进内存当中,此时文件是被进程管理着的。进程对文件的管理同样也是用数据结构进行管理。这个数据结构名字叫做files_struct。而files_struct里面有一个叫做fd_arrays的东西,这个数组的下标就是文件描述符fd。这个数组里面放着文件指针file*,可以指向文件,管理文件原创 2023-08-31 18:23:47 · 3216 阅读 · 90 评论 -
【Linux】进程控制
文章目录:一、进程创建,fork创建子进程,写时拷贝,二、进程退出,进程的退出方式,进程退出码,exit函数和_exit函数,三、进程等待,概念,wait,waitpid以及获取子进程的退出码,四、进程程序替换,原理,以及execl,execv,execlp,execvp,execle等进程程序替换的函数。原创 2023-08-26 13:15:57 · 2691 阅读 · 161 评论 -
【Linux】进程地址空间
每个进程都有一个地址空间,都认为自己在独占物理内存。而这个地址空间在内核中是一个结构体 struct mm_struct,称为进程地址空间。以及进程地址空间的作用,解决子进程修改变量的值而父进程中不受影响的原因,原创 2023-08-16 09:48:54 · 3034 阅读 · 114 评论 -
【Linux】环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性 。原创 2023-08-07 11:06:41 · 1682 阅读 · 55 评论 -
【linux】进程
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系关于冯诺依曼:这里的存储器指的是内存;不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备);外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取,所有设备都只能和内存打交道。原创 2023-07-29 20:28:11 · 725 阅读 · 11 评论 -
【Linux】开发工具的使用
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?【/关键字】: 先按【/】键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。原创 2023-06-28 21:12:06 · 140 阅读 · 2 评论 -
【Linux】权限
linux中存在一个叫 umask 的权限掩码,凡是在umask中出现的权限,不会在最终的文件权限中出现,umask默认为0002,我们知道用户具有写权限,就可以创建和删除文件,为了避免自己创建的文件被other删除,linux引入了粘滞位的概念。对目录来说,具有进入目录的权限。如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.一个用户可以是一个文件的拥有者,也可以同时是所属组,那权限怎么看。具有修改功能,但不是自己创建的文件不能删除,这样避免删除别人的文件。原创 2023-05-15 17:17:55 · 145 阅读 · 3 评论 -
【Linux】简单指令
mv默认功能是移动文件并且重命名,如果指令中只有移动的位置,并没有重命名,他默认还是原来的名字,如果指令中只有重命名,没有指定文件位置,默认移动还是当前目录下。那么,就意味着我们可以将自己写好的可执行程序放到系统的 /usr/bin 目录下,这样我们可以直接用可执行程序的文件名直接调用。因此创建一个文件也可以直接 >file.txt 创建一个file.txt的文件,跟上面的清空文件中的内容语法一样。touch的命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的时间。原创 2023-05-14 18:35:21 · 123 阅读 · 1 评论