Linux
文章平均质量分 70
HT . WANG
Think Twice , Code Once
展开
-
Linux基础(指令+工具)
Linux基础指令1.谈到linux,最先想到,linux和window有什么区别呢?linux是一个多用户操作系统,多用户同时操作,但都有各自访问权限linux下一切皆文件,文件夹也只是一个目录类型的文件而已linux下的目录结构与磁盘分区的关系:目录结构唯一,是一个树形结构,最底层是一个根目录;可以将磁盘分区挂载在目录上给目录分配空间,即给一个指定的目录单独分配一块存储空间window与linux不同,window的目录结构为一种磁盘分区以及分配目录结构的方式,即每一个单独空间都有一原创 2021-01-29 18:54:02 · 1547 阅读 · 0 评论 -
深入理解Linux进程概念
Linux进程概念 冯·诺依曼体系结构: 冯诺依曼体系结构作为现代计算机硬件体系结构,规定了现代计算机应该具有哪些硬件单元输入设备 :键盘,鼠标,图像采集设备 ,声音采集设备 输出设备:显示器 存储器:内存(内存条)+外存(硬盘) 运算器:计算,数据处理 控制器:信号发送设备调度 操作系统 操作系统:管理计算机上的软硬件资源...原创 2021-03-12 15:05:28 · 1681 阅读 · 1 评论 -
Linux进程控制
进程控制进程创建:pid_t fork(void) 通过复制父进程创建子进程 代码共享,数据独有返回值: 子进程返回值0 父进程返回值>0 (子进程pid) 出错返回-1写时拷贝技术:创建子进程,子进程复制了父进程,因此父子进程一开始映射的是同一块物理内存,但是当内存数据发生改变的时候,则重新为子进程开辟空间,拷贝数据过去优点:创建子进程效率高pid_t vfork(void) 创建一个子进程 并阻塞父进程; 父子进程共用虚拟地址空间,同时运...原创 2021-03-20 16:32:34 · 1481 阅读 · 0 评论 -
标准库IO与系统调用IO区别与联系
标准库IO接口:一般程序运行起来,自动默认打开 标准输入文件(scanf),标准输出文件(printf), 标准错误文件fopen 打开文件FILE* fopen(带路径的文件名,打开方式:"r r+ w w+ a a+ b") r:只读 若文件不存在报错返回 r+:可读可写若文件不存在报错返回 w:只写,若文件不存在则创建,若文件存在,清空文件原有内容 w+:可读可写,若文件不存在则创建,若文件存在,清空文件原有内容...原创 2021-03-27 15:34:18 · 1725 阅读 · 0 评论 -
区别动态链接库和静态链接库
动态链接库和静态链接库:首先理解两种生成可执行程序的链接方式:动态链接:链接动态库,只是在生成的程序中记录库中的函数信息表,并没有将具体代码实现写入程序中,所以依靠动态链接生成的程序在运行时,需要依靠动态库的存在具体实现代码在内存中共享,不存在代码冗余静态链接:链接静态库,在生成的程序中直接将库中所需要的函数代码实现直接到执行程序中,导致生成的程序所占空间比较大,但无需任何依赖,方便移植库的生成步骤:将源码经过汇编编译后,生成二进制指令 gcc -fPIC...原创 2021-03-29 16:29:41 · 1836 阅读 · 1 评论 -
进程间通信(三)(消息队列,信号量)
消息队列 本质: 一个内核中的优先级队列 通信原理: 在内核中创建一个优先级队列,多个进程通过对同一个队列添加或获取节点实现数据通信 特性: 自带同步与互斥,不会取到同一个节点 生命周期随内核信号量本质:一个内核中的计数器+pcb等待队列 用于实现进程间的同步与互斥原理:对可用资源进行计数,在获取资源前先通过计数判断获取是否合理(是否有可用的空闲资源),不合理则阻塞等待,直到条件满足后唤醒阻塞的进程同步的实现:对资源进行计数,通过计数实现合理访问...原创 2021-04-04 17:52:19 · 1468 阅读 · 0 评论 -
进程间通信(一)(管道文件操作)
进程间通信原理:系统为进程间提供公共传输媒介实现公共访问进而实现通信通信方式:管道,共享内存,消息队列,信号量 管道 特性:半双工通信 (可选择方向的单向通信)本质:系统内核中的一块缓冲区(内核空间中开辟的一块内存)通信原理:多进程只要能够访问同一块内核中的缓冲区(管道)就能实现通信分类:匿名管道 命名管道匿名管道:(无标识符,无法被其他进程找到)只能用于具有亲缘关系的进程间通信无标识符,无法被其他进程找到,只能通过子进程复制父进程的方式获取管道的操作句柄,进行通信...转载 2021-04-04 19:33:02 · 1988 阅读 · 0 评论 -
进程间通信(二)(共享内存)
共享内存 通信原理: 开辟一块内存空间,各个进程将同一块物理内存空间映射到自己的虚拟地址空间中,通过虚拟地址进行访问,进而实现数据共享特性:共享内存是最快的进程间通信方式,直接通过虚拟地址访问物理内存,相比较于其他方式少了两次数据拷贝操作流程1,创建或打开共享内存int shmget(key_t key,size_t size,int shmflg)key:标识符 通过相同标识符,多个进程可以打开同一块共享内存size:要创建的共享内存大小shmflg:打开方式+权限:.原创 2021-04-04 19:37:14 · 1664 阅读 · 0 评论 -
学完信号量是否能区分进程信号和信号量
在所有信号中:SIGKILL -9/SIGKILL-19 不能被阻塞,不能被修改处理方式,不能被忽略进程无法被杀死的情况:1,僵尸进程2,信号被阻塞或自定义或忽略 (SIGKILL -9除外)3,进程是停止状态(SIGKILL -9除外)信号的基本应用:SIGCHLD(非可靠信号):子进程退出之后给父进程发送的信号 默认处理方式:什么都不做(即忽略) 自定义SIGCHLD信号的处理方式,在信号回...原创 2021-04-14 09:29:27 · 1478 阅读 · 0 评论 -
多线程(一)概念
多线程概念:线程概念:一个进程中可以有一个或多个线程,线程是进程中的一条执行流,负责进程中一段代码的运行调度 在linux下,线程是通过pcb实现的,一个进程中可以有多个执行流pcb,这些pcb共享进程p中的大部分资源,相较于传统pcb较为轻量化,因此也被称为轻量级进程。线程与进程区别:进程是系统进行资源分配的基本单元 线程是系统进行运行调度的基本单元线程间的独有与共享;独有:自己的标识符(pcb),栈,寄存器。信号屏蔽字(阻塞信号集合),e...原创 2021-04-14 15:46:09 · 1501 阅读 · 0 评论 -
函数可重入与不可重入理解
static:修饰全局变量,函数 改变作用域 修饰 局部变量 生命周期随进程volatile:作用:修饰一个变量,保持变量的内存可见性修饰变量后,cpu每次访问变量数据,都需要从内存中去获取函数的可重入与不可重入函数的重入:一个函数在多个执行流程中,重复进入一个函数进行执行可重入函数:一个函数重入之后,不会出现数据二义问题或逻辑混乱不可重入函数:一旦一个函数重入之后,就有可能造成数据二义问题或逻辑混乱基准:在一个函数中是否对一个全局...原创 2021-04-18 09:37:29 · 2007 阅读 · 0 评论 -
多线程(二)线程控制(创建 退出 等待)
线程控制注意:操作系统不会单独向上创建线程调用接口,只能通过封装库函数完成对线程操作区分线程和轻量级进程:线程是基于上层(用户态)而言,对应底层(内核态)就是一个轻量级pcb(lwp)创建:int pthead_create(pthread_t *tid , pthread_arr_t *attr , void* (*routine)(void*) , void* arg)pthread_t *tid 接受线程tid 线程操作句柄 pthread_arr_t *att...原创 2021-04-18 14:36:51 · 1535 阅读 · 0 评论 -
线程安全(信号量)
信号量:本质:计数器+pcb等待队列功能:实现进程或线程间的同步与互斥p操作:计数-1,;判断计数<0则阻塞,将其加入pcb等待队列v操作:计数+1;唤醒pcb等待队列上的线程或进程同步的实现:通过计数器对资源进行计数 线程在获取资源之前进行p操作 其他线程产生一个资源后进行v操作互斥的实现:初始化计数器为1,表示资源只有一个 1表示可访问,非1不可 线程在获取资源之前进行p操作 ,访问资源完毕之后进行v操作...原创 2021-04-27 11:15:36 · 1532 阅读 · 1 评论 -
线程应用(线程池)
线程池:创建一堆工作线程(有最大数量限制),以及一个线程安全的队列,这些工作线程不断从任务队列取出任务进行处理优点:避免资源无限制使用所造成的资源耗尽的风险 避免频繁创建大量线程与销毁所带来的时间成本实现:直接在线程入口函数中定义好各种不同类型的处理方法 要处理什么数据,以及数据如何处理由外部传入...原创 2021-04-27 21:19:24 · 1585 阅读 · 5 评论 -
线程安全(互斥 死锁 同步)
线程安全线程安全的实现:同步 互斥互斥:同一时间只能有一个线程能够访问资源实现资源访问的安全性同步:通过条件判断实现线程对临界资源访问的合理有序互斥:互斥锁(通过互斥锁保护线程对临界资源的访问操作不会被打断)原理:标记临界资源的两种状态(可访问/不可访问)在线程访问临界资源之前,先进行互斥锁加锁操作 在线程访问临界资源完毕后,进行解锁操作互斥锁本身计数器的操作是原子操作定义互斥锁变量:pthread_mutex_t mutex; 初始化互斥锁:pthread_mut...原创 2021-04-27 21:19:58 · 1638 阅读 · 2 评论