
linux
文章平均质量分 92
温柔有度
生命如同寓言,其价值不再长短,而在内容!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
信号量概述
信号量又称之为PV操作,PV原语是对信号量的操作,一次P操作使信号量sem减1,一次V操作使信号量sem加1。对于P操作,如果信号量的sem值为小于等于0,则P操作就会阻塞;信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。若用于同步操作,往往会设置多个信号量,并且安排不同的初始值,来实现它们之间的执行顺序。将信号量的值减1,若信号量的值小于0,则对信号量的操作失败,函数立即返回。将信号量的值减1,若信号量的值小于等于0,此函数会引起调用者阻塞。原创 2024-05-09 22:45:03 · 780 阅读 · 0 评论 -
互斥锁概述
1. 同步互斥概述在多任务操作系统中,同时运行的多个任务可能都需要访问/使用同一种资源多个任务之间有依赖关系,某个任务的运行依赖于另一个任务同步和互斥就是用于解决这两个问题的。互斥:一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。POSIX标准中进程和线程同步和互斥的方法,主要有信号量和互斥锁两种方式。同步:两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。同步就是在互斥的基础上有顺序。原创 2024-05-09 22:03:31 · 1630 阅读 · 0 评论 -
线程的概述
如果原本子线程是结合态,需要通过pthrad_join函数回收子线程退出的资源,但是这个函数是一个阻塞函数,如果子线程不退出,就会导致当前进程(主控线程),无法继续执行,大大的限制了代码的运行效率,如果子线程已经设置为分离态,就不需要再使用pthread_join了。每一个进程创建的时候系统会给其4G虚拟内存,3G用户空间是私有的,所以进程切换时,用户空间也会切换,所以会增加系统开销,而一个进程中的多个线程共享一个进程的资源,所以线程切换时不用切换这些资源,效率会更高;这样可以为不同的任务步骤建立线程。原创 2024-05-09 19:13:05 · 1235 阅读 · 0 评论 -
共享内存
共享内存是进程间通信方式中效率最高的,原因在于进程是直接在物理内存上进行操作,将物理地址映射到用户进程这,所以只要对其地址进行操作,就是直接对物理地址操作。一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。若一个进程正在向共享内存区写数据,则在它做完这一步操作前,别的进程不应当去读、写这些数据。使用共享内存要注意的是多个进程之间对一个给定存储区访问的互斥。共享内存是进程间共享数据的一种最快的方法。允许两个或者多个进程共享。1. 共享内存的特点。2. 共享内存示意图。原创 2024-05-07 19:34:44 · 1003 阅读 · 0 评论 -
消息队列
消息队列是消息的链表,存放在内存中,由内核维护5. 消息队列的特点消息队列中的消息是有类型的。消息队列中的消息是有格式的。消息队列可以实现消息的随机查询。消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取。消息队列允许一个或多个进程向它写入或者读取消息。与无名管道、命名管道一样,从消息队列中读出消息,消息队列中对应的数据都会被删除。每个消息队列都有消息队列标识符,消息队列的标识符在整个系统中是唯一的。只有内核重启或人工删除消息队列时,该消息队列才会被删除。原创 2024-05-07 15:03:41 · 840 阅读 · 0 评论 -
管道:有名管道
1. 有名管道概述命名管道(FIFO)和管道(pipe)基本相同,但也有一些显著的不同,其特点是:半双工,数据在同一时刻只能在一个方向上流动。写入FIFO中的数据遵循先入先出的规则。FIFO所传送的数据是无格式的,这要求FIFO的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。FIFO在文件系统中作为一个特殊的文件而存在并且在文件系统中可见,所以有名管道可以实现不相关进程间通信,但FIFO中的内容却存放在内存中。管道在内存中对应一个缓冲区。不同的系统其大小不一定相同。原创 2024-04-30 15:04:48 · 711 阅读 · 0 评论 -
文件描述符
文件描述符是非负整数,是文件的标识。用户使用文件描述符(file descriptor)来访问文件。利用open打开一个文件时,内核会返回一个文件描述符。每个进程都有一张文件描述符的表,进程刚被创建时,标准输入、标准输出、标准错误输出设备文件被打开,对应的文件描述符0、1、2 记录在表中。在进程中打开其他文件时,系统会返回文件描述符表中最小可用的文件描述符,并将此文件描述符记录在表中。原创 2024-04-30 11:07:33 · 663 阅读 · 0 评论 -
管道:无名管道
管道(pipe)又称无名管道。无名管道是一种特殊类型的文件,在应用层体现为两个打开的文件描述符。任何一个进程在创建的时候,系统都会 给他分配4G的虚拟内存,分为3G的用户空间和1G 的内核空间,内核空间是所有进程公有的,无名管道就是创建在内核空间的,多个进程知道同一个无名管道的空间,就可以利用他来进行通信无名管道虽然是在内核空间创建的,但是会给当前用户进程两个文件描述符,一个负责执行读操作,一个负责执行写操作。原创 2024-04-29 20:04:55 · 1204 阅读 · 0 评论 -
进程间的通信
进程间通信(IPC:Inter Processes Communication) 进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源(例如打开的文件描述符)。进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信。在Linux下,要想查看这些信号和编码的对应关系,可使用命令:kill l。原创 2024-04-29 14:54:09 · 1379 阅读 · 0 评论 -
进程的替换(exec)
e (environment):存有环境变量字符串地址的指针数组的地址,execle和execve改变的是exec启动的程序的环境变量(新的环境变量完全由environment指定),其它四个函数启动的程序则使用默认系统环境变量。调用exec函数的进程并不创建新的进程,故调用exec前后,进程的进程号并不会改变,其执行的程序完全由新的程序替换,而新程序则从其main函数开始执行。失败后从原程序的调用点接着往下执行,在平时的编程中,如果用到了exec函数族,一定要记得加上错误判断语句。1. exec函数族。原创 2024-04-28 18:53:06 · 530 阅读 · 0 评论 -
fork函数与vfork函数
status:函数返回时,参数status中包含子进程退出时的状态信息,子进程的退出信息在一个int中包含了多个字段,用宏定义可以取出其中的每个字段。当pid所指示的子进程不存在,或此进程存在,但不是调用进程的子进程,waitpid就会出错返回,这时errno被设置为ECHILD。使用fork函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,父子进程是独立的。子进程已运行结束,父进程未调用wait或者waitpid函数回收子进程的资源是子进程变为僵尸进程的原因。原创 2024-04-28 15:22:09 · 1702 阅读 · 1 评论 -
进程的概述
程序和进程区别:程序:是静态的,存放在磁盘上的可执行文件进程:是动态的,是运行在内存中的程序的执行实例程序是一些指令的有序集合,而进程是程序执行的过程,进程是程序的一次执行过程。进程的状态是变化的,其包括进程的创建、调度和消亡。只要程序运行,此时就是进程,程序每运行一次,就会创建一个进程在linux系统中,进程是管理事务的基本单元。进程拥有自己独立的处理环境和系统资源(处理器、存储器、I/O设备、数据、程序)。原创 2024-04-27 16:39:32 · 1036 阅读 · 0 评论 -
Linux系统编程
1.1 操作系统的职责操作系统用来管理所有的资源,并将不同的设备和不同的程序关联起来。1.2 什么是Linux系统编程在有操作系统的环境下编程,并使用操作系统提供的系统调用及各种库,对系统资源进行访问。系统编程主要就是为了让用户能够更好和更方便的操作硬件设备,并且对硬件设备也起到保护作用,我们所写的程序,本质就是对硬件设备的操作,所以操作系统提供接口可以对硬件进行操作,这就是系统编程。原创 2024-04-27 14:12:38 · 1482 阅读 · 0 评论 -
shell脚本
代码展示:/bin/bash#定义变量 4 #shell脚本中没有数据类型可言,所以定义变量时不需要加数据类型 5 #shell脚本中,赋值操作时不能在等号两边加空格#NUM = 100 #错误NUM=100#引用变量 10 # $变量名 取一个变量的值i=$NUM#显示变量echo $NUMecho $i#清除变量unset NUMecho $NUM#使用read从终端读取数据保存在变量中read str#使用readonly创建一个只读的变量。原创 2024-04-26 18:03:34 · 1531 阅读 · 0 评论 -
make命令
@目标名$<依赖文件列表中的第一个文件$^依赖文件列表中除去重复文件的部分AR归档维护程序的程序名,默认值为arARFLAGS归档维护程序的选项AS汇编程序的名称,默认值为asASFLAGS汇编程序的选项CCC编译器的名称,默认值为ccCFLAGSC编译器的选项CPPC预编译器的名称,默认值为$(CC) -ECPPFLAGSC预编译的选项CXXC++编译器的名称CXXFLAGSC++编译器的选项。原创 2024-04-25 20:55:41 · 931 阅读 · 0 评论 -
Linux基础命令
一、命令的格式1.1 打开终端的方式ubuntu中的命令基本都是在终端执行的打开终端的方式:第一种方法:在ubuntu桌面中鼠标右键选择“打开终端”第二种方法:使用快捷键ctrl + alt + t1.2 终端提示符stu@qfedu:~$ stu:用户名 qfedu:主机名 ~:表示路径~:家目录/:根目录$:表示权限$:普通用户权限#:管理员权限。原创 2024-04-16 16:59:29 · 351 阅读 · 0 评论