
1++的Linux
文章平均质量分 97
记录Linux的学习过程与心得
进击的1++
通信工程本科在读
展开
-
【1++的Linux】之信号量
任何时候都有一个执行流进入共享资源中,我们将这个共享资源称为临界资源。若我们将这块共享资源当作整体使用就叫做互斥;那么我要是不想当整体使用,而是想要将这块空间继续细分,让不同的执行流访问不同的区域,那么我们不就可以实现并发了吗!但是我们怎么知道有用了多少资源,还剩多少资源。这就用到。原创 2023-11-27 11:32:29 · 264 阅读 · 0 评论 -
【1++的Linux】之线程(三)含生产者消费者模型
在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步。生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。原创 2023-11-08 17:51:40 · 1152 阅读 · 0 评论 -
【1++的Linux】之线程(二)
我们先来看其概念:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。以上述代码为例,那么我们的临界资源就是。原创 2023-11-06 22:46:13 · 1200 阅读 · 0 评论 -
【1++的Linux】之线程(一)
1. 什么叫做线程?在官方的定义中:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。也就是说,线程在进程中运行,是OS调度的基本单位。2. 类比进程对线程再做理解线程在进程中运行,所以一个进程中可能有多个线程,那么要不要将这些线程管理起来???答案是要的,所以,先描述,再组织。用特定的数据结构将线程管理起来,在一般的OS系统中,我们将这种结构称为TCB,但是Linux中却不是原创 2023-11-04 14:03:32 · 1247 阅读 · 0 评论 -
【1++的Linux】之信号(二)
我们在上一篇文章中讲述了信号的概念和信号的产生,并且我们知道了信号在发送给对应进程后,并不会被进程立即处理,而是进程会在合适的时间去进行处理。那么,在信号未处理的这段时间,信号在哪呢?这就是我们今天所要说的信号的保存。我们先来看一幅图。上述图中就是我们信号在内核中的表示示意图。我们在上一篇中提到过,信号的数量是有限的,并且其本质是一些编号,因此我们可以用位图将其存储起来。我们的pending位图就是用来保存未决信号的。block位图是用来保存阻塞信号的,而handler中则存储的是,我们对应信号的处理方原创 2023-11-02 19:37:02 · 1253 阅读 · 0 评论 -
【1++的Linux】之信号(一)
就像红绿灯一样,我们要能够处理信号,必须具备能识别信号的能力。那么进程也是一样的,在处理信号前要能够识别相应信号是什么意思。进程怎么能够识别信号呢?------通过程序员。信号的产生是随机的,进程可能在忙 自己的事情,暂时没办法处理信号,那么就会在后续才进行处理,并不是要立刻进行处理。并且进程会临时记录下信号,方便后续的处理。原创 2023-10-31 20:17:47 · 1284 阅读 · 0 评论 -
【1++的Linux】之进程间通信(共享内存)
我们在前面的文章中提到过,进程间的通信本质都是先看到同一块资源,然后通过这同一块资源进行通信,并且是单向的通信,只能一端发,一端进行读,共享内存也是基于这样的原理而进行的通信,与管道有异曲同工之处,管道是基于文件,拿到同一个文件的文件描述符而进行的通信,需要调用对文件的读写操作函数,因此要经过内核。多个执行流运行时互相干扰,主要是我们不加保护的访问了临界资源(在非临界区是没有影响的),为了更好的进行临界区的保护,我们让多执行流在任何时刻都只有一个进程能够进入临界区----我们将其称为互斥。原创 2023-10-27 19:46:03 · 1195 阅读 · 0 评论 -
【1++的Linux】之进程间通信
我们在创建子进程之前分别以读写方式打开同一个文件,子进程继承之后,其也能够这个文件的文件描述符,有了文件描述符,我们是不是就能够访问这个文件了!我们让父进程进行写,那么就关闭其读的那个文件描述符,让子进程读,那么就关闭其写的那个文件描述符。命名管道与匿名管道的原理相同,都是通过让两个进程看到同一份资源,从而实现通信,但命名管道不再局限于父子进程之间,而是任意两个进程之间实现通信。命名管道的本质也是一种文件,但不是普通的文件,普通的文件我们在读写时,会将内存数据刷新到磁盘中,但是我们的管道是不会的。原创 2023-10-25 19:14:11 · 1488 阅读 · 1 评论 -
【1++的Linux】之文件(三)
也就是我们的当前目录。内最多只会存放一个文件的数据(即不会出现两个文件的数据被放入同一个 Block 的情况),如果文件大小超过了一个 Block 的 size,则会占用多个 Block 来存放文件,如果文件小于一个 Block 的 size,则这个 Block 剩余的空间就浪费掉了。根据inode找到对应的区组,找到对应的inode,获得其所占用的数据块的编号,再找到blockbitmap,将其对应的位置为0即可,再找到inodebitmap,将其inode对应的位置为0 ,并没有删除其实际的数据内容,原创 2023-10-23 12:45:44 · 1172 阅读 · 0 评论 -
【1++的Linux】之文件(二)
文件的写入读取都要靠文件描述符去找到所对应的文件,既然本应该向屏幕中写入的内容,写到了其他的文件中,那么一定与文件描述符有关,我们前面说过,文件描述符是数组的下表,这个数组存储的是文件对象的指针,那么就好理解了,发生上述现象的原因,就是该下标中的内容发生了改变,使得原本指向屏幕文件,被替换为了Log.txt这个文件对象的指针。这样的模式称为写回模式。在OS的软件设计层面,我们将文件的成员属性和方法都放在结构体中,其方法我们使用文件指针的形式,统一了方法的接口,但是不同的对象去调用,会有不同的结果。原创 2023-10-13 11:32:12 · 1138 阅读 · 0 评论 -
【1++的Linux】之文件(一)
我们的fopen,fread,fwrite实际上都是调用了系统的这些接口,但是是经过了一些封装的,为了方便我们用户使用。------都是通过封装的文件相关的函数就行操作,那为什么不知直接用系统相关的调用函数呢?站在系统的角度,能够被写入,或是被读取的 设备就叫文件。广义来说:我们的显示器,键盘,网卡等都是文件。因此对文件的操作无非就是对文件内容的操作和对文件属性的操作。其中flags代表的是打开的方式,mode代表若文件不存在,新创建文件的权限。我们发现其新建的文件也在次路径下,这也就证明了上述的结论。原创 2023-10-07 17:43:31 · 1260 阅读 · 3 评论 -
【1++的Linux】之进程(五)
我们创建出来进程是要其做事情的,它可以去调用函数,或者是执行其他的程序,子进程通过exec函数族执行其他的程序就叫做进程替换。也就是在调用进程内部执行一个可执行文件。当进程调用一种exec函数时,该进程的代码和数据完全被新程序替换,新程序从main函数开始执行,由于未创建新进程,所以替换前后进程的id等并不改变。在加载新程序之前,父子进程的关系是:代码共享,数据写时拷贝。当子进程加载新程序的时候就是一种“写入”,此时代码也就需要进行写时拷贝,进行分离!!!原创 2023-10-02 16:53:17 · 1441 阅读 · 1 评论 -
【1++的Linux】之进程(四)
代码和数据一般是从磁盘中来的,内核结构就是我们一直说的所谓的pcb,为了描述和控制进程模块,系统为每一个进程都定义了一个数据结构—也就是我们的task_struct。由于我们的printf没有带换行,所以没办法自己冲刷缓冲,通过结果我们看到,当用exit时,其能够输出,用_exit时,没有输出,则证明,exit具有冲刷缓冲的作用而_exit没有。是因为若不休眠,则我们的父进程就可能先执行完退出了,那么子进程就成了孤儿进程,它的父进程就成了bash。新创建的进程叫做子进程,原来的进程叫做父进程。原创 2023-09-29 14:52:52 · 1271 阅读 · 0 评论 -
【1++的Linux】之进程(三)
进程地址空间的分布。其分为了内核空间和用户空间。从具体进程的角度来看,每个进程可以拥有4G字节的虚拟地址空间(也叫虚拟内存)。其中每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的。最高的1GB内核空间则为所有进程以及内核所共享。而用户空间又被细分为我们所熟知的:堆区,栈区,代码区…原创 2023-09-24 18:00:46 · 2201 阅读 · 0 评论 -
【1++的Linux】之进程(二)
1. R---运行状态:并不意味着进程一定在运行中,也可能在运行队列中。2. S--睡眠状态:意味着进程在等待事件完成。(可中断睡眠)3. D--磁盘休眠状态:在这个状态的进程通常会等待io的结束(不可中断睡眠)4. T---停止状态:可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。5. X---死亡状态:这个状态只是一个返回状态,你不会在任务列表里看到这个状态。原创 2023-09-23 19:50:10 · 2050 阅读 · 0 评论 -
【1++的Linux】之进程(一)
本文详细描述了操作系统进行管理的基本方法与进程的基本概念原创 2023-07-18 22:29:39 · 1348 阅读 · 0 评论 -
【1++的Linux】之基础开发工具
本文详细介绍了一些基础常用的Linux开发工具,介绍了其 用法并且进行了演示。原创 2023-07-10 22:23:56 · 1303 阅读 · 0 评论 -
【1++的Linux】之Linux权限
Linux权限的详细总结与剖析,一篇文章带你搞懂权限原创 2023-05-31 20:21:43 · 1196 阅读 · 0 评论 -
【1++的Linux】之Linux常见指令(二)
详细总结了centos 的一些常用指令原创 2023-05-16 19:45:36 · 387 阅读 · 0 评论 -
【1++的Linux】之Linux常见指令(一)
总结了一些Linux的常见指令,并进行了演示。原创 2023-05-07 19:25:38 · 378 阅读 · 2 评论