标签:读取 png inf 计数器 lazy 逻辑地址 正是 main 优先级
虚拟文件系统(VFS),是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。
模型
使用 read 函数来读取一个文件的过程如下:
内存管理会影响应用程序的性能,一个典型的例子就是程序的局部性原理:
时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。
空间局部性是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。
如下面代码所示,函数 func1 符合局部性原理,当前数字与下一个数字间隔为 1,而 func2 函数不满足局部性原理,当前数字与下一个数字间隔为 1024,会发生缺页中断,因此效率低。运行结果:运行 1000 次函数 func1 的时间为 2075ms,而运行 1000 次函数 func2 的时间为 2523ms,也证明了上述观点。
#include <stdio.h>
#include <time.h>
#define N 1000
// 符合局部性原理
int func1(int a[][N])
{
int sum = 0;
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) {
sum += a[i][j];
}
}
return sum;
}
// 不符合局部性原理
int func2(int a[][N])
{
int sum = 0;
for(int j = 0; j < N; j++) {
for(int i = 0; i < N; i++) {
sum += a[i][j];
}
}
return sum;
}
int main() {
clock_t start, finish;
start = clock();
int arr[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = i + j;
}
}
start = clock();
for (int i = 0; i < 1000; i++) {
func1(arr);
}
finish = clock();
printf("运行 1000 次函数 func1 的时间为: %lf(ms)\n", (finish - start) / 1000.0);
start = clock();
for (int i = 0; i < 1000; i++) {
func2(arr);
}
finish = clock();
printf("\n运行 1000 次函数 func2 的时间为: %lf(ms)\n", (finish - start) / 1000.0);
return 0;
}
CPU 性能,实时使用率也会影响程序的运行性能,当 CPU 使用率很高时候,运行程序,那么程序的性能就很低。
磁盘 I/O 也会影响程序的运行性能,磁盘的IOPS(Input/Output Per Second,即每秒钟处理的I/O请求数量)参数越大,读写磁盘多的程序性能就越强。
学习了《Linux操作系统分析》这门课,我对 Linux 中系统调用、进程创建与切换、以及程序在 Linux 系统的执行原理等知识有了一定的了解,而不是像以前一样仅仅知道 Linux 几个操作命令。因此,十分感谢孟老师和李老师的辛勤付出!
标签:读取 png inf 计数器 lazy 逻辑地址 正是 main 优先级
原文地址:https://www.cnblogs.com/upcan/p/14766331.html