linux内核
文章平均质量分 92
深入学习Linux内核,学习各种系统调用接口的使用和原理
卖寂寞的小男孩
在真正学技术的时期,要做到口不贪佳昧,耳不乐逸声,目不淫欲色,身不怀于安,朝夕励志,强吾之羸。有过必梭,有不善必惧,操好人生大旗的同时也要始终记得沉默是金。
C++领域优质博主,华为云云享专家
展开
-
Linux多线程(读者写者问题与自旋锁)
读者写者模型类似于生产者消费者模型。同样符合321原则,即三种关系,两个角色,一个交易场所。原创 2022-08-08 18:11:58 · 257 阅读 · 2 评论 -
Linux多线程(线程池与单例模式)
有一个生产任务的线程将任务传入任务队列中,线程池中的线程从任务队列中拿到任务,并进行处理。当一个线程进入getinstance函数时,要创建变量,但是被切走了,此时其他线程进入,就会导致线程安全的问题,因此需要进行加锁的操作。单例模式即只让对象在内存中存在一份,即一个类只定义一个对象,对于线程池来说只有一个线程池就够了。因此线程池的定义可以使用单例模式。首先我们需要定义一个静态的线程池变量以及静态的线程池方法,我们使用懒汉式来实现。饿汉式表现为,当创建这个类的时候,对象就已经创建好了,可以随时使用。...原创 2022-08-07 08:30:00 · 385 阅读 · 0 评论 -
Linux多线程(信号量与环形队列)
当生产者和消费者指向同一个位置的时候,队列可能为空也可能为满,因此当队列不为空,不为满的时候生产者和消费者一定指向的不是同一个位置。环形队列最早在数据结构那里学习过,我们使用数组来模拟环形队列,当遍历到数组结尾的时候,回到数组首元素位置。使用信号量和环形队列的好处在于,可以让消费者和生产者可以不同时访问同一块临界资源,因此不需要加锁。当队列为空时,生产者执行,队列为满时,消费者执行,这也体现了局部上的同步特性。生产者关心的是环形队列中空的位置,消费者关心的是环形队列中的数据。1.生产者不能对消费者扣圈。..原创 2022-08-05 11:58:03 · 439 阅读 · 0 评论 -
Linux多线程(线程同步与条件变量)
生产者和消费者两个线程并行执行,当消费者要消费数据的时候要访问临界资源,需要先加锁,在访问临界资源时,发现目前还没有数据,此时在full的条件下等待。它的第二个参数是一个锁的类型。此时五个线程都在条件变量cond处等待,当maste线程调用pthread_cond_signal信号,唤醒在cond处挂起等待的一个线程的时候,该线程开始执行,由于是while循环,因此再挂起等待。在线程的互斥中,我们解决了临界资源的多线程访问问题,引入了线程锁的概念,它使得每个线程访问临界资源的时候具有原子性。...原创 2022-08-03 09:47:03 · 387 阅读 · 14 评论 -
Linux多线程(线程互斥与线程锁)
当线程A被切换走时(是带着上下文数据1一起被切走的),线程B到来,它的al寄存器中的值为0(线程设置的是自己的上下文数据,互相不冲突),进行交换mutex的值和al寄存器的值(0和0交换),最终B拿到的值是0,发生挂起等待。它的寄存器al的数据现在是0,执行交换操作,将内存中mutex的值交换给A的寄存器al中,此时线程A的al值为1,内存中mutex的值为0。过了一会,A线程带着它的临时数据1000回来了,它认为tickets的值还是原来的1000,执行–操作,将值变成了999,此时写回内存中。...原创 2022-08-01 11:09:49 · 2072 阅读 · 12 评论 -
Linux多线程(线程的创建,等待,终止,分离)
在OS书籍中,线程的概念通常是这样的线程是在进程内部运行的一个执行分支(执行流),属于进程的一部分,粒度要比进程更加细,更加轻量化。通过这段话我们知道,线程与进程的比是n比1的,在其他的操作系统中,由于线程的数量较多,OS需要对线程管理起来,就会存在先描述,后组织这一方式来管理线程。但是在Linux系统下,并不是这样管理线程的。...原创 2022-07-30 12:16:13 · 637 阅读 · 0 评论 -
Linux进程信号的处理
信号的发送与进程间通信是不同的,信号只能够由操作系统来进行发送,而进程的作用是请求操作系统来发送信号。我们使用control+C可以终止一个进程的本质上其实就是向该进程发送一个2号信号。信号的内容有很多,总结起来可以分为三个大方向信号产生前,信号产生中,信号产生后。信号的产生共有四种方式,分别是由键盘产生,进程崩溃产生,系统调用产生,和软件条件产生。信号产生中要记住三张表以及它们代表的含义。以及处理三张表的各种接口。httpshttpshttpshttpshttpshttps。...原创 2022-07-27 09:13:12 · 987 阅读 · 31 评论 -
进程通信(SystemV通信方式:共享内存,消息队列,信号量)
1.没有调用read/write等系统调用接口,所以共享内存一旦被创建就会映射到自己进程地址空间,shmat的使用方法就如同malloc的使用方法。不需要任何系统调用接口。2.当client没有启动或者没有进行写入,或者已经写入结束的时候,server还是直接对共享内存的内容进行读取,读取和写入两者之间并不互相干扰。所以共享内存也是进程通信的方式中最快的。3.共享内存不提供任何同步或者互斥的机制,而是需要程序员自行保证数据的安全。本节主要学习了SystemV的三种通信方式,其中重点学习了共享内存。.....原创 2022-07-25 16:01:28 · 524 阅读 · 1 评论 -
进程间的通信(管道通信)
本文将介绍进程通信的概念,以及进程之间通过匿名管道进行通信的原理。匿名管道通信一共有五个特点和四种情况,一一在文章中进行了验证。原创 2022-07-23 08:46:47 · 1264 阅读 · 27 评论 -
动态库和静态库(.so/dll,.a/lib)
在一个大型的项目中,我们可以使用别人写的库来进行操作,通常情况下,这些库中并没有源文件,而是只有头文件和库本身,本文将详细阐述一个静态库或者动态库的制作过程和使用方法。本文主要讲了关于动静态库的两部分内容,即动静态库的使用与制作。对于动静态库的使用指的是拿到别人写好的动静态库如何加入到自己的项目中来。关于动静态库的制作分为三个步骤首先将自己所有的源文件编译成.o文件,然后将所有的.o文件进行打包,静态库使用ar-rc来进行打包,动态库使用gccshared来进行打包。httpshttps。...原创 2022-07-19 11:16:31 · 4236 阅读 · 20 评论 -
文件操作的底层原理(inode与软硬链接,文件的时间属性)
上一节中我们学习了当文件已经加载到内存中的操作,那么操作系统是如何在磁盘中寻找文件并加载到内存中的呢?本节将讲述这一内容。要了解文件在没有打开的时候的存储情况,我们就需要了解存储它的硬件:磁盘。...原创 2022-07-14 10:50:58 · 371 阅读 · 9 评论 -
文件操作的底层原理(文件描述符与缓冲区)
在C语言和C++中都存在文件操作,通常是以读或者写的方式打开文件,然后进行读写,最后关闭文件。但其实文件操作的底层并没有这样简单。文件操作的底层原理分为两部分,分别某一进程找到它打开的文件,某一进程对该文件进行操作,要理解这两部分,就需要理解文件描述符和缓冲区。...原创 2022-06-27 08:52:26 · 1837 阅读 · 22 评论 -
Linux进程替换实现一个简单的shell
本文将详解进程替换以及实现进程替换的七个函数,并通过进程替换实现一个简单的shell。原创 2022-06-24 11:21:26 · 447 阅读 · 3 评论 -
Linux系统进程退出与等待
进程终止有多种可能的原因,也有多种方式可以导致进程终止。父进程需要等待子进程结束从而来回收子进程的资源。原创 2022-06-10 09:00:00 · 1321 阅读 · 7 评论 -
Linux和Windows下git仓库的使用(保姆级教程)
在处理大型项目进行多人协作的时候,学会使用git时必不可少的技能,本文将详细介绍在Windows和Linux两种系统下git仓库的使用。原创 2022-06-06 10:28:19 · 986 阅读 · 46 评论 -
Linux进程管理---进程地址空间
本文将介绍进程地址空间(虚拟地址)是什么,以及为什么要这样设计。原创 2022-05-18 13:48:41 · 245 阅读 · 0 评论 -
Linux进程管理---进程优先级,环境变量与命令行参数
本文前部分内容讲解进程优先级,后部分内容讲解环境变量以及命令行参数,理解了环境变量和命令行参数的内容,我们就可以理解为什么使用指令的时候可以不指定路径,为什么指令带不同选项的本质一样但是会有细微的差别,本文都将为您详细进行阐述。原创 2022-05-16 17:59:41 · 354 阅读 · 15 评论 -
Linux进程管理---进程的状态(R,S,D,T,t,X,Z)
在了解了什么是进程,以及进程的创建之后,我们需要知道进程其实有不同的状态,一个进程可以有几种状态。原创 2022-05-10 16:57:35 · 4874 阅读 · 38 评论 -
Linux进程管理---用代码创建进程(fork函数)
文章目录1.fork函数概念2.fork的举例3.对进程创建的理解(1)创建进程的两种方法(2)对创建进程的理解PCB和代码数据4.fork的返回值1.fork函数概念fork函数在代码中创建进程的一个系统调用接口,它可以为进程创建子进程。我们可以使用man手册来查询一下fork函数的相关内容:我们发现使用fork函数的意义在于创建一个子进程,并且需要包含系统的头文件,返回值是pid_t类型(可以暂时先理解成int),不需要传参数。2.fork的举例#include<stdio.h>原创 2022-05-08 13:42:52 · 1691 阅读 · 13 评论 -
Linux进程管理--进程概念
本文为介绍进程的第一篇,将介绍操作系统对进程管理过程中的**先描述,在组织**的过程,并介绍PCB中的基本内容及作用。原创 2022-05-04 10:04:18 · 483 阅读 · 40 评论 -
对操作系统的理解--以Linux为例
本文将粗略带领你对操作系统进行简单的理解,以及操作系统如何管理软硬件资源,从而为用户提供一个良好的执行环境的。原创 2022-05-02 11:51:53 · 1109 阅读 · 41 评论 -
Linux文件导入gitee仓库中
文章目录零.前言1.在gitee中建立仓库2.向Linux系统中导入仓库3..gitignore4.总结零.前言本文将介绍如何将Linux中的文件存入gitee的仓库中,由于github时常登不上去,所以国内推荐gitee。1.在gitee中建立仓库首先我们先注册一账号,这里不多赘述。然后再个人主页中找到仓库并创建一个仓库。这里定义仓库名称,gitee会将其自动转换成英文路径。并进行如下配置:我们选择语言,并且添加.gitignore文件,开源许可证可以先不选。并添加Readme文件。分支类原创 2022-04-30 17:53:48 · 1057 阅读 · 2 评论 -
Linux项目自动构建工具--make/Makefile
曾经听过这样一句话:会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。一个工程中的文件不计其数,makefile定义了一系列的规则来决定,哪些文件需要先进行编译,哪些文件要后编译从而进行项目的构建和开发。...原创 2022-04-30 10:44:01 · 543 阅读 · 14 评论 -
Linux下代码调试器---gdb的使用
文章目录零.前言1.debug和release2.进入debug模式3.调试程序(1)进入调试模式(2)运行程序指令:r(3)显示代码:l(4)打断点/显示断点指令:b/info b(5)逐过程与逐语句:s/n(6)查看/关闭查看变量变化:display/p/undisplay(7)结束函数与跳转:finish/continue/until(8)在debug中修改变量的值4.总结零.前言在Windows系统中,程序的运行调试等等全都被一个编译器完全封装了起来,但是在Linux系统中,程序的运行和调试是有原创 2022-04-01 09:00:00 · 1180 阅读 · 53 评论 -
Linux编译器---gcc/g++的使用
众所周知,vim是只能编写代码不能执行代码的,如果想在Linux下执行C或者C++程序时,我们就需要使用Linux下特定的编译器gcc与g++,对比我们经常使用的VS,gcc与g++可以更好地展示一个程序由源文件到可执行文件的过程。原创 2022-03-30 08:00:00 · 2008 阅读 · 35 评论 -
Linux文本编辑器---vim详解
本篇主要介绍Linux下文本编辑器vim的使用方法,以及sudo命令的实现。.原创 2022-03-21 08:00:00 · 4949 阅读 · 61 评论 -
Linux系统下的软件安装
本文将介绍Linux系统下的软件查找、安装与删除,并介绍两款有意思的软件以及怎样实现Linux系统与Windows系统互传软件。原创 2022-03-17 20:48:56 · 8075 阅读 · 44 评论 -
Linux权限管理
Linux系统中处处需要权限,我们对文件执行的每一个操作都代表着我们具有这个权限,如果我们的权限被剥夺操作起来就会变得举步维艰,本篇将介绍Linux中的权限设定与修改,便于我们更加深入了解Linux系统。原创 2022-03-06 14:43:34 · 1678 阅读 · 58 评论 -
Linux系统26条常用指令详解
文章目录零.前言1.ls指令(1)用法(2)功能(3)常用选项2.which指令(1)用法(2)功能(3)举例3.pwd 指令功能4.cd 指令(1)用法(2)功能(3)目录形式什么是路径绝对路径与相对路径绝对路径相对路径(4)举例5.touch 指令(1)用法(2)功能(3)常用选项(4)举例6.mkdir 指令(1)用法(2)功能(3)常用选项(4)举例7.rmdir与rm指令(1)用法(2)功能(3)常用选项8.man指令(1)手册的安装(2)用法(3)功能(4)常用选项(5)手册数字含义9.cp(1原创 2022-03-01 22:59:14 · 4685 阅读 · 51 评论