Linux下的性能测试工具——LMBench介绍 (linux lmbench)

LMBench是一种用于测量操作系统和硬件系统性能的工具,它具有迅速、简便、可靠的核心特点。LMBench能够在Linux系统中测试各种子系统的性能,如内存子系统、文件系统、网络子系统等,使用LMBench可以测量CPU速度、内存延迟、内存带宽、进程间通信、网络延迟等一系列性能指标。本文将为读者介绍LMBench的基本原理和使用方法。

一、LMBench的基本原理

LMBench是由美国的Bitmover公司创建的,用C语言编写,它的基本原理是通过执行一系列测试程序来测量不同硬件和软件子系统的性能。LMBench的测试程序采用了多种编程语言,如C、C++、Java、Perl等,测试程序重点考虑了Linux内核如何使用底层硬件设备和如何优化I/O操作等问题。

LMBench的测试程序可以测量Linux/Unix系统下各种硬件和软件组件的性能,例如CPU、内存、硬盘、网络、文件系统等。LMBench测试程序是基于内核模块驱动的,其中包含了许多不同类型的内核模块驱动程序,能够测试各种常用硬件设备的性能。

二、LMBench的使用方法

1. LMBench的安装

在使用LMBench前,需要先在Linux系统中安装该工具。LMBench的下载地址为:http://www.bitmover.com/lmbench。在下载完成后,将解压后的文件放置到Linux系统中的任意文件夹中,运行“make”命令进行编译安装即可。

2. LMBench的测量性能

LMBench可测试的子系统有:

1. 内存子系统:LMBench测试内存带宽、读写延迟、内存负载等指标。

2. 文件系统子系统:测试磁盘IO读写性能、文件访问性能等指标。

3. 网络子系统:测试网络带宽、UDP/TCP带宽等指标。

4. 进程间通信:测试FIFO、PIPE、TCP等不同方式的IPC性能。

LMBench的常用测量命令有:

1. 内存子系统测量

$./lat_mem_rd -t 32 -s 256m -P 0 -N 1 rd

其中,“-t”参数为内核线程数,“-s”参数为内存大小,“-P”参数为线程掩码,“-N”参数为测试轮数。

2. 文件系统子系统测量

$./filemicro -c iterations -n files -s size -r -d directory

其中,“-c”参数为测试轮数,“-n”参数为文件数目,“-s”参数为文件大小,“-r”参数为测试顺序,“-d”参数为测试目录。

3. 网络子系统测量

$./netpipe -P -I 1024 -i 1024 -s 1024 -S 1024 -L 1000

其中,“-P”参数为端口号,“-I”参数为输入包大小,“-i”参数为输出包大小,“-s”参数为总输入流大小,“-S”参数为总输出流大小,“-L”参数为单向测试时间。

4. 进程间通信测量

$./lat_pipe -P 0 -n 250000 -B 8192 -s 8192 -t

其中,“-P”参数为进程掩码,“-n”参数为测试轮数,“-B”参数为缓冲区大小,“-s”参数为数据块大小,“-t”参数为计时。

通过以上的命令,我们可以很容易的对Linux硬件和软件子系统进行性能测试。

三、LMBench的优缺点

优点:

1. 灵活性高:LMBench支持不同类型的测试子系统,这使得测试人员可以使用不同类型的测试场景,以更好的评估系统的性能。

2. 测试覆盖面广:LMBench涵盖了许多硬件和软件组件的性能测试,例如:CPU、内存、硬盘、网络、文件系统等。

3. 可靠性高:LMBench的测试程序是基于内核模块驱动的,其中包含了许多不同类型的内核模块驱动程序,能够测试各种常用硬件设备的性能,测试结果更可靠。

缺点:

1. 对于初学者而言,LMBench的使用门槛有些高。

2. LMBench测试运行时间较长,在测试过程中可能会影响其他应用程序的运行,需要谨慎使用。

3. LMBench测试结果的解释需要一定的技术知识,需要专业技术人员的解读。

综上所述,LMBench是Linux系统中一款功能强大、可靠性高的性能测试工具。在Linux系统中运行LMBench工具,可以有效地分析不同的硬件和软件子系统的性能指标,从而对系统的性能进行全面评估。但对于新手而言,使用LMBench的门槛较高,需要较高的专业技术知识和测试运维经验,因此需要谨慎使用。

相关问题拓展阅读:

严重关注:在嵌入试LINUX系统该使用哪个线程库

严重关注: 在嵌入试LINUX系统该使用哪个线程库?:30:02

分类: LINUX

在Redhat9.0下面, 创建一个进程。getpid();得到进程ID,然后在进程里用pthreadcreate几个线程,在线程里调用getpid, pthreadgetselfid()的到进程ID和线程ID, 发现该线程的进程ID和它所属的进程ID是一样的, 线程ID却不同。当是在小机里用gcc里的线程库,得到的结果是线程ID和进程ID是不同的,即线程也当作进程来对待,而且多了几个其它线程在运行,若线程当作进程来对待效率是比较低的。在网上查了下linux的线程库,发现新内核中的LD用的是The Native POSIX Thread Library (NPTL), 而小机上用的是老的GCC里的线程库。

如何在Redhat9上面用老的线程库呢,在系统环境变量中加入LD_ASSUME_KERNEL=2.4.19就OK了

因为老版本内核中是不用NPTL库的, 这样LD连接程序的时候就不用NPTL, 在PC LINUX的

小机模拟器的模拟就和小机一样不用NPTL了。

那么到底是不是该把小机的线程库换成NPTL呢, 看看来自

的测试吧:

Linux 线程库性能测试与分析

杨沙洲国防科技大学计算机学院

2023 年 7 月 01 日

NPTL 成为 glibc “正选”线程库后,它的性能如何受到很多人的关注。本文就针对NPTL 与 LinuxThreads 的性能比较,以及超线程、内核可抢占等特性对线程性能的影响进行了全面评测。

一、 前言

在 Linux 2.6.x 内核中,调度性能的改进是其中最引人注目的一部分。NPTL(Native Posix Thread Library)使用内核的新特性重写了 Linux 的线程库,取代历史悠久而备受争议的 LinuxThreads 成为 glibc 的首选线程库。

NPTL 的性能究竟如何?相对 LinuxThreads 又有哪些明显的改进?在对NPTL进行全面分析之前,本文针对这两种线程库,以及内核中”内核可抢占”(Preemptible)和超线程(HyperThreading)等特性进行了全面的性能评测,结果表明NPTL绝对值得广大服务器系统期待和使用。

回页首

二、 Benchmark

1. 测试平台

进行本测试的硬件平台为浪潮NF420R服务器,4个Hyperthreading-enabled Intel Xeon 2.2G处理器,4G内存。Linux选择了Slackware 9.0发行版,所使用的内核源码来自

www.kernel.org

2. 针对测试:LMBench

lmbench是一个用于评价系统综合性能的多平台开源benchmark,但其中没有对线程的支持。其中有两个测试进程性能的benchmark:lat_proc用于评测进程创建和终止的性能,lat_ctx用于评测进程切换的开销。lmbench拥有良好的benchmark结构,只需要修改具体的Target程序(如lat_proc.c和lat_ctx.c),就可以借用lmbench的计时、统计系统得到我们关心的线程库性能的数据。

基于lat_proc和lat_ctx的算法,本文实现了lat_thread和lat_thread_ctx两个benchmark。在lat_thread中,lat_proc被改造成使用线程,用pthread_create()替代了fork(),用pthread_join()替代wait();在lat_thread_ctx中,沿用lat_ctx的评测算法(见lat_ctx手册页),将创建进程的过程改写为创建线程,仍然使用管道进行通信和同步。

lat_thread null

null参数表示线程不进行任何实际操作,创建后即刻返回。

lat_thread_ctx -s #threads

size参数与lat_ctx定义相同,可表示线程的大小(实际编程时为分配K数据;#threads参数为线程数,即参与令牌传递的线程总数,相当于程序负载情况。

3. 综合测试:Volanomark

volanomark是一个纯java的benchmark,专门用于测试系统调度器和线程环境的综合性能,它建立一个模拟Client/Server方式的Java聊天室,通过获取每秒平均发送的消息数来评测宿主机综合性能(数值越大性能越好)。Volanomark测试与Java虚拟机平台相关,本文使用Sun Java SDK 1.4.2作为测试用Java平台,Volanomark版本2.5.0.9。

回页首

三、 测试结果

测试计划中将内核分为2.4.26、2.6.6/支持内核抢占和2.6.6/不支持内核抢占三类;通过配置内核以及NF420R的BIOS实现三类P规模:单处理机(UP)、4CPU的P(P4)和打开超线程支持的虚拟8CPU P(P8*)。内核配置和P规模的每一种组合都针对LinuxThreads和NPTL使用lat_thread、lat_thread_ctx和volanomark获取一组数据。由于NPTL无法在2.4.x内核上使用,该项数据空缺。

回页首

四、 结果分析

1. LinuxThreads vs NPTL:线程创建/销毁开销

使用2.6.6/preemptible内核配置下UP和P4的测试数据获得下图:

图1

在线程创建/销毁开销方面,NPTL的改进相当明显(降低约600%)。实际上,NPTL不再像LinuxThreads那样需要使用用户级的管理线程来维护线程的创建和销毁,因此,很容易理解它在这方面的开销能够大幅度降低。

同时,由图可见,单CPU下创建线程总是比多CPU下迅速。

2. LinuxThreads vs NPTL:线程切换开销

同样使用2.6.6/preemptible内核配置下UP和P4的数据:

图2

随着lat_thread_ctx的参与线程增多,不管是哪个线程库,单处理机条件下的线程切换开销都陡峭上升,而P条件下则上升比较平缓。在这方面,LinuxThreads和NPTL表现基本相同。

3. 内核影响

图3

图4

图5

图6

从上面四张图中我们可以得出两点结论:

“内核可抢占”是Linux对实时应用提供更好支持的有力保障,但对线程性能影响很小,甚至有一点损失,毕竟抢占锁的开销不可忽略;

升级内核并不会对LinuxThreads线程库性能带来多少变化,因此,对于服务器系统而言,不能指望仅仅编译使用新内核就能提高性能。

图7

图8

从图3、图4我们已经知道,打开超线程支持对线程创建/销毁性能几乎没有影响,而这两张图表也进一步说明,超线程技术对于线程切换开销也没有明显的影响。超线程技术是CPU内部的优化技术,和真正的双CPU完全不同。大量研究表明,如果没有内核与用户应用相结合的专门优化措施,超线程并不会带来很大的性能变化。除非是高负载综合服务器系统(例如繁忙的数据库系统),购买超线支持的CPU并不能带来多少好处。

4. 综合性能

图9

图9

前面几节分析让我们了解了线程库性能改进的细节,通过volanomark测试,我们可以近似得到在综合应用环境下,特别是网络服务需求中线程库以及内核对系统整体性能的影响程度。

图9综合了不同内核、不同处理机数条件下,两种线程库的volanomark结果。从图中可以观察到以下三点:

NPTL能极大提高P环境下服务器系统的整体性能(超过65%),相对而言,对单处理机系统影响较小(10%左右);

2.6内核的抢占特性对系统性能影响很小(不超过±1%),某些情况下甚至有所下降;

超线程技术在LinuxThreads中的影响是负面的,在NPTL中是正面的,但影响幅度都很小(5%-6%)。

如何在LINUX下查看内存大小(C语言)

一般的说,凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统。和通用的计算平台相比,嵌入式系统往往具有功能单一、体积小、功耗低、可靠性高、剪裁性好、软硬件集成度高、计算能力相对较低等特点。

一般的说,凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统。和通用的计算平台相比,嵌入式系统往往具有功能单一、体积小、功耗低、可靠性高、剪裁性好、软硬件集成度高、计算能力相对较低等特点。多年来,嵌入式设备中没有操作系统,其主要原因有二:首先,诸如洗衣机、微波炉、电冰箱这样的设备仅仅需要一道简单的控制程序,以管理数量有限的按钮和指示灯,没有使用操作系统的必要;其次,它往往只具有有限的硬件资源,不足以支持一个操作系统。

看下lmbench的源码 (

)

操作系统概念学结

经过一天半的战斗,终于把操作系统概论这本书给拿下了。对于曾经专业课学过一些电脑硬件知识的我来说,这本书更加吸引我,以前一些听过的名词或高大上的词语在这本书上被详细介绍了,看的非常有收获。下面来总结下自己的收获:

首先之一章引论,在这里首先介绍了计算机系统,包括了软件和硬件两部分。

接下来就是之一章的重点:操作系统。如下图:

当前流行的操作系统有windows、unix、linux等。微软的windows系统经历了一个从简单到复杂,从低级到高级的过程;从ms-dos—windows 3—windows 95—windows 98—windows nt—windows 2023,再到现在win7、8甚至win10,微软始终在进步。unix是一个通用的交互式分时操作系统,有at&t公司下属的bell实验室开发,在诞生后,源代码就一直公开,用户可以参与到unix的升级中。unix的特点:1.短小精悍;2.可装卸的多层次文件系统;3.可移植性好;4.网络通信功能强。linux是网络时代的产品,继承于unix,并做了很多改进。

之一章总领了全书,后面的二三四五六章都是讲的计算机的各种管理,总结如下图:

在这里我把每章中的重点用红色的颜色标记出来了,这样在精读的时候就可以有重点的向外扩散,抓住考点,征服考试。之一遍阅读画的有点粗糙,在精读的时候再大大的丰富下。

操作系统概念学结

1.什么是计算机性能

所谓计算机的性能(performance)通常是指计算机的速度,它是程序执行时间的倒数。而程序执行时间是指用户向计算机送入一个任务后,直到获得他需要的结果这一段等待时间。

包括:

1.访问磁盘和访问存储器的时间

2.cpu 运算时间

#url#动作时间

4.操作系统的开销时间等。

2.linux桌面操作系统性能分析意义

1.操作系统的性能直接影响了其上应用系统的性能

2.性能评估结果是用户在操作系统选购过程中的重要参考指标

3.为开发者优化操作系统的性能提供指导

4.为操作系统的评测提供依据

3.linux桌面操作系统性能分析难点

1.应用千差万别

2.测试点过多

3.依赖多种因素和特征

4.没有针对性

5.没有实际应用前景

4.如何评测计算机的性能

1.机器级的性能评测

机器级的性能评测,包括 cpu 和存储器的某些基本性能指标,计算机的可用性与有效性以及机器成本、价格与性/价比等,它是引进和购买计算机时最主要的选择依据。

2.算法级的性能评测

算法级的性能评测方法主要用于并行机评测,最初大都是为了评价并行算法的性能提出的,后来这些评测方法也被推广到并行程序上。

3.程序级的性能评测

程序级的性能评测主要是使用一组基准测试程序(benchmark)测试和评价计算机系统的各种性能。

5.测试程序准确度层次

1.真实程序

通过运行实际应用程序, 例如 c 语言的各种编译程序、 tex 文本处理软件、 cad 设计工具 spice等

2.核心程序

它是从实际程序中抽取少量但很关键的代码段,并以此来评估程序性能

3.小测试程序

这些测试程序的代码长度一般在100行之内,用户可以根据自己的目的随时编写一些小段程序,并按已预知的输出结果(如皇后问题、排序问题、求素数等)来判断机器的性能。

4.综合测试程序

它是首先对大量的应用程序中的操作进行统计,得到各种操作比例,再以此比例人为制造出测试程序。

6.基准测试 6.1 含义

基准测试程序用于测试和预测计算机系统的性能, 揭示不同结构机器的长处和短处,为用户决定购买或使用哪种机器最适合他们的应用要求提供决策。基准测试程序试图提供一个客观、公正的评价机器性能的标准。

6.2 分类

宏观微观:

宏观基准测试程序(macro-benchmark)和微观基准测试程序(micro-benchmark)两大类。 前者将计算机系统作为一个整体来测试其性能,它相对于某一应用类来比较不同的计算机系统,所以对机器买主很有用,但它不能揭示计算机系统性能好、坏的原因。后者是测试机器的某一特定方面的性质,如cpu速度、存储器速度、i/o速度、os性能、网络特性等。

应用类别:

定点性能

浮点性能

web服务性能

数据处理性能

系统软件性能

科学与工程计算性能

6.3 主要的基准测试工具

lmbench

是由sgi的larry mcvoy所维护,是一种用于测试不同 unix 平台上 os 开销以及处理器、高速缓存、主存、网络和磁盘之间数据传输能力的可移植的基准测试程序。

whetstone

比较不同的计算机的浮点性能而设计的综合性基准测试程序。lmbench 着重测量以下内核组件:调度程序、进程管理、通信、联网、内存映射和文件系统。

dhrystone

主要为测试整数与逻辑运算性能而设计的综合型基准测试程序whetstone,dhrystone不能预测用户程序性能,这些基准程序的主要缺点是对编译程序比较敏感。

linpack

测试的基准是用全精度64位字长的子程序求解100阶线性方程组的速度,测试的结果以mflops(每秒百万次浮点运算)作单位给出。

spec

原主要是测试cpu性能的,现在强调开发能反映真实应用(如实际负载等)的基准测试程序,并已推广至客户/服务器计算、商业应用、i/o子系统等。

unixbench

应用比较广泛的unix类操作系统性能测试工具之一,它属于微观基准测试程序,它主要从cpu浮点运算能力,以不同缓冲区大小拷贝不同大小文件,管道吞吐量,进程生成速度,系统调用开销等方面来测试linux相关性能。

xbench

主要测试 xwindow 图形界面的性能。

iozone

文件系统的评测工具,对read,write,re-read,re-write,read backwards,read

strided,fread,fwrite,random read,pread,mmap,aio-read,aio_write 等一系列文件i/o性能进行了评测,是十分有用的文件系统性能分析工具。

ltp

更大的 linux 性能测试团体 linux test project 开展的开源测试项目, 这个团体专门从事 linux 性能测试研究。 这个项目收集了各种 linux 内核测试工具和相关资料, 它的目标就是为了通过把自动化测试引入到 linux 内核测试以提高linux 内核性能。

6.4 现状和不足

linux 基准测试程序都是微观基准测试程序,都是在测试机器的某一特定方面的性质,分别着重于 cpu 速度、存储器速度、i/o 速度、网络特性等等某一方面或多个方面,偏重于硬件。把 linux 操作系统作为一个整体,针对 linux 的操作系统性能的宏观基准测试程序目前还没有。

现有的linux测试工具都是基于微观基准测试程序,对于操作系统而言微观可测点实在是太多,写一个全面的基于自顶向下三层的全面测试工具工作量大,并且也没有太大实用价值。毕竟应用是千差万别的,不利于在有限的时间内快速的得出 linux 版本性能优劣结论。

7.性能评测方法学

如何进行性能评测,一般一个性能评测的实际解决方案应该包括以下三个方面:

1.让被评测系统处于压力负荷下;

2.测量系统执行有效特定任务的能力,执行特定任务的耗时,执行特定任务的 cpu 利用率;

3.基于性价比考虑进行改进。进行性能评测分析的目的是为了帮助开发人员更好更深层次的理解系统, 找出系统瓶颈,并作出相应的改进。

8.三种性能评价技术

1.分析技术(modeling)

分析技术也叫建模分析,在一定假设条件下,计算机系统参数与性能指标参数之间存在着某种函数关系,按其工作负载的驱动条件列出方程,用数学方法求解。

2.模拟技术(simulation)

模拟技术按被评价系统的运行特性建立系统模型; 按系统可能有的工作负载特性建立工作负载模型;语言编写模拟程序,模仿被评价系统的运行;设计模拟实验,依照评价目标,选择与目标有关因素,得出实验值,再进行统计、分析。该技术的特点是可应用于设计中或实际应用中的系统,可与分析技术相结合,构成一个混合系统。

3.测量技术(measurement)

测量技术只能对已投入使用的系统进行测量, 通常采用不同层次的基准测试。

9.工作量选区(workload)

工作量就是模拟实际工作的工作任务,一个工作量它要产生针对该被评测系统实际工作应用的典型的工作任务,并且该工作任务应该对系统产生相应的压力负荷 ,一个好的性能评测工作量应该包括以下基本特征。

可测量性

可反复性

不变性

典型性

10.自顶向下分析法

1.系统层(system level):包括处理器、内存、硬盘、网络等;(硬件资源)

2.应用层(appalication level):包括锁、线程、堆、api 等;(程序资源)1

3.微结构层(micro-achitecture):包括数据队列、循环结构、cache 优化等。

11.衡量linux桌面系统性能评价的主要标准和参数

1.响应时间(elapsed time)

内核完成某一任务(程序)所花费的时间,如磁盘访问、存储器访问、输入/

输出等待。

2.cpu 时间

程序在cpu中的执行时间。以秒为单位。

3.cpu 利用率

12.衡量linux桌面操作系统性能评价的主要标准

提供一个统一的、客观的、公正的和可相互比较的评价计算机的标准。

1.权威性

不是自己凭空想象,要有可靠的理论及事实依据支撑,业界广泛认可。

2.系统化

不是现有benchmark和工具的简单组合,而是能够系统化评估整机性能的方案。

它能够反映出整个计算机软件及硬件的综合处理能力,而不单纯是软件或者硬件,也就是说同一个硬件平台上测试,能够反映出不同操作系统性能不同,且在同一个操作系统,在不同的硬件平台上,性能测试也应该有所不同。

3.全面性

是对整机的整体性能测试,不是单纯的某个硬件或者某一方面能力的测试。

4.实用

要求该方法有实用价值,参考意义。

5.公正性

不一某些利益为目的的。

13.如何确定测试负载

从微观基准理论的角度来看,操作系统的基本性能参数实在是太多,基本性能参数测试包括 cpu、内存、i/o、网络、操作系统、文件系统、编译器、数据库的性能指标。

从宏观基准测试理论出发就简单多了, 主要是要确定合适的工作量来模拟有代表性的用户作业。工作量的确定需要一定的理论依据,可以借鉴现有各种linux 测试工具实践结果。

14.如何测试linux操作系统性能

linux 桌面操作系统是近几年来基于 linux 内核发展起来的面向用户桌面应用的操作系统,内核还是基于 linux,只是在其上添加了很多窗口程序,并且在用户界面和友好度上作出了很大的改进,更加易用和实用。

测试 linux 性能的关健在于测试 linux 内核性能,而测试 linux内核性能又可以细化成五大子系统的测试。可以针对内核这五大子系统设计工作量负载。

操作系统概念学结

linux操作系统学结(一)

最近粗略地看了一遍linux操作系统的书籍,主要讲的都还是一些概念上的知识,并没有深入地去了解内核以及内部机制。现在总结一下看了书后的一些知识上的收获:

linux更大的魅力是支持gpl,并且以网络为核心。其实操作系统的作用就是有效地整合软、硬件资源而为用户工作。操作系统提高了开发的效率,我学习linux,关键也是在于研究了解其内核构造。

说到linux的历史,其最初版本是有芬兰的一个大学生linustorvalds开发的,现在的linux版本是聚集了很多人的智慧后开发出来的。linux包含了人们对操作系统的很多期望,比如真正的多任务、虚拟内存、世界上最快的tcp/ip程序、共享库以及多用户支持等,而很多这些功能在windos中都是没有支持的。linux继承了unix的几乎所有特征,又有新创的许多新特征。在home根目录下可以创建多个用户目录,而实现多用户操作。其文件系统与windos也是有很大的区别的。linux还有丰富的接口。它的源码开放,可以跨越多个平台。总之,linux的强势在与它的网络功能和硬件的高效率。

linux是以独占方式执行更低层的任务,包括程序级及用户级的级别。与图形界面比起来,shell用起来更加直接与快速。设备驱动程序开发在linux下显得更加简单和方便。从linux2.0内核版本开始支持多内核模式,并且引入动态的模块技术,是系统在运行时可以修改内核,实现了内核的动态可伸缩性,但是也带来了一定的负面影响即不稳定性。

我国的linux研究仍然走在世界一流水平的后面。linux内核发展方向主要是硬件支持,嵌入式系统和分布式系统三个方面。这需要大量的硬件驱动程序开发以及互联网分布式系统开发。

处理机即为cpu。在但处理机系统中,并不存在真正意义上的并发执行,只是串行执行的家乡而已。提高处理机的使用率关键是要合理地安排各个程序之间的相互切换。作业其实就是用户的一个请求,而联机作业需要各个设备之间的交互性地执行。shell命令具有交互性,实时性较强,可以一次执行一条命令或者批处理执行脚本命令。进程是动态执行的程序。linux下的进程应该与windos下的进程是一致的,每一个进程都有一个唯一的标识号。而进程树清晰地展现了进程之间的关系。进程控制块pcb包含了处理器以及文件系统的大量信息,很多进程都是根据pcb来进行调度的。

linux中使用的虚拟存储器的作用是使用有限的内存发挥出巨大的作用,根据程序运行的局部原理来吧物理内存划分成有一定规则的小块,每次只装入需要运行的小块到内存中运行。这需要合理地调配内存与外存之间的关系,把内存中不需要的小块暂时存放至外存之中,而cpu只进行部分程序的访问。通过多次地交换内外存之间的信息来制造假象,这就是虚拟内存。系统采用段机制以及三级分页机制。

我们知道设计操作系统的目的是为了更大限度地利用硬件资源,是cpu尽可能地处于工作状态,这就需要一个良好的cpu调度了。处理机调度的级别从高至低依次分为作业调度、交换调度、进程调度和线程调度。作业调度是更高级别的,是针对作业的创建以及结束进行的;交换调度是指进行内外存之间进程的相互调换;进程调度是指进程的各个状态之间的转换;而最后的线程调度是指占用处理机与否之间的转换。

外设通常是指除了cpu与内存之外的硬件设备统称外设。通过接口进行连接和统一管理。设备管理的目的是管理协同好繁多的外部设备,是它们能够有序的工作。在linux中把设备当作文件进行统一管理,可以用文件操作方式来操作硬件设备。设备驱动程序的作用是直接操作硬件,并且为其提供接口。

linux的文件系统是其很重要的一个部分。文件系统进行数据以及设备的统一管理,并为用户命令和系统函数提供统一的服务接口。在进程控制块pcb中有文件的系统信息。把设备均抽象为文件进行统一的管理,并为设备管理提供统一的接口。

默认的文件系统是ext2。虚拟文件系统是位于linux文件系统层析结构的顶层,进行管理各种逻辑文件系统,或者说是同化各类逻辑文件系统,实现其跨平台的特性。

linux文件系统采用多重索引的方式,类似于数据结构中的链表方式。文件系统中的每一个文件,目录以及设备均同级,并且对应于一个i节点。内存中的i节点是磁盘中的i节点的映像,目的是减少设备存取的次数,提高文件的访问效率。

linux目录本身也是一种文件,称为目录文件。单级目录存在文件命名的冲突,而在多级目录中,使用目录树来记录目录结构。在文件共享中,一般使用文件的绝对路径来访问文件,如果要进行共享文件的话,必须先回溯,在向下寻找共享的文件,这样的方法效率比较低下。而通过改进的链接文件的方法进行文件共享,会使目录树形成网状结构。

linux系统的根目录是root目录,其下面有多个默认的子目录。bin是实用程序的子目录,存放常用的系统工具;boot子目录存放系统启动时的映像文件;dev子目录中为每个设备均分配了一个i节点;ect是基本数据子目录,存放系统的用户口令,网络配置等设置文件;home是用户数据子目录,默认情况下的用户登录后均到达这个子目录;lib目录存放库函数;root是超级管理员的用户目录等。

虚拟文件系统vfs进行统一管理各种类型的文件系统,无法存在于物理磁盘当中,只能存在与内存之中,负责管理并控制下层的逻辑文件系统,可以支持多种不同的逻辑文件系统,它为多种逻辑文件系统提供了统一的接口并进行管理。

总之,粗略地学习了linux操作系统知识后,对整个系统的架构和组成有了一定的了解,特别是linux特殊的文件系统和存储管理有了较深的印象和理解。今后有机会一定要更深地了解linux的内部构造。

操作系统概念学结

1.什么叫同步?   相互合作的两个进程之间需要在某个(些)确定点协调它们的工作,一个进程到达了该点后,除非另一进程已经完成了某些操作,否则就不得不停下来,等待这些操作的完成。这就是进程间的同步。

什么叫互斥?

两个进程由于不能同时使用同一临界资源,只能在一个进程使用完了,另一进程才能使用,这种现象称为进程间的互斥。

①同步的主要特征是:一个进程在某一点上等待另一进程提供信息,两进程之间存在直接制约关系,其表现形式为进程—进程。②互斥的主要特征是争用资源,两进程间存在间接制约关系,其表现形式是进程—资源—进程。

2.试给出p、v操作的定义。

p、v操作是定义在信号量s上的两个操作,其定义如下:

p(s):①s:=s-1;②若s≥0,则调用p(s)的进程继续运行;③若s<0,则调用p(s)的进程被阻塞,并把它插入到等待信号量s的阻塞队列中。

v(s):①s:=s+1;②若s>0,则调用v(s)的进程继续运行;③若s≤0,则从等待信号量s的阻塞队列中唤醒头一个进程,然后调用v(s)的进程继续运行。

如何利用p、v操作实现进程间的互斥?

p、v操作是解决同步与互斥问题的有力工具。为解决互斥问题,应采取如下步骤: 首先根据给定问题的描述,列出各进程要执行的程序。其次,设置信号量。互斥问题中,在临界区前面加p(s),临界区后面加v(s)。最后确定信号量的初值。在互斥问题中,信号量通常取为互斥资源的个数。

说明信号量的物理意义:

信号量s>0时,s的`数值表示某类可用资源的数目,执行p操作意味着申请分配一个单位的资源;当s≤0时,表示无资源可用,此时s的绝对值表示信号量s的阻塞队列中的进程数。执行v操作意味着释放一个单位的资源。

3.如何利用p、v操作实现进程间的同步?

p、v操作是解决同步与互斥问题的有力工具。为解决同步问题,应采取如下步骤:首先根据给定问题的描述,列出各进程要执行的程序。其次,设置信号量。同步问题中有几个同步点就设置几个信号量,等待的地方加p(s),发信号(解除等待)的

地方加v(s)。最后确定信号量的初值。在同步问题中,信号量的初值一般取0.在同步和互斥中,信号量初值的设置有何不同:在同步问题中,信号量的初值一般取为0,在互斥问题中,信号量通常取为互斥资源的个数。

4.高级通信原语有何优点?

能够实现在进程之间传递大量的信息。

在消息缓冲通信方式中,发送原语和接收原语的主要功能是什么?

发送原语的作用:将欲发送的消息从发送区复制到消息缓冲区,并把它挂起在接收进程的消息缓冲队列末尾。如果该接收进程因等待消息而处于阻塞状态,则将其唤醒。

接收原语的作用:把发送者发来的消息从消息缓冲区复制到接收区,然后将消息缓冲区从消息队列中消去,如果没有消息可以接收,则进入阻塞状态。

5.什么是信箱?

信箱用于存放信件,而信件是一个进程发送给另一进程的消息。

信箱的数据结构:信箱头和信箱体。信箱头是信箱的描述部分,信箱体由若干格子组成,每个格子可存放一个信件。

信箱头包括的信息:①信箱名②信箱大小③已存信件数④空的格子数。

如何用信箱实现两个进程之间的通信?

进程a想向进程b发送消息前,先把消息组成一封信件,然后调用send原语向进程b发送信件,并将信件投入进程b的信箱中。进程b为得到进程a的消息,只要调用receive原语就可以从信箱中索取来自进程a的信件。这就完成了一次进程a到进程b的通信过程。

6.在网络操作系统中,为什么要采用消息传递的通信机制?

基于共享变量的通信方式适用于网络中各节点内部诸进程之间的通信,而基于消息传递的通信方式适用于网络中各节点之间的进程通信。

在消息传递的通信机制中有哪些通信方式?①通信原语 ②远程过程调用 ③组通信。

7.什么是同步原语?

当一个进程调用一个send原语时,在消息开始发送后,发送进程便处于阻塞状态,直至消息完全发送完毕,send原语的后继语句才能继续执行。当一个进程调用一个receive原语时,并不立即返回控制,而是等到把消息实际接收下来,并把它放入指定的接收区,才返回控制,继续执行该原语的后继指令。在这段时间它一直处于阻塞状态。上述的send和receive被称为同步通信原语或阻塞通信原语。

什么是异步原语?发送进程在调用send原语后,并不进入阻塞状态,它不等消息发送完就继续执行其后继语句。

在使用异步通信原语时,发送者在消息发送完成前为什么不能使用缓冲区?

因为倘若发送进程在消息发送完成之前,即在消息发送期间使用或修改原来的缓冲区,将会造成错误。

如何解决?

有两种办法(应采用异步原语):①采用带拷贝的非阻塞原语,即让内核把消息拷贝到内核缓冲区,允许调用进程继续运行。②带中断的非阻塞发送,即当消息发送完成后,中断发送进程,通知发送进程此时缓冲区可用。

8.在进程间通信如何保证消息不会丢失?

为了保证消息被对方收到,可采用可靠原语。具体作法是:客户向服务器方发一请求后,服务器对这一请求,由其内核向客户内核返回一个确认ack,当客户内核收到这一消息后,就唤醒客户进程。在客户与服务器之间的请求/应答共需四个消息:①从客户向服务器的请求②从服务器内核向客户内核返回一个确认③从服务器到客户的应答④从客户的内核向服务器内核返回一个确认。

9.远程过程调用:在网络或分布式系统中,设有任意两个节点a、b,节点a上的进程调用节点b上的一个进程时,节点a上的进程被挂起,在节点b上执行被调用的过程,消息以参数的形式从调用进程传送到被调用进程,并将被调用过程执行的结果返回给调用进程。这种通信方式称为远程过程调用。

其基本原理是什么?

允许某一节点上的程序调用其他节点上的过程或函数。例如节点机a上的进程调用节点机b上的过程,节点机a的调用进程被挂起,在节点机b上执行被调用过程。消息以参数的形式从调用过程传到被调用过程,被调用过程执行的结果再返回给调用过程。对程序员来说,他看不到消息传递过程和i/o处理过程。

10.rpc的透明性指的是什么?

指的是要使得远程过程调用尽可能像本地调用一样。调用过程应该不知道被调用过程是在另外一台计算机上执行,反过来也是如此,被调用过程也不应该知道是由哪个机器上的进程调用的。如何保证这一透明性:远程过程调用为实现其透明性,在客户机上设置一个客户代理,同样在服务器机上设置一个服务器代理。

11.简述远程过程调用的步骤。

①客户过程以通常方式调用客户代理。②客户代理构造一个消息并陷入内核。③本地内核发送消息给远程内核。④远程内核把消息送给服务器代理。⑤服务器代理从消息包中取出参数并调用服务器。⑥服务器完成相应的服务,将结果送给服务代理。⑦服务代理将结果打包形成一个消息并陷入内核。⑧远程内核发送消息给客户机内核。⑨客户机内核把消息传送给客户代理。⑩客户代理取出结果,返回给客户的调用程序。并以实例说明。

12.试说明远程过程调用的优缺点。

优点:格式化好、使用方便、透明性好;

缺点:缺乏灵活性。

在具体实现上尚有哪些难点需要解决?

①远程过程调用的参数在系统内不同机型之间的通用能力有所不足。②缺乏在一次调用过程中多次接收返回结果的能力。③远程过程调用缺乏传送大量数据的能力。

13.什么叫组通信?

在网络系统中,一个相互作用的进程称为组。一个发送者在一次操作中将一个消息发送给多个接收者的通信,称为组通信。

它应用于何种场合?在网络系统中可以采用组通信方式。

组通信的主要特征是?当一个消息发送给这个组时,该组的所有成员都可以接收,组通信具有“一对多”的形式,即一个发送者,多个接收者。

linux lmbench的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux lmbench,Linux下的性能测试工具——LMBench介绍,严重关注:在嵌入试LINUX系统该使用哪个线程库,如何在LINUX下查看内存大小(C语言),操作系统概念学结的信息别忘了在本站进行查找喔。


数据运维技术 » Linux下的性能测试工具——LMBench介绍 (linux lmbench)