加载中……
thumbnail
Ubuntu的一些实用命令工具(回收站机制、目录切换,etc)
背景 从ctrl C和ctrl V操作习惯了的Windows到初次接触到Linux的那一段时间,我想我理解到了,这世界有时是不求大同的。我从老师教的那十几个命令开始记起走,一大堆的英文介绍和参数刺眼得很,好在夏天本就吵闹,我看上去也还算沉默。直到我帮旁边的女同学删除了她刚配置好的系统,我才算露出了憨厚的笑容。 后来啊,在王老一句“万物皆文件”的点醒…
Linux进程调度的实现
算法 Linux调度算法迭代大致有三种:   O(n)调度:在每次进程切换时,内核依次扫描就绪队列上的每一个进程,计算每个进程的优先级,再选择出优先级最高的进程来运行,花费的时间相对较大,时间复杂度为O(n); O(1)调度:在数据结构设计上采用了一个优先级数组,进程采用两个优先级,一个是静态优先级,一个是动态优先级。静态优先级是用来计算…
网络协议栈基础
分层 如图所示: PDU PDU(protocol data unit):协议数据单元。即每一层使用自己层的协议和别的系统的对应层相互通信,协议层的协议在对等层之间交换的信息叫协议数据单元 各层协议数据单元如下; 上层:message 传输层:segment 网络层:packet 数据链路层:frame 物理层:bit 封装 数据要通过网络进行传输…
Android编译流程
重要说明 Android 7.0以前,系统主要使用GNU make和shell编译系统,模块都使用Android.mk来定义。但是后来呢,大家都明白,Android工程越来越大,make编译所耗费的时间达到足以让程序员发狂,这时google认为这是不正常的现象,咋能编译时间还超过实际调试时间呢?因此在Android 7.0以后,google使用ni…
Linux 设备树(dts)节点相关函数
匹配流程 在设备树(dts、dtsi)中通常有一个compatible属性,我们可以在驱动源码里找到该属性值。例如: /*定义的of_match_table*/ static const struct of_device_id mytest[] = { { .compatible = "test,12345" }, { } }; /*driver …
C++ 模板知识总结
是什么 模板是范型编程的基础,范型编程呢,顾名思义,就是传递的参数类型广泛,不固定,函数或者类自适应参数类型的意思。听起来似乎没什么,但不管怎样,你一定记住,模板可牛逼着呢。 比如说定义了一个如下的函数模板: template <T> T add( T a, T b ) { return a + b; } 这里的T 我们就可以理解为万能…
Linux设备树基础知识
相关文件 dts dts后缀文件中保留了硬件相应的信息,在Linux源码中可找到大量.dts文件,ARM架构中在arch/arm/boot/dts文件夹中找到相应的dts文件,一个dts文件对应一个ARM的machie。 dtsi 值得一提的是,对于一些相同的dts配置可以抽象到dtsi文件中,然后类似于C语言的方式可以include到dts文件中…
C++构造函数与析构函数
示例代码 #include <iostream> using namespace std; class ClassTest { public: ClassTest( int s ): elem{ new int[s] }, size{ s } { } ClassTest( ): elem{ new int[1] }, size{ 1 }…
C/C++ static关键字作用
作用 修饰普通变量:变量存储在静态区,初始化且仅初始化一次变量,默认值为0。 修饰普通函数:限定函数作用范围,使该函数只在本文件有效,防止与其他命名空间函数冲突。 修饰成员变量:该类只保存一个该变量,可以通过类直接访问,在类中声明,在类外初始化。可以通过类名直接访问,所有的类对象共用同一个该静态成员变量。 修饰成员函数:无需生成对象可以直接访问,s…
C/C++实现归并排序
归并排序 归并排序和快速排序有类似之处,同样采用分治法,不同的是,归并排序不选取基准值,采用递归方式直接将数据分为两个区间,再进行排序合并。需要注意的是,排序实际是从最小单位,即分区大小为1时开始的。 时间复杂度 因为都是从中间划分区间,且无基准值。归并排序时间复杂度较稳定 O(nlogn) 步骤 对半划分区间 递归,直到分区大小为1 依次合并区间…