【Linux系统学习】玩转Linux
文章平均质量分 92
对Linux各种指令进行解析使用。
花影随风_
在旅途中发现美,留下难忘回忆
展开
-
【Linux系统】进程间关系和守护进程
一个会话可以是一个或者多个进程组的集合,一个会话可以包含多个进程组,每个会话也会有一个会话ID(SID)我们知道我们的bash进程一直在前端运行的,如果我们想指定我们的命令在后端运行呢?在要执行的命令后面加 & 即可。至于1代表什么以及后面的数值代表什么后面会讲。所以这三个进程是依然能查到的,我们如果想退出他们,只能使用命令杀掉他们!值得注意的是:每个终端上只能有一个前端进程,可以有多个后端进程。一个作业可以包含一个进程或者多个进程,共同协作完成一件事情,我们称这个过程为一个作业。原创 2024-09-12 17:31:30 · 962 阅读 · 0 评论 -
【Linux系统】可重入vs线程安全 && 死锁
死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。原创 2024-07-30 18:56:44 · 280 阅读 · 1 评论 -
【Linux系统】POSIX信号量 && 线程池
POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。但POSIX可以用于线程间同步。引入环形队列的概念环形队列:当队列为空||为满时head == end,我们发现这样无法区分为空为满两种情况所以:我们需要1.计数器 2.牺牲一个空位置,判满就变为if(head == end + 1)如果队列不为空不为满就是head!= end1.队列为空,让谁先访问?生产者先生产2.队列为满,让谁先访问?消费者来消费。原创 2024-07-30 18:22:52 · 596 阅读 · 0 评论 -
【Linux系统】线程的同步 && 生产消费模型
同步:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步竞态条件:因为时序问题,而导致程序异常,我们称之为竞态条件。在线程场景下,这种问题也不难理解。原创 2024-07-29 13:24:27 · 1152 阅读 · 0 评论 -
【Linux系统】线程的互斥
多个线程能够看到的资源称为共享资源,那我们需要对这种资源进行保护,需要用到互斥!!!理论上我们设定的是1000张票,枪到0结束,就不应该会出现0,-1,-2这种情况出现!!!为什么???认识和分析为什么会出现抢到负数的问题???我们在判断票数时,判断的过程是不是计算?CPU是要进行调度计算的,那如何计算?计算机的运算类型:1、算术运算 2、逻辑运算。原创 2024-07-28 21:53:22 · 918 阅读 · 0 评论 -
【Linux系统】线程控制
main thread,你如何保证?主线程join等待来保证,不join呢?会造成类似僵尸进程的问题,当然前提是父进程不会结束。当join时主线程就会阻塞等待新线程结束。原创 2024-07-23 15:07:04 · 898 阅读 · 1 评论 -
【Linux系统】线程概念
在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。原创 2024-07-21 17:28:19 · 1121 阅读 · 2 评论 -
【Linux系统】信号的保存和处理
OS不是不相信任何用户吗?用户无法直接跳转到3,4GB地址空间范围,那如何做到?必须在特定条件下,才能跳转过去,需要硬件(CPU)配合!!!其实在CPU内部有一个状态寄存器cs(code semgment)存放代码区的范围,在其中有两个比特位可以用来状态表示,0表示当前CPU处于内核态,3表示当前CPU处于用户态,如何跳转?不就是在我们的系统调用方法内把寄存器的两个比特位,由3置0不就完成了由用户态跳转到内核态!!!原创 2024-07-17 17:06:27 · 580 阅读 · 1 评论 -
【Linux系统】信号的产生
关于信号举一些生活中的例子 --- 比如交通指示灯...- 信号在生活中,随时可以产生 --- 信号的产生和我们是异步的!(异步的意思就是信号的产生和我没有直接关系)- 你能认识这个信号 --- 我们知道这是信号,我们才知道如何处理!- 我们知道信号产生了,信号该怎么处理!--- 我们应该知道如何处理!- 我们可能在做着更重要的事情,把到来的信号暂不处理 --- 1.我得记得这个事。2.什么时候处理?合适的时候!!!那么转回我们的OS中,上面的“我”不就是进程吗!!!原创 2024-07-16 18:05:00 · 566 阅读 · 0 评论 -
【Linux系统】信号量(初次理解)
> 和共享内存,消息队列一样,也必须先让,不同的进程看到同一个“计数器”!这意味着信号量也是一个公共资源,保护临界资源的安全,前提是不是,你自己得是安全的!那里面要么没人,要么就一个人,1 or 0 ,二元信号量,当里面有人时,其他人就不能进入,这其实是互斥!回过头来再看,电影院的vip房间,不就是对共享资源的整体使用,其实不就是资源只有一个吗?信号量也是共享资源,所以申请信号量流必须经过,申请信号量,访问共享内存,释放信号量。-- 安全的操作,我们叫P操作 ++ 安全的操作,我们叫V操作。原创 2024-07-11 17:52:04 · 303 阅读 · 0 评论 -
【Linux系统】命名管道 && 共享内存
匿名管道是通过父子进程继承关系来看到同一份资源。命名管道是通过文件路径来看到同一份资源。缺点:共享内存不提供对共享内存的任何保护机制 --- 数据不一致问题优点:我们在访问共享内存的时候,没有使用任何系统调用,共享内存是所有进程间通信IPC,速度最快的,因为,共享内存大大减少了数据的拷贝次数!!!原创 2024-07-11 13:51:46 · 947 阅读 · 0 评论 -
【Linux系统】匿名管道 && 模拟实现进程池
进程也是需要某种协同的,所以如何协同的前提条件,需要通信,数据是有类别的,别人传递的信息对你来说,可能是通知就绪的、单纯要传递给我的数据、控制相关的信息...事实:进程具有独立性,进程=内核数据结构+代码和数据创建子进程时各自创建自己的内核数据结构,代码和数据遵守写时拷贝,所以进程是一定独立的!!!那么该如何通信?原创 2024-07-10 13:54:29 · 712 阅读 · 0 评论 -
【Linux系统】动态库和静态库 && 动态库加载
我们有没有使用过库呢?-- 用过c、c++的标准库c的各种函数,c++的各种STL容器,我们使用他们内部必须得有具体实现。Linux: .so(动态库) .a(静态库) Windows: .dll(动态库) .lib(静态库)库是拿来给别人使用的,所以库里面必然没有main函数,。原创 2024-07-07 12:25:02 · 1151 阅读 · 0 评论 -
【Linux系统】文件系统 && 软硬链接
打开的文件是存储在内核、内存中,而没有打开的文件则存放在磁盘中,与文件系统相关!!!我们打开文件时有文本写入和二进制写入,计算机是只认识二进制的,所以文本写入这些都是语言层帮我们做的!!!原创 2024-07-04 13:51:02 · 840 阅读 · 0 评论 -
【Linux系统】文件描述符fd
我们之前对文件的理解是在语言层上,而语言层去理解文件是不可能的!!!下面是一份c语言文件操作代码!!!我们要进行文件操作,前提是我们的程序跑起来了。文件打开和关闭是,是CPU在执行我们的代码。w含义:1.如果不存在,就在当前路径下,新建指定的文件。2.默认打开文件的时候。就先把目标文件清空!--》所以可以用来新建文件,清空文件!我们又使用输出重定向符号操作文件,我们发现文件被清空了,输出重定向一定是文件操作!!!原创 2024-07-01 15:11:01 · 601 阅读 · 0 评论 -
【Linux系统】重定向 && 缓冲区
文件 = 内容 + 属性而stat系列系统调用接口就是对文件:对内容的操作 + 对属性的操作。文件描述符的分配规则:查自己的文件描述表,分配最小的没有被使用的fd。我们学过的c语言中的printf是打印函数,那其实printf默认就是打印在显示器上,也就是stdout,我们如果使用sprintf传入stdout是两个函数的功能就完全相同的!!!原创 2024-07-02 13:26:56 · 901 阅读 · 0 评论 -
【Linux系统】进程替换 && 自主实现shell(简易版)
我们用exec*函数执行新的程序,exec*系列的函数,执行完毕后,后续的代码不见了,因为被替换了。execl的返回值可以不关心了,只要替换成功,就不会向后继续运行,只要继续运行了,一定是替换失败了!原创 2024-06-30 20:09:58 · 913 阅读 · 0 评论 -
【Linux系统】进程控制
所以我们面对程序出现错误,两步判断就可。原创 2024-05-09 21:59:56 · 1200 阅读 · 2 评论 -
【Linux系统】地址空间 && Linux内核进程调度队列
其实 我们小学时可能就有划分区域这个概念了,小学时我们在分配座位坐好后,你可能与你的同桌共用一张桌子,那么你们必然要划分工作区域咯,我们当时叫它为38线,那么此时的划分区域也就类似这样,用代码怎么表述?其实就是一个结构体!!!来记录你的开始位置到结束位置!对于区域的扩张与缩小其实就是对数据的+-了!!!原创 2024-04-19 21:59:04 · 789 阅读 · 13 评论 -
【Linux系统】进程优先级&&环境变量
最开始的环境变量不是在内存中,而是在系统对应的内存文件中!!!原创 2024-04-11 22:30:11 · 1126 阅读 · 16 评论 -
【Linux系统】进程状态
Linux进程状态本质上是task_struct这个结构体内的一个变量用来存储进程状态。//内部的一个属性int status;R(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。S(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。D(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。T。原创 2024-04-10 14:08:57 · 1096 阅读 · 22 评论 -
【Linux系统】进程概念&&创建进程&&进程标示符
操作系统中, 进程可以同时存在非常多的。根据我们之前谈的操作系统具有“管理”的特性, 那么就有,既然要管理,就要 ---由冯诺依曼体系结构我们知道磁盘中的文件都是要加载到内存然后由内存与CPU交互完成一些任务的。所以其实当我们运行一些程序时就会为我们创建一个进程。这个进程是什么样的?那么当我们运行我们写出来的c/c++代码时。首先从磁盘中把我们的代码和数据加载到内存中这个PCB要在内存中加载的操作系统中malloc出对应的空间,实质上就是一个结构体类型,原创 2024-03-26 23:22:33 · 858 阅读 · 19 评论 -
【Linux系统】冯诺依曼与操作系统
如图即为冯诺依曼大致的体系结构图, 我们知道这些都是由我们的计算机硬件组成输入设备:键盘, 鼠标, 摄像头, 话筒, 磁盘, 网卡...输出设备:显示器, 声卡, 磁盘, 网卡...CPU:运算器和控制器存储器:内存在上图冯诺依曼体系结构图中我们可以看到红色箭头都代表的是数据的流动,那我们就要研究数据在我们的计算机的冯诺依曼体系结构中是怎么流动的呢?这里给出结论:数据流动从一个设备到另一个设备,在我们的冯诺依曼结构中我们的。原创 2024-03-26 00:01:18 · 1370 阅读 · 7 评论 -
【Linux基础】Linux自动化构建工具make/makefile
3. 如果test.exe文件不存在,或是test.exe所依赖的后面的test.o文件的文件修改时间要比test.exe这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成test.exe这个文件。5. 当然,你的C文件和H文件是存在的啦,于是make会生成 test.o 文件,然后再用 test.o 文件声明make的终极任务,也就是执行文件test.exe了。8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。原创 2024-02-24 21:37:01 · 1113 阅读 · 1 评论 -
【Linux基础】Linux权限
前面我们已经学习过Linux指令部分,接下来就进入我们Linux权限部分吧,我们到底如何使我们的文件得到安全的保管,不让非法利用,使得我们能够安全的进行一些任务,那么权限就很有必要学习一下,了解权限,我们才能在文件操作,以及后续编程更加游刃有余。下面就进入我们的权限学习部分吧!我们现实中常见的门禁啊,vip啊,这些都与权限相关,那么权限就是通过一定的条件拦住一部分人,给另一部分人权利,来访问某种资源,而这种权限对于我们只能是有无,或者是不能的意思。目录的可执行权限是表示你可否在目录下执行命令。原创 2024-01-08 16:05:14 · 972 阅读 · 12 评论 -
【Linux基础】Linux主要指令的详解(指令补充)
这个指令比较简单,我们只有知道它怎么用就可以了,我直接演示一遍。显而echo指令可以把输入的相应字符串输出到屏幕上。我们会发现echo后输入字符串后紧跟着的">",然后又跟着一个文件名,回车,此时再查看当前目录文件时就会出现这个对应的文件。用cat就可以把文件内容打印出来。这里解释一下“>”的作用“>”的作用其实是一种输出重定向。当我们想创建一个文件时我们可能清楚的知道使用touch命令就可创建一个文件,而现在我们学习了">"就可以使用这个符号直接创建对应文件了。原创 2024-01-06 12:56:47 · 1883 阅读 · 19 评论 -
【Linux基础】Linux常见指令总结及周边小知识
Linux指令还是有很多的,本章讲解了部分Linux的指令与一些周边知识来充实我们的大脑,小伙伴们不用担心这些指令这么多,我们要不要去强行记忆,我回答,完全大可不必,我们在以后使用Linux会经常使用一些指令,这些指令就是我们的常用指令,敲的多了,这些指令就被我们记住了,其他的一些不常用的指令,既然是不常用我们也没必要刻意去记,对吧,所以我们不用焦虑去记这些指令的问题,我们重点关注的是一些周边知识的原理,这才是最重要的,支持一下哦,若需继续进行指令学习,等待博主的后续追更哦~原创 2023-11-24 21:59:31 · 869 阅读 · 12 评论