内存分页原理幼儿园版
你是个打工仔,职位是内存管理员,工作是每天帮职位叫程序的家伙分配网格,存数据到网格,或从网格取数据。每个网格可以存1byte数据,我们简称为b。这里有十亿个b,按顺序从0到九亿九千九百九十九万九千九百九十九编好了号。
为了零活分配又避免浪费(内存碎片)把这些b100个一组分开,每一组称为一页。原来的编号分成了页编号和偏移编号,比如584b变成了5页84b。
刚说着来了一个名字叫快播的程序要申请一百万零一b的网格,你马上开始给它分配网格,因为网格是按页分配,首先要记算需要多少页。一百万零一b除以100等于一万页余一b,因为网格按页分配,就算只余一b也要多分配一页,所以是一万零一页。
先从0页开始找,9到157页空着,于是你在地址映射表上记上:0对9、1对10……148对157。第二段空页是685到1085,你记下149对685、150对686……549对1085。这时,名字叫360的程序下班了,他占用的网格空了出来。其中有一段在1085页前面:153到392页空了出来,你马上把它们利用了起来。记下550对153、551对154……788对392。然后接着找空页……
终于分配好了,你把记好的地址映射表打上快播的标签然后放好。这时一个叫qq的程序要把9b到571b的数据取出来。首先你把他给你的地址转化为页地址加偏移地址的形式:0页9b到99b,1页全部,2页全部,3页全部,4页全部,5页0b到71b。
你拿来带着qq标签的地址映射表查了起来。0对173,于是你把173页9b到99b的数据取了出来。1对174,于是你把174页全部数据取了出来。2对378,于是你把378页全部数据取了出来。3对415,于是你把415页全部数据取了出来。4对523,于是你把523页全部数据取了出来。5对1207,于是你把1207页0b到71b的数据取了出来。