操作系统-课堂笔记-内存管理续(南航)

本文介绍了Linux0.11内核启动时的页表初始化过程,阐述了页表项的设置方法。此外,文章讨论了虚拟内存的概念,并提及分段管理在内存管理中的作用,包括方便编程、信息共享、信息保护、动态增长和动态链接等优点。最后,文章总结了内存管理的不同方式,如固定分区、可变分区、分页和请求分页。
摘要由CSDN通过智能技术生成

内存管理续

  1. Linux0.11版内核中页表初始化
  2. 虚拟内存
  3. 分段机制

1.Linux0.11版内核中启动时页表初始化过程

声明

Linux0.11版内核只能管理16M内存,一个页4KB,那么一个页表可管理4MB内存,所以只需要4个页表即可管理所有内存,然后加一个页目录(一级页表、外表)。

所以设置页表的时候需要设置:一个页目录+4个页表

首先看下有关数据的声明:

/*
 *  linux/boot/head.s
 *
 *  (C) 1991  Linus Torvalds
 */

/*
 *  head.s contains the 32-bit startup code.
 *
 * NOTE!!! Startup happens at absolute address 0x00000000, which is also where
 * the page directory will exist. The startup code will be overwritten by
 * the page directory.
 */
.text
.globl idt,gdt,pg_dir,tmp_floppy_area
pg_dir:
.globl startup_32

这里有价值的信息是:pg_dir,即页目录,页目录所在地址是0x00000000。

然后是页表地址:

/*
 * I put the kernel page tables right after the page directory,
 * using 4 of them to span 16 Mb of physical memory. People with
 * more than 16MB will have to expand this.
 */
.org 0x1000
pg0:

.org 0x2000
pg1:

.org 0x3000
pg2:

.org 0x4000
pg3:

.org 0x5000

一个页框是4K,页目录放在0x0000-0x0FFF, pg0放在0x1000-0x1FFF同理每个页表均占4KB大小(即0x1000B)。

上述程序声明了4个页表所在地址。

设置页表项

看程序之前先看下页表项结构:
在这里插入图片描述
低三位全为1,表示:用户页表、可读写、当前页表存在。

/*
 * Setup_paging
 *
 * This routine s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值