c语言学习笔记十七

来源:互联网 发布:win7美化桌面软件 编辑:程序博客网 时间:2024/06/05 09:01
虚拟内存管理
 
查看进程: ps 
 
显示结果:
          PID TTY          TIME CMD
          1979 pts/0    00:00:00 bash
          2048 pts/0    00:00:00 ps


查看bash的虚拟地址空间: cat /proc/1979/maps
                        或是pmap 1979
 
  显示结果:
 
08048000-08123000 r-xp 00000000 08:01 786438     /bin/bash
08123000-08124000 r--p 000da000 08:01 786438     /bin/bash
08124000-08129000 rw-p 000db000 08:01 786438     /bin/bash
08129000-0812e000 rw-p 00000000 00:00 0 
083a2000-08607000 rw-p 00000000 00:00 0          [heap]
b72d4000-b72f3000 r--p 00000000 08:01 787504     /usr/share/locale-


langpack/zh_CN/LC_MESSAGES/bash.mo
b72f3000-b72fa000 r--p 00000000 08:01 546952     /usr/share/locale-


langpack/en_AU/LC_MESSAGES/bash.mo
b72fa000-b7302000 r--p 00000000 08:01 547192     /usr/share/locale-


langpack/en_GB/LC_MESSAGES/bash.mo
b7302000-b7309000 r--s 00000000 08:01 288595     /usr/lib/i386-linux-


gnu/gconv/gconv-modules.cache
b7309000-b730a000 r--p 0043a000 08:01 270739     /usr/lib/locale/locale-


archive
b730a000-b734a000 r--p 002bd000 08:01 270739     /usr/lib/locale/locale-


archive
b734a000-b74ef000 r--p 006b4000 08:01 270739     /usr/lib/locale/locale-


archive
b74ef000-b76ef000 r--p 00000000 08:01 270739     /usr/lib/locale/locale-


archive
b76ef000-b76f1000 rw-p 00000000 00:00 0 
b7701000-b7703000 rw-p 00000000 00:00 0 
bfa71000-bfa92000 rw-p 00000000 00:00 0          [stack]


   
进程地址空间:
  
  内核地址空间 0xc000 0000
               0xbf?? ????
  环境变量
  
  命令行参数
 
  栈
 
  共享库和mmap内存映射区
 
  堆
  
  data segment
  
  test segment    




 x86的虚拟空间地址是:0x0000 0000~0xffff ffff
 前3G为用户空间,后1G为内核空间




虚拟内存所起作用:
 1 控制物理内存的访问权限
 2 让每个进程有独立的地址空间,不同进程的同一个va被mmu映射到不同的pa
  
再打开一个终端窗口执行以上命令
  两个进程在同一个系统中运行,所以data segment 占用相同的va,
  各自干各自的事情,所以data segment中有不同的数据
  两个进程都是bash进程,text segment是一样的,共享相同的物理页面
  共享库的地址并不相同,共享库可以节省内存
 3 物理地址不连续的几块内存可以映射成虚拟地址连续的一块内存
 4 系统如果同时运行着多个进程,为各个进程分配的内存之和可能大于物理内存,
   虚拟内存管理使得各进程可以正常运行 
   交换设备(swap device):在磁盘上保存虚拟内存页面的磁盘分区/磁盘文件 
   换出(page out): 当物理内存不够用时,将不常用的物理页面的数据临时保存
                   到交换设备,这个物理页面就认为是空闲的了,可以重新分
                   配给内存使用
   换入(page in):  如果进程要用到换出的页面,可以从交换设备加载回物理内存
                   
   以上两者统称为换页(paging)


系统分配内存的总量=物理内存的大小+交换设备的大小
原创粉丝点击