csapp读书笔记5(一周目终)


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、物理和虚拟寻址

计算机系统的主存被分成的地址,第一个是0,第二个就是1,第三个就是2了。。。,直接访问这种内存的形式就是物理寻址
但是现在都是用虚拟寻址了,CPU生成虚拟地址,进行地址翻译后转化成物理地址,然后进行寻址

二、地址空间

是地址的集合
{0,1,2,3…}这种连续的就是线性地址空间,假设使用的都是这种线性地址空间

{0,1,2,…,N-1},其中N = 2^n个地址,就是虚拟地址空间

虚拟地址位数虚拟地址数最大可能虚拟地址
n2^n2^n-1

三、缓存工具

把虚拟内存存放在磁盘上,VM系统构造分割内存空间并构造成虚拟页放置这些内存,虚拟页大小是2^p-1
虚拟页有三个子集
未分配:还没有分配的页
缓存的:已经缓存在物理内存中的已分配页
未缓存:未缓存在内存中的已分配页
Dram:虚拟内存系统的缓存 SRAM:CPU和主存之间的缓存
同任何缓存一样,虚拟内存必须有某种方法
虚拟页组成的集合就是页表,页表中被缓存的虚拟页存在dram上,已分配但是没有缓存的就存在虚拟内存(磁盘)中
(补充学习:大佬的博客
mmap:创建新的虚拟内存区域,并将这些对象映射到这个区域中

函数原型:
void* mmap(void* start,size_t length,int port,int flags,int fd,off_t offset)
返回值:返回指向映射区域的指针
要求是从start开始的一个区域,fd指向的对象,从fd指向的文件的偏移量offset处开始,到一个chunk映射到这个区域。
munmap(void* start,size_t length)删除虚拟区域

四、动态内存分配

malloc函数从堆中分配块

void* malloc(size_t size);
返回值:一个指针,指向大小为size的内存块

sbrk函数
void* sbrk(intptr_r incr);
通过内核的brk指针来扩展和收缩堆
成功返回brk的旧值,否则返回-1 ,若incr为0,返回当前brk指针的值

释放堆块

void free(void* ptr)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值