
Linux
lucky52529
跳出自己的舒适区
展开
-
[Linux]——程序地址空间
程序地址空间在讲什么是程序地址空间之前我们先看这样一幅图,大家在学习c语言的时候老师一定都给大家看过:ps:阅读文章前最好知道什么是进程和进程的pcb结构体,前置技能:https://blog.youkuaiyun.com/lucky52529/article/details/89261630我们今天不研究图中哪个部分放了什么,今天研究的问题是,这幅图指定是内存么?实际上,这幅图指的并不是内存,为什么...原创 2019-04-14 13:09:23 · 418 阅读 · 0 评论 -
[Linux]——Linux线程同步
Linux线程同步上一篇我们讲了Linux线程的互斥,利用锁的机制保证了线程的安全。本篇博客我们将为大家讲解Linux下的同步机制,因为时序问题,而导致程序异常,我们称之为竞争状态。在线程条件下这种问题也不难理解,而为了避免发生竞争状态称为同步。同步的概念我们上面说了为了避免发生竞争状态称为同步,可是这样说太过于生涩,我们这里来举一个生活中的例子。学校中有一个单人的自习室,自习室门口挂着...原创 2019-07-11 11:11:44 · 207 阅读 · 0 评论 -
[Linux]——基于阻塞队列的生产消费者模型
生产者消费者模型谈生产者消费者模型之前我们必须知道什么是生产者消费者模型,看题目你可能觉得他是一个十分高深的东西,但是或许我们身边就存在生产者消费者模型。概念引入打个比方,生活中我们经常在缺少生活用品或者其他商品的时候我们通常会选择去超市,那也就不难理解,我们其实就是所谓的消费者。那生产者是超市么?答案是否定的,如果超市是生产者,那供货商是什么,所以供货商是所谓的生产者。再谈超市,其实超市是...原创 2019-07-12 13:54:10 · 332 阅读 · 0 评论 -
[Linux]——基于信号量的生产者消费者模型
生产者消费者模型上篇博客基于阻塞队列的生产者消费者模型笔者已经详细的为大家介绍了什么是生产者消费者模型,而本篇博客也是实现一个生产者消费者模型,不过这次我们将会带领大家使用信号量实现一个基于循环队列的生产者消费者模型。POSIX信号量小伙伴们擦亮眼睛,这里我们使用的是基于POSIX的信号量,有的同学可能会误认为是SystemV的信号量,他们两是不同的。我指的是这两个东西不一样,但是他们的作用...原创 2019-07-12 15:55:22 · 997 阅读 · 0 评论 -
[Linux]——I/O多路转接select技术
浅析I/O多路转接select技术在谈I/O多路转接技术之前,我们先来谈谈什么是I/O。I/O是input和ouput的缩写,即输入输出端口,每个设备都有自己的输出输入地址,用来处理自己的输入输出信息。I/O的五种工作模式首先我们简单介绍一下I/O的五种工作模式,看看不同的I/O方式是如何进行工作的:阻塞I/O模型:应用程序调用一个I/O函数,导致应用程序阻塞,此应用程序会一直等待内核将...原创 2019-08-08 00:43:30 · 1121 阅读 · 0 评论 -
[Linux]——I/O多路转接poll技术
浅析I/O多路转接poll技术上篇博客I/O多路转接select技术笔者已经为大家详细介绍了select函数的使用方式以及特点。我们在文章最后总结的时候我们提到,select虽然已经很大程度上解决了I/O过程中等待的问题,但是由于函数本身接口设计的不友好、能够检测的文件描述符有上限,以及函数多次循环遍历的效率问题导致select在实际场景中并不是使用的那么广泛。今天我们要介绍的poll函数从一...原创 2019-08-08 23:03:32 · 248 阅读 · 0 评论 -
[Linux]——I/O多路转接epoll技术
浅析I/O多路转接epoll技术前面的两篇博客我们已经为大家介绍了select和poll函数,但是在学习中我们发现select和poll存在效率上的问题。而今天的主角epoll函数真的是让人惊艳的设计,它是在2.5.44内核中被引进的,它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。包括现在最火的nginx服务器底层使用的也是epoll多路转接epo...原创 2019-08-09 23:32:53 · 305 阅读 · 0 评论 -
[Linux]——从源码层面看epoll
多路转接epoll技术笔者之前的博客I/O多路转接epoll技术可以说从使用层面上简单的分析了epoll函数。但是相信很多同学对于epoll的原理还是处于模糊的认知阶段,并且很多帖子都说epoll底层使用了内存映射。那么事情的真相到底是怎么样的?笔者也找到了之前牛客大佬赛罗奥特曼对于epoll底层的解析代码,我们不妨站在巨人的肩膀上,对epoll一探究竟。epoll源码这里给大家贴上一个ep...原创 2019-08-11 16:46:46 · 337 阅读 · 0 评论 -
[Linux]——浅谈进程的切换
Linux进程切换转眼接触Linux进程这个老朋友已经快一年了,阅读《Linux操作系统原理与应用》时接触到了调度函数schedule,这个函数中调用了context_switch函数进行进程的切换。而笔者对进程的切换产生了极大的兴趣,本篇博客我们从函数栈帧的角度看看进程到底是怎么切换的。浅析进程切换直奔主题,进程切换会发生在进程调度的前提下,所以进程切换的函数会被进程调度函数schedul...原创 2019-08-15 19:28:41 · 1017 阅读 · 0 评论 -
[Linux]——Linux下的进程调度
进程调度在多进程的操作系统中,进程调度是一个全局性、关键性的问题,他对系统的总体设计、系统的实现和功能设置以及各个方面的性能都有着决定性的作用。本博客笔者就对进程的调度这一知识点进行总结,不过为了简单起见,我们先从Linux内核2.4中调度介绍起,将原理说清楚后介绍更高级的Linux2.6内核调度算法。什么是一个好的调度算法?一个好的调度算法说明白点其实就是能够更合理的分配系统资源,所以调度...原创 2019-08-16 23:02:27 · 472 阅读 · 0 评论 -
[Linux]——多进程与多线程对比
多进程还是多线程进程和线程是伴随我们学习操作系统时经常会提到的概念。那句"进程是分配系统资源基本实体,线程是CPU调度的基本单位"也成了经典的俩者关系的概括。但是随着深入的学习,我们发现只理解这句话是不够的,我们需要对比两者,找到两者各自的优点,具体结合场景讨论到底使用谁更好。我们经常会看到一些一劳永逸的问题,“多进程和多线程哪个更好”、“Linux下用多进程好还是多线程好”。其实这种问法太过...原创 2019-08-26 19:39:46 · 922 阅读 · 0 评论 -
[Linux]——IPC进程通信之信号量
System V 信号量我们在进程间通信专题已经详细的介绍过了管道和共享内存的进程间通信机制。但是其实还有一种非常独特的进程间通信机制,也就是本篇博客将为大家介绍的System V机制的信号量。为什么说他独特,因为之前我们介绍的通信机制最终都会有一个数据交互的场所,而信号量其实是一个计数器。有的同学会提出质疑,计数器怎么能作为进程通信的机制呢?别忘了,进程控制也是进程通信的目的。接下来,笔者就...原创 2019-08-27 23:34:21 · 345 阅读 · 0 评论 -
[Linux]——Linux线程互斥
Linux线程互斥上一篇博客中我们介绍了Linux下对线程控制的简单操作,其实就光单单论线程控制函数的使用来说控制线程并不是一件很难的事,但是线程控制真正抛给我们的难题恐怕并不是仅仅会使用函数而已,本篇博客就带领大家详细的探讨一下Linux下的线程互斥问题。线程并发操作带来的一些问题并发在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运...原创 2019-07-11 09:17:12 · 437 阅读 · 0 评论 -
[Linux]——Linux线程控制
Linux线程控制上篇文章我们介绍了线程的基本概念,详细叙述了线程的一些细节性知识点,我们之前写过进程控制的博客,但是我们今天所写的关于线程控制的函数与进程控制有所不同。相信你肯定还记得我们上篇博客中说明了在Linux下实际上没有真正意义上的线程,他们都是利用进程模拟的,那么也就意味着系统并没有提供一组系统调用接口来进行线程的控制,所以我们先来谈谈使用什么方案进行线程控制。POSIX线程库因...原创 2019-07-10 23:37:36 · 786 阅读 · 0 评论 -
[Linux]——Linux线程基本概念
线程在这篇博客之前,我们已经介绍了Linux进程中大部分的概念,之前我们介绍过了进程的基本概念,进程的控制,信号,进程间通信等一系列的机制。而今天我们所要讲解的是Linux下线程的概念,就算有的同学可能还没有学习线程,但我们发现他经常与进程联系在一起,那么线程到底是什么呢?一起往下看。什么是线程?相信你应该还记得什么是进程吧,提到进程我们又不得不提程序这一概念,程序其实我们可以简单的理解为:...原创 2019-07-10 21:05:19 · 373 阅读 · 0 评论 -
[Linux]——Linux进程基本概念
从操作系统谈起我们都知道操作系统实际上是一款搞软硬件资源管理的软件,而事实上,操作系统在管理任何对象时,都需要先对对象进行描述(使用结构体描述),然后再对对象进行组织(使用链表),所以对于我们本节将讲到的进程,操作系统同样使用先描述再组织的方式来管理进程。1.进程的基本概念基本概念: 进程可以简单理解为正在执行(将代码数据加载到内存)的一个程序,从内核的角度来说,进程是一...原创 2019-04-12 22:30:34 · 589 阅读 · 0 评论 -
[Linux]——Linux下常见的基础命令
Linux下一些常用的基础命令目录操作命令01.ls命令语法:ls 【选项】 【目录或者文件】功能:.对于目录:列出该目录下所有的子目录和文件对于文件:列出文件名以及其他信息常见选项:-a选项:功能:浏览目录下所有文件,包含以.开头的文件(查看隐藏文件)-l选项功能:查看目录下详细的文件信息-R功能:列出子目录下所有的文件(递归列出)ls不常用参考命令参数...原创 2019-03-09 22:38:57 · 353 阅读 · 0 评论 -
[Linux]——在Linux下实现一个自己的命令行解释器
迷你shell我们初识Linux时,由于这是一个没有鼠标的操作系统,所以我们在黑框框执行ls,pwd,cd等命令,在我们上节课讲了进程控制后我们发现我们自己现在也可以做一个简单的命令行解释器。下面直接贴上源代码,因为现在做的还不是很好,所以大家可以运行起来自己玩一玩,等做好了最终版本我会逐步讲解如何实现 1 #include<iostream> ...原创 2019-05-19 19:57:24 · 1910 阅读 · 0 评论 -
[Linux]——基础IO
基础IO时间过的真的很快,上一次写关于c语言文件操作时还是个菜鸟(虽然现在也还是菜鸟,emmm),转眼半年过去,笔者也已经学到了Linux的基础IO阶段,关于Linux下的基础IO我们又要接触到很多的文件操作。如果你对于c语言的文件操作不是很熟悉,介意你可以戳上面的链接,之前写的文件操作非常适合小白阅读。怎么说呢,今天要和大家聊的东西算是比较无聊的一个课题,但是划重点,无聊不代表不重要,恰恰相...原创 2019-05-20 15:04:18 · 270 阅读 · 0 评论 -
[Linux]——Linux进程控制
Linux进程控制笔者在上一篇博客Linux进程基本概念中带领大家认识了什么叫做进程,操作系统是如何管理进程的,以及如何查看杀死一个进程等等。但是想驾驭“进程”这个概念还是远远不够的,今天就带领大家来看一个主题,叫做进程的控制。1.进程的创建我们的同学都知道,在Linux下当你生成了一个可执行程序后,只要敲击./加上程序名让这个程序跑起来,我们就创建出了一个进程。今天给大家讲解另外一种创建进...原创 2019-05-14 22:37:27 · 809 阅读 · 0 评论 -
[Linux]——文件缓冲区
文件缓冲区提到文件缓冲区这个概念我们好像并不陌生,但是我们对于这个概念好像又是模糊的存在脑海中,之间我们在介绍c语言文件操作已经简单的提过这个概念,今天我们不妨深入理解什么是文件缓冲区。为什么需要文件缓冲区当我们在程序中写下一条printf语句时,我们希望将这条语句的内容打印到屏幕上。但是如果你将语句放在循环中,难道你执行一次循环那么操作系统就要打印一次这条数据么?答案当然不是我们对于程...原创 2019-05-25 14:39:46 · 2126 阅读 · 0 评论 -
[Linux]——文件在磁盘中是如何存储的
文件系统相信接触过Linux操作系统的同学一定使用过ls -l这个命令吧,你在你的命令行解释器下输入这个命令后,打印出了下图中的几列信息。这些信息对应了文件下面的属性:文件权限文件硬链接数文件所有者文件所属组文件大小修改日期和文件名字当然你也一定使用过cat,more或者less命令来查看文件内容,请注意,我们上面实际上是提到了文件的两个特点文件属性和文件内容,这篇博客就来...原创 2019-05-25 17:58:35 · 6997 阅读 · 2 评论 -
Vmware 虚拟机提示:无法打开磁盘***.vmdk,未能锁定文件,解决办法
虚拟机:vmware 6.5Vmware 虚拟机提示:无法打开磁盘***.vmdk,原因,未能锁定文件,解决办法如下:原因: 非正常关闭虚拟机。解决办法: (一),删除虚拟机文件所在文件来夹里所有以“.lck”结尾的文件及文件夹,重新启动即可解决。 (二),如结过(一)还不能解决,则检查虚拟机配置文件,用记事本打开 xxx.vmx文件,检查其中的 “fileSearchPath...原创 2019-06-01 11:08:10 · 6979 阅读 · 1 评论 -
[Linux]——教你在Linux下生成自己的静动态库
静态库和动态库说到库,你可能觉得这个名词有点陌生,但是我相信你绝对听过这个词,因为你在学习c语言时一定使用过系统给你的库。我们初始c语言输出hello world你肯定调用了printf函数,而你也一定包了头文件。这个头文件实际上就是系统给我们的库,这个库中有我们经常使用的库函数的实现。静动态的区别既然库中有我们需要函数的实现,那么从名字上来说,静动态库至少相同的点是他们的内容应该大体相同(...原创 2019-06-01 13:33:08 · 379 阅读 · 0 评论 -
[Linux]——进程间通信
进程间通信拿我们人的通信来说,我们人之间为什么要通信?我们通信又有哪些方式呢?而我们本篇博客就会为大家讲解为什么进程间需要通信,更为重要的是进程间的通信方式有哪几种,他们之间通信的原理又是怎么样的。进程间通信的目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程需要向另一个或一组进程发送消息,通知它发生了某种事件(如进程终止时要通知...原创 2019-06-01 20:57:54 · 325 阅读 · 1 评论 -
[Linux]——信号的一生
信号对于信号这个词大家一定都不陌生,信号产生在我们生活的各个角落,比如你过十字路口时头顶的红灯亮起你就知道要停下脚步等待绿灯的切换,再比如下课铃响了你就可以收拾书包回家…信号的真正的意义就在于当一个对象收到信号的时候,他知道针对这个信号该做出什么样的反应。值得注意的是,做出反应的前提是就算你没有收到这个信号,你也知道收到这个信号时你应该怎么做,同样说明,你并不知道你什么时候会收到信号。现在我...原创 2019-06-10 22:23:07 · 402 阅读 · 3 评论 -
[Linux]——教你70行代码实现线程池
线程池今天讲的这个玩应真的很有意思,他的名字叫线程池,看起来线程池像是一个贼高大上的东西,实际上实现一个简单的线程池还是挺简单的,如果你想顺利的自己学会实现一个简易的线程池,那么必须具备的技能有:熟悉队列操作,熟悉互斥锁,熟悉条件变量,当然有类封装的相关知识也是非常重要的。线程池概念话说什么池就放什么东西,水池放水,奖池放钱,那不言而喻线程池当然放的线程了,但是为什么要将线程放在一个池子中呢...原创 2019-07-12 20:43:51 · 312 阅读 · 0 评论 -
[Linux]——IPC进程通信之消息队列
System V 消息队列消息队列是两个进程之间传递二进制数据一种简单有效的方式。每个数据块都有一个特定的类型,接收方可以根据类型来有效的接收数据,而不一定像管道和命名管道那样必须以先进先出的方式接收数据。数据块的类型其实是自己定义的,这里的类型并不是指的int、long,而是一个正整数。笔者将这里的类型理解为一个标识,我们可以用下图来为大家解释。消息队列与管道不同的是,消息队列是基于消息...原创 2019-08-28 14:44:42 · 356 阅读 · 0 评论