Linux笔记
good-destiny
这个作者很懒,什么都没留下…
展开
-
git使用总结
1、安装后,配置用户名和邮箱$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"注意:git config --global 参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。...原创 2020-04-13 21:08:52 · 277 阅读 · 0 评论 -
一个简单的线程池设计方案
一个简单的线程池本质上是生产者-消费者模型,一般是线程池负责消费任务,任务分配线程负责生产任务,任务可以由队列、链表或全局变量等数据结构承担。如果生产和消费速度差不多,可以采用环形队列结构;如果任务有优先级别,也可采用多个队列分别存放不同优先级别的任务。线程池的同步一般采用互斥锁和条件变量模式。如果为了追求效率,也可使用无锁队列结构。实例代码如下:TaskPool.h#i...原创 2020-03-20 21:05:11 · 417 阅读 · 0 评论 -
Linux中锁的总结
目录1 前言2 注意事项2.1 明确锁的范围2.2 减少锁的粒度3 避免死锁的建议1 前言 实际开发过程中,使用锁会带来一定性能的损失,但如果使用锁也能满足性能要求,对于锁的使用就无妨。使用锁可能带来如下性能损失:加锁和解锁操作,本身有一定的开销; 临界区的代码不能并发执行; 进入临界区的次数过于频繁,线程之间对临界区的争夺太过激烈,若线程竞争互斥...原创 2020-03-20 17:36:14 · 377 阅读 · 0 评论 -
Linux之操作系统杂谈
1标准库函数和系统调用的区别系统调用:通向操作系统本身的接口,是面向底层硬件的。通过系统调用,可以使得用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互,是操作系统留给应用程序的一个接口。标准库函数:库函数调用则是面向应用开发的,库函数可分为两类,一类是C语言标准规定的库函数,一类是编译器特定的库函数。主要的差别如下:库函数是语言或应用程序的一部分,而系统调用是内核提...原创 2020-03-12 23:02:50 · 169 阅读 · 0 评论 -
Linux 守护进程的原理与实现
1 守护进程 守护进程:也称为精灵进程,守护进程是一个在后台运行并且不受任何终端控制的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。2 创建守护进程流程(1)创建子进程,退出父进程:为了脱离控制终端需要退出父进程,之后的工作都由子进程完成。在Linux中父进程先于子进程退出会造成子进程成为孤儿进程,而每...原创 2020-03-12 22:48:18 · 269 阅读 · 0 评论 -
Linux 信号(signal)
目录1 信号的本质2 信号列表3 信号发送时机3.1 内核自动给进程发送信号3.2 进程给进程发送信号4信号处理时机1 信号的本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信...原创 2020-03-04 22:51:09 · 436 阅读 · 0 评论 -
Linux IO原理和零拷贝机制
目录1 概述2Linux I/O读写方式2.1I/O中断原理2.2. DMA传输原理2.3传统I/O方式3零拷贝方式3.1用户态直接I/O3.2 mmap + write3.2sendfile3.4sendfile + DMA gather copy3.5splice3.6 写时复制3.7Linux零拷贝对比1 概述...原创 2020-03-01 23:04:08 · 641 阅读 · 0 评论 -
并发编程(1): volatile、原子变量、自旋锁和互斥锁
并发编程三条特性:原子性 原子性是指一个操作是不可中断的,要么全部执行成功要么全部执行失败。 可见性 可见性是指当一个线程修改了共享变量后,其他线程能够立即看见这个修改。 有序性 有序性是指程序指令按照预期的顺序执行而非乱序执行,乱序又分为编译器乱序和CPU执行乱序。1volatile变量 volatile 变量不保证线程安全和不具备原子性的原因:在执行内存屏障之前,...原创 2020-02-28 22:20:24 · 1004 阅读 · 0 评论 -
linux设置自启动方式
方式一:在/etc/rc.local文件中加入启动命令这种方式适合linux用户手动配置自启动程序。方式二:在/etc/rc[0-6].d/目录建立软链接,软链接指向/etc/init.d/目录下的控制脚本(1)基本原理:可以看到/etc/rc0.d目录下的文件指向/etc/init.d目录下的文件/etc/rc[0-6].d目录下文件的命名规则:S|K + nn +...原创 2020-01-13 22:07:41 · 154 阅读 · 0 评论 -
协程(Python)
目录1、协程的优势:2、生产者消费者协程模型3、协程gevent实例1、协程的优势:协程的执行效率高。因为子程序切换不是线程切换,而是由程序自身控制。因此,没有线程切换的开销,和多线程相比,线程数量越多,相同数量的协程体现出的优势越明显 不需要多线程的锁机制。由于只有一个线程,也不存在同时写变量的冲突,在协程中控制共享资源不需要加锁,只需要判断数据的状态,所以执行效率远...原创 2019-11-28 23:04:45 · 218 阅读 · 0 评论 -
死锁原因及解决方法
一、死锁的定义 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。二、死锁产生的原因1)竞争不可抢占性资源 p1已经打开F1,想去打开F2,p2已经打开F2,想去打开F1,但是F1和F2都是不可抢占的,这是发生...原创 2019-11-23 23:42:47 · 1593 阅读 · 1 评论 -
shell脚本总结
目录1 shell基础知识1.1 第一个shell脚本1.2 定义变量1.3 使用变量1.4 将命令结果复制给变量1.5 日期与数学计算1.6 shell参数1.7 字符串处理1.8 数组1.9 shell命令2 shell流程控制2.1 if else语句2.2 for循环2.3 while循环2.4 case语句2.5 跳...原创 2019-11-15 17:48:56 · 352 阅读 · 0 评论 -
C函数调用过程原理及函数栈帧分析
在x86的计算机系统中,内存空间中的栈主要用于保存函数的参数,返回值,返回地址,本地变量等。一切的函数调用都要将不同的数据、地址压入或者弹出栈。因此,为了更好地理解函数的调用,我们需要先来看看栈是怎么工作的。1、栈是什么? 简单来说,栈是一种LIFO形式的数据结构,所有的数据都是后进先出。这种形式的数据结构正好满足我们调用函数的方式:父函数调用子函数,父函数在前,...转载 2019-11-14 20:23:39 · 285 阅读 · 0 评论 -
Linux命令:grep awk sed详解
1、grepgrep [options] regex [file...]regex 是指一个正则表达式-i : 忽略大小写。不会区分大小写字符。也可用–ignore-case 来指定。 -v : 不匹配。通常,grep 程序会打印包含匹配项的文本行。这个选项导致 grep 程序只会打印不包含匹配项的文本行。也可用–invert-match 来指定。 -c : 打印匹配的数量(或者...原创 2019-10-17 23:34:47 · 462 阅读 · 0 评论 -
Linux性能分析工具汇总
Linux针对性能调优设计了许多分析工具,这些工具对于分析整个系统性能可提供巨大的帮助。影响性能的因素有cache、I/O,系统调用,系统内核、CPU性能等等。比如某些程序无法充分利用 cache,从而导致性能下降。比如不必要地调用过多的系统调用,造成频繁的内核 / 用户切换等。 主要的分析工具有:CPU性能工具、内存性能工具、磁盘I/O性能工具、网络性能工具和基准测...转载 2019-10-15 23:00:53 · 393 阅读 · 0 评论 -
linux打印全部make编译信息
有时候,我们需要查看完整的编译信息,但只能显示下面的一部分,这可怎么办?可以使用make >& makeinfo.txt命令进行make编译。这样就可以将打印信息全部保存到文本(文本名称可随意哦)。附录:make根据Makefile文件编译源代码、连接、生成目标文件、可执行文件。make clean清除上次的make命令所产生的ob...原创 2017-01-10 21:37:00 · 7419 阅读 · 0 评论 -
getopt函数
1、定义:int getopt(int argc, char * const argv[], const char *optstring);2、描述:getopt是用来解析命令行选项参数的,但是只能解析短选项: -d 100,不能解析长选项:--prefix3、参数:argc:main()函数传递过来的参数的个数argv:main()函数传递过来的参数的字符串指针数组...转载 2019-09-16 15:40:26 · 813 阅读 · 0 评论 -
Linux进程地址空间探究
我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的应用程序,它是怎么做到的呢?呵呵,这一切的一切都是个迷呀,下面我们就一步一步解开心中的谜团吧!...转载 2019-08-29 12:56:20 · 175 阅读 · 0 评论 -
Linux之gdb基本调试命令与总结
一、常见gdb调试命令表1 gdb基本调试指令 命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 info(或i) locals 查看当前栈帧局部变量的值 list(或l) 列出源代码,接着上次的位置往下列,每次列10行...原创 2019-04-21 21:17:13 · 304 阅读 · 0 评论 -
Linux平台Segmentation fault(段错误)调试方法
1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。2. 段错误的原因 段错误,英文segmentation fault段错误的定义 segementation fault (often shortened to segfault)...原创 2019-03-24 16:38:42 · 5581 阅读 · 0 评论 -
Linux内核与文件系统分析
1、Linux内核源代码目录结构arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、powerpc、mips等。block:块设备驱动程序I/O调度。crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。Documentation:内核各部分的通用解释和注释。drivers:设备驱动程序,每个不同的驱动占用一个子目录,如原创 2016-08-18 15:45:29 · 6248 阅读 · 0 评论 -
man命令的使用方法
Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可。 Linux的man手册共有以下几个章节: 如:man 5 data1 Executable programs or sh转载 2016-08-20 11:36:54 · 2054 阅读 · 0 评论 -
TFTP服务器搭建与测试
一、基础知识介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于 UDP 协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。 根据上面关于 TFTP 的介原创 2017-02-11 19:12:36 · 23049 阅读 · 0 评论 -
u-boot之基础知识
一、简介u-boot是操作操作系统运行前的引导加载程序,它的作用是初始化硬件设备、建立内存空间的映射表,为最后调用操作系统内核做好准备。主要任务是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点运行,即开始启动操作系统。 BootLoader的操作模式一般分为自启动模式和交互模式。自启动模式:BootLoaderd从目标机上的某个固态设备(FLASH)上将操作系统加载到R...原创 2017-01-06 20:12:17 · 661 阅读 · 0 评论 -
u-boot之mkconfig分析
编译u-boot的过程,就是make xxx_config和make两步执行过程如下:以make smdk2410_config为例:(一)make smdk4412_config指令在Makefile找到%_config:: unconfig @$(MKCONFIG) -A $(@:_config=)但是发现unconfig:@rm -f$...原创 2017-01-08 20:37:30 · 609 阅读 · 0 评论 -
u-boot之添加一块新板子的支持
申明 本着学习交流的原则, 将个人移植u-boot的过程做一个记录. 文章参考了csdn blog里面的很多内容, 有的已经记不得出处了, 只好把当时的摘要直接贴出来. 如果冒犯, 还请见谅. 如有侵权, 请与我邮件联系. 谢谢! 添加一块新板子的支持在编译uboot代码时, 我需要做的第一件事情就是配置uboot. 命令格式如下make xxxx_config如果你直接...转载 2017-01-08 20:54:07 · 452 阅读 · 0 评论 -
u-boot之Makefile分析
########################################################################## (C) Copyright 2000-2012# Wolfgang Denk, DENX Software Engineering, wd@denx.de.## See file CREDITS for list of people who...转载 2017-01-09 11:05:38 · 968 阅读 · 0 评论 -
u-boot之autoconf.mk解析
一、执行make首先包含 all:sinclude $(obj)include/autoconf.mk.dep (包含了include/autoconf.mk目标)sinclude $(obj)include/autoconf.mk (包含了配置)二、生成规则 # # Auto-generate the autoconf.mk file (which is ...转载 2017-01-09 21:42:21 · 3314 阅读 · 1 评论 -
u-boot之u-boot.bin的生成
u-boot.bin这里的u-boot.bin指的是不包含SPL的stage2部分的代码. 它会被SPL搬移到RAM的某个地址处开始运行. 本篇下面提到的u-boot.bin时, 也是指的这个概念. u-boot.bin的文件组成当我们在uboot下执行make命令的时候, 它最核心的功能是执行Makefile中的all目标编译出相应的文件. 我们来看看这个all目标...转载 2017-01-10 10:04:41 · 6387 阅读 · 0 评论 -
u-boot之SPL分析
SPLSPL是uboot第一阶段执行的代码. 主要负责搬移uboot第二阶段的代码到内存中运行. SPL是由固化在芯片内部的ROM引导的. 我们知道很多芯片厂商固化的ROM支持从nandflash, SDCARD等外部介质启动. 所谓启动, 就是从这些外部介质中搬移一段固定大小(4K/8K/16K等)的代码到内部RAM中运行. 这里搬移的就是SPL. 在最新版本的uboot中, 可以看到SPL...转载 2017-01-10 11:13:00 · 4953 阅读 · 2 评论 -
MIPS架构之start.s汇编分析
一、mips架构通用寄存器命名 二、mips汇编指令操作1、指令集2、实例:#example .data array1: .space 12 # declare 12 bytes of storage # to hold array of 3 integers ....原创 2017-01-12 13:54:30 · 4294 阅读 · 0 评论 -
MIPS之u-boot流程分析
1、 系统上电后由uboot的链接文件\u-boot\arch\mips\cpu\u-boot.lds知ENTRY(_start)程序入口点是\u-boot\arch\mips\cpu\xburst\start.s 2、 由la t9, board_init_f 知跳转到board_init_f 函数(\u-boot\arch\mips\lib\board.c)主...原创 2017-01-12 21:08:32 · 2085 阅读 · 0 评论 -
uboot之logo显示
一、logo的调用流程 |-->board_init_r: < board.c> |--> stdio_init: <common/stdio.c> |--> drv_lcd_init:<common/lcd.c> |--> lcd...原创 2017-03-06 17:32:17 · 7127 阅读 · 0 评论 -
Linux中的两个经典宏定义
倘若你查看过Linux Kernel的源码,那么你对offsetof和container_of这两个宏应该不陌生。这两个宏最初是极客写出的,后来在Linux内核中被推广使用。1. offsetof1.1 offsetof介绍定义:offsetof在linux内核的include/linux/stddef.h中定义。#define offsetof(TYPE,...转载 2019-03-19 23:57:17 · 2463 阅读 · 0 评论 -
进程间通信(IPC)
IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。 消息队列、信号灯、共享内存常用在Linux服务端编程的进程间通信环境中。而此三类编程函数在实际项目中都是用System VIPC函数实现的。System V IPC函数名称和说明如下表1-...原创 2019-03-16 22:13:44 · 164 阅读 · 0 评论 -
Linux多线程编程
在传统的UNIX模型中,当一个进程需要另一个实体来完成某事,它就fork一个子进程并让子进程去处理。但是fork的调用有如下缺点: (1)fork的代价是 昂贵的。fork要把父进程的内存印象复制到子进程,并在子进程中复制所有描述符等。 (2)fork返回之后父子进程之间信息的传递需要进程通信机制。调用fork之前父进程向尚未存在的子进程传递信息相当容易,...转载 2019-03-17 12:31:32 · 177 阅读 · 0 评论 -
Linux 平台中调试 C/C++ 内存泄漏方法
由于 C 和 C++ 程序中完全由程序员自主申请和释放内存,稍不注意,就会在系统中导入内存错误。同时,内存错误往往非常严重,一般会带来诸如系统崩溃,内存耗尽这样严重的后果。从历史上看,来自计算机应急响应小组和供应商的许多最严重的安全公告都是由简单的内存错误造成的。自从 70 年代末期以来,C/C++ 程序员就一直讨论此类错误,但其影响在 2007 年仍然很大。与许多其他类型的常见错误不...转载 2019-03-24 14:07:26 · 696 阅读 · 0 评论 -
搭建NFS服务器
一、搭建NFS服务器 1、输入 su root 命令切换到 root 用户 2、输入 apt-get install nfs-kernel-server 命令安装 Ubuntu NFS 服务 在安装的过程中会提示“是否继续安装”的信息,我们输入“Y” 3、 接下来需要配置/etc/exports,使用v原创 2016-08-17 21:24:17 · 497 阅读 · 0 评论