2.4.22 i386 VM 分享 MAXMEM

 /* include\asm-i386\page.h */

#define MAXMEM   ((unsigned long)(-PAGE_OFFSET-VMALLOC_RESERVE)) 

 

#define PAGE_OFFSET  ((unsigned long)__PAGE_OFFSET)                                  

#define VMALLOC_RESERVE  ((unsigned long)__VMALLOC_RESERVE)        

#define __PAGE_OFFSET  (0xC0000000)                                                                 

#define __VMALLOC_RESERVE (128 << 20) 


VMALLOC_RESERVE :  0x08000000

PAGE_OFFSET            :  0xc0000000

 

VMALLOC_RESERVE + PAGE_OFFSET  = 0xc8000000 :-) foo

 

再求个负数嘛(等价于 取反加1) 0x38000000 (3*256 + 8 * 16 ) M  = 896M  zone_normal

 

===========================================================================================

static void __init print_memory_map(char *who)
{
 int i;

 for (i = 0; i < e820.nr_map; i++) {
  printk(" %s: %016Lx - %016Lx ", who,
   e820.map[i].addr,
   e820.map[i].addr + e820.map[i].size);
  switch (e820.map[i].type) {
  case E820_RAM: printk("(usable)\n");
    break;
  case E820_RESERVED:
    printk("(reserved)\n");
    break;
  case E820_ACPI:
    printk("(ACPI data)\n");
    break;
  case E820_NVS:
    printk("(ACPI NVS)\n");  
    break;
  default: printk("type %lu\n", e820.map[i].type);
    break;
  }
 }
}

 switch (e820.map[i].type) {
  case E820_RAM: res->name = "System RAM"; break;
  case E820_ACPI: res->name = "ACPI Tables"; break;
  case E820_NVS: res->name = "ACPI Non-volatile Storage"; break;
  default: res->name = "reserved";
  }

 ==========================================================

test_and_set_bit

@nr: Bit to set 
@addr: Address to count from 
注意 .This operation is atomic and cannot be reordered.It may be reordered on other architectures than x86.It also implies a memory barrier. 
          ====> 所以要用锁LOCK_PREFIX


static inline int test_and_set_bit(int nr, volatile unsigned long * addr) 

int oldbit; 

__asm__ __volatile__( LOCK_PREFIX 
"btsl %2,%1\n\tsbbl %0,%0" 
:"=r" (oldbit),"=m" (ADDR) 
:"Ir" (nr) 
:"memory"); 
return oldbit; 

分析: 
 bts 测试位并置位,被测试位送CF并且被测试位置1  与btr相对。

 sbbl %0,%0 将 ”-CF“  给%0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值