linux操作系统
文章平均质量分 67
linux内核之网络子系统
想名字多费事
编程小白入驻
展开
-
如何让进程后台运行?(TX)
(1)命令后面加上& (如: ./a.out &)实际上,这样是将命令放入到一个作业队列中了结果会输出到终端使用Ctrl + C发送SIGINT信号,程序免疫关闭session发送SIGHUP信号,程序关闭前台出现进程号用kill可杀死。(2)ctrl + z 挂起进程,使用jobs查看序号,在使用bg %序号后台运行进程(3 )nohup 运行指令 (如: nohup ./a.out )前台没有出现进程号有一个“忽略输入,输出至nohup.out的提示输出也没原创 2021-04-29 22:49:59 · 1731 阅读 · 0 评论 -
内存覆盖及内存交换
程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可以把用户空间分为一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按照调用关系分段,首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统将其调入覆盖区,替换覆盖区中原有的段。覆盖技术的特点:打破了必须将一个进程的全部信息装入内存后才能运行的限制,但当同时运行程序的代码量大于主存时仍不能运行,再而,内存中能够更新的地方只有覆盖区的段,不在覆盖区的段会常驻内存。...原创 2021-04-29 21:55:56 · 3723 阅读 · 0 评论 -
Linux信号量之用户态信号量(Posix信号量->无名信号量)
相关API:1、初始化信号量int sem_init(sem_t* sem,int pshared,unsigned int value);//pshared为信号量最多由几个进程共享。Linux中只能取o。value一般为1,表示资源可用,为o表示不可用2、等待信号量,如果信号量为0则等待,如果信号量大于0则返回,同时对值做减1操作int sem_wait(sem_t* sem);int sem_trywait(sem_t* sem);int sem_timedwait(sem_t*原创 2021-04-28 22:44:43 · 244 阅读 · 0 评论 -
Linux信号量之内核信号量
一、内核信号量Linux内核的信号量在概念和原理上与用户态的System V的IPC机制信号量是一样的,但是它绝不可能在内核之外使用,它是一种睡眠锁。如果有一个任务想要获得已经被占用的信号量时,信号量会将其放入一个等待队列(它不是站在外面痴痴地等待而是将自己的名字写在任务队列中)然后让其睡眠。当持有信号量的进程将信号释放后,处于等待队列中的一个任务将被唤醒(因为队列中可能不止一个任务),并让其获得信号量。这一点与自旋锁不同,处理器可以去执行其它代码。它与自旋锁的差异:由于争用信号量的进程在等待锁重原创 2021-04-26 19:15:57 · 1093 阅读 · 0 评论 -
linux信号量简介
一、什么是信号量为了防止多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种访问机制,它可以通过生成并使用令牌来授权,在同一时刻只能有一个线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来协调进程(线程)对共享资源的访问的。信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。最简单的信号量是只能取0原创 2021-04-26 19:15:17 · 1916 阅读 · 0 评论 -
互斥锁、条件变量、自旋锁、读写锁
二、互斥锁、读写锁、自旋锁、条件变量、信号量1、互斥锁机制:一次只能一个线程拥有互斥锁,其他线程只有等待。互斥锁是在抢锁失败的情况下主动放弃CPU,进入睡眠状态直到锁的状态改变时再唤醒,而操作系统负责线程调度,为了实现锁的状态发生改变时能唤醒阻塞的线程或者进程,需要把锁交给操作系统管理,所以互斥锁在加锁操作时涉及上下文的切换。互斥锁实际的效率还是可以让人接受的,加锁的时间大概100ns左右,而实际上互斥锁的一种可能的实现是先自旋一段时间,当自旋的时间超过阀值之后再将线程投入睡眠中,因此在并发运算中使原创 2021-04-26 19:14:11 · 481 阅读 · 0 评论 -
linux多线程简介
和多进程相比,多线程是一种比较节省资源的多任务操作方式。启动一个新的进程必须分配给它独立的地址空间,每个进程都有自己的堆栈段和数据段,系统开销比较高,进行数据的传递只能通过进程间通信的方式进行。在同一个进程中,可以运行多个线程,运行于同一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享全局变量和对象,启动一个线程所消耗的资源比启动一个进程所消耗的资源要少。多线程可以共享资源(变量和对象),对编程带来了方便,但是某些对象虽然可以共享,但在同一个时间只能一个线程使用,多个线程同时使用会产生冲突,例如s原创 2021-04-26 16:16:03 · 254 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别:1、申请方式(管理方式):堆是程序员手动申请和释放的。栈由系统自动分配。2、分配方式:堆都是动态分配。栈由静态和动态分配,静态分配由编译器完成(如局部变量分配)。动态分配由alloca函数分配,但栈动态分配的资源由编译器进行释放,无需程序员干预。3、申请大小限制不同:堆向高地址扩展,是不连续的内存区域(因为系统是用链表来存储空闲内存地址,自然不是连续的),堆大小受限于计算机系统中有效的虚拟内存(32bit系统理论上是4G),所以堆的空间比较灵活,比较大。栈底和栈顶是预设好的,原创 2021-04-15 18:58:19 · 81 阅读 · 0 评论 -
linux多进程知识汇总
文章目录前言一、进程的创建与结束1.背景知识2.相关接口3、 补充知识二、Linux进程控制1、进程地址空间(地址空间)2、进程控制块(处理机)3、上下文切换三、进程调度算法四、Linux下进程间通信方式?五、进程状态的切换六、守护进程、僵尸进程和孤儿进程前言1、每一个进程是资源分配的基本单位。2、进程结构由以下几个部分组成:代码段、堆栈段、数据段。代码段是静态的二进制代码,多个程序可以共享。3、父进程创建子进程之后,父、子进程除了pid外,所有的部分几乎一样。4、父、子进程共享全部数据,但并不原创 2021-04-12 22:29:04 · 179 阅读 · 0 评论 -
进程、线程和协程的区别和联系(TX)
进程和进程的区别?调度:线程是调度的基本单位(PC,状态码,通用寄存器,线程栈及栈指针);进程是拥有资源的基本单位(打开文件,堆,静态区,代码段等)。并发性:一个进程内多个线程可以并发(最好和CPU核数相等);多个进程可以并发。拥有资源:线程不拥有系统资源,但一个进程的多个线程可以共享隶属进程的资源;进程是拥有资源的独立单位。系统开销:线程创建销毁只需要处理PC值,状态码,通用寄存器值,线程栈及栈指针即可;进程创建和销毁需要重新分配及销毁task_struct结构。...原创 2021-04-11 08:38:46 · 123 阅读 · 0 评论 -
一个进程可以创建多少线程?
理论上,一个进程可用虚拟空间是2G,默认情况下,线程的栈的大小是1MB,所以理论上一个进程可以创建2048个线程,当然更改编译器的设置可以创建多余2048个线程因此,一个进程可以创建的线程数由可用虚拟空间和线程的栈的大小共同决定,只要虚拟空间足够,那么新线程的建立就会成功。如果需要创建超过2K以上的线程,减小你线程栈的大小就可以实现了,虽然在一般情况下,你不需要那么多的线程。过多的线程将会导致大量的时间浪费在线程切换上,给程序运行效率带来负面影响。...原创 2021-04-10 10:32:07 · 5085 阅读 · 0 评论 -
gdb调试
文章目录一、调试前的准备二、基本调试命令三、总结gcc编译器可以发现程序代码的语法错误,但不能发现程序的业务逻辑错误。本章节介绍一个功能强大的调试工具gdb。一、调试前的准备用gcc/g++编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果您打算编译后的程序可以被调试,编译的时候要加-g的参数,例如: gcc/g++ -g -o book book.c 在命令提示符下输入gdb book就可以调试book程序了。 gdb book二、基本调试命令命令命令 缩写命令说原创 2021-04-08 13:18:01 · 73 阅读 · 0 评论 -
vim常用命令
文章目录一、创建/打开文件二、vi的三种模式四、vi的常用命令一、创建/打开文件vim 文件名打开一个文件,如果文件不存在,就创建它。示例:vim book.cpp二、vi的三种模式正常模式:可以使用快捷键命令(文末会给出我配置的vim下的快捷键),或按:输入命令行。插入模式:可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。原创 2021-04-08 08:53:56 · 205 阅读 · 0 评论 -
linux常用命令
Linux 常用命令。 Linux的命令有几百个,下面我将总结我常用到的32个命令。如果大家在学习和工作中遇到了陌生的且高频的Linux命令,多查资料,掌握它,日积月累,知识面就会宽广。1、关机:init 02、重启:init 63、清屏:clear4、查看服务器的ip地址:ip addr5、查看时间:date6、设置时区为中国上海时间:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime7、设置时间:date -s “yyyy-mm-d原创 2021-04-07 23:08:35 · 154 阅读 · 0 评论