Chinaunix首页 | 论坛 | 博客
  • 博客访问: 156597
  • 博文数量: 49
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 445
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-16 23:55
文章分类
文章存档

2009年(49)

我的朋友

分类: LINUX

2009-05-25 11:52:06

CHAPTER 2 MEMORY ADDRESSING

 

logical address à linear address à physical address (MMU 参与工作)

 

  保护模式与实模式的区别。(保护模式的优点有哪些?)x86启动的时候是从实模式开始的。

SEGMENTATION

  段选择符和段寄存器

  段选择符(16bit)和offset 32bit,用来得到linear address

 

  段寄存器可以快速的找回段选择符   cs ,,,ss,,,,ds

  Cs里面,有2bit域,表示CPL Current privilege level,0 表示kernel mode3表示 user mode

 

  段描述符segment descriptors  描述符都是8BYTEs

  GDT,LDT包含段描述符。

  段描述符有 1code segment descriptor 2.data segment descriptor 3.task state segment descriptor.4 local descriptor table descriptor(LDTD)

  TSSD 用来refers to TSS tr register存放TSSD selectorGDT里面存放TSSD

  80x86里面有特殊的,程序员不能修改的寄存器,用来保存段描述符,这样可以加快访问,而不用计算得到段。

  GDT存在gdtr register, LDT存在ldtr register

  Linux里面,在用户态里数据段和代码段用一个段。在内核态里面数据段和代码段用一个段。

  Linux里面USERMODE不用LDT

 

PAGING

  Linear address – 1directory 2table 3offset

  这样分层可以减小pagetable的使用量。

  Cr3用来存page directory

  Page directory page table 有一样的数据结构。里面有一些控制字控制是否可写入等信息。

  扩展分页:4MB,没有TABLE

  64BIT ARCHITEC 中,LINEAR ADDRESS分了更多的层来表示。

  高速缓冲器。

paging in linux

  Page global directory

  Page upper directory

  Page middle directory

  Page table

  这样分可以更好的支持所有的处理器

  支持分页有两个好处。?

   1 每隔进程有自己的物理地址空间,并受到保护

  2 区分开了page page frame,这样不同的page可以对应同样的page frame,可以很方便的实现虚拟内存机制。

  每个进程有自己的page global directory,在CR3中,所以每次进程切换的时候就要存入和读取出CR3中的值。

物理内存布局

  在初始化的时候,内核必须建立物理地址映射,来指定哪些物理地址范围可以被内核使用,哪些不能(或者说哪些被用来映射为I/Oshared memory 或者page frame被用来存储 BIOS data,所以这些被保留的page frames 永远不能被换出或者被用来分配。(这是否说明物理内存其实比实际内存大?因为还加入了I/O shared memory(FLASH 被映射在哪里?RAM被映射在哪里?I/O被映射在哪里?这些东西在什么时候被指定?)

  KernelRAM1MB 0x00100000的地方被启动,因为前1mb的内容被用来存储BIOS的信息。

  进程的page tables0x00000000 to 0xbfffffff both user mode and kernel mode

  内核进程的 page tables:在这里面有很多东西都没有理解。
阅读(1210) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~