配置文件内容如下: 读取脚本如下: 注意: linux 中文件的末尾有字符 '\r',需要注意将换行符去掉 这种小的点不太容易发现,所以看脚本看不出问题的时候,可以打开 shell 的 debug,很容易定位出来,如下: sh -x test.sh ...
分类:
系统相关 时间:
2019-10-29 21:20:40
阅读次数:
253
内核一般通过jiffies来获取当前时间,该数值表示的是最近一次系统启动到当前的时间间隔,它和设备驱动程序无关,因为它的声明期只限于系统的运行期;但是驱动程序可以用jiffies来计算不同事件之间的间隔;通常,利用jiffies值来测量时间间隔已经足够了,如果要测量更短的时间差,只能使用处理器特定的 ...
分类:
系统相关 时间:
2019-10-29 20:06:38
阅读次数:
220
自旋锁可以再不能休眠的代码中使用,比如中断处理例程;在正确使用的情况下,自旋锁通常可以提供比信号量更高的性能; 一个自旋锁是一个互斥设备,它只能由两个值,锁定和解锁;通常实现为某个整数值中的单个位;希望获得特定锁的代码测试相关位,如果锁可用,则锁定位被设置,而嗲吗继续进入临界区;相反,如果锁被其他人 ...
分类:
系统相关 时间:
2019-10-29 20:05:13
阅读次数:
128
使用非阻塞IO的应用程序经常使用select,poll,epoll系统调用;它们的功能本质上是一样的:都允许进程决定是否可以对一个或者多个打开的文件做非阻塞的读取或者写入;这些电泳也会阻塞进程,直到给定的文件描述符中的任何一个可读取或者写入;因此,它们常常用于那些需要使用多个输入或者输出流而又不会阻 ...
分类:
系统相关 时间:
2019-10-29 20:01:01
阅读次数:
110
读取-复制-更新(read-copy-update,RCU)是一种高级的互斥机制,在正确的条件下,可以获得高的性能; RCU对它保护的数据结构做了一些限定,它针对经常发生读而很少发生写的情况做了优化,被保护的资源应该通过指针访问,而对这些资源的引用必须仅由原子代码拥有,在RCU保护的代码范围内不能进 ...
分类:
系统相关 时间:
2019-10-29 20:00:48
阅读次数:
175
当一个进程被置入休眠时,它会被标记为一种特殊状态,并从调度器的运行队列中移走;直到某些情况下修改了这个状态,进程才会在任意cpu上调度,即运行该进程;休眠中的进程会被搁置在一边,等待将来的某个时间发生; 为了将进程以一种安全方式进入休眠,需要牢记下面的规则: 第一条规则,永远不要在原子上下文中进入休 ...
分类:
系统相关 时间:
2019-10-29 19:59:45
阅读次数:
159
当要保护的资源很小,很简单,会频繁的被访问而且写入访问很少的且必须快速时(即读不允许让写饥饿),就可以使用顺序锁(seqlock);从本质上讲,顺序锁会允许读取者对资源的自由访问,但需要读取者检查是否和写入者发生冲突,当这种冲突发生时,就需要重试对资源的访问; 顺序锁通常不能用于保护包含指针的数据结 ...
分类:
系统相关 时间:
2019-10-29 19:56:42
阅读次数:
105
有些驱动程序需要延迟比较长的时间,即长于一个时钟滴答; 如果想把执行延迟若干个时钟滴答,或者对延迟的精度要求不高,最简单的实现方法就是一个监视jiffies计数器的循环;这种忙等待的实现方法通常具有下面形式,其中j1是延迟终止的jiffies值: 对cpu_relax的调用将以架构相关的方式执行,其 ...
分类:
系统相关 时间:
2019-10-29 19:51:47
阅读次数:
90
kmalloc的原型如下: 1 void *kmalloc(size_t size, gfp_t flags) 第一个参数是要分配的块的大小,第二个参数是分片标志; flags标志 最常用的标志是GFP_KERNEL,表示内存分配(最终总是调用get_free_page来实现实际的分配,这就是GFP ...
分类:
系统相关 时间:
2019-10-29 19:51:31
阅读次数:
122
尽管大多数时候阻塞型和非阻塞型操作的组合以及select方法可以有效的查询设备,但是某些时候用这种技术处理就效率不搞了; 例如:一个进程在低优先级执行长的循环计算,但又需要尽可能快的处理输入数据,如果该进程正在响应来自数据收集外设新观测的数据,则应该在新数据可用时理解知晓并处理;我们可以使用poll ...
分类:
系统相关 时间:
2019-10-29 19:51:17
阅读次数:
106
当共享资源是一个简单的整数值时,可以使用内核提供的一种原子的整数类型,称为atomic_t,定义在<linux/types.h>中,操作定义在<linux/atomic.h>中; 内核提供了一组针对原子位进行操作的函数,它们与体系结构相关,定义在文件<asm/bitops.h>;即使是在SMP计算机 ...
分类:
系统相关 时间:
2019-10-29 19:48:41
阅读次数:
97
[TOC] 通配符 grep 过滤 history 显示前面敲的全部命令 \ (0~N个字符) 复制当前目录下所有文件到/opt目录 cp ./ /opt 复制当前目录下所有文件和文件夹到/opt目录 cp r ./ /opt 删除/opt目录下所有文件和文件夹 rm rf /opt/ ?(1个字符 ...
分类:
系统相关 时间:
2019-10-29 19:41:16
阅读次数:
105
除了读取和写入设备之外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制,通常这种需求使用ioctl方法支持,该方法实现了同名的系统调用; 在用户空间,ioctl系统调用的原型如下: 原型中的可变参数不是数目不定的一串参数,而只是一个可选参数;可选参数的具体格式依赖于控制命 ...
分类:
系统相关 时间:
2019-10-29 19:38:48
阅读次数:
120
内核通过定时器中断来跟踪事件流; 时钟中断由系统定时硬件以及周期性的间隔产生,这个间隔由内核根据HZ的值设定,HZ是一个细节结构有关的常数;作为一般性规则,即使知道对应平台上的确切HZ值,也不应该在编程时依赖该HZ值; 如果想改变系统时钟中断发生的频率,可以通过修改HZ值来进行,但是,如果修改了头文 ...
分类:
系统相关 时间:
2019-10-29 19:35:24
阅读次数:
119
Linux2.6版本之前还存在对于socket的accept的惊群现象。之后的版本已经解决掉了这个问题。 惊群是指多个进程/线程在等待同一资源时,每当资源可用,所有的进程/线程都来竞争资源的现象。 Nginx采用的是多进程的模式。假设Linux系统是2.6版本以前,当有一个客户端要连到Nginx服务 ...
分类:
系统相关 时间:
2019-10-29 19:31:29
阅读次数:
92
如果需要在将来的某个时间点调度执行某个动作,同时在该时间点到达之前不会阻塞当前进程,则可以使用内核定时器; 内核定时器是一个数据结构,它告诉内核在用户定义的时间点使用用户定义的参数来执行一个用户定义的函数; 被调度运行的函数几乎肯定不会再注册这些函数的进程正在执行时运行,相反,这些函数会异步的运行; ...
分类:
系统相关 时间:
2019-10-29 19:31:14
阅读次数:
100
sudo apt install x11vnc/bionic sudo x11vnc -forever -passwd agv sudo apt install gvncviewer/bionicsudo vncviewer ...
分类:
系统相关 时间:
2019-10-29 18:16:21
阅读次数:
135