Linux系统编程
Linux系统编程
~青萍之末~
弱者总有弱者的理由
展开
-
线程池和内存池
文章目录一、线程池1、线程池的概念2、线程池的组成部分3、线程池的流程4、线程池的Demo5、线程池的应用二、线程池的惊群效应1、惊群效应的概念2、惊群效应存在的问题3、线程池的惊群效应4、怎么判断发生了惊群5、如何解决惊群效应三、内存池1、内存池的概念2、内存池的流程和设计3、内存池的Demo4、内存池的特点四、线程池和内存池的相关问题1、线程池大小应该设置为多少?2、线程池中如果有一个线程出现...原创 2018-11-25 15:40:24 · 1639 阅读 · 1 评论 -
进程、线程和协程之间的区别和联系
一、进程 进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位。 【进程间通信(IPC)】:管道(Pipe) 所有的 POSIX systems, Windows;命名管道(FIFO) 所有的 POSIX 系统...原创 2018-10-06 14:56:24 · 109099 阅读 · 33 评论 -
多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)
一、同步与互斥的概念 现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:都需要访问/使用同一种资源;多个任务之间有依赖关系,某个任务的运行依赖于另一个任务。【同步】: 是指散步在不同任务之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。最基本的场景就是:两个或两个以...原创 2018-10-06 14:06:34 · 79441 阅读 · 18 评论 -
线程概述、线程控制和线程私有数据
一、线程概述 在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。在一个进程中的多个执行路线叫做线程。为了让进程完成一定的工作,进程必须至少包含一个线程。 线程又叫轻量级进程(LWP)。线程会共享进程的一些资源,也有一些资源是线程独立拥有的。但是不同进程的线程是不共享资源的。【共享】: 代码区、...原创 2018-10-04 21:26:06 · 1466 阅读 · 0 评论 -
信号发送与信号处理
一、信号发送1、kill函数 进程可以通过kill函数向包括它本身在内的其他进程发送一个信号,如果程序没有发送这个信号的权限,对kill函数的调用就将失败,而失败的常见原因是目标进程由另一个用户所拥有。#include <sys/types.h>#include <signal.h>int kill(pid_t pid, int sig);功能: 把信号s...原创 2018-09-27 21:08:03 · 3070 阅读 · 0 评论 -
信号的基本概念(信号产生于处理、可靠信号、可重入函数、SIGCHLD)
一、什么是信号1、信号的定义 信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。信号是软中断,通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。 一个完整的信号周期包括三个部分:信号的产生,信号在进程中的注册,信号在进程中的注销(由内部...原创 2018-09-27 19:45:43 · 2015 阅读 · 0 评论 -
进程关系
一、终端登录 1. 当系统自举时,内核创建进程 ID 为 1 的进程,也就是 init 进程。init 进程使系统进入多用户模式。init 进程根据配置文件 /etc/inittab 确定需要打开哪些终端,对每一个允许登录的终端设备,init 调用一次 fork,它所生成的子进程则执行 getty(exec)程序。(不同操作系统配置文件可能不同); 2. getty 为终端设备调用 open ...原创 2018-09-27 10:06:08 · 240 阅读 · 0 评论 -
进程间通信之共享内存
一、共享内存的定义和原理1、共享内存的定义 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入...原创 2018-09-24 21:03:41 · 1844 阅读 · 1 评论 -
进程间通信之信号量
一、信号量的定义和原理1、一些概念原子操作:不可中断的一个或者一系列的操作,即一件事要么做要么不做。临界资源:不同进程能够看到的一份公共资源,一次只能被一个进程使用。PV操作:由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的:P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行;V(sv):如果有其他进程因等待sv而被...原创 2018-09-24 20:07:47 · 885 阅读 · 1 评论 -
进程间通信之消息队列
一、消息队列的定义和特点1、消息队列的定义 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题(命名管道要读端和写端都存在,否则出现阻塞)。但是消息队列与命名管道一样,每个数据块都有一个最大...原创 2018-09-24 16:29:17 · 598 阅读 · 0 评论 -
进程间通信之管道(pipe)和命名管道(FIFO)
一、管道(pipe)1、管道的定义和特点 管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称为半双工管道。管道的这一特点决定了器使用的局限性。管道是Linux支持的最初Unix IPC形式之一,具有以下特点:数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道;管道只能用于父子进程或者兄弟进程间通信。,也就是说管...原创 2018-09-24 11:16:35 · 11072 阅读 · 5 评论 -
特殊进程之守护进程
一、什么是守护进程 守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在...原创 2018-09-23 16:14:22 · 306 阅读 · 0 评论 -
进程体替换(exec函数族)与调用命令行(system)
一、进程体替换(exec函数族) 使用函数fork()创建新的子进程后,子进程往往需要调用函数exec()以执行另一个程序。当进程调用函数exec()时,该进程执行的程序完全替换为新程序,而新程序则从其函数main()开始执行。 与 fork 或 vfork 函数不同,exec 函数不是创建调用进程的子进程,而是创建一个新的进程取代调用进程自身。新进程会用自己的全部地址空间,覆盖调用进程的...原创 2018-09-20 11:02:42 · 1910 阅读 · 1 评论 -
进程资源回收(wait、waitpid)
一、wait函数#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *status);成功返回所回收子进程的 PID,失败返回 -11、函数功能与参数解析 主要用于挂起正在运行的进程进入等待状态,直到有一个子进程终止。 status 是一个整型指针,如果 status 不是一个空指针,则终止...原创 2018-09-20 10:36:10 · 3545 阅读 · 0 评论 -
进程标识与进程创建(pid, fork)
一、进程标识(pid) 每个进程都有一个非负整数形式的唯一编号,即 PID。PID 在任何时刻都是唯一的,但是可以重用,当进程终止并被回收以后,其 PID 就可以为其它进程所用。进程的 PID 由系统内核根据延迟重用算法生成,以确保新进程的 PID 不同于最近终止进程的 PID。1、特殊的进程标识0 号进程,调度进程:通常是调度进程,常常被称为交换进程(swapper)。该进程是内核的一...原创 2018-09-20 10:28:48 · 5391 阅读 · 0 评论 -
进程环境
一、进程的基本概念1、基本概念(1)进程的定义 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。 进程和程序是有本质区别的:程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念;而进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程。(2)进程控制块(PCB) Linux系统通过进...原创 2018-09-19 20:39:02 · 1314 阅读 · 0 评论 -
文件系统和目录结构
Linux以文件的形式对计算机中的数据和硬件资源进行管理,也就是彻底的一切皆文件,反映在Linux的文件类型上就是:普通文件、目录文件(也就是文件夹)、设备文件、链接文件、管道文件、套接字文件(数据通信的接口)等等。而这些种类繁多的文件被Linux使用目录树进行管理, 所谓的目录树就是以根目录(/)为主,向下呈现分支状的一种文件结构。不同于纯粹的ext2之类的文件系统,我把它称为文件体系,一切...原创 2018-09-14 16:22:54 · 5406 阅读 · 0 评论 -
文件I/O
文件I/O也称系统调用I/O,是操作系统“用户态”运行的进程和硬件交互提供的一组接口,即操作系统内核留给用户程序的一个接口。 在C语言中常见的输入输出函数(scanf,printf)实际上都是调用了文件I/O函数,因为系统API效率高,一次性读取。一、函数open(打开/创建 一个文件/设备)#include &lt;sys/types.h&gt;#include &lt;sy...原创 2018-09-12 20:43:45 · 378 阅读 · 0 评论