Linux操作系统
文章平均质量分 84
Linux操作系统
楠c
这个作者很懒,什么都没留下…
展开
-
Linux多线程_(线程池,单例模式,读者写者问题,自旋锁)
目录线程池是什么为什么怎么样线程池线程池是什么一种线程使用模式。可以避免大面积请求引起的服务器宕机。为什么线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。怎么样线程池的应用场景:需要大量的线程来完成任务,且完成任务的时间比较短。 WEB服务原创 2021-05-05 11:23:09 · 345 阅读 · 0 评论 -
Linux多线程_(线程同步,基于阻塞队列的生产者消费者模型)
目录线程同步的概念为什么要有线程同步条件变量初始化销毁等待条件满足唤醒等待生产者消费者模型线程同步的概念在保证数据安全的情况下,让多个执行流,按照特定顺序对临界资源进行访问,叫做同步。为什么要有线程同步线程互斥是为了,让访问临界资源不会出错。假如有一个竞争力强的线程一直执行任务,那么其他线程竞争不过他,虽然这个过程中也没有出错,但是效率变低,而线程同步则是当一个进程结束工作,通知下一个进程来执行,这样协同工作可以更高效的完成任务。而这种通知事件,就是用条件变量完成的。struct cond{原创 2021-05-04 10:54:48 · 514 阅读 · 2 评论 -
Linux多线程_(Posix信号量实现环形队列生产者消费者模型)
是什么信号量也叫做信号灯,本质是一个计数器。因为互不影响,所以多个线程可以同时进入。但是我们害怕控制不了进程的个数。所以引入信号量,相当于一个监测机制。count-- pcount++ v为什么怎么用...原创 2021-05-04 10:36:44 · 792 阅读 · 3 评论 -
Linux多线程_(进程与线程,线程的生命周期认识线程,线程互斥)
所有的一整块叫进程,每一个task_struct是一条执行流。进程:承担分配资源实体的基本单位。线程:调度的基本单位。线程是进程内部一条执行流。线程在进程的地址空间运行。原创 2021-05-01 15:15:15 · 1347 阅读 · 9 评论 -
从信号的生命周期了解信号(Linux进程信号)
生活中的信号红绿灯,现在眼前没有红绿灯,但我们知道红灯停,绿灯行。在幼儿园老师在我们的头脑里注册了这一个方法。狼烟,狼烟虽然没有点燃,但一经点燃,官兵知道该怎么做。闹钟,闹钟没想,但早上响起,我们就要起床。下课,下课铃没想,但是铃声一响,我们可以出教室。信号就是事件发生的一种通知机制。注意,进程通信是传输数据,而信号是通知事件给进程,但是可以以看做通信的一种方式。 1 #include<stdio.h> 2 #include<unistd.h> 3 int ma原创 2021-04-21 13:41:51 · 1582 阅读 · 5 评论 -
进程间通信(管道与共享内存)
目录进程间通信目的进程通信的发展管道匿名管道管道读写规则1. 写端不关闭文件描述符,不写入,(管道为空)读取条件不就绪,读端就可能就会长时间阻塞2. 读端不关闭文件描述符,不读,(管道满了)写条件不就绪,写端就会被阻塞3. 写端关闭文件描述符,读端读取完之后,读到文件结尾4. 读端关闭文件描述符,写端可能会被杀掉站在内核理解管道管道特点命名管道进程间通信目的数据传输:一个进程需要将他的数据发送给另一个进程资源共享:多个进程需要共享同样的资源通知事件:一个进程需要向一个或一组进程发送消息,通知他们发原创 2021-04-12 20:58:18 · 2734 阅读 · 3 评论 -
理解文件系统与动静态库(Linux基础)
目录1. 文件系统的硬盘结构2. 软硬链接2.1 硬链接2.2 软链接1. 文件系统的硬盘结构硬盘上最小单位为扇区,扇区大小为512个字节,一个block大小为4kb,也就是说一个块拥有8个扇区,之前学到,文件=属性+内容。而inode就存储这属性集合。而内容存储在block中,可能是多个block因为不确定文件内容的大小。硬盘上有很多文件,当inode和block多起来,就要被先描述在组织。同时也要对文件进行操作,所以就引出了文件系统。filesystem{//基本情况//空间一共多大//原创 2021-04-07 21:24:54 · 400 阅读 · 4 评论 -
基础IO(Linux)
目录1. 回顾c语言文件2. Linux中的文件3. OPEN系统调用4. 文件描述符fd5. 文件加载过程5.1 总结6. 文件描述符的分配,重定向原理1. 回顾c语言文件学习之前先来简单回顾一下c语言的IO知识,首先fopen打开文件,第一个参数是文件名,如果没有这个文件会对应的在源文件目录下创建一个。fopen第二个参数是权限,即以什么方式来对这个文件进行操作。然后调用对应的函数。操作完之后在使用fclose清理。 1 #include<stdio.h> 2 #include&原创 2021-03-27 21:01:17 · 219 阅读 · 0 评论 -
简单编写一个minishell
先要模拟一个命令行,我们直接使用字符串输出,由于命令行一直需要打印,可以设置一个死循环。之后的命令就在这个死循环之内执行。 1 #include<stdio.h> 2 #include<string.h> 3 #include<unistd.h> 4 #include<stdlib.h> 5 #include<sys/wait.h> 6 #define SIZE 100 7 #define NUM 26 8 int原创 2021-03-27 13:00:09 · 185 阅读 · 0 评论 -
进程创建,进程终止,进程等待,进程替换(Linux进程的生命周期)
目录1. 回忆fork2. 写时拷贝3. fork常规用法4. fork调用失败的原因进程终止第一次认识fork是为了验证父子进程,今天在来深入理解他。1. 回忆forkfork创建子进程是以父进程为模板,继承父进程的信息。为何给父进程返回pid,给子进程返回0?在之前的博客有深入讨论,点这里 1 #include<iostream> 2 #include<unistd.h> 3 #include<sys/types.h> 4 using nam原创 2021-03-23 15:32:26 · 596 阅读 · 0 评论 -
进程地址空间(Linux虚拟内存)
回顾“程序”地址空间在学习c语言的时候,我们为了更好的理解,把它叫做程序地址空间,从低地址到高地址,依次是,常量区,数据区,堆区,栈区,而且没有共享映射区和内核空间的概念,我们那个只能说是在语言方面的理解。是残缺的。当我们学习了c++和操作系统,就该对他有更深层次的理解。所以下面这张图才是相对完整的。所以他的名字也应该叫做进程地址空间。我们写一段代码,测试一下他的地址。 1 #include<stdio.h> 2 #include<stdlib.h> 3原创 2021-03-17 18:50:56 · 481 阅读 · 0 评论 -
进程优先级与环境变量(Linux基础)
目录进程优先级pri和nice值进程的其他概念环境变量进程优先级首先区分优先级与权限。权限:能否执行某个"事物"。优先级:使用某个"事物"的顺序.为什么要有优先级?当要被管理的对象很多时候。怎么样使用优先级进程优先级决定了哪个进程优先使用资源。pri和nice值编写一个程序,让它运行起来,查看进程的信息进程的优先级pri,ni(nice)表示优先级的修正数据。优先级真正的值是pri+nice后的值。Linux中调整优先级值的大小,就是通过调整nice值来实现的。n原创 2021-03-12 18:01:40 · 1400 阅读 · 2 评论 -
Linux操作系统(fork函数,task_struct内容,僵尸进程,孤儿进程,sysytemd与init)
这里写目录标题认识fork认识fork通过man fork可以看出这个函数创建了一个子进程调用fork函数,查看实际表现出来的现象 #include<stdio.h> 2 #include<unistd.h> 3 4 int main() 5 { 6 printf("输出一遍\n"); 7 fork(); 8 sleep(1); 9 printf("输出两遍pid:%d,ppid:%d\n",getpid(),getppid原创 2021-02-15 16:29:10 · 6855 阅读 · 15 评论 -
Linux操作系统基础(了解操作系统,操作系统的管理,进程详解)
我们常见的计算机,大部分都遵守冯诺依曼体系。输入设备:键盘,鼠标,摄像头,麦克风,网卡,硬盘等存储器:内存(掉电易失性存储介质)中央处理器:运算器:控制器:输出设备:显示器,声卡,喇叭,硬盘...原创 2021-02-12 19:10:35 · 3793 阅读 · 5 评论 -
Linux 编写进度条小程序(缓冲区与刷新策略,回车与换行区别)
在外面运行生成的程序,发现输出hello,5s之后程序才结束。那么在程序里原创 2021-02-09 20:18:51 · 464 阅读 · 2 评论 -
Linux中gdb调试与make生成多文件项目
gdb与makefilegdb调试程序make与makefilegdb调试程序在Linux当中使用g++编译后生成的可执行程序,默认以动态链接且以release发布,也就是说不能进行debug调试。所以在对源程序g++进行编译的时候需要在最后加上-g,来表示以debug方式发布。我们可以看到debug发布的hello-d文件大小明显比hello文件要大,多出来的正是调试所需要的调试信息。我们使用命令readlf -S hello-d | grep debug来查看多出来的调试信息通过 gdb+文原创 2021-02-07 23:19:28 · 1156 阅读 · 1 评论 -
vim基础,gcc/g++使用与函数库的介绍
原创 2021-02-07 13:14:06 · 207 阅读 · 0 评论 -
学习Linux之基础命令与权限
指令练习:权限练习:原创 2021-01-23 10:19:33 · 141 阅读 · 0 评论