Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1358391
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: LINUX

2016-01-30 22:49:31

  进程是内核提供的一种机制,使用各种资源的一种方式
  内核和用户态的进程的执行环境不同,编译使用的编译器不同,用户态的进程是一种编程模型
  内核中模拟进程的数据对象task_struct,mm_struct,address_space这些都是逻辑结构,实际在执行的时候还是一条条的指令
         这些数据结构都是编程的模型和范式,影藏在执行机制后有mmu完成的虚拟地址地址或线性地址到物理地址的转换
  一旦系统调用进入到内核后,就会像进入了另一个环境,内核代替进程来执行
 内核如何知道进程是否要挂起?
     内核判定进程依赖的资源需要等待,或者是网络包或者是文件内容
  mmap映射文件后的效果比直接的文件操作有哪些不同?
      直接的文件read/write操作需要经过系统调用,并且读写有拷贝
      mmap直接将文件的页面操作直接映射到了进程的地址空间(也就是进程的页表中建立了相关的表项)
      对地址的访问就会直接映射到文件相关的页,此时并没有所谓的系统调用陷入内核,也没有内存拷贝
      既有内核页表也有进程页表,内核页表由所有的进程上下文、中断上下文共享,进程的页表放在cr3寄存器中,pgd是在mm_struct中
      进程页表和内核页表需要同步(页表和vm_area是不同的概念,vm_area是管理虚拟地址空间,页表是管理物理内存的)   
  逻辑地址与虚拟地址的区别?
      内核提供的进程机制也包括了进程的地址空间(虚拟地址空间):0~3G
      线性地址也是逻辑地址,是在段页式管理内存的时代遗留下来的概念,逻辑地址就是指的段内的偏移
      现在的很多代码反汇编后,还保留着段寄存器的方式,但是cpu已经进化,没有es,ds,ss,cs等段寄存器了,但是现在的编译器还是会给出这样的指令,进化后的cpu还是能执行这些指令,这里的兼容的不是汇编指令,而是机器码,cpu只对机器码兼容,编译器只需要保证
不同的汇编指令映射到相同的机器码,也就是指令兼容
     


  
阅读(1011) | 评论(0) | 转发(0) |
0

上一篇:rpm包管理

下一篇:协议栈有无的疑惑

给主人留下些什么吧!~~