
系统
文章平均质量分 96
linux系统
-杀意感知-
bit.syc (无限期断更)
展开
-
线程池+线程安全+常见锁
IT行业这么火,涌入的人很多,俗话说林子大了啥鸟都有,大佬和菜鸡们两极分化的越来越严重.为了让菜鸡们不太拖大佬的后腿,于是大佬们针对一些经典的常见的场景,给定了一些对应的解决方案,这个就是。原创 2024-12-13 20:12:17 · 718 阅读 · 0 评论 -
线程互斥与同步
例如,现在有两个线程访问一块临界区,一个线程往临界区写入数据,另一个线程从临界区读取数据,但负责数据写入的线程的竞争力特别强,该线程每次都能竞争到锁,那么此时该线程就一直在执行写入操作,直到临界区被写满,此后该线程就一直在进行申请锁和释放锁。临界区内的线程完全可能进行线程切换,但即便该线程被切走,其他线程也无法进入临界区进行资源访问,因为此时该线程是拿着锁被切走的,锁没有被释放也就意味着其他线程无法申请到锁,也就无法进入临界区进行资源访问了,所以是串行的,所以效率低。所以解锁和等待必须是一个原子操作。原创 2024-12-13 20:06:51 · 931 阅读 · 0 评论 -
线程概念与控制
在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。原创 2024-12-04 17:50:05 · 630 阅读 · 0 评论 -
进程信号 -- 详解
注意:进程间通信中的信号量跟下面要讲的信号没有任何关系。原创 2024-12-04 17:48:22 · 728 阅读 · 0 评论 -
进程间通信--详解
如何理解进程间通信?进程具有独立性,所以进程想要通信难度是比较大的,成本高。在日常生活中,通信的本质是传递信息,但站在程序员角度来看,进程间通信的本质:让不同的进程看到同一份资源(内存空间)。进程间通信就是进程之间互相传递数据,那么进程间能直接相互传递数据吗?不能,因为进程具有独立性,所有的数据操作都会发生写时拷贝,父子进程都不能传递,更不要说两个进程毫无关系还想直接相互传递数据。所以两个进程如果想要通信就一定要通过中间媒介的方式来进行通信,那么就必须先想办法让不同的进程看到同一份公共的资源。原创 2024-11-23 18:36:05 · 1284 阅读 · 0 评论 -
基础 IO(动静态库)-- 详解
这也就是为什么大部分库在提供的时候,一般是提供库文件 + 头文件,也就是为什么在使用 C 语言的时候永远都是 #include <stdio.h>,然后在写 printf 的时候直接调用,最后链接库,本质上就是因为系统在装的时候就把库文件和头文件给装了,而 C 语言的源代码就不需要在系统中了。静态库是程序在编译链接的时候把库的代码复制到可执行文件当中的,生成的可执行程序在运行的时候将不再需要静态库,因此使用静态库生成的可执行程序的大小一般比较大。今天不再是之前的说法了。3.如果你只提供静态库。原创 2024-11-11 23:54:24 · 858 阅读 · 0 评论 -
基础 IO(文件系统 & inode & 软硬链接)-- 详解
我们一直都在说打开的文件,磁盘中包含了上百万个文件,肯定不可能都是以打开的方式存在。其实文件包含打开的文件和普通的未打开的文件,下面重点谈谈未打开的文件。我们知道打开的文件是通过操作系统被进程打开,一旦打开,操作系统就要维护多个文件,所以它是需要被操作系统管理的。也就是说这种方式,磁盘上和内存上都有这个文件,它们不是完全一样的,内存中的文件更强调的是属性和方法,磁盘中的文件更强调的是数据,它们是通过缓冲区关联的;而普通的未打开的文件在磁盘上,未被加载到内存中,它当然也要被管理;原创 2024-11-06 17:58:14 · 730 阅读 · 0 评论 -
基础 IO(文件描述符)-- 详解
文件在哪呢?从广义上理解,键盘、显示器、网卡、声卡、显卡、磁盘等几乎所有的外设都可以称之为文件,因为“Linux 下,一切皆文件”。从狭义上的理解,文件在磁盘(硬件)上放着,只有操作系统才能真正的去访问磁盘。磁盘是一种永久存储介质,不会受断电的影响,磁盘也是外设之一,所以对文件的所有操作都是对外设的输入输出,简称 IO(Input、Output)。我们知道,当fopen以写入的方式打开一个文件时,若该文件不存在,则会自动在当前路径创建该文件,那么这里所说的当前路径指的是什么呢?原创 2024-10-31 15:38:48 · 607 阅读 · 0 评论 -
进程控制 -- 详解
思考:什么是进程替换?通过 exec* 函数,把磁盘中的其它程序(代码+数据)加载到内存中,替换当前进程的代码和数据,让页表重新构建映射关系,这期间不会创建新的进程。思考:为什么要进程替换?执行父进程的部分代码,完成特定功能。执行其它新的程序。——> 需要进行「进程替换」,用新程序的代码和数据替换父进程的代码和数据,让子进程执行。思考:操作系统是如何做到重新建立映射的呢?原创 2024-10-22 15:37:10 · 976 阅读 · 0 评论 -
程序地址空间 -- 详解
进程和程序有什么区别呢?加载的本质就是创建进程。那么是否必须立刻将所有程序的代码和数据加载到内存中,并创建内核数据结构建立映射关系?不是。如果在最极端的情况下,只有内核结构被创建出来了(新建状态)。当真正被调度/执行代码时,才把外设加载内存里,然后再执行代码。理论上,可以实现对程序的分批加载。如果物理内存只有 4G,有一个游戏 16G,能否运行?可以运行。CPU 无论运行多大的程序,都需要从头到尾执行每一行指令。原创 2024-10-13 21:07:17 · 1287 阅读 · 0 评论 -
调度算法+链式结构+命令行参数+环境变量
/ 获取环境变量// 更改或添加环境变量返回值是环境变量的内容。原创 2024-10-07 21:33:17 · 1073 阅读 · 0 评论 -
进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解
平时创建进程一般是通过 ./myproc 运行某个存储在磁盘上的可执行程序来创建。而我们还可以通过系统调用接口/函数来创建进程:fork是一个系统调用级别的函数,其功能就是创建一个子进程。我们可以通过 man 指令来查看一下 fork 函数$ man fork我们来看一下其中的返回值描述:一旦创建成功了,他会返回子进程的PID给父进程,返回0给子进程。如果创建失败的话,会把-1返回给父进程,没有子进程会被创建。原创 2024-10-04 15:29:58 · 1011 阅读 · 0 评论 -
Linux开发工具(git、gdb/cgdb)--详解
我们调试过程中可以使用连招,断点 b + 逐过程n + 逐语句s定位到函数,同时可以结合display显示变量,watch监视,finish结束函数,until跳转等功能进行调试。当依次执行上述命令后,输入 gitee/github 的用户名和密码,在 gitee/github 上的远程仓库刷新就可以看到自己的代码了。然后我们会发现,系统把与linux相同的部分保存不变,与linux不同的内容依次出现在文档里,需要我们手动同步。再次 display 时,i 的值同样是线性递增的,与断点相同。原创 2024-09-21 18:37:32 · 2121 阅读 · 0 评论 -
Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
是的没错,还是从上往下读,执行第一对依赖关系,但是因为第一对依赖关系中的依赖文件proc.o并不存在于当前目录,那么此时make会在当前文件中找目标文件为proc.o的依赖关系,发现依赖文件proc.s也并不存在,以此类推,最后推导发现依赖文件procc存在,就执行对应的依赖方法,在从下往上。在 C 程序中,并没有定义 printf 的函数实现,且在预编译中包含的 stdio.h 中也只有该函数的声明,而没有定义函数的实现,那么是在哪里实现 printf 函数的呢?让清理工作总是被执行!原创 2024-09-16 20:42:39 · 2152 阅读 · 0 评论 -
Shell的运行原理以及Linux当中的权限问题
目录的可执行权限是表示你可否在目录下执行命令。如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目录,即使目录仍然有 -r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)。而如果目录具有 -x 权限,但没有 -r 权限,则用户可以执行命令,可以 cd 进入目录。但由于没有目录的读权限所以在目录下,即使可以执行 ls 命令,但仍然没有权限读出目录下的文档。原创 2024-08-27 17:37:36 · 968 阅读 · 0 评论 -
Linux常见指令
上面说到 -f 是强制性删除,-r 是递归式删除,这两个结合在一起就是递归式强制性删除,千万不要执行以下指令,因为在Linux当中没有类似回收站的东西也没有撤销删除的功能,删除指令一旦执行则是不可逆的。4)网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup。2)-a 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。原创 2024-07-16 01:10:56 · 777 阅读 · 1 评论