![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux操作系统
黑米姐姐
喜欢就要做到极致
展开
-
高级IO部分
如图:五种IO模型(钓鱼的例子)IO操作的流程=等待IP条件具备+数据拷贝;“等”的意思是等条件就绪,例如input等输入条件就绪,output是等输出条件就绪;那么高效IO=减少等的比重;阻塞IO在内核将数据准备好之前,系统调用会一直等待,所有的套接字默认都是阻塞方式,直到条件具备,完成IO操作后调用返回;如图:非阻塞IO为了完成IO操作发起调用,若当前不具备IO操作条件...原创 2019-12-06 20:18:22 · 183 阅读 · 0 评论 -
Linux下重要目录和指令
Linux相关重要目录的指令进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限.进入目录需要进入者具有x权限;执行用户在目录中具有r权限可进行ls操作;具有w权限可以进行touch/rm/mv操作;具有x权限可进行cd操作;Linux下的重要目录/proc在Linux系统下,/proc目录是一种proc文件系统,但它...原创 2019-11-23 12:00:13 · 106 阅读 · 0 评论 -
Linux:进程间关系与守护进程
进程间关系除了我们所知道的父子关系,兄弟关系等,进程之间还有两个很重要的关系,即进程组关系和会话关系。进程组作业和会话例如:[Daisy@localhost Linux3]$ sleep 1000 | sleep 20000 | sleep 3000 &[1] 3042我们进行了3个进程,&表示放在后台运行,运行的结果是[1] 3042其中1表示作业号,3042是...原创 2019-11-10 14:09:34 · 101 阅读 · 0 评论 -
Linux:读者写者问题
读者写者问题也满足321原则,读者与读者之间是共享关系,写者和写者之间是互斥关系(不可能同时多个写者写,只有一个写者能够占用缓冲区),读者和写者之间是互斥和同步的关系(写者在写时,读者不能读,读者在读时,写者也不能写,即互斥关系),有一个临界资源读写锁接口初始化函数原型是:int pthread_rwlock_init(pthread_rwlock_t *restrict rwlo...原创 2019-11-09 16:20:02 · 1288 阅读 · 1 评论 -
Linux:线程安全的单例模式及STL、智能指针与线程安全
单例模式特点:某些类,只具有一个对象(实例)称为单例,自行实例化并向整个系统提供这个实例,例如我们实现的线程池,缓存等。常见的单例模式有懒汉模式和饿汉模式。总结:单例模式的特点:(1)单例类只能有一个实例(2)单例类必须创建自己的唯一实例(3)单例类必须给其他对象提供这一对象实例单例模式的优点:(1)单例模式只能创建一个对象,所以在资源方面可以做到节约资源(2)单例模式不需要频...原创 2019-11-09 15:44:09 · 290 阅读 · 0 评论 -
Linux:线程池
基础概念概念一种线程使用模式,线程过多会带来调度开销,影响缓存局部性和整体性能,而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,避免了在处理短时间任务时创建和销毁线程的代价,他能保证对内核的充分利用,还能防止过分调度,也就是用来解决效率问题。应用场景1、需要大量的线程来完成任务,且完成任务的时间比较短。2、对性能要求苛刻的应用3、接受突发性的大量请求,但不至于使服务器因...原创 2019-11-08 21:58:44 · 96 阅读 · 0 评论 -
Linux:线程同步(条件变量、生产者消费者模型,POSIX信号量)
同步与条件变量介绍使用互斥量和条件变量来实现生产者-消费者模型(使用阻塞队列)POSIX信号量(使用环形队列来实现生产者-消费者模型)原创 2019-11-08 21:10:19 · 233 阅读 · 0 评论 -
Linux:线程安全、可重入、死锁
概念线程安全:多个线程并发同一段代码时,不会出现不同的结果,常见于对全局变量和静态变量进行操作,并且没有被锁保护的情况下,会出现线程不安全的问题。可重入:同一个函数被不同的执行流调用,当前一个流程没有被执行完,就有其他的执行流再次进入称为重入,一个函数在重入的情况下,运行结果不会出现任何不同或者任何问题,则该函数称为可重入函数,(因此可以看出,一个函数可重入,一定是线程安全的),否则称为不可重...原创 2019-11-07 15:51:30 · 284 阅读 · 0 评论 -
Linux:线程互斥
进程线程互斥相关概念临界资源:多线程执行流共享的资源叫做临界资源临界区:每个线程内部,访问临界资源的代码,叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。原子性:不会被任何调度机制打断的操作,该操作只有两种状态:要么完成,要么未完成互斥量大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间中,...原创 2019-11-06 17:08:35 · 451 阅读 · 0 评论 -
Linux:线程概念及线程控制
1、线程相关概念2、线程控制的接口3、线程id及进程地址空间原创 2019-11-03 15:11:48 · 133 阅读 · 0 评论 -
Linux:进程信号
信号入门概念信号是一种操作系统与进程之间某些事件发生的通知机制,具有随机性(异步),进程后续必定要认识信号,知道信号怎么处理,操作系统向进程发信号(操作系统是进程的管理者,可以向进程发信号),就是操作系统找到目标进程PCB,然后修改PCB中位图中的比特位,由0置1,因此这种说法不正确,而应该叫做操作系统向进程写信号(但是一般还是采用前面那种叫法);当获取一个信号时,并不一定会立即做这件事情,...原创 2019-11-01 16:04:41 · 181 阅读 · 0 评论 -
Linux:进程间通信(消息队列及信号量)
system V消息队列一个进程向队列中放数据,一个进程从队列中拿数据,这个队列叫做消息队列消息队列相关函数(1)创建消息队列:msgget函数函数原型为:#include <sys/msg.h> int msgget(key_t key, int msgflg);...原创 2019-10-29 14:52:23 · 147 阅读 · 0 评论 -
Linux:进程间通信(system V共享内存)
前言:用户地址空间占内存的四分之三,在操作系统内存地址空间中,有内核级页表来映射,因此页表分为用户级页表和内核级页表,但他们最终都由操作系统托管例如把数据写入文件(例如管道)就是将数据从用户缓冲区写入到操作系统缓冲区(从用户拷贝到内核),读出数据就是将数据从操作系统缓冲区读到用户缓冲区(从内核拷贝到用户)。system V共享内存共享内存原理注意:(1)共享内存是system V进程间通...原创 2019-10-27 21:26:08 · 222 阅读 · 0 评论 -
Linux:进程间通信(管道:匿名管道+命名管道)
进程间通信准则:进程运行具有独立性,所以要让其通信本身是有难度的事情,所以想让进程进行通信,必须让不同的进程看到同一份资源(进程通信的前提),这里的资源同城指某一块内存。管道管道是Unix中一种进程间通信的形式,将一个进程连接到另一个进程的一个数据流称为一个管道如图两个进程之间是通过管道来进行通信的,但是管道只能进行单向通信,即父进程写,子进程读或者子进程写,父进程读。第一次父进程要打...原创 2019-10-27 13:48:13 · 369 阅读 · 0 评论 -
Linux:进程的基础I/O
在C语言中,任何程序运行后称为进程执行时默认会打开三个输入输出流:stdin、stdout、stderr;stdin:标准输入,对应设备:键盘、stdout:标准输出,对应设备:显示器、stderr:标准错误,对应设备:显示器系统文件I/O系统接口主要是4个,分别是:read、write、open、closeopen先使用man手册查看open的使用方法,例如: #include &...原创 2019-10-19 12:27:44 · 147 阅读 · 0 评论 -
Linux:进程控制
进程创建fork函数介绍创建子进程,会分配新的内存块和内核数据结构(PCB、地址空间、页表等),将父进程部分数据结构内容拷贝到子进程,添加子进程到系统进程列表中,然后fork返回,开始调度器调度fork函数有2个返回值,因为在调用fork后,有两个进程,因此有2个返回值,子进程返回0,父进程返回子进程的pid;fork()之后,父子进程代码共享,数据以写时拷贝的方式各自私有一份,父子进程...原创 2019-10-16 22:44:42 · 297 阅读 · 0 评论 -
Linux:进程概念
冯诺依曼体系结构冯诺依曼体系结构是现代计算机硬件体系结构,包括输入设备、存储器(内存)、输出设备(显示器)、运算器和控制器,注意:中央处理器(CPU)包含运算器和控制器等(1)不考虑缓存情况,CPU能且只能对内存进行读写,不能访问外设,因此输入数据后放到存储器中进行缓冲(2)硬件行为决定软件行为,所有设备都是围绕存储器工作的。例如qq聊天过程:输入设备输入数据,CPU读取数据首先从内存中...原创 2019-10-14 16:18:52 · 318 阅读 · 0 评论 -
Linux:进度条相关
如何修改sudoers配置首先su root进入root管理员模式,然后chmod u+w /etc/sudoers对用户增加可写权限,之后vim /etc/sudoers进入编辑,大概在90行有看到如图这样的显示在下面增加一条自己的用户名[tab]ALL=(ALL)[tab]ALL的指令即可进度条代码例如vim progressbar.c,编辑以下代码:#include <...原创 2019-10-12 16:08:29 · 77 阅读 · 0 评论 -
Linux:项目自动化构建工具make/Makefile
概念Makefile:是一个普通的文本文件,有一点不普通,这个文件记录的是一个项目的所有构建规则make:是一个解释程序,在执行make命令时,会到当前目录下寻找Makefile文件,然后对Makefile中记录的构建规则进行逐行解释执行,最终完成整个项目。Makefile编写规则例如:含有main.c文件,执行vim Makefile,编写以下main:main.c ...原创 2019-10-12 11:08:33 · 159 阅读 · 0 评论 -
Linux:软件包管理器yum、编辑器vim、编译器gcc/g++、调试器gdb的使用
yum首先关于yum的操作要在主机(虚拟机)网络畅通下进行,通过ping指令验证1、查看软件包:yum list、yum list installed(查看已安装的软件包)、yum list | grep lrzsz(使用grep命令筛选)2、安装软件:在root用户下,yum install lrzsz即可3、卸载软件:yum remove lrzsz(在root下)Linux编辑器v...原创 2019-10-11 19:40:11 · 504 阅读 · 1 评论 -
Linux:shell命令及Linux权限
shell命令及运行原理Linux完整的操作系统:内核+外部应用,我们所敲 的命令其实大部分都是一个个程序,完成命令所对应的功能。shell:捕捉键盘的输入信息,对信息进行解析,因此对shell的最简单的定义就是命令行解释器,那么shell对于Linux的作用就是对我们的指令进行解析,解析指令给Linux内核,反馈结果通过内核运行出结果,通过shell解析给用户,如图:Linux权限1、...原创 2019-10-10 11:55:33 · 1304 阅读 · 0 评论 -
Linux:初识Linux及基本指令
初始LinuxLinux的特点Linux是开源的,它的好处有:(1)代码更安全(2)可以有人来开发,完善它的功能,代码会更加优质操作系统相关(1)操作系统的工作:操作系统是一款进行软硬件资源管理的软件(2)操作系统根据软硬件数据进行管理(3)管理者与被管理者并不直接沟通,管理者要用数据管理,所以必须要有驱动程序来帮他获得数据。(4)操作系统把软硬件资源管理好为用户提供好的执行环...原创 2019-10-09 19:16:49 · 144 阅读 · 0 评论