Linux
文章平均质量分 95
针对C++的Linux的使用
川入
心之所向,素履以往,尽全力保持博客量的输出。
展开
-
Linux常见进程类别
Linux常见进程类别:守护进程&精灵进程、僵尸进程、孤儿进程、前台进程、后台进程原创 2023-09-10 20:07:56 · 941 阅读 · 1 评论 -
【网络】-- 数据链路层
数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标机网络层。原创 2023-05-10 20:31:31 · 1432 阅读 · 11 评论 -
【网络】-- IP协议
IP是整个TCP/IP协议族的核心,也是构成互联网的基础。IP位于TCP/IP模型的网络层(相当于OSI模型的网络层),它可以向传输层提供各种协议的信息,例如TCP、UDP等;对下可将IP信息包放到链路层,通过以太网、令牌环网络等各种技术来传送。原创 2023-05-08 15:53:31 · 743 阅读 · 3 评论 -
【网络】-- TCP协议
TCP 是面向连接的运输层协议。应用程序在使用 TCP 协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的 TCP 连接每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据面向字节流。TCP 中的“流”指的是流入原创 2023-05-03 21:29:56 · 1474 阅读 · 8 评论 -
【网络】-- UDP协议
UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。原创 2023-04-25 20:38:57 · 1270 阅读 · 3 评论 -
【网络】-- https协议
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。原创 2023-04-21 16:30:56 · 1985 阅读 · 11 评论 -
【网路】-- http协议
HTTP 协议 (超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。原创 2023-04-18 20:44:56 · 1135 阅读 · 1 评论 -
【网络】-- 应用层
设计一个加减乘除都能做的网络版计算器。例如,我们需要实现一个服务器版的加法器。我们需要客户端把要计算的两个加数发过去,然后由服务器进行计算,最后再把结果返回给客户端。升级:守护进程版本原创 2023-04-06 13:09:05 · 320 阅读 · 8 评论 -
【网络】-- 网络编程套接字(TCP网络程序)
简易的TCP网络模型实现原创 2023-03-26 18:45:57 · 529 阅读 · 1 评论 -
【网络】-- 网络编程套接字(UDP网络程序)
简单的udp网络程序原创 2023-03-20 20:59:31 · 562 阅读 · 0 评论 -
【网络】-- 网络编程套接字(铺垫、预备)
现在的网络中,出现丢包的问题概率不大,即便出现了丢包问题,有些场景下也是可以容忍的,更重要的是不可靠是特点,可靠也是特点,但是不可靠看起来像缺点,但是它的反面就是没有为了让对应的程序,变得可靠,而做了更多得工作。重点是他们标识进程唯一性的能力,进程PID是进程管理的范畴,如果网络也使用进程PID来标识唯一性,那么网络的模块和进程管理的模块就黏在一起了,就会导致两个毫不相关的模块产生关联这是没有任何意义的,单独实现一个端口号提供给网络模块使用,实现网络模块与其他的模块的解耦。一个更安全,一个更简单。原创 2023-03-04 19:21:12 · 633 阅读 · 0 评论 -
【网络】-- 网络基础
"协议" 本质上就是一种约定。通过这种约定,来让我们在某些通信场景当中,达到更快速的进行通讯的目的。在IP层及其往上层的协议看来,数据都是一样的,差异化主要体现在IP层以下的最底层。在使用TCP / IP协议的网络中,IP及其向上的协议,看到的报文都是一样的。原创 2023-03-03 20:06:33 · 826 阅读 · 0 评论 -
【Linux】-- 单例模式(线程安全版本)
基于单例模式(线程安全版本)的线程池实现原创 2023-03-14 21:23:41 · 437 阅读 · 1 评论 -
【Linux】-- 线程池
一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。原创 2023-03-10 21:44:38 · 582 阅读 · 0 评论 -
【Linux】-- POSIX信号量
在没有信号量这个计数器的时候,因为不知道临界资源的状态,所以需要先加锁,再使用临界资源进行判断(条件变量),于是满了就释放锁并挂起。因为,就相当于如果我们先加锁,如此去申请信号量的线程一定是很少的,而这个程序的工作效率是高还是低,是取决于我们将这个资源如何快速的派发给线程。虽然,生产任务、拿任务,都是一个一个的做的,但是处理任务的时候,是可以变为并发的。信号量本质是一个计数器,只要申请成功了,其是对于临界资源的预定机制,只要预定成功就一定会有对应的资源。所以,对于此的解决方式,是势必要使用加锁的。原创 2023-02-27 18:48:14 · 395 阅读 · 1 评论 -
【Linux】-- 基于阻塞队列的生产者消费者模型
消费者向BlockingQueue中取数据,问题是说明时候拿数据,怎么知道什么时候有的数据,就会导致消费者频繁的申请锁、释放锁,甚至生产者线程申请锁抢不过消费者线程,导致生产者无法成功生产数据,消费者就无法拿到数据,造成内耗。STL中,一般的容器都不是线程安全的,因为大部分容器都有自动扩容的功能(空间适配器),其是自动扩容,归还空间、申请空间,就是访问全局数据结构 —— 不安全,一般STL是为了支持支撑我们去进行高新能服务,但是线程完全就需要用户自己维护了。唤醒之后,去申请释放的锁。原创 2023-02-26 22:13:19 · 327 阅读 · 0 评论 -
【Linux】-- 多线程安全
但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互 —— 此时,因为其中的一些特性。于是可以保证加锁的线程,可以将锁带走,因为加锁后,锁就是该线程的上下文数据。于是,有一个人早饭一过就开始等,下午饭时间一到,立马将餐盘一抢,开始打饭,但是这个人很奇怪,每次打几粒米,然后吃完,将餐盘拿到厨房。前面的学习使得我们知道,之所以出现数据不一致问题是因为,一个线程将一个共享数据拿走了,但是没来的及改变共享数据的数值,就被切换成了新的线程来使用这个共享数据。原创 2023-02-25 13:41:19 · 820 阅读 · 0 评论 -
【Linux】-- 控制多线程
一个进程 == 一个家庭社会一个线程 == 一个家庭成员一个操作系统 == 中国社会中国社会分配资源(操作系统分配资源),中国社会分配资源以家庭单位(操作系统分配资源以进程单位)。一个家庭中的家庭成员所做的事情不一样(一个进程中的线程所做的事情不一样),孩子学习、老人健康、父母挣钱(每一个线程内容不同)。家庭成员做着不同的事情,但是目标一样:家庭任务日子过好(线程执行不同,但是目标一样:完成共同的进程任务)。在一个家庭里面,大部分资源是共享的:电视、餐桌、沙发(在一个进程里面,大部分资源是共原创 2023-02-17 14:25:31 · 359 阅读 · 0 评论 -
【Linux】-- 什么是多线程
在对应的进程内可以创建多个线程,那么也就意味着,系统当中如果存在着大量的进程,也就可能会存在着大量的线程。所以,这么说来操作系统就需要为了管理线程而创建特定的数据结构,来先描述,再组织。 以此,填充其的属性、设置其的字段、维护其的关系、上下文保存、代码的执行、线程结构的创建与删除……。但是可以发现这个操作是与进程的逻辑是非常类似的,所以Linux再专门为线程设置无疑就是有些浪费 —— 在内核上Linux并没有区分进程和线程。所有的进程与线程都用task_struct来统一表原创 2023-02-16 13:47:43 · 271 阅读 · 0 评论 -
【Linux】-- 进程信号(处理、内核)
实际执行信号的处理动作称为信号递达(Delivery)。信号递达:可能是默认、可能是忽略、可能是自定义捕捉。信号从产生到递达之间的状态,称为信号未决(Pending)。信号产生,进程不是立即处理这个信号,不代表其不会处理。意味着未来会处理,于是从收到信号到未来准备处理时:信号存在但是没有被处理 —— 信号被临时保存(PCB的位图中),此时就被称为信号未决 ——Pending位图。原创 2023-02-14 21:10:19 · 378 阅读 · 0 评论 -
【Linux】-- 进程信号(认识、应用)
a、进程要处理信号,必须具备信号“识别”的能力(看到 + 处理动作)b、进程对于信号的“识别”操作系统也是程序员写的,一个程序员在写进程如何实现的时候,是需要考虑到信号如何识别处理。c、信号产生是随机的,进程可能正在忙自己的事情。所以,信号的后续处理,可能不是立即处理。 如同,不知道外卖到达的准确时间。而你又在忙,于是就算到达时也会延迟取外卖。d、信号会临时的记录下对应的信号,方便后续进行处理。延迟取外卖,就必须临时的几下这件事请,不能忘原创 2023-02-13 11:55:35 · 464 阅读 · 0 评论 -
【Linux】-- 进程间通讯
所以,由于信号量的思想,也是让我们看见同一份资源,所以其本质与上面的管道、共享内存没有太大的区别。所以,信号量被纳入进程间通讯的范畴。信号量是为了保证特定的临界资源不被受侵害,保证临界资源数据一致性。前面所讲:信号量也是一个临界资源,所以首先其需要保证自己的安全性 —— 提出信号量操作需是原子性的。而信号量理论的提出是由于:临界区、临界资源的互斥,当多个执行流(进程)才会真正的凸显出来,所以此处由于是进程间通讯 —— 需要提出信号量,但作用凸显在多线程 —— 多线程再深入讲解信号量。原创 2023-03-06 20:27:35 · 672 阅读 · 0 评论 -
【Linux】-- 动态库与静态库
动态库是一个独立的文件,其与可执行程序是进行分批加载,如图可执行程序在内存的一个区域内,动态库在内存的另一个区域内,而可执行程序通过存储动态库的符号链接使用动态库。因为现实中,别人的框架、组件什么的,是好于我们自己写的,学习期间需要造轮子,但是工作上我们要学会用轮子(争取不要用自己写的东西),这是一个站在巨人肩膀上的问题。因为,根据前面所讲,动态库和可执行程序是分批加载的,所以在加载可执行程序后,需要将动态库单独加载入内存,但是此时我们告诉的是gcc该动态库在哪,而本质上。当前路径是一个目录下的文件。原创 2023-01-31 23:37:52 · 532 阅读 · 0 评论 -
【Linux】-- 结合内存与硬盘IO的进程概念
1. 动态运行属性: 进程不仅仅是将磁盘中的程序加载到内存,然后此时执行代码和数据就行了。实际上,因为操作系统要管理所谓的进程,所以其必须先描述再组织。 即:每一个进程都要有其内核相关的数据结构。1.1学到现在的内核数据结构:进程的PCB、进程的虚拟地址空间(上下文)、进程的相关页表、进程CPU的上下文数据、进程打开。1.2学到现在的进程代码和数据:代码和数据通过页表来进行对应的映射,而页表分为用户级页表、内核级页表。内核级页表每原创 2023-02-15 16:40:54 · 206 阅读 · 0 评论 -
【Linux】-- 理解文件系统
硬盘是用来存储数据的,可以将其想象成柜子,只不过柜子是用来存储衣物的。衣柜是一个巨大的空间,磁盘也是一样的,所以对于不同的衣物有着不同的区域划分。但是作为衣柜放置规则可以忘,但是磁盘不行,是需要详细到为文件详细属性 + 文件存储内容的管理……原创 2023-01-31 23:29:42 · 412 阅读 · 0 评论 -
【Linux】-- 进程程序替换
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。原创 2023-01-14 17:07:38 · 797 阅读 · 1 评论 -
【Linux】-- 环境变量
所有的环境变量实际上都是在系统的配置文件上保存着的,所以当启动之前自己改动过配置文件,就会影响,而且影响很大,如果不改配置文件,就在命令行上,就可以谁便乱搞了。我们之所以能使用一些方法获取变量,是因为是有导入,导入是由父进程导入的,是通过由父进程那里继承得来的,父进程又由它的父进程继承过来的,所以一定会有最开始,命令行写shell的时候是从bash作为开始的。以此形式一个个的维护起来。因为如果想让系统运行一个命令,必须先找到它,所以不带路径,系统就没办法找到我们所写的程序,而系统的命令是默认可被找到的。原创 2023-01-13 13:01:53 · 3882 阅读 · 1 评论 -
【Linux】-- 进程终止进程等待
进程终止时,要释放进程申请的相关内核数据结构和数据的代码。本质就是释放系统资源。利用wait与waitpid操作系统接口进行进程等待。原创 2023-01-10 17:22:00 · 1254 阅读 · 5 评论 -
【Linux】-- 程序地址空间
在C/C++语言中,有地址空间的概念。此文讲解的是Linux操作系统中的地址空间的概念,其是与C/C++语言的概念不一样存在。操作系统的地址空间并不是内存,而是虚拟地址空间……原创 2023-01-06 01:38:00 · 491 阅读 · 0 评论 -
【Linux】-- 操作系统进程的状态
为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)。原创 2023-01-04 23:07:07 · 1577 阅读 · 8 评论 -
【Linux】-- 进程概念的引入
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。因为有些硬件的设计就是为了软件,有些软件的设计就是为了硬件,所以我们不能够将软件和硬件割裂开来学习。软件与硬件之间是会有千丝万缕的联系的。原创 2023-04-01 13:20:28 · 998 阅读 · 0 评论 -
【Linux】-- 开发工具(vim、gcc、g++、make/Makefile)
vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows。原创 2023-02-23 06:15:35 · 917 阅读 · 0 评论 -
【Linux】-- Shell的运行原理、Linux当中的权限
Shell运行原理 —— 外壳程序。 Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用核心(kernel)。 而是通过核心(kernel)的“外壳”程序,也就是所谓的shell,来与核心(kernel)沟通。原创 2023-02-24 01:18:30 · 269 阅读 · 0 评论 -
【Linux】-- 快速上手linux
讲解常用Linux命令,有详细配图原创 2022-11-15 21:49:07 · 435 阅读 · 14 评论