Linux学习笔记
文章平均质量分 94
有关Linux的知识点
ly@눈_눈
这个作者很懒,什么都没留下…
展开
-
Linux线程同步
当一个线程需要等待某个条件时,它可以调用条件变量的wait()方法,这将导致该线程被阻塞,直到另一个线程调用条件变量的signal()方法或broadcast()方法来唤醒它。从上述代码可以看到,使用信号量就不需要对于临界资源进行判断,因为信号量本身就是一个计数器,是一种资源的预定机制,因为对临界资源进行判断,需要进入临界区,所以需要加锁后判断,而信号量就不需要在加锁后判断。我们用5个线程来看现象,5个线程执行自己的函数,其中线程访问临界资源,访问临界资源需要保证资源安全,所以需要加锁。原创 2023-10-10 16:37:22 · 406 阅读 · 8 评论 -
Linux线程同步实例
其与普通的队列区别在于,当队列为空时,从队列获取元素的操作将会被阻塞,直到队列中被放入了元素;当队列满时,往队列里存放元素的操作也会被阻塞,直到有元素被从队列中取出(以上的操作都是基于不同的线程来说的,线程在对阻塞队列进程操作时会被阻塞)。实现,数组中的元素按照一定的顺序排列,并且当队列头或者队列尾指针到达数组的尾部时,会自动从数组的头部开始重新循环使用。环形队列的一个好处是,当队列满时,可以通过覆盖队列头部的元素来继续存储新的元素,这样可以使得队列在一定程度上具有循环使用的能力,节省存储空间。原创 2023-10-14 19:15:42 · 1327 阅读 · 21 评论 -
Linux多线程
线程是进程中的一个实体,是CPU调度和分派的基本单位。而进程则是操作系统资源分配的基本单位。 在Linux系统中,线程被称为轻量级进程(LWP),因为它们与其父进程共享许多资源,如地址空间、打开文件等。原创 2023-09-03 01:28:42 · 480 阅读 · 24 评论 -
linux线程互斥
若其他线程想要上锁一个已经被上锁的互斥锁,该线程就会被挂起,等到已上锁的线程释放掉互斥锁为止。这是因为在多个线程访问同一份资源的时候,如果一个线程在取值的过程中线程被切换到另一个线程,那么另一个线程也会取到这个值,然后对这个值进行操作,就会出现越界的情况。接下来用pthread_detach函数将子线程分离,可以在主线程中分离,也可以在子线程中分离,其中在子线程中分离要注意要在主线程退出之前分离,不然还未分离,主线程退出,所有线程都会退出,而未将子线程join,也未将子线程detach,会造成资源泄漏。原创 2023-09-04 23:33:11 · 350 阅读 · 15 评论 -
进程信号的理解
其中,signum是要设置处理方式的信号的编号,act是一个指向sigaction结构体的指针,用于设置信号处理方式,oldact是一个指向sigaction结构体的指针,用于保存原来的信号处理方式。查看信号,其中有62种信号,其中1 ~ 31是非可靠信号(非实时的),34 ~ 64是可靠信号(实时信号)。时候,对应的信号会被立即递达。OS可以将该进程在异常的时候,核心代码部分进行核心转储,将内存中进程的相关数据,全部dump到磁盘中,一般会在当前进程的运行目录下,形成core. pid这样的二进制文件。原创 2023-07-23 19:46:02 · 608 阅读 · 11 评论 -
进程间通信之共享内存
1.进程间通信的分类:(1)管道:1、匿名管道pipe;2、命名管道mkfifo(2)System V IPC:1、System V 消息队列;2、System V 共享内存;3、System V 信号量。(3)POSIX IPC:1、消息队列;2、共享内存;3、信号量;4、互斥量;5、条件变量;6、读写锁。前面已经了解了进程间管道通信,那么共享内存又是什么原理?原创 2023-07-19 01:06:30 · 2163 阅读 · 21 评论 -
进程间通信之命名管道
管道应用的一个限制就是(具有亲缘关系)的进程间通信,这种通信可以用来实现。如果我们想,可以使用FIFO文件来做这项工作,它经常被称为。1.什么是命名管道?命名管道(named pipe)也称为FIFO,它是一种文件类型,创建一个FIFO文件类似于创建一个普通文件。FIFO解决了只有具有亲缘关系的进程间才能通信的问题。并且命名管道是一种特殊类型的文件。2.匿名管道与命名管道的区别?原创 2023-07-17 10:42:13 · 789 阅读 · 13 评论 -
进程间通信之匿名管道
1.进程间为什么要进行通信?进程间通信的是为了协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。2.进程间通信的目的包括:数据传输:一个进程需要将它的数据发送给另一个进程;资源共享:多个进程间共享同样的资源;通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事情,比如进程终止时需要通知其父进程;进程间通信(IPC)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息;原创 2023-07-15 15:53:03 · 721 阅读 · 21 评论 -
Linux中的文件描述符
打开一个文件,系统做了大致如下几件事,首先CPU会寻找对应的struct task_struct(也就是进程PCB);struct task_struct中有许多的struct file_struct *files指针,这些指针指向的就是不同的文件结构体,而struct file_struct结构体中就记录着文件描述符(原创 2023-05-25 21:15:57 · 4621 阅读 · 2 评论 -
系统方面对文件的打开,读写,关闭
如果文件描述符是与打开的文件相关联的,则会释放该文件所占用的资源。这里有一个小细解,strlen求的是‘\0’之前字符串的长度,众所周知,c语言规定‘\0’用于判断字符串的结尾,而打印的时候需不需要带上‘\0’?要想在文件中写数据,write()函数需要3个参数,fd,count易得,还需要一个缓冲区buf,这个缓冲区里面有给文件中写入的数据,给缓冲区中写入数据,需用到snprintf()函数。open()函数是一个系统调用,返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引。原创 2023-05-25 12:48:17 · 1095 阅读 · 0 评论 -
linux进程控制
进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。可父进程如果一直不读取,那么子进程就一直处于Z状态,维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话说,Z状态一直不退出,PCB一直都要维护;如果子进程已经退出,调用wait/waitpid时,wait/waitpid会立即返回,并且释放资源,获得子进程退出信息。(查看进程的退出码)所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,原创 2023-05-13 18:01:32 · 353 阅读 · 2 评论 -
centos上gdb的安装及给普通用户进行提权
gdb的安装及使用原创 2023-04-11 23:48:20 · 3566 阅读 · 1 评论 -
程序的预处理,编译,汇编和链接
程序的翻译原创 2023-01-26 18:51:05 · 298 阅读 · 4 评论