zoukankan      html  css  js  c++  java
  • 学习操作系统和Linux内核的新体会

    算起来是第三次看内核了吧,要从源码的细节中爬出来:

    (1)先拎清楚主要的数据结构,就把握住了骨架;

    (2)再看每个系统调用的功能的流程是如何围绕上述数据结构展开。举个栗子,块设备驱动层的主要数据结构有:buffer_head,bio,request,request_queue;hd_struct,gendisk,block_device;

    (3)搞清楚真正发生了什么,硬件和软件是如何配合的。例如,inter386下,内存中应该有两张表LDT和GDT,LDT是每个进程有一个,GDT全系统只有一个。用寄存器LDTR和GDTR分别存放上述两个表的首地址,这两个寄存器整个系统只有一个,那么进程切换的时候,系统就要根据进程的PCB替换掉LDTR的内容;每个进程还有自己的页表,页表地址放在CR3中,同样在进程切换的时候也要更新CR3的内容;另外,当操作系统给出逻辑地址(虚拟地址——16+32)时,MMU根据GDT/LDT的内容完成16位段选择符到32位段基地址的转换,然后加上上述的32位偏移地址,得到32位线性地址——至此完成段式管理;后面的是根据CR3中的页基地址完成线性地址到物理地址的转换。

  • 相关阅读:
    Linux:Day45(下)
    Linux:Day45(上)
    Linux:Day44(下)
    彻底理解JDK异步
    Ribbon是什么?
    RocketMQ学习笔记(一)eclipse版的quickstart
    线性表的遍历
    八皇后问题
    汉诺塔
    servlet的url-pattern规则
  • 原文地址:https://www.cnblogs.com/javaadu/p/11742628.html
Copyright © 2011-2022 走看看