成为C++高手的基础

(1)虚拟内存管理

32 位的CPU 的寻址空间是4G , 所以虚拟内存的最大值为4G (2的20次方);

windows 操作系统把这4G 分成2 部分, 即2G 的私有空间和2G 的系统空间, 系统空间是各个进程所共享的, 他存放的是操作系统及一些内核对象等,

而用户空间是分配给各个进程使用的,

虚拟空间:ms_dos 区,私有区代码数据和资源,共享区RING3共享区,系统区RING0共享区

或分为空指针区;win16兼容区;进程代码和数据,内存分配堆,进程栈,用户DLL;内存映射文件,系统DLL(user32.dll,kernel32.dll,gdi32.dll); 操作系统代码

用户空间依次为代码区,数据区,堆区,栈区。

(2)cpu保护模式[具体见WINDOWS 环境下32位汇编语言程序设计]

cup 的工作模式:dos 工作在实模式下,Windows工作在模型保护模式下。

dos: 段寄存器+偏移地址=物理地址

 WINDOWS: 段寄存器+偏移量=线性地址=物理地址

以XXXX:YYYYYYYY逻辑地址为例。

      80386引入48位全局描述符表寄存器 GDTR ,16为局部描述符表LDTR。

      T1==0

                  GDT(段描述符首地址)+CS,DS,ES,FS,GS,SS(XXXX的高13位用来做索引)->取出段的基地址》+yyyyyyy=线性地址。

       T1==1(GDT 段描述符首地址,LDTR给出索引值# 以局部描述符表为首地址+CS,DS.ES.FS.GS,SS(做索引)           = 》段的基地址)

                 (1)GDTR(段描述符首地址)+LDTR(给出索引值)-〉LDT的局部描述符表的首地址信息;(2)LDT(局部描述符表首地址)+CS,DS,ES,FS,GS,SS(XXXX用来做索引)->取出段的基地址》+yyyyyyy=线性地址。

线性地址转换为物理地址

      页目录表-》页表-》页内地址(操作系统处理)

(3)Windows运行机理

 

(4)系统调用流程

 

 

(5) 消息流程

 

(6)堆栈问题

用户栈和内核栈;多个线程栈

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值