Linux
文章平均质量分 92
帝国无伤
这个人很懒,什么都没没留~
展开
-
冯诺依曼机核心由运算器转变为存储器的原因
冯诺依曼机的思想早期:以运算器为核心运行方式:- 输入:输入的信息经过运算器存储到存储器- 处理:信息运算需要运算器和处理器共同完成- 输出:处理好的信息经过存储器交由运算器最后存储到输出设备特点:存储和运算分离。因为存储和运算都需要运算器,对运算器而言进行存储就不能运算,进行运算就不能存储。现代:以控制器为核心运行方式:存储器有很多的存储单元,在一部分存储单元进行输入输出时另外一部分可以进行运算。即可以实现存储与程序计算并行。核心转变为存储器的原因(1)早期仪表功能较单一,原创 2021-08-16 13:33:35 · 3881 阅读 · 0 评论 -
【Linux】用户、权限管理
文章目录一. Linux下的用户1. 普通用户的创建2. 普通用户和root用户的区别2. su指令(switch user)二. 文件的访问者三. 文件类型和访问权限1. 文件类型2. 基本权限3. root和拥有者、所属组、其他人的关系4. 文件权限值的表示方法5. 文件访问权限的相关设置方法5.1 chmod指令(change mode)5.2 chown指令(change own)5.3 chgrp指令(change group)6. umask指令(linux mask)7. 粘滞位四. 关于权限原创 2021-08-03 19:44:28 · 768 阅读 · 0 评论 -
【Linux】基础开发工具的使用
文章目录一. gcc如何完成1. 预处理2. 编译3. 汇编4. 连接一. gcc如何完成这里我们看看gcc如何把一个hello.c的源程序转换成一个可执行程序hello的1. 预处理gcc -o hello.i -E hello.c预处理主要完成:头文件展开、宏替换、条件编译和去掉注释选项“-o”后面跟的是指目标文件(即经过预处理的C原始程序)选项“-E”作用是仅让gcc完成预处理的过程,后面跟的是被执行的源文件几点说明如果不写明生成的目标文件,那么“-E”选项执行的预处理原创 2021-08-10 14:13:05 · 2266 阅读 · 0 评论 -
【Linux】进程基础知识
文章目录一. 认识操作系统1. 什么是操作系统2. 为什么要有操作系统3. 系统调用和库函数的概念二. 进程一. 认识操作系统1. 什么是操作系统操作系统是做管理软硬件工作的软件2. 为什么要有操作系统操作系统在计算机系统里处于承上启下的低位:向下封装和保护硬件,合理分配程序资源,向上为用户提供接口,给用户提供稳定、高效、简易的使用环境。3. 系统调用和库函数的概念下图是计算机的各个组成部分系统调用操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系原创 2021-10-18 10:01:06 · 1800 阅读 · 1 评论 -
【Linux】进程间通信
文章目录一. 是什么进程间通信二. 进程间通信的目的三. 进程间通信的实现1. 通信方式(1) --- 管道1.1 管道介绍1.2 管道特点1.3 管道分类1.4 匿名管道1.5 命名管道一. 是什么进程间通信每一个进程想要访问物理内存,都是通过访问进程虚拟地址空间当中的虚拟地址,借助页表的映射来访问的。这里的虚拟地址空间和页表都是进程级的,保证了进程之间的数据独立,不会相互干扰。但是,进程之间也是要相互合作的,简单的理解进程间通信就是多个进程对同一份公共资源进行操作,而通信最重要的前提是保证进程能看到原创 2022-02-18 12:29:22 · 2526 阅读 · 0 评论 -
【Linux】进程的创建、退出、等待和替换
文章目录一. 进程创建一. 进程创建fork函数初识头文件:#include <unistd.h>函数原型:pid_t fork(void);作用:从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。返回值:子进程中返回0,父进程返回子进程的pid,出错返回-1当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都将可以开始它们自己的旅程,看如下程序:编译并运行:$ gcc -o myproc myproc.c$原创 2021-10-24 13:39:47 · 2801 阅读 · 0 评论 -
【Linux】文件系统与文件管理
文章目录一. 打开文件描述符表1、什么是打开文件描述符表?2、为什么要有打开文件描述符表?3、打开文件描述符表的和进程的联系在Linux中,内核为每一个打开的文件提供三种数据结构对其进行维护,它们之间的关系决定了在文件共享方面一个进程对了一个进程可能产生的影响。每个进程对应一张打开文件描述符表,这是进程级数据结构,也就是每一个进程都各自有这样一个数据结构。内核维持一张打开文件表,文件表由多个文件表项以双链表的形式组成,这是系统级数据结构,也就是说这样的数据结构是针对于整个内核而言的,每个进程都可共享原创 2021-12-13 14:30:46 · 3774 阅读 · 1 评论 -
【Linux】线程池
文章目录一. 什么是线程池?二. 线程池的应用场景三. 模拟实现一个线程池1. 线程池基本框架2. 线程需要做的事3. 任务队列插入、拿出任务4. 自己定义的任务类5. 测试线程池6. 线程池类完整代码一. 什么是线程池?线程池一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用多线程,还能防止过分调度。此外,可用线程数量应该取决于可用的并发处原创 2022-04-11 14:37:27 · 3346 阅读 · 1 评论 -
【Linux】读写锁和自旋锁
文章目录一. 读写锁1. 什么是读写锁?2. 为什么要有读写锁?3. POSIX下的读写锁相关接口函数4. 读写锁实现原理一. 读写锁1. 什么是读写锁?在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少;相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长,再给这种代码段加锁,会极大地降低我们程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢? 有,那就是读写锁。读写锁的主要功能是维护以下三种关系:读读共享:原创 2022-04-15 20:26:26 · 1125 阅读 · 1 评论 -
【Linux】POSIX信号量
文章目录一. 什么是POSIX信号量?二. 为什么要有POSIX信号量?三. POSIX信号量实现原理四. POSIX信号量接口函数1. 创建、初始化信号量2. 销毁信号量3. 等待(申请)信号量4. 发布(释放)信号量五. 信号量的应用1. 二元信号量模拟互斥锁2. 基于环形队列的生产者消费者模型2.1 四个规则2.2 环形队列的实现2.3 单生产者单消费者2.4 多生产者多消费者一. 什么是POSIX信号量?POSIX和System V都是可移植的操作系统接口标准,它们都定义了操作系统应该为应用程序原创 2022-03-29 14:21:54 · 2270 阅读 · 0 评论 -
【Linux】生产者消费者模型
文章目录一. 什么是生产者消费者模型1. 基本概念2. 三种关系3. 再次理解生产者消费者模型二. 生产者消费者模型优点三. 基于BlockingQueue的生产者消费者模型1. 准备工作2. 阻塞队列实现一. 什么是生产者消费者模型1. 基本概念生产者消费者模型就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而是通过容器来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给容器;消费者不找生产者要数据,而是直接从容器里取。2. 三种关系实际中,生产原创 2022-03-12 22:21:43 · 3010 阅读 · 0 评论 -
【Linux】线程互斥与同步
文章目录一. 什么是互斥?二. 为什么要有互斥?三. 互斥量实现互斥一. 什么是互斥?在介绍什么是互斥之前需要了解下面三个概念:临界资源:多线程执行流共享的资源就叫做临界资源。临界区:每个线程内部,访问临界资源的代码,就叫做临界区。原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用二. 为什么要有互斥?大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程私有栈空间原创 2022-03-12 16:06:10 · 3696 阅读 · 0 评论 -
【Linux】线程基础知识
文章目录一. 什么是线程?1. 线程概念2. 重新理解进程3. 线程优缺点4. 线程周期5. 线程调度6. 线程工作原理7. 线程异常8. 线程资源二. 为什么要有线程?三. 如何控制线程?1. Linux的POSIX线程库一. 什么是线程?1. 线程概念线程(thread),是进程中的一条执行流,是被系统独立调度和分派的基本单位。一个标准的线程由线程ID、当前指令指针、寄存器集合和堆栈组成,此外一个线程可与同属一个进程组的其他线程共享进程所拥有的全部资源,同一进程中的多个线程之间可以并发执行。线程原创 2022-03-05 13:25:21 · 5916 阅读 · 2 评论 -
【Linux】信号学习总结
一. 什么是信号1. 信号概念信号是进程之间事件异步通知的一种方式,是一个软中断,当某进程收到信号时,会中止当前程序的执行而去处理信号,然后回到断点继续往下执行。输入命令kill -l可以查看所有信号,Linux系统中一共有62个信号,其中1 ~ 31号信号是普通信号;34 ~ 64号信号是实时信号,在实际应用的编程中,用到的主要还是普通信号:每个信号都有一个对应的编号,在系统中信号的名称其实是每一个编号宏定义出来的常量,相关信息可以在/usr/include/bits/signum.h这个文件中原创 2022-02-28 16:48:51 · 1531 阅读 · 1 评论 -
【Linux】动、静态库总结
文章目录一. 什么是动、静态库?1、库2、动、静态库3、库相关的两个命令4. Linux中库文件的命名规范二. 动、静态库的优缺点动态库动态库三. 动、静态库的实现1、静态库实现一. 什么是动、静态库?1、库我们在编写一个程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护。我们可以把他们制作成相应的功能函数,使用时直接调用就会很方便,还可以进行后期的功能升级。库通俗的说就是把这些常用函数的目标文件打包在原创 2022-01-04 15:12:08 · 1177 阅读 · 0 评论