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中的页基地址完成线性地址到物理地址的转换。

  • 相关阅读:
    C++ Primer 笔记——语句
    C++ Primer 笔记——const 限定符
    C++ Primer 笔记——变量
    C++ Primer 笔记——函数
    C++ Primer 笔记——基本内置类型
    图的遍历算法:DFS、BFS
    python数据结构之图论
    下载文件的协议:HTTP、FTP、P2P
    HTTPS协议
    HTTP协议
  • 原文地址:https://www.cnblogs.com/javaadu/p/11742628.html
Copyright © 2011-2022 走看看