UC基础-002(虚拟地址、文件系统)

(一)虚拟地址

(1)虚拟地址空间

虚拟地址:当创建一个变量等情况,所使用的地址(&)都是虚拟地址,内核会将此虚拟地址和真正的物理地址放入一个一对一

目录

(一)虚拟地址

(二)文件系统


的内存映射表中。

(&a→a的虚拟地址→内存映射表→物理地址)

虚拟地址空间:虚拟地址所存在的范围,表示程序的寻址能力。

32位系统:虚拟地址范围:0x00000000到0xFFFFFFFF(4G的范围)

其中0~3G-1的范围归用户使用,3G~4G-1的范围归内核使用

64位系统:

用户地址范围:0x0000 0000 0000 0000~0x0000 FFFF FFFF FFFF

内核地址范围:0xFFFF 0000 0000 0000~0xFFFF FFFF FFFF FFFF

(2)虚拟地址空间布局

不同性质的变量,操作系统给划分虚拟地址的时候会给划分到不同的区域

地址由高到低(代码区地址最小,参数和环境区地址最大)

字面值常量是字符串的地址,可执行指令可以是函数等。

(3)内存映射的建立与解除

没有与物理地址建立映射关系的虚拟地址无法直接使用,所以可以通过mmap函数去手动建立虚拟地址和物理地址的映射关系。

mmap函数:先创建一个物理地址,然后给出该物理地址和虚拟地址的映射关系,返回值为映射区虚拟内存的首地址。

Void* mmap(void* start,size_t_length,int port,int flags,int fd,off_t offset);

(该函数在:#include<sys/mman.h>的头文件里面)

参数:start:映射区虚拟空间的首地址,一般情况写NULL。

  Length:映射区的字节数,自动按页分配(一页是4096个字节)。

    Prot:映射区操作权限,取值为:

  PROT_READ -映射区可读

  PROT_WRITE -映射区可写

Flags:映射标志,取值为:

MAP_ANONYMOUS -匿名映射,将虚拟地址内存映射到物理内存而   非文件,忽略fd和offset参数。

MAP_PRIVATE -对映射区的写操作只反映到缓冲区中并不会真正写   入文件

MAP_SHARED -对映射区的写操作只反映到文件中

MAP_FIXED -若在start上无法创建映射,则失败

注:(MAP_PRIVATE和MAP_SHARED必须二选一,且要加MAP_ANONYMOUS)

Fd:文件描述符。

Offset:文件偏移量,自动按页(4k)对齐。

munmap函数:解除虚拟内存到物理内存的磁盘映射关系。(成功返回0,失败返回-1)

Int munmap(void* start,size_t length);

参数:

Start:映射区虚拟空间的首地址。

Length:映射区字节数,自动按页取整。

(二)文件系统

(1)文件的存储

文件存储在磁盘之中,通过i节点+数据块的方式进行存储。

数据块:用于存储文件的内容数据。

i节点:文件的基本信息+数据块的索引。

i节点(索引节点index node,inode)包括:

①文件的类型和权限

②文件的硬链接数

③文件的用户和组

④文件的字节大型

⑤文件的最后访问时间、最后修改时间和最后状态改变时间

⑥文件数据块索引表

(2)文件的打开与关闭

①文件的打开

int open(char const* pathname,int flags,mode_t mode);

(注:使用时需添加头文件:#include<fcntl.h>)

功能:打开已有的文件获创建新文件

参数:pathname -文件路径

   flags -文件的状态标志,取值为:

O_RDONLY -只读

O_WRONLY -只写

O_RDWR -读写

O_APPEND -追加

O_CREAT -不存在即创建,已存在即打开

O_EXCL -不存在即创建,已存在即报错

O_TRUNC -不存在即创建,已存在即清空

  mode -权限模式,取值为:8进制的数,0abc(其中a代我,b代表同组人员,c代表用户,读取值为4;写取值为2;运行取值为1)即如果想让所有人都可以读写运行则mode值为:0777。

返回值:返回的是一个文件的描述符,且是当前未被使用的。

eg:mode为0764代表自己可以读写运行,同组人员只能读写,用户只能读

注:O_CREAT与O_EXCL(O_TRUNC)一定是配合使用,且前三个参数必须选一个

eg:open(./a.txt, O_RDWR | O);

②文件的关闭

int close(int fd);

(注:使用时需添加头文件:#include<unistd.h>)

功能:关闭文件

参数:fd -打开文件时所生成的文件描述符

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值