12 2006 档案

摘要:Mpgv.c 是对mpeg vedio的解码部分,从demux开始,到sample到输出。其中,核心部分是函数ParseMPEGBlock。两种数据格式:video_format 是video的meta_data,block是实际的数据Code Path:Open()----->Modules/demux/Mpgv.c1)set function point. p_sys is main structurep_demux->pf_demux = Demux;p_demux->pf_control= Control;p_demux->p_sys = p_sys = mal 阅读全文

posted @ 2006-12-28 02:06 Teddy Yan 阅读(845) 评论(0) 推荐(0) |

摘要:POSIX 是系统调用的————操作系统的标准程序只有通过门(gate)陷入(trap)到内核调用中去,实际上是通过0x80中断进入的0)概念:mode switch & context switch 前者简单,只是进行寄存器上下文切换page, frame, segment逻辑地址 = 选择子 : offset,选择子= 索引:TI:RPL GDT(Global Descriptor Table) & LDT逻辑地址到线性地址的转换中断,异常和陷入的区别1)堆栈的切换 SAVE_ALL,RESTORE_ALL, eax的重要性(指明了那个系统调用)2)sys_call_tab 阅读全文

posted @ 2006-12-28 01:56 Teddy Yan 阅读(245) 评论(0) 推荐(0) |

摘要:1)操作系统分为两种:micro kernel & monolithic kernel2)module 是在内核空间运行的程序。3)内核模块的编写:#include <linux/module.h>int init_module(void);void cleanup_module(void);4)实现机制4.1内核符号表 结构:内存地址 符号名称 [所属模块]4.2模块的引用计数器4.3模块的依赖关系4.3数据结构(根据以上三点构造的) /include/linux/module.h 模块名字和数据结构的相对位置4.4内核本身可以看作是一个名字为null模块,在系统启动的时 阅读全文

posted @ 2006-12-28 01:52 Teddy Yan 阅读(239) 评论(0) 推荐(0) |

摘要:输入模块的Code Path,看来主要的分析还是在demux和access模块的分析。现在的code path只是大致的模块input_CreateThread2 ---> Create() ---->Run() ---->Init() vlm.c input.c input.c input.c ---->input_EsOutNew() input.c ---->[1]InputSourceInit input.c 1)-->demux2_New --->__demux2_New -->module_Need( p_demux, "a 阅读全文

posted @ 2006-12-24 21:37 Teddy Yan 阅读(210) 评论(0) 推荐(0) |

摘要:DOS,Mac使用硬中断,Linux使用软中断,在硬中断到来时处理任务调度(发出软中断)启动后的滴答数来统计——全局变量jiffies基本概念:系统调用:内核提供的,功能强大的一些函数。内核模式和用户模式:每个模式都有自己的堆栈,用户栈和核心栈。较低级别的进程不会影响其他进程地址空间:地址保护,每个用户都有核心进程的地址入口,但不能进入。只有进入系统调用后,才可以。通过,copy_to_user, copy_from_user()来交换数据bottom half,任务延迟处理机制。中断处理过程是不可被打断的,就是独占系统的top half 必须关掉中断运行,bottom half 可以打开中断 阅读全文

posted @ 2006-12-24 15:27 Teddy Yan 阅读(219) 评论(0) 推荐(0) |

摘要:1.内核初始化过程,所有的函数列表。P262.在用户态初始化阶段init程序在每个tty端口上创建一个进程以支持用户登陆。每个进程都运行一个getty程序的拷贝。getty负责验证口令,进入shell3.Shell的几大功能: 3.1 后台运行 if ((pid= fork() ==0) execv(buffer, arg); else{ if (is_back ==0) waitpid(pid,&status,0); } 3.2 I/O重定向 每个进程都在内核有自己的文件描述表(fileDescriptor) 用if (dup2(fd_out,STDOUT_FILENO)==-1) 阅读全文

posted @ 2006-12-24 15:26 Teddy Yan 阅读(349) 评论(0) 推荐(0) |

摘要:1.访问控制:public, private, protected2.友元:struct X{private: int i;friend void g(X*, int); //Global friendfriend void Y::f(X*);// Struct member friendfriend structZ; //Entire struct};void g(X* x, int i){ x->i=i;}3.不完全的类型声明。时刻想着编译器怎么处理程序的。例如Y::f() 就只能用指针引用。struct X;struct Y{ void f(X*);};struct X {priv 阅读全文

posted @ 2006-12-20 16:21 Teddy Yan 阅读(109) 评论(0) 推荐(0) |

摘要:1.delete和 new 与 malloc() 和 free()一样都是在堆中申请内存。无论申请的内存付值给了哪个变量,都要释放一下2.delete [] 是释放对象数组3.C++中必须所有函数都要先声明,然后再引用。所以头文件很重要。C编译时会出现问题,对于每个翻译单元,编译器创造一个目标文件,这些文件连同启动代码,由连接器连接,生成可执行代码。4.名字冲突,导致了C++。5.C++允许将任何类型的指针赋给void*, 但不允许将void指针赋与给任何其他类型的指针。必须显示的类型转换6.C和C++都允许重声明函数,只要两个声明匹配即可,但是二者都不允许声明结构。为了防止重复声明,用预处理 阅读全文

posted @ 2006-12-08 15:49 Teddy Yan 阅读(109) 评论(0) 推荐(0) |

摘要:1.&语法糖2.Make 编译控制 //{L} Global2 带有Global2名字的文件要被连接进来(很像xdoclet)3.变量的定义:extern, static(两种含义:作用域内不变,指定作用域) and automatic4.Link: internal linkage 和 external linkage 5.C++ 显示转换 l=static_cast<long>(i); const int i=0;const_cast<int *>(&i);X x;int* xp = reinterpret_cast<int *>(&am 阅读全文

posted @ 2006-12-08 14:49 Teddy Yan 阅读(112) 评论(0) 推荐(0) |

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3