`
waterlife
  • 浏览: 65801 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
文章列表
Linux把整个的虚拟存贮空间自上而下分为系统空间,堆栈空间,数据段和代码段。当系统访问页面异常时,cpu将失败的线性地址保存在CR2中。同时还会传来两个参数pt_regs和error_code。前者保存了异常发生前夕各寄存器的一个副本。   struct pt_regs { long ebx; long ecx; long edx; long esi; long edi; long ebp; long eax; int xds; int xes; long orig_eax; long eip; int xcs; long efla ...
Linux内核对于虚拟内存的管理是以进程为基础的,每个进程都有自己的虚存空间。而系统空间是所有进程所共享的。对虚拟空间常用数据结构vm_area_struct来描述。   struct vm_area_struct { struct mm_struct * vm_mm; /* The address space we belong to. */ unsigned long vm_start; /* Our start address within vm_mm. */ unsigned long vm_end; /* The first byte after our end a ...
路由器工作在物理层,链路层和网络层。是多个互联网之间中继包,它与网关之间最大的区别是只能使用相同的协议进行数据包转发。   网关是一个协议转换器,它工作在OSI七层之中。而多协议路由虽然也能转发不同协议的数据包,但是他和单协议路由没有本质区别,无法像网关那样对数据包协议格式进行转换。
Linux TCP/IP协议栈对应于ISO七层参考模型分别为: 应用层-------------应用系统 表示层-------------BSD Socket层  socket.c 会话层-------------INET Socket层 af_inet.c 传输层-------------TCP/UDP  tcp.c/udp.c 网络层-------------IP层   ip.c 链路层-------------设备接口层 dev.c 物理层-------------物理接口层   Linux通过int $0x80it调用进入sys_socketcall(int call, ...
Android通过 KeyInputQ在WindowMangerService中建立一个独立的线程InputDeviceReader,使用Native函数readEvent来读取Linux Driver的数据构建RawEvent,并放入到KeyQ消息队列中。   KeyInputQueue.java     Thread mThread = new Thread("InputDeviceReader") { public void run() { if (DEBUG) Log.v(TAG, "InputDe ...
Linux通过地址映射将物理页面映射到4G的虚拟地址空间,其中3G以上是内核地址空间,而3G以下为用户地址空间。Linux中所有的进程将使用虚拟地址空间进行内存的管理和操作。   Linux内核的映射机制设计成三层,在页面目录和页面表中间增设了一层“中间目录”。页面目录为PGD,中间目录为PMD,而页面表为PT。PT中的表项PTE(page Table Entery)。而对于i386 CPU直接跳过PMD层的映射。   那么虚拟地址空间是怎样进行映射到呢?   我们前面说过,i386是采用段页式管理。Linux采用走过场的形式敷衍cpu,这样一个32位的虚拟地址空间就等同于一个线性地 ...
Linux内核对于内存的管理摒弃了i386复杂的段式管理,而是采用了页式管理。Linux把整个的物理内存空间化为成一个个单独的页面,每页占4K空间大小。Linux把所有页面链接到一个全局的数组mem_map[]中,mem_map的每一个元素都是一个指针指向page数据结构。系统中的每个物理页面都对应着一个page数据结构,并根据需要把这些页面划分为不同的管理区:ZONE_DMA,ZONE_NORMAL和ZONE_HIGHMEM(用于物理内存超过1G空间的地址)。   typedef struct page { struct list_head list; /* ->mapping ...
Global site tag (gtag.js) - Google Analytics