Linux学习
文章平均质量分 62
学习linux过程中的知识总结
不如吃个药
写博客最好到时间是十年前,其次是现在
展开
-
Linux和Mac 通用批量更改文件名称的命令
1、通过find -exec1、find . -name "*.andnav" -exec rename -v 's/\.andnav$/\.tile/i' {} \; 当然在实际执行操作时删除-v,否则将浪费时间显示所有文件2、通过find | renamefind . -name "第*" |rename "s/aaa/bbb/g"find . -depth -name "第*" |rename "s/aaa/bbb/g" -depth 确保重命名首先在孩子上进行,然后在父母上进行,以防原创 2021-08-27 15:10:55 · 563 阅读 · 0 评论 -
Futex系统调用,Futex机制,及具体案例分析
Futex1、背景1.1 自己实现锁1.1.1 自旋锁1.1.2 sleep+自旋1.1.3 小结1.2 futex1.2.1 什么是Futex1.2.2 futex诞生之前1.2.3 futex诞生之后2、Futex系统调用3、Futex机制4、具体案例分析4.1 在Bionic中的实现4.2 C语言实现5、参考及扩展阅读首先要区分一下futex系统调用和futex机制。futex系统调用是操作系统提供给上层的系统调用接口。而futex机制是使用futex接口实现的一种锁。1、背景线程同步可以说原创 2021-06-30 12:54:34 · 12357 阅读 · 11 评论 -
Linux 进程调度深入理解
Linux 进程调度1. Linux调度策略概览2. 实时(Real-Time)调度策略2.1 示例3. 普通调度策略3.1 Linux进程调度(CFS)的实现3.1.1 运行时间记录(Time Counting)3.1.2 进程选择(Process Selection)3.1.3 调度程序入口(The Scheduler Entry Point)3.1.4 睡眠和唤醒(Sleeping and Waking Up)3.2 上下文切换和调度时间点Linux的调度策略区分实时进程和普通进程,实时进程的优先级原创 2020-10-05 20:38:25 · 640 阅读 · 0 评论 -
linux中的条件变量
条件变量1.什么是条件变量2.条件变量有什么用3.条件变量的用法3.1 创建和注销3.2 等待和唤醒3.2.1 等待3.2.2 唤醒3.2.3 唤醒丢失问题4. 实例1.什么是条件变量条件变量是利用线程间共享的全局变量进行同步的一种机制。主要包括两个动作:一个线程等待”条件变量的条件成立”而挂起;另一个线程使”条件成立”(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。条件变量类型为pthread_cond_t。2.条件变量有什么用使用条件变量可以以原子方式阻塞线程原创 2020-10-05 16:10:04 · 658 阅读 · 0 评论 -
DPDK 全面分析
转载自 公众号:Linux云计算网络(id: cloud_dev)DPDK1 高性能网络技术2 C10K 到 C10M 问题的演进#3 基于 OS 内核的数据传输有什么弊端?4 解决方案探讨5 DPDK 的突破5.1 UIO (用户空间的 I/O 技术)的加持。5.2 内存池技术5.3 大页内存管理5.4 无锁环形队列5.5 poll-mode网卡驱动5.6 NUMA5.7 CPU 亲和性5.8 多核调度框架6 dpdk 的应用#7 总结1 高性能网络技术随着云计算产业的异军突起,网络技术的不断创.转载 2020-09-23 10:50:25 · 3850 阅读 · 0 评论 -
linux内核之哈希链表
本文只是对linux内核中的链表进行分析。内核版本是2.6.32。文件在:/include/linux/list.h。linux内核中的哈希链表和其他链表不一样。他是头节点用单个的链表,只有next指针,但其他链表节点是有next和prev两个指针的双链表。由上图可以知道hash链表中存在两种结构体,一种是hash表头,一种是hash节点。hash表头:struct hlist_head{ struct hlist_node *first;};表头里面只存放一个hlist_node的指.原创 2020-09-22 20:50:36 · 2169 阅读 · 0 评论 -
linux内核之链表
//include/linux/list.h struct list_head { struct list_head *next, *prev; }; #define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)#define INIT_LIST_HEA原创 2020-09-21 14:52:08 · 84 阅读 · 0 评论 -
同步(1):自旋锁,等待队列
同步(1)自旋锁,等待队列1 概述1.1 并发程序设计的本质1.2 硬件架构2 Linux内核同步2.1 自旋锁(spin lock)2.1.1 硬件支持2.1.2 自旋锁的实现2.2 睡眠与唤醒2.2.1 等待队列2.2.2 等待事件(Waiting on the Event)2.2.3 唤醒(Waking Up)2.2.4 互斥等待1 概述同步问题是操作系统中的经典问题,它伴随着并发处理而自诞生。现代体系结构中常见的并发处理情况可以分为如下三种情况:(1) 多个线程在单处理器上执行——多线程编程原创 2020-09-22 09:52:56 · 1026 阅读 · 0 评论 -
fork()与vfork()函数(精简)
这里写目录标题0 简介1 fork函数1.1 代码示例1.2 分析1.3 写时复制技术(Copy On Write)2 vfork函数2.1 代码示例2.2 分析3 区别参考0 简介这两个函数都是创建进程的函数:首先了解一下什么是进程:进程是计算机上的程序关于某个数据及时上的一次运行活动。进程的四要素:(1)有一段程序供其执行(不一定是一个进程所专有的),就像一场戏必须有自己的剧本。(2)有自己的专用系统堆栈空间(私有财产)(3)有进程控制块(task_struct)(“有身份证,PID”)原创 2020-09-17 22:04:45 · 169 阅读 · 0 评论 -
exit _exit return区别详解
return返回函数值,是关键字; exit 是一个函数。return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。return是函数的退出(返回);exit是进程的退出。return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。return用于结束一个函数的执行,将函数的执行信息传出个其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些..原创 2020-09-17 18:07:47 · 568 阅读 · 0 评论 -
深入理解linux前后台进程以及其对信号的响应
目录标题1 Linux的bg和fg命令简单介绍2 思考2.1 键盘按键传递信号:2.2 kill命令传递信号:3 前台命令和后台命令关系4 总结读前建议先看一下进程状态及简单信号工作原理。1 Linux的bg和fg命令简单介绍进程前后台操作用到以下命令或按键:Ctrl+C // 终止并退出前台命令的执行,回到SHELLCtrl+Z // 暂停前台命令的执行,将该进程放入后台,回到SHELLjobs // 查看当前在后台执行的命令,可查看命令进程号码& // 运行命令时,在命令末原创 2020-09-17 08:38:17 · 548 阅读 · 0 评论 -
linux进程状态浅析(精简)
可通过PS查看当前系统上的进程状态:◆运行状态(TASK_RUNNING)(R状态)指正在被CPU运行或者就绪的状态。这样的进程被成为runnning进程。运行态的进程可以分为3种情况:内核运行态、用户运行态、就绪态。只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上原创 2020-09-17 00:28:12 · 495 阅读 · 2 评论 -
阻塞非阻塞与同步异步的理解
网上一大堆关于这四个概念的解释,有很多都不够深入。它们并不是很多网络博客所写的那么简单。以下内容为网上整理并加上本人理解。1 了解一下前置知识1.1 相关概念:同步(Synchronous)异步( Asynchronous)阻塞( Blocking )非阻塞( Nonblocking)1.2 用户空间和内核空间操作系统为了支持多个应用同时运行,需要保证不同进程之间相对独立。 因此操作系统内核需要拥有高于普通进程的权限,以此来调度和管理用户的应用程序于是内存空间被划分为两部分,一部分为内核原创 2020-09-16 21:39:28 · 129 阅读 · 0 评论 -
操作系统中信号工作的底层原理分析
操作系统(Linux)信号机制1. 信号简介2. 信号是干什么的?3. 信号处理过程4. 信号的产生1)键盘按键产生信号2)调用系统函数3)软件产生信号4)硬件异常产生信号5. 简单处理信号样例6. 信号的阻塞,未决,忽略1) 结论如下:7. 信号的捕捉(自定义信号函数处理)8. 信号集操作函数9. 综合使用信号小程序9.1 信号屏蔽9.2 信号屏蔽字中对信号的解除9.3 SIGCHLD信号10. 参考资料(扩展)1. 信号简介软中断信号 (简称为信号) 是用来通知进程发生了异步事件,是在软件层次上是原创 2020-09-16 01:41:07 · 1991 阅读 · 0 评论 -
当 CPU 空闲时它都在做什么?(网上整理)
CPU闲着的时候在干什么?Gustavo Duarte写的一篇详细文章指出,CPU空闲时并不是什么都不干,而是在运行空闲任务(idle tasks)。CPU整体设计就是完成当前操作后尽可能快速地返回到空闲状态,但系统必须要有某种方法/方式来唤醒芯片,让它去关注其他某些东西。其中的一种方式是使用系统计时器(system timer)。阻止CPU消耗太多电量的一种方法是内置更长的时钟周期(tick periods)。通过这种方式,CPU在唤醒之前需要度过更长的空闲时间,然后执行基本任务,接着再次睡眠。原创 2020-09-15 23:38:58 · 3762 阅读 · 0 评论 -
CFS(Completely Fair Scheduling)中vruntime计算方法
CFS中的虚拟运行时间vruntime先简单说一下CFS调度算法的思想:理想状态下每个进程都能获得相同的时间片,并且同时运行在CPU上,但实际上一个CPU同一时刻运行的进程只能有一个。 也就是说,当一个进程占用CPU时,其他进程就必须等待。CFS为了实现公平,必须惩罚当前正在运行的进程,以使那些正在等待的进程下次被调度。具体实现时,CFS通过每个进程的虚拟运行时间(vruntime)来衡量哪个进程最值得被调度。CFS中的就绪队列是一棵以vruntime为键值的红黑树,虚拟时间越小的进程越靠近整个红黑树的原创 2020-09-12 17:46:39 · 869 阅读 · 0 评论 -
常用进程间通信及实例(c语言)
常用进程间通信1 管道(pipe)1.1 匿名管道(pipe)1.2 命名管道(name_pipe)2 信号(signal)3 信号量(semophore)4 共享内存(shared memory)5 消息队列(message queue)6 套接字(socket)1 管道(pipe)1.1 匿名管道(pipe)半双工通信,数据只能单向流动,只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。通过匿名管道实现进程间通信的步骤如下父进程创建管道,得到两个⽂件描述符指向管道的两端父原创 2020-09-01 20:34:57 · 3364 阅读 · 0 评论