linux操作系统
文章平均质量分 92
boke_fengwei
我不懒,我天天学习
展开
-
linux三大剑客
awk是一种很棒的语言,适合文本处理和报表生成。使用方法awk ‘{pattern + action}’ {filenames}尽管操作可能会很复杂,但是语法总是这样,其中pattern表示AWK再数据中查找的内容,而action是再找到匹配内容时所执行的一系列命令,包括({})不需要再程序中始终出现,pattern就是要表示的正则表达式,用斜杠括起来。action可以有很多的语句,用;号隔开。参数-F参数:指定分隔符,可指定一个或多个-f:从脚本文件中读取awk命令-mf nnn and -原创 2020-08-14 16:08:13 · 494 阅读 · 0 评论 -
automake自动编译工具
automake自动编译生成makefile文件,使用automake,程序开发人员只需要写简单的宏文件,生成configure,再生成Makefile.in,最终生成一个惯例的makefiel文件。automake执行命令顺序autoscanaclocalautoconfautomake --add-missing./configuremake./exe创建文件并执行autoscan创建文件就不用说了吧,顺便创建一个c文件并且执行autoscan多出了autoscan原创 2020-08-13 19:59:22 · 546 阅读 · 0 评论 -
linux---进程间通信(ipc)之管道
进程间通信方式管道共享内存消息队列信号量本地套接字等等都能作为我们进程间通信的方法操作系统提供进程间通信方式的原因因为对于我们进程来说,每一个进程都是相互独立的,具有独立性,如果我们需要两个不同的进程相互通信,就需要我们操作系统提供一个公共的媒介,这个媒介就是进程间通信方式进程间通信是干什么的?通过进程间通信我们可以对不同进程进行数据传输,数据共享,进程控制,时间通知,...原创 2019-04-18 10:03:05 · 198 阅读 · 0 评论 -
linux---进程信号
进程的功能以及概念信号的生命周期以及相关的接口自定义信号的捕捉流程信号集以及阻塞信号集了解一个SIGCHLD信号信号的功能以及概念信号的功能:信号就是通知我们某一个事件的发生信号的概念:信号就是一个软件中断,在一个合适的时机打断我们当前的操作去处理我们信号的。查询我们进程信号的命令:kill -l得到我们一共62种信号,其中1-31号信号是非可靠的信号,就是信号容易丢失。也...原创 2019-04-27 15:24:56 · 175 阅读 · 0 评论 -
linux---进程间通信(ipc)之共享内存
前面我们讲解了进程间通信之管道,这段我们讲解我们的共享内存共享内存是所有进程间通信方式最快的一种。内存共享模型就像下面的图一样,就是将物理内存映射到我们进程的虚拟地址上,我们就可以直接操作我们虚拟地址空间就直接将我们的物理地址上的内容进行更改。为什么它时最快的:因为共享内存是将一块物理内存映射到我们虚拟地址空间中,通过虚拟地址空间就可以将我们的物理内存进行修改,相对于管道来说,管道是在内核中开...原创 2019-04-18 19:44:08 · 256 阅读 · 0 评论 -
linux---线程安全(同步与互斥)
1. 什么是线程安全2. 如何实现线程安全3. 什么是互斥和互斥的实现4. 死锁5. 什么是同步和同步的实现1. 什么是线程安全多个线程同时操作临界资源,而不会出现数据的二义性就说明这个线程就是线程安全。比如看下面的例子,当我们调用下面的例子的时候会出现不一样的结果,因为在线程中我们对num的操作是一个非原子性操作,在这个里面我们的理想的结果是输出5,在我们调用程序的时候可能会出现7或...原创 2019-05-15 11:50:10 · 812 阅读 · 1 评论 -
linux---生产者和消费者模型(条件变量和信号量实现)
问题的提出在我们对一些全局变量的进行非原子性操作的时候就可能出现非线程安全,比如我们吃面的问题。我们做面的人就是生产者,吃面的人就是我们的消费者,当我们的消费者需要吃面的时候就唤醒我们的生产者进行生产,当我们有面的时候我们的生产者就不继续生产面条,去唤醒我们的消费者进行消费。生产者和消费者模型: - 如何保证生产者与消费者的线程安全? - 生产者与生产者应该具有互斥关系 - 消费者...原创 2019-05-20 14:56:23 · 2475 阅读 · 0 评论 -
linux---线程池种类以及实现(固定数量)
线程池是什么一堆固定的数量的或者有最大数量限制的线程+任务队列->用于我们并发处理请求,避免了大量频繁的线程的创建和销毁的事件成本,同时避免了峰值压力带来瞬间大量线程被创建资源耗尽,程序奔溃的危险。线程池的参数corepollsize:核心池的大小,默认情况下,在创建线程池后,每当有新的任务maximumpoolsize:线程池中最多可以创建的线程数keeplivetime:线程...原创 2019-05-20 15:20:23 · 1012 阅读 · 1 评论 -
linux---线程概念和线程控制
1. 什么是线程2. 线程和进程的关系3. 线程的工作原理4.线程和进程实现并发任务的优、缺5. 线程控制什么是线程在传统的操作系统中,进程就是一个pcb(进行运行中的程序的描述信息),控制程序的运行,但是在linux下没有为线程设计一个pcb来控制线程的运行,线程此时就是以进程pcb模拟实现的,也就是说,线程在linux下pcb实际上是一个线程,在linux下线程以进程pcb模拟实...原创 2019-05-11 21:44:55 · 178 阅读 · 0 评论 -
linux---套接字编程
一、Socket是什么1、 socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现, socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭). 说白了Socket是...原创 2019-06-02 15:38:11 · 279 阅读 · 0 评论 -
linux---UDP代码通信
udp连接特性:无连接:可以不构成连接就进行通信不可靠:数据并不能保证可靠性面向数据报:每条数据有长度限制,整条数据发送整条数据接受,传输不灵活,但是不会存在粘包问题。原理在网络版块讲解udp通信流程c++封装udp接口,封装接口便于我们更好的实现 1 /* 2 *udp的封装接口 3 */ 4 #include <iostream> 5 #i...原创 2019-06-02 16:09:06 · 1946 阅读 · 0 评论 -
linux---tcp通信流程以及代码实现
TCP通信特性:(在网络版块详细讲解)面向连接可靠面向字节流TCP通信过程c++封装TCP通信 1 #include <iostream> 2 #include <arpa/inet.h> 3 #include <unistd.h> 4 #include <stdio.h> 5 #include <stdlib....原创 2019-06-02 16:31:21 · 1523 阅读 · 0 评论 -
linux---select,poll,epoll的原理以及优缺点
多路转接IO(也叫IO多路复用)是一种处理高并发的IO事件监控,同时对大量的描述符进行时间监控,监控是否具备IO条件。就绪:包括了读就绪事件(就是有数据到来的时候),写就绪事件(缓冲区有空闲的空间),异常事件(发生异常)。对于服务器来说,很多时候我们都是监控的读事件,对于写事件和异常事件都只会在特定的情况下使用。selectselect模型:通过对几个事件集合中的描述符进行事件监控,当集合...原创 2019-07-12 17:13:49 · 865 阅读 · 0 评论 -
银行家算法原理
银行家算法原理原创 2019-07-10 23:13:15 · 1946 阅读 · 0 评论 -
linux---五种高级IO模型
阻塞IO模型非阻塞IO模型信号驱动IO模型异步IO模型多路转接IO模型高级IO重要概念阻塞IO模型在内核将数据准备好,系统调用会一直等待,所有的套接字默认都是阻塞IO方式阻塞IO是最常见的IO模型非阻塞IO模型非阻塞IO往往需要程序员循环的方式反复尝试读取文件描述符,这个过程称为轮询,这对于cpu来说的话是较大的浪费,一般只有特定的场景下才能使用信号驱动IO...原创 2019-07-12 15:44:30 · 238 阅读 · 0 评论 -
linux---静态库和动态库的制作和使用
静态链接和动态链接静态链接:生成可执行代码,链接静态库(与代码位置有关的链接方式),需要将代码拷贝到我们的源代码中才能运行。动态链接:生成可执行代码,链接动态库(生成与代码位置无关的库生成方式),只需要将函数的符号写入即可,只会拷贝动态库的符号。动态库的生成命名:动态库使用libxxx.so文件名字,其中的xxx就是动态库的名字将我们的.c文件生成.o文件gcc -fPIC -c ...原创 2019-04-13 17:44:05 · 450 阅读 · 0 评论 -
linux---硬链接和软链接
文件系统磁盘上文件读写存储与查找系统(管理)就是文件系统,在每一个分区都会存在自己的文件系统。在这里我们有swap交换分区和文件分区,我们这里只介绍文件分区。在文件分区都会有上图中的分块管理inode每个文件都会有一个inode节点,存储我们文件的信息,例如大小,权限,时间,占用大小…超级块:纪录文件分区信息,例如块个数,节点区域等等data:标记那些数据块已经使用inode_b...原创 2019-04-13 17:02:39 · 328 阅读 · 0 评论 -
linux--进程控制2
在进程控制的章节我们讲解了我们的进程创建,这章节对进程控制进行补充,进程终止在我们创建一个进程之后我们避免不了我们去终止我们的进程。终止场景正常退出,结果符合我们的预期正常退出,结果不符合我们的预期异常退出终止方式main函数直接return调用exit函数调用_exit函数 #include <unistd.h> void _exi...原创 2019-04-09 23:19:34 · 437 阅读 · 0 评论 -
linux下的yum,vim,gcc,gdb
我们在windows系统下我们能够很简单进行粘贴复制下载安装,也能通过vs进行我们缩写代码的编译运行,但是我们在linux下我们应该怎样去操作我们的这些命令呢,这章我们就讲解一下我们linux下常用的一些工具1- yumyum是centos版本的linux系统下的软件管理工具,常见的命令如下:yum list查看我们在linux系统下安装的文件,安装包yum list in...原创 2019-03-21 19:08:31 · 273 阅读 · 1 评论 -
linux下的项目管理工具make和git的使用
在linux下我们不能向在windows下这样去快速的进行编译,在以前我们都是使用一个命令一个命令地去将.c文件生成程序,在这里我们介绍项目自动化辅助构建工具make以及项目版本管理工具git**make**make说白了就是一个解释器,他是和Makefile相配合使用的,我们介绍一下Makefile,。Makefile是一个普通文件,内部可以定义自己的项目整体编译规则。make就是在当前...原创 2019-03-21 19:44:07 · 1170 阅读 · 0 评论 -
Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp
今天我们简单的介绍一些linux下面的一些重要文件夹的重用/proc 是个虚拟文件系统、也就是、重新引导后修改会被重新初始化提供了进程信息、内存资源、硬件设备、内核内存等信息比如:网卡:/proc/sys/vm/ipv4/ip_forward:控制ip转发内存:/proc/sys/vm/drop_caches:输入1强制内核从缓存释放一些内存推荐用strings 浏览其中的信息、而非 ...原创 2019-03-21 20:36:46 · 237 阅读 · 0 评论 -
进程中产生僵尸和孤儿
孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程。孤儿进程其实对于操作系统来说是没有太大的危害,在孤儿进程中父进程结束了之后,子进程就被init进程领养了,这时候我们不需要去管理我们的子进程,init进程会自动的释放我们子进程的资源,不会导致我们的资源浪费导致孤儿进程我们可以看到下面代码所产生的结果//orphan....原创 2019-03-30 14:36:08 · 121 阅读 · 0 评论 -
内存指针mm_struct
我们在使用fork()产生了一个子进程,子进程和父进程都是执行的相同的代码,此时我们又是如何进程执行的呢。 虚拟地址空间和物理内存这就是我们的虚拟地址空间,他实际上是使用一个结构体mm_struct结构体去描述的一段内存,并不是存储我们变量和代码的地方,此时的task_struct就是一个进程描述块,其实就是我们的PCB,mm_struct就是PCB中的一个成员,就是内存指针。如图,...原创 2019-03-30 14:56:37 · 782 阅读 · 0 评论 -
内存的分页管理(在4G内存下)
在上面我们已经知道了虚拟地址空间都是虚拟的地址空间,就是一个结构体mm_struct这个结构体但是实际上我们的物理内存和虚拟地址空间并不是一一对应的,其中我们使用的页表来找到物理空间物理地址空间实际的分布在我们运行一个进程的时候并不是将所有的进程都连续的复制进我们的物理内存中,实际上内存是分页模式,就是一页一页的如上图一样,这样我们可以更大的利用我们的物理内存。在4g内存下我们可以分为2^...原创 2019-03-30 15:25:23 · 615 阅读 · 0 评论 -
操作系统的分页和分段式管理
计算存储的层次结构:当前技术没有能够提供这样的存储器,因此大部分的计算机都有一个存储器层次结构,即少量的非常快速、昂贵、易变的高速缓存(cache);若干兆字节的中等速度、中等价格、易变的主存储器(RAM);数百兆或数千兆的低速、廉价、不易变的磁盘。这些资源的合理使用与否直接关系着系统的效率。内存管理方法 内存管理主要包括虚地址、地址变换、内存分配和回收、内存扩充、内存共享和保护等功能。...转载 2019-03-30 15:27:54 · 3166 阅读 · 1 评论 -
linux下的环境变量
环境变量环境变量,是指在操作系统中用来指定操作系统运行环境的一些参数。通常具备以下特征:① 字符串(本质) ② 有统一的格式:名=值[:值] ③ 值用来描述进程环境信息。存储形式:与命令行参数类似。char *[]数组,数组名environ,内部存储字符串,NULL作为哨兵结尾。使用形式:与命令行参数类似。加载位置:与命令行参数类似。位于用户区,高于stack的起始位置。引入环境变量表...原创 2019-04-04 18:33:58 · 153 阅读 · 0 评论 -
linux---进程控制
进程控制fork函数创建一个子进程。pid_t fork(void); 失败返回-1;成功返回:① 父进程返回子进程的ID(非负) ②子进程返回 0pid_t vfork(void);同样时创建一个子进程,但是他是与父进程公用一块虚拟空间,子进程先运行,等到子进程exit(0)的时候父进程才运行。pid_t类型表示进程ID,但为了表示-1,它是有符号整型。(0不是有效进程ID,init最...原创 2019-04-04 18:40:02 · 470 阅读 · 0 评论 -
进程概念初始
**## 进程初识**进程:进程对于用户来说进程就是一个运行中的程序,就是一个编译好的二进制文件。站在我们程序员的角度上来看,进程就是一些列指令运行的过程,站到操作系统上来看,就是分配系统资源的基本单位。就是一个描述进程的一个符号,简称PCB那程序和进程有什么区别呢?:程序占用磁盘,不占用系统资源内存赵勇系统资源一个程序对应多个进程,一个进程对应一个程序程序没有生命周期,进程有...原创 2019-03-27 23:13:14 · 207 阅读 · 0 评论 -
自动实现一个minishell更新(增加重定向功能)
增加重定向功能 1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include <fcntl.h> 6 #include <sys/types.h> 7 #includ...原创 2019-04-11 11:20:15 · 235 阅读 · 1 评论 -
自主实现一个minishell程序
#include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <string.h> 5 int main(){ 6 //1.等待用户输入 7 while(1){ 8 printf("[fw@localhost$ ...原创 2019-04-08 21:27:32 · 291 阅读 · 0 评论 -
linux---基础IO
在标准库中我们学习了printf,fprintf,sprintf,snprintf等等相关的函数,接下来是我们的系统I/O调用接口open #includ e <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const ch...原创 2019-04-13 10:17:04 · 101 阅读 · 0 评论 -
linux---文件描述符和重定向
文件描述符进程就是通过struct file结构体来描述打开的文件,使用struct file* fd_array[]来存储我们的文件。那什么是文件描述符呢?什么是文件描述符: 文件描述符就是struct file* array[]数组的下标,用户打开文件,操作系统通过file结构体描述文件,并且将指针添加到array中去管理,,想用户返回这个文件描述信息,在数组位置(下标),用户操作文件...原创 2019-04-13 10:54:06 · 266 阅读 · 0 评论 -
常用的linux命令
目录相关命令:ls 列出当前目录下的文件列表信息目录—文件夹当前:登陆成功之后,打开终端所处的一个目录-a 显示隐藏文件linux下以.开头的文件是隐藏文件,默认不显示-l 显示目录下文件的详细信息pwd 显示当前所在路径/home/san—绝对路径:以根目录作为起始的路径,称为据对路径相对路径:以当前路径作为起始的路径,称为相对路径linux目录结构:树型结构–最底层...原创 2019-03-16 12:55:04 · 140 阅读 · 0 评论