我记得凡是内核操作,因为用户模式和内核模式的切换都会影响效率
但是只有操作系统才能直接控制硬件,那么普通的内存读写也属于操作硬件,是否属于内核操作?应该不属于吧,可是为什么呢比如int main()
{
 int a;
 a = 0;//写内存
 return 0;
}
写内存了,是操作硬件,为什么不会切换到内核进行系统操作

解决方案 »

  1.   

    a变量在这里是一个局部变量,
    这句话编译后 对应的汇编指令是
    mov [esp-2], 0不涉及到内核切换
      

  2.   

    恩,我也认为不会设计到内核切换,访问用户模式的内存不需要内核切换,是这个意思吧?内存虽然是硬件.
    访问内存需要查找页目录PDE 之后查找页表PTD 然后定位到物理页帧编号PFN,然后根据偏移得到物理内存地址,访问实际的内存条地址得到数据或写入数据
    我只是突然想起用户模式的程序好像不能直接访问硬件,于是有了疑惑
      

  3.   


    那些不用你操心,是由CPU硬件自动完成的,你只需要给出地址就行了。
      

  4.   


    你说的是内存管理单元MMU吧 ,这个对地址的操作代码是CPU自带的还是操作系统指定的?
      

  5.   

    内核操作用微软的DDK API 一般的内存操作用的是微软的SDK API 两个不同的哭
      

  6.   

    Intel的x86处理器是通过Ring级别来进行访问控制的,R0层和R3层,分别来存放操作系统数据和应用程序数据,应用程序访问内存都是虚拟内存,普通的内存操作经过映射之后会对物理内存进行操作,应用程序API都是调用内核API来操作内存的,比如你memcpy函数是工作在用户模式,下面会调用一个类似Rtlmemcpy函数,这个函数工作内核模式的,应用层最好不要直接调用内核模式下函数,这是操作系统留给驱动程序调用的!
      

  7.   

    memcpy的代码没有调用内核api,可以完全在用户模式完成
      

  8.   

    我只是随便拿来举个例子,并不是特指memcpy这个函数,当然,我上面这么描述可能有些欠妥!