Linux环境编程Day03

 2024-03-03 20:39:49  阅读 0

显存管理总结:

1、mmap/底层是不维护任何东西,只返回一个映射后的显存首地址,所映射的显存坐落堆中

2、brk/sbrk底层维护一个表针,记录了所映射的显存结尾下一位,所映射的显存也是坐落堆中,底层调用了mmap/

3、/free底层维护一个单向数组和必要的维护信息,所映射的显存也是坐落堆中,底层调用了brk/sbrk

4、每个进程都有4G(32位系统)的虚拟显存空间,虚拟显存只是个数字,必须与数学显存构建映射关系能够使用

5、平时所说的显存的分配和释放有两层涵义:

a、权限的分配和释放

b、映射关系的完善和取消

6、重点不是sbrk/brk/mmap/函数的用法,而是理解Linux系统的显存管理机制

一、系统调用(API)

系统调用就是操作系统提供的一些功能给程序员使用,这种功能早已被封装成C函数的方式,但它们不是标准C的一部份

通常应用程序运行在用户态(使用的是0~3G的虚拟显存),系统调用时工作在内核态(使用的是3~4G的虚拟显存)

常用的标准库函数绝大部分时间运行在用户态,底层时常也会调用系统调用步入内核态

系统调用使用运行就是内核代码,内核代码属于内核的一部份,该代码的外部插口以函数方式定义在共享库中(linux-gate.sold-linux.so.2)

time./a.out

.012s执行总用时

.000s用户态执行时间

.000s内核态执行时间

二、一切皆文件

UNIX/Linux为操作便捷把所有的服务、设备等内容都具象成了文件的方式,并提供了一套简单而统一的插口,这部份插口称为系统文件IO

也就是说UNIX/Linux把任何对象都可以当作文件处理,以文件方式访问

文件分类:

普通文件-包括纯文本文件、二补码文件、各种压缩文件

目录文件d类似文件夹(必须有执行权限能够步入)

块设备文件b保存大块数据的设备,比如硬碟

字符设备文件c诸如按键、鼠标等等

链接文件l类似的快捷方法

管线文件p

文件s一般用于网路数据联接

三、文件相关的系统调用

#

#

#

(*,);

功能:打开文件

:文件的路径

flags:打开文件的形式

只读

只写

读写

追加,文件位置表针在末尾

文件不存在则创建

文件存在则创建失败

假如文件存在则清空

返回值:文件描述符,类似于标准库中的FILE*,代表了一个打开的文件,成功返回非正数,失败返回-1

(*,,);

功能:创建文件

:文件的路径

flags:打开文件的形式

只能写

mode:权限网段|||

拥有者读写执行权限

拥有者读权限

拥有者写权限

拥有者执行权限

同组读写执行权限

同组读权限

同组写权限

同组执行权限

其它读写执行权限

其它读权限

其它写权限

其它执行权限

(*,);

功能:创建文件

mode:同open的mode

返回值:文件描述符

练习1:

测试fopen的打开方法与open的对应关系./a.out

r+

||,0666

w+||,0666

||,0666

a+||,0666

#

(intfd,*buf,);

功能:把显存中的数据写入到文件中

fd:文件描述符,也就是open的返回值

buf:待写入的显存首地址

count:要写入的字节数

返回值:成功写入的字节数

(intfd,void*buf,);

功能:从文件中读取数据到显存中

fd:文件描述符

buf:数据储存的显存首地址

count:想要读取的字节数

返回值:实际读取到的字节数

(intfd);

功能:关掉文件

返回值:成功返回0,失败返回-1

练习2:分别用标准IO和系统IO写入一百万个整数到文件中,测试谁更快,为何?

直接使用标准IO比系统IO写入的速率更快,缘由是标准IO有缓冲区机制,在写入数据时并不是直接调用系统IO,而是先把缓冲区塞满,之后再调用系统IO把缓冲区中的数据一并写入到文件中,提升读写速率。

直接使用系统IO会频繁地切换用户态和内核态,愈发历时。

假如我们也给系统IO降低一个缓冲区机制时,它的速率都会比标准IO要快

标准IO>系统IO

系统IO+缓冲区>标准IO

四、随机读写:

每位打开的文件都有一个记录着读写位置的文件位置表针,对文件的读写操作都从该表针指向的位置进行,位置表针会随着读写操作而降低联通

一个打开的文件,位置表针指向开头,假如使用,则在文件末尾

假如想要随便读取文件中的任意位置的数据,可以通过调整位置表针来实现

//标准IO

(FILE*,,);

返回值:成功0失败-1

//系统IO

(intfd,,);

fd:文件描述符

:偏斜量

:基础位置

文件开头

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码