13.1 文件I/O的内核缓冲:缓冲区高速缓存

《UNIX环境高级编程》笔记:第3章 文件I/O “本章说明了UNIX系统提供的基本I/O函数。因为read和write都在内核执行,所以称这些函数为不带缓冲的I/O函数。在只使用read和write情况下,我们观察了不同的I/O长度对读文件所需时间的影响。我们也观察了许多将已写入的数据冲洗到磁盘上的方法,以及它们对应用程序性能的影响。 在说明多个进程对同一文件进行追加写操作以及多个进程创建同一文件时,本章介绍了原子操作。也介绍了内核用来共享打开文件信息的数据结构。” 阅读详情

《Linux/UNIX系统编程手册(全2册)》第13章文件I/O缓冲,本章描述了这两种类型的缓冲,并讨论了其对应用程序性能的影响。本章还讨论了可以屏蔽或影响缓冲的各种技术,以及直接I/O技术--在某些需要绕过内核缓冲的场景中非常有用。本节为大家介绍文件I/O的内核缓冲:缓冲区高速缓存。

第13章 文件I/O缓冲

出于速度和效率考虑,系统I/O调用(即内核)和标准C语言库I/O函数(即stdio函数)在操作磁盘文件时会对数据进行缓冲。本章描述了这两种类型的缓冲,并讨论了其对应用程序性能的影响。本章还讨论了可以屏蔽或影响缓冲的各种技术,以及直接I/O技术--在某些需要绕过内核缓冲的场景中非常有用。

13.1  文件I/O的内核缓冲:缓冲区高速缓存(1)

read()和write()系统调用在操作磁盘文件时不会直接发起磁盘访问,而是仅仅在用户空间缓冲区与内核缓冲区高速缓存(kernel buffer cache)之间复制数据。例如,如下调用将3个字节的数据从用户空间内存传递到内核空间的缓冲区中:
 

write()随即返回。在后续某个时刻,内核会将其缓冲区中的数据写入(刷新至)磁盘。(因此,可以说系统调用与磁盘操作并不同步。)如果在此期间,另一进程试图读取该文件的这几个字节,那么内核将自动从缓冲区高速缓存中提供这些数据,而不是从文件中(读取过期的内容)。

与此同理,对输入而言,内核从磁盘中读取数据并存储到内核缓冲区中。read()调用将从该缓冲区中读取数据,直至把缓冲区中的数据取完,这时,内核会将文件的下一段内容读入缓冲区高速缓存。(这里的描述有所简化。对于序列化的文件访问,内核通常会尝试执行预读,以确保在需要之前就将文件的下一数据块读入缓冲区高速缓存中。更多关于预读的内容请参考13.5节。)

采用这一设计,意在使read()和write()调用的操作更为快速,因为它们不需要等待(缓慢的)磁盘操作。同时,这一设计也极为高效,因为这减少了内核必须执行的磁盘传输次数。

Linux内核对缓冲区高速缓存的大小没有固定上限。内核会分配尽可能多的缓冲区高速缓存页,而仅受限于两个因素:可用的物理内存总量,以及出于其他目的对物理内存的需求(例如,需要将正在运行进程的文本和数据页保留在物理内存中)。若可用内存不足,则内核会将一些修改过的缓冲区高速缓存页内容刷新到磁盘,并释放其供系统重用。

更确切地说,从内核2.4开始,Linux 不再维护一个单独的缓冲区高速缓存。相反,会将文件I/O缓冲区置于页面高速缓存中,其中还含有诸如内存映射文件的页面。然而,正文的讨论采用了"缓冲区高速缓存(buffer cache)"这一术语,因为这是UNIX 实现中历史悠久的通称。

缓冲区大小对I/O系统调用性能的影响

无论是让磁盘写1000次,每次写入一个字节,还是一次写入1000个字节,内核访问磁盘的字节数都是相同的。然而,我们更属意于后者,因为它只需要一次系统调用,而前者则需要调用1000次。尽管比磁盘操作要快许多,但系统调用所耗费的时间总量也相当可观:内核必须捕获调用,检查系统调用参数的有效性,在用户空间和内核空间之间传输数据(详情参见3.1节)。

为BUF_SIZE(BUF_SIZE 指定了每次调用read()和write() 时所传输的字节数)设定不同的大小来运行程序清单4-1,可以观察到不同大小的缓冲区对执行文件I/O 所产生的影响。表13-1所示为在Linux ext2文件系统上复制大小为100MB的文件,该程序在使用不同BUF_SIZE 值时所需要的时间。有关本表中的信息,需要注意以下几点。

总用时和总CPU时间这两列含义很明显。而用户CPU和系统CPU两列是将总CPU用时分解为在用户模式下执行代码所需的时间和执行内核代码所需的时间(比如,系统调用)。

表中测试结果得自于2.6.30普通(vanilla)内核下,块大小为4096字节的ext2文件系统。

所谓普通内核(vanilla kernel),意指未打补丁的主线(mainline)内核。与之形成鲜明对比的是大多数发行商所提供的内核,常包含各种补丁来修复错误和添加新功能。

每行显示的结果为在给定缓冲区大小下运行20次的均值。在这些测试以及本章后续提及的其他测试里,在程序每次的执行间隔中,会卸载并再次重新装配文件系统,以确保文件系统的缓冲区高速缓存为空。计时则由shell命令time完成。

表13-1:复制100MB大小的文件所需时间
 

BUF_SIZE

时间(秒)

总用时

总CPU用时

用户CPU用时

系统CPU用时

1

107.43

107.32

8.20

99.12

2

54.16

53.89

4.13

49.76

4

31.72

30.96

2.30

28.66

8

15.59

14.34

1.08

13.26

16

7.50

7.14

0.51

6.63

32

3.76

3.68

0.26

3.41

64

2.19

2.04

0.13

1.91

续表
 

BUF_SIZE

时间(秒)

总用时

总CPU用时

用户CPU用时

系统CPU用时

128

2.16

1.59

0.11

1.48

256

2.06

1.75

0.10

1.65

512

2.06

1.03

0.05

0.98

1024

2.05

0.65

0.02

0.63

4096

2.05

0.38

0.01

0.38

16384

2.05

0.34

0.00

0.33

65536

2.06

0.32

0.00

0.32

因为采用不同的缓冲区大小时,数据的传输总量(因此招致磁盘操作的数量)是相同的,表13-1所示为发起read()和write()调用的开销。缓冲区大小为1字节时,需要调用read()和write()1亿次,缓冲区大小为4096个字节时,需要调用read()和write() 24000次左右,几乎达到最优性能。设置再超过这个值,对性能的提升就不显著了,这是因为与在用户空间和内核空间之间复制数据以及执行实际磁盘I/O 所花费的时间相比,read()和write() 系统调用的成本就显得微不足道了。

从表 13-1 的最后一行中可以粗略估算出在用户空间与内核空间之间传输数据以及执行文件I/O 的总耗时。因为此时系统调用的次数相对较少,所以它们所花费的时间相对于总耗时和CPU 时间可以忽略不计。据此可认为,系统CPU 时间主要是测量用户空间与内核空间之间数据传输所消耗的时间。而总耗时则是对与磁盘传输数据所需时间的估算。(正如下面将提到的,时间主要花在了对磁盘的读操作上。)

总之,如果与文件发生大量的数据传输,通过采用大块空间缓冲数据,以及执行更少的系统调用,可以极大地提高I / O 性能。

13.1  文件I/O的内核缓冲:缓冲区高速缓存(2)

表13-1度量了一系列因素:执行read()和write()系统调用所需的时间、内核空间和用户空间缓冲区之间传输数据所需的时间、内核缓冲区与磁盘之间传输数据所需的时间。再进一步考虑一下最后一个要素,显然,将输入文件的内容传输到缓冲区高速缓存是不可避免的。然而,当数据从用户空间传输到内核空间后,write()调用立即返回。由于测试系统上的RAM大小(4 GB) 远超欲复制文件的大小(100MB),据此推断,当程序完成时,输出文件实际尚未写入磁盘。因此,再进一步做个实验,运行一个程序,使用不同大小的缓冲区,以write() 随意向文件中写入一些数据。运行结果如表13-2所示。

同样,表13-2中数据是来自于内核2.6.30,以及块大小为4096字节的ext2文件系统,并且每行显示为运行了20次后的均值。本节并未列出测试程序(filebuff/ write_bytes.c)的代码清单,但可从随本书一起发行的源码中获取。

表13-2:写一个100MB大小的文件所需要的时间
 

BUF_SIZE

时间(秒)

总用时

总CPU用时

用户CPU用时

系统CPU用时

1

72.13

72.11

5.00

67.11

2

36.19

36.17

2.47

33.70

续表
 

BUF_SIZE

时间(秒)

总用时

总CPU用时

用户CPU用时

系统CPU用时

4

20.01

19.99

1.26

18.73

8

9.35

9.32

0.62

8.70

16

4.70

4.68

0.31

4.37

32

2.39

2.39

0.16

2.23

64

1.24

1.24

0.07

1.16

128

0.67

0.67

0.04

0.63

256

0.38

0.38

0.02

0.36

512

0.24

0.24

0.01

0.23

1024

0.17

0.17

0.01

0.16

4096

0.11

0.11

0.00

0.11

16384

0.10

0.10

0.00

0.10

65536

0.09

0.09

0.00

0.09

表13-2显示为使用不同大小的缓冲区调用write()从用户空间向内核缓冲区高速缓存传输数据所花费的成本。缓冲区越大,与表13-1中数据的差异就越明显。例如,对于一个65536字节大小的缓冲区,在表13-1中总耗时为2.06秒,而表13-2中仅为0.09秒。这是因为在后者的情况下并未执行实际的磁盘I/O操作。换言之,表13-1中采用大缓冲区时的耗时绝大部分花在了对磁盘的读取上。

正如13.3节所述,若强制在数据传输到磁盘前阻塞输出操作,则调用write()所需的时间会显著上升。

最后,值得注意的是,表13-2(以及表13-3)中信息仅仅代表了对文件系统评价基准的形式之一,还不完善。此外,文件系统不同,结果可能也会有所不同。对文件系统的度量还有各种其他标准,比如多用户、高负载下的性能表现,创建和删除文件的速度,在一个大型目录下搜索一个文件所需的时间,存储小文件所需的空间,或者在遭遇系统崩溃时对文件完整性的维护。只要I/O或是其他文件系统操作的性能至关重要,那么在目标平台上针对特定应用的测试基准就不可替代。


操作系统核心原理深度解析:进程、内存、文件与I/O管理 操作系统是计算机系统的核心软件,负责管理硬件资源并为应用程序提供统一的接口。其核心原理在于通过抽象和管理,将复杂的硬件细节隐藏起来。关键技术价值体现在进程管理、内存管理、文件系统和I/O设备管理四大模块,它们共同构成了现代计算环境的基石。进程管理实现了程序的并发执行与资源调度,内存管理通过虚拟内存技术提供了安全隔离与高效利用,文件系统实现了数据的持久化存储与组织,而I/O管理则统一了各类设备的访问方式。这些技术广泛应用于服务器、个人电脑、嵌入式系统乃至云计算平台。本文聚焦于操作系统的核心抽象,如进程控制块( 阅读详情

相关推荐

H5获取手机相机或相册图片两种方式-Android通过webview传递多张照片给H5

H5调用公共获取图片文件方法,在android手机端,H5主要依赖Webview,这边在webview声明并重写该方法onShowFileChooser使用工具类打开相机或相册,可以两种方式安卓原生方式或者利用第三方组件库方式选中图片,返回uri列表给H5H5收到uri照片列表,并且使用前端方式展示创造价值,乐哉分享!

m0_74823947的博客 3095

十分钟带你了解!用户进程缓冲区和内核缓冲区

用户进程缓冲区和内核缓冲区 1. 用户进程和系统进程 用户进程:运行在操作系统上的进程,都运行在用户空间 系统空间:操作系统运行的空间 2. 内核态和用户态(kernel mode和user mode) (1)内核态可以访问系统资源,比如: ps:上面所说的这些系统资源,在用户进程中是无法被直接访问的,只能通过操作系统来访问,所以也把操作系统提供的这些功能成为:“系统调用”。 比如下图,展示一个用户通过shell控制计算机所经过的数据流向:文件读写和终端控制,都是通过内核进行的。 提供这些限制的基础

fhp123的博客 5206

Chroma向量数据库实战:用Python快速搭建本地知识库(附中文诗词检索案例)

本文详细介绍了如何使用Chroma向量数据库和Python快速搭建本地知识库,并附有中文诗词检索的实战案例。通过解析核心概念、数据准备、向量化及智能检索实现,展示了Chroma在处理中文语义搜索时的轻量级与易用性,为开发者构建AI应用原型提供了实用指南。

weixin_29221753的博客 478

Linux_内核缓冲区

Linux下的内核缓冲区存在于系统中,该缓冲区和用户层面的缓冲区不过同一个概念,用户层面的缓冲区称之为用户缓冲区,而系统中也有自己的缓冲区即内核缓冲区,两者虽然同为缓冲区却差之毫厘谬以千里,了解内核缓冲区前先谈谈用户缓冲区。

安权_code的博客 2820

芯片低功耗设计实战:CPF与UPF流程选择指南(附工具对比)

本文深入探讨了芯片低功耗设计实战中CPF与UPF流程的选择策略。文章从两者本质差异与演进脉络出发,结合Cadence与Synopsys工具链的深度支持实况,为工程师提供了基于项目场景的决策框架。重点分析了在混合工具链环境下如何实施流程与验证,并强调了利用Spyglass等工具确保功耗意图无损传递的关键技巧,旨在帮助团队做出明智的流程抉择,提升设计效率与可靠性。

weixin_29197051的博客 403

ENVI5.6+SARscape实战:基于哨兵一号的PS与SBAS时序InSAR地表形变监测全流程解析

本文详细解析了使用ENVI5.6和SARscape软件基于哨兵一号数据进行PS与SBAS时序InSAR地表形变监测的全流程。从数据获取、预处理到PS-InSAR和SBAS-InSAR处理,提供了实用技巧和优化建议,帮助用户高效完成地表形变监测任务。

weixin_29245767的博客 1151

内核缓冲技术

1、缓冲区的大小对性能的影响 缓冲区的大小对性能有很大的影响,对文件操作而言,来看一个2500字节的文件的copy操作,如果缓冲区大小=100字节,那么需要25次read和25次write,如果缓冲区大小=1000字节,那么需要3次read和3次write,把缓冲区从100字节增加到1000字节会使系统调用次数从50次减少到6次。read和write这些系统调用是需要时间的,程序中频繁的系统调用会降低程序的运行效率。 2、为什么系统调用需要很多时间 用户进程位于用户空间,内核位于系统空间,磁盘只能被内

Revendell的博客 698

从零到一:手把手教你用Python搭建医学影像识别CNN模型(附完整代码)

本文详细介绍了如何使用Python和TensorFlow/Keras从零开始构建一个医学影像识别的CNN模型,涵盖数据预处理、模型架构设计、训练调优及部署全流程。通过实战案例和完整代码,帮助开发者快速掌握深度学习在医学影像识别中的应用,特别适合医疗AI领域的初学者和研究者。

spark7igniter的博客 200

虎牙一面:请详细介绍一下内核缓冲区

写这篇文章的起因主要是最近复习计网滑动窗口中看到的一句话 “窗口的本质是内核缓冲区”,之前一直没有仔细去理解,以为就是缓存,很多博客写得也是缓存…,But 缓冲和缓存在概念上其实是有区别的,本文就来详细介绍一下内核缓冲区先来回顾下内核态和用户态:众所周知,CPU 上会运行两种程序,一种是操作系统的内核程序(也称为系统程序),一种是应用程序。前者完成系统任务,后者实现应用任务。两者之间有控制和被控制的关系,前者有权管理和分配资源,而后者只能向系统申请使用资源。显然,我们应该把在 CPU 上运行的这两类程序加以

m110572的博客 3407

nCode:GlyphWorks案例教程一

nCode GlyphWorks案例一Comparing Frequency Content of Two Different Tests案例文件目标配置选择数据 Comparing Frequency Content of Two Different Tests 在本案例中,我们将比较来自两个不同测试的六个加速计通道的频率内容。将三轴加速度计放置在车辆的左前角和右前角,然后分别在两个不同的试验路面上行驶12分钟以上。 案例文件 此案例的文件(采用nCode DAC格式)位于nCode安装目录下的\demo

追月行的博客 1万+

hpm6750evk2开发板(一)菜鸟入门

hpm6750与我们平时常用的stm单片机在开发环境和开发方法上有很大的区别,所以上手还是需要花一点时间的,拿到板子先不要急着上电调试,我们先找资料学习一下了,免得多走冤枉路,以下是我整理的一些学习资源,包括开发板使用手册、芯片SDK、开发工具、视频资料等,建议先把使用手册和学习视频先看了,再取搭建环境测试。最近刚入手一块hpm6750evk2开发板,花了几天时间学习,算是菜鸟入门了,今天分享一下学习过程。看完资料后,把开发工具安装上,下一篇文章我们分享一下调试工程的过程和遇到的问题。

Silas1750的博客 3083

linux的每次IO大小控制,linux文件io缓冲

linux文件io缓冲出于速度和效率考虑,系统io调用(即内核)和标准 C语言库的io函数(即 stdin 函数)在操作磁盘文件时会对数据进行缓冲。read(),write()系统调用在操作磁盘文件时不会直接发起磁盘访问,而是仅仅在用户空间缓冲区与内核缓冲区高速缓存( kemel buffer cache )之间复制数据。例如,如下调用将 3 个字节的数据从用户空间内存传递到内核空间的缓冲区中wr...

weixin_34920313的博客 1106

内容审核与文本安全技术综述:检测、过滤与对齐

检测质量高度依赖数据。毒性/仇恨/冒犯语言检测领域形成了一批经典数据集,但它们的标签体系差异很大:例如 OLID(OffensEval)强调“是否冒犯—冒犯类型—目标对象”三层结构;HateXplain 在“hate/offensive/normal”三分类之外,还提供目标群体与人类标注的 rationale span;RealToxicityPrompts 则不做离散标签,而是用毒性分数来研究“模型续写时的毒性退化”。ACL 汇编。

nmdbbzcl的博客 1370

第13章 文件I/O缓冲

输入输出数据的缓冲由内核和stdio库完成。有时可能希望组织缓冲,但这需要了解其对应用程序性能的隐形。可以使用各种系统调用可库函数来控制内核和stdio缓冲,并执行一次性的缓冲区刷新。进程可使用posix_fadvise()函数,可就进程对特定文件可能采取的数据访问模式向内核提出建议。内核可籍此来优化对缓冲区高速缓存的应用,进而提高I/性能。在Linux环境下,open()所特有的O_DIRECT标识允许特定应用跳过缓冲区告诉缓存。

u010783439的博客 437

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinuxUNIX系统编程手册——(十三)文件IO缓冲

write()随即返回。在后续某个时刻,内核会将其缓冲区中的数据写入(刷新至)磁盘。(因此,可以说系统调用与磁盘操作并不同步。)如果在此期间,另一进程试图读取该文件的这几个字节,那么内核将自动从缓冲区高速缓存中提供这些数据,而不是从文件中(读取过期的内容)。与此同理,对输入而言,内核从磁盘中读取数据并存储到内核缓冲区中。read()调用将从该缓冲区中读取数据,直至把缓冲区中的数据取完,这时,内核会将文件的下一段内容读入缓冲区高速缓存。(这里的描述有所简化。

hello_world0_0的博客 1019

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

13.6 绕过缓冲区高速缓存:直接I/O

13.6  绕过缓冲区高速缓存:直接I/O 始于内核2.4,Linux允许应用程序在执行磁盘I/O时绕过缓冲区高速缓存,从用户空间直接将数据传递到文件或磁盘设备。有时也称此为直接I/O(direct I/O)或者裸I/O(raw I/O)。 此处的描述细节为Linux所特有,SUSv3并未对其进行规范。尽管如此,大多数UNIX实现均对设备和文件提供了某种形式的直接I/O访问。 有

xiaofei0859的专栏 1850

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

操作系统概念(十一)——I/O系统

写在前面:这一章似乎并不是很重要。当然,坐等打脸 OS内核通过设备驱动程序(模块)与I/O子系统链接,驱动为I/O子系统提供了统一设备访问接口,与系统调用API为应用程序与OS之间提供了统一的标准接口一样。 一、I/O硬件 1、端口:PC与设备的连接点 2、总线(PCI):一组线和一组严格定义的可以描述在线上传输信息的协议 3、扩展总线:连接串行、并行端口和相对较慢的设备 4、控制器:用于操作端口...

君陌的博客 3155

Linux_UNIX编程手册-读书笔记-第十三章(文件I/O缓冲)

13.1

weixin_43133795的博客 252

13.4 I/O缓冲小结

13.4  I/O缓冲小结 图13-1概括了stdio函数库和内核所采用的缓冲(针对输出文件),以及对各种缓冲类型的控制机制。从图中自上而下,首先是通过stdio库将用户数据传递到stdio缓冲区,该缓冲区位于用户态内存区。当缓冲区填满时,stdio库会调用write()系统调用,将数据传递到内核高速缓冲区(位于内核态内存区)。最终,内核发起磁盘操作,将数据传递到磁盘。

xiaofei0859的专栏 709

13.3 控制文件I/O的内核缓冲

13.3  控制文件I/O的内核缓冲(1) 强制刷新内核缓冲区到输出文件是可能的。这有时很有必要,例如,当应用程序(诸如数据库的日志进程)要确保在继续操作前将输出真正写入磁盘(或者至少写入磁盘的硬件高速缓存中)。 在描述用于控制内核缓冲的系统调用之前,有必要先熟悉一下SUSv3中的相关定义。 同步I/O数据完整性和同步I/O文件完整性 SUSv3将同步I/O完成 定义为:某

xiaofei0859的专栏 746

TLPI-Chapter 13文件I/O缓冲

函数:void *memalign(size_t alignment, size_t size); The obsolete function memalign() allocates size bytes and returns a pointer to the allocated memory. The memory address will be a multiple of alignment

尘世中迷途小书童 374

linux文件系统3:缓冲区高速缓存

linux文件系统3:缓冲区高速缓存 如前所述,所有的 Linux 文件系统使用共同的缓冲区高速缓存。所有块设备的读取和写入请求通过标准的内核例程调用,以 buffer_head 数据结构的形式提交给设备驱动程序(参见本书 12.5.3 小节)。buffer_head 中包含了唯一标...

weixin_34072458的博客 230

页高速缓存(二)

五. 把块放在页高速缓存中 在旧的Linux内核版本中,有两种不同的磁盘高速缓存,分别是页高速缓存和缓冲区高速缓存,前者用来存放访问磁盘文件内容时生成的磁盘数据页,后者把通过VFS访问的块的内容保留在内存中。从2.4.10版本开始,缓冲区高速缓存不存在了,把它们存放在叫做”缓冲区页”的专门页中,页缓冲区页保存在页高速缓冲中。缓冲区页在形式上就是与称做”缓冲区首部”的附加描述符相关的数据页,主要目

z41013774的专栏 1414

3.13 文件I/O_sync、fsync和fdatasync函数

<br />    当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲去尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被成为延迟写。<br />    为了保证磁盘上实际文件系统与缓冲区高速缓存中内容的一致性,UNIX系统提供了sync、fsync和fdatasync三个函数。#include <unistd.h>int fsync(int filede

cxf100900的专栏 1377

《Linux内核设计与实现》读书笔记

第一章 Linux内核简介 1.3操作系统和内核简介 内核有时候被称作是管理者或者是操作系统核心。通常一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。对于提供保护机制的现代系统来说,内核独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。相对的,应用程序在用户空间执行。它们只能看到允许它们使用的部分系统资源,并且只使

qq_40586164的博客 7153
上一篇: 每天进步一点点——Linux下的磁盘缓存
下一篇: 13.2 stdio库的缓冲
xiaofei0859
博客等级 码龄18年 454粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值