- 浏览: 65801 次
- 性别:
- 来自: 南京
最新评论
-
firojre:
我觉得你把OSI model 和Network socket ...
Linux协议栈之BSD和INET socket层(一) -
firojre:
Linux的BSD和INET socket层分别对应于ISO ...
Linux协议栈之BSD和INET socket层(一) -
guoyu04:
一个UI中,new 两个 handler 是什么情况?是一个h ...
Android Framework系列之IPC(一)
文章列表
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 ...