- 博客(40)
- 资源 (2)
- 收藏
- 关注
原创 proxy行为
1.概述SIP代理服务器是路由SIP请求到UAS的,并且路由SIP应答到UAC。一个请求可能通过多个proxy到达UAS。每一个都会做出路由决定,在发送给下一个节点前对请求做一点修改。应答会通过和请求相同的proxy路径,只是顺序是逆序的。proxy是一个SIP逻辑上的概念。当接收到一个请求,在做代理服务器之前,首先应该有一个部件来决定是否自身需要响应这个请求。例如,在作为代理服务器处理请
2015-11-29 22:24:25 1661
转载 关于发送H264 sdp里的
虽然看到论坛有很多人问过,但我还是不明白。。。。一、开始我没有在sdp里加到那两个参数(简单的只是sprop- parameter-sets=H264),发送的h264流是这样是,它是一开始编码才有sps和pps ,之后就没有了,所以是当vlc断开再连接时,我在服务器发送第一个包是加上pps和sps,vcl播放流畅。二、要实现组播,我在sdp里加上 sprop-parameter-se
2015-11-27 14:43:39 1248
转载 Linux缓存机制之块缓存
作者:bullbat 在Linux内核中,并非总使用基于页的方法来承担缓存的任务。内核的早期版本只包含了块缓存,来加速文件操作和提高系统性能。这是来自于其他具有相同结构的类UNIX操作系统的遗产。来自于底层块设备的块缓存在内存的缓冲区中,可以加速读写操作。 与内存页相比,块不仅比较小(大多数情况下),而且长度可变的,依赖于使用的块设备(或文件系统)。随着日渐倾
2015-11-27 10:30:19 1778
转载 H264格式
名词解释场和帧 : 视频的一场或一帧可用来产生一个编码图像。在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场。片: 每个图象中,若干宏块被排列成片的形式。片分为I片、B片、P片和其他一些片。 I片只包含I宏块,P片可包含P和I宏块,而B片可包含B和I宏块。
2015-11-26 17:25:15 609
转载 初窥Linux 之 ext2/ext3文件系统
Linux最传统的磁盘文件系统(filesystem)使用的是ext2,所以要了解文件系统就得要由ext2开始。一、文件系统特性磁盘分区完毕后还需要进行格式化,之后操作系统才能够使用这个分区。这是因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要将分区进行格式化,以成为操作系统能够利用的文件系统格式。传统的磁盘与文件系统的应用中,一个分区
2015-11-25 10:58:29 376
转载 Linux中EXPORT_SYMBOL的用法
Linux中EXPORT_SYMBOL的用法EXPORT_SYMBOL标签内定义的函数对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用。您还可以手工修改内核源代码来导出另外的函数,用于重新编译并加载新内核后的测试。Linux symbol export method:[1] If we want export the symbol in a mod
2015-11-25 09:21:34 2015
转载 Linux启动过程详解
启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。启动第二步--读取MBR众所周知,硬盘上第0磁道第一个扇区被称为MBR,也
2015-11-25 09:18:59 352
转载 详解神秘Linux内核
本章要先浏览一下内核发出的启动信息,然后再逐个讲解一些有意思的点。2.1 启动过程图2-1显示了基于x86计算机Linux系统的启动顺序。第一步是BIOS从启动设备中导入主引导记录(MBR),接下来MBR中的代码查看分区表并从活动分区读取GRUB、LILO或SYSLINUX等引导装入程序,之后引导装入程序会加载压缩后的内核映像并将控制权传递给它。内核取得控制权后,会将自身解压缩并投
2015-11-25 09:17:42 631
转载 如何实现一个文件系统
如何实现一个文件系统摘要本章目的是分析在Linux系统中如何实现新的文件系统。在介绍文件系统具体实现前先介绍文件系统的概念和作用,抽象出了文件系统概念模型。熟悉文件系统的内涵后,我们再近一步讨论Linux系统中和文件系统的特殊风格和具体文件系统在Linux中组成结构,逐步为读者勾画出Linux中文件系统工作的全景图。最后在事例部分,我们将以romfs文件系统作实例分析实现文件系
2015-11-24 09:17:50 2104
转载 ffmpeg 在linux下编译
1、下载ffmpeg。 wget http://down1.chinaunix.net/distfiles/ffmpeg-0.4.9-p20051120.tar.bz2 我是在这个网址上下载ffmpeg-0.4.9-p20051120.tar.bz2,看网上有人用的是svn下载,但是我的机子中没有svn客户端,然后就在网上搜索,下载了这个版本。如果利用svn可以下载ff
2015-11-22 12:49:18 1581
原创 结束一个会话
本节描述了结束由SIP建立的会话的步骤。会话的状态和对话的状态是密切相关的。当一个会话由INVITE建立的时候,每一个由不同UAS的1xx或者2xx的应答创建一个对话,并且当完成了会话描述的请求/应答(offer/answer)交互之后,它也就创建了一个会话。这就是说,每一个会话都和单个对话“相关”-会话是对话所创建的。如果初始化的INVITE产生了非2xx的终结应答,它也终结了由本次请求创建的任
2015-11-22 10:41:23 1985
转载 linux ffmpeg 简单视频播放器
1.相信大家在网上看到的关于ffmpeg都已经很多了,这里我就不多介绍了,下面直接晒出代码,和自己关于ffmpeg一些体会2.linux ffmpeg的使用步骤初始化ffmpeg库 av_register_all()读取文件的头部,获取基本信息 avformat_open_input()从
2015-11-19 17:58:58 2399
转载 Linux文件系统(七)---系统调用之open操作(一)
(内核2.4.37)一、当我们打开一个文件的时候,需要获得文件的文件描述符(前面已经说过其实就是文件数组下标),一般是通过函数open来完成,这个系统调用在头文件中声明定义,我们看一下源码:[cpp] view plaincopyprint?530 static inline long open(const cha
2015-11-17 09:49:32 867
转载 Linux文件系统(七)---系统调用之open操作(三) 之 open_namei函数
Open系统调用下面看看open_namei函数:这个函数的基本的功能是:首先我们知道filename,也就是知道路径了,那么我们可以根据上级目录项对象,查询下一级的目录项对象,如果在目录项缓存找到下一级的目录项对象,则直接返回,并填充nd的挂载点对象和目录项对象。否则,构建一个子目录项对象,并分配一个新的inode结构,将子目录项对象和inode结构相关联。这
2015-11-17 09:48:38 1127
转载 Linux文件系统(七)---系统调用之open操作(二) 之 get_unused_fd
Open系统调用/* 2 */:这一步是需要找到一个没有使用的文件描述符fd看一下sys_open函数中调用的这个函数get_unused_fd:[cpp] view plaincopyprint?738 /* 739 * Find an empty file descriptor entry, and
2015-11-17 09:47:45 993
转载 Linux文件系统(六)---三大缓冲区之 目录缓冲区dcache
在文件系统中,有三大缓冲为了提升效率:inode缓冲区、dentry缓冲区、块缓冲。 (内核:2.4.37)为什么这个缓冲区会存在,不好意思,我说了废话,当然和前面一样的,为了提升效率,例如我们写一个.c的helloworld文件,简单的过程是编辑,编译,执行。。。那么这个过程都是需要找到所在的文件位置的,如果每次都从根开始找并且还有构造相应的目录项对象,是很费时的
2015-11-17 09:46:49 989
转载 Linux文件系统(五)---三大缓冲区之buffer块缓冲区
在文件系统中,有三大缓冲为了提升效率:inode缓冲区、dentry缓冲区、块缓冲。(内核:2.4.37)二、块buffer缓冲区0、整体来说,Linux 文件缓冲区分为page cache和buffer cache,每一个 page cache 包含若干 buffer cache。》 内存管理系统和 VFS 只与 page cache 交互,内存管理系
2015-11-17 09:45:15 2853
转载 Linux文件系统(四)---三大缓冲区之inode缓冲区 (内存inode映像 )
在文件系统中,有三大缓冲为了提升效率:inode缓冲区、dentry缓冲区、块缓冲。(内核:2.4.37)一、inode缓冲区为了加快对索引节点的索引,引入inode缓冲区,下面我们看Linux/fs/inode.c代码。inode缓冲区代码1、一些数据结构:之前已经说过,有多个链表用于管理inode节点:[c
2015-11-17 09:44:18 3872
转载 Linux 文件系统(三)---dup和fork函数执行后的文件情况
对于dup和fork函数来说,前者是复制一个文件描述符,后者是复制进程,同时相关的文件信息也会被复制。一、对于Dup之前已经知道,对于一个进程来说,有一个files_struct来管理所有的相关文件,最终的反应形式其实就是一个文件数组而已: 所谓文
2015-11-17 09:43:32 547
转载 Linux 文件系统(二)---执行过程及结构间的关系
一、首先,看看磁盘,超级块,inode节点在物理上整体的分布情况:(图示来自:www.daoluan.net) 对于一个分区,对应一个文件系统,一个文件系统其实本质上还是磁盘的一部分,所以可以包括多个柱面。对于柱面上的数据,主要看看inode节点位图、block位图,i节点,数据块。inode节点位
2015-11-17 09:42:39 432
转载 Linux 文件系统(一)---虚拟文件系统VFS----超级块、inode、dentry、file
一:什么是文件系统,其实一句话就是管理这块文件的机制(组织方式,数据结构之类...)Linux系统中存在很多的文件系统,例如常见的ext2,ext3,ext4,sysfs,rootfs,proc...很多很多。。。我们知道每个文件系统是独立的,有自己的组织方法,操作方法。那么对于用户来说,不可能所有的文件系统都了解,那么怎么做到让用户透明的去处理文件呢?例如:我想写文件,那就直接r
2015-11-17 09:41:42 2318
转载 Linux 文件系统剖析
基本的文件系统体系结构Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数,Linux 可以在许多种存储设备上支持许多种文件系统。例如,read 函数调用可以从指定的文件描述符读取一定数量的字节。read 函数不了解文件系统的类型,比如 ext3 或 NFS。它也不了解文件系统所在的存储媒体,比如 AT Attachment Packet
2015-11-16 23:08:12 411
转载 linux __setup
介绍的很详细,我也正好用了一次__setup(),蛮好用的:),今天回头看main.c,又搜索了一下,分享给大家: __setup(//做了一次完整的盗贼,我毫无修改的抄袭了一次,但有时间会做量身裁减的//from http://www.linuxforum.net/forum/printthread.php?Cat=&Board=linuxK&main=470
2015-11-15 23:50:18 563
转载 Linux操作系统内核启动参数详细解析
Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。如果不使用启动管理器,比如直接从BIOS或者把内核文件用“cp zImage /dev/fd0”等方法直接从设备启动,就不能给内核传递参数或选项--这也许是我们使用引导管理器比如LILO的好处之一吧。Li
2015-11-15 23:11:19 1706
原创 更改已经存在的会话
一个成功的INVITE请求既会创建一个基于两个用户之间的对话,也会基于请求/应答模式(offer-answer)创建一个会话。上一节讲述了如何通过target refresh 请求来修改一个现存的会话(比如,修改对话的remote target URI)。本节描述如何修改实际的会话(session)。这个修改可以包括修改地址或者端口、增加媒体流、删除媒体流等等。这是通过发起新的INVITE请求
2015-11-15 22:53:14 855
转载 内核命令行处理
代码清单5-5是语法乏味的定义。回想代码清单5-4,我们最初所调用的__setup宏的形式如下:__setup("console=", console_setup); 经过稍稍简化,编译器在宏扩展后,其预处理器产生如下结果:static char __setup_str_console_setup[] __initdata = "console="; static struct ob
2015-11-14 09:06:36 864
转载 Linux 2.6内核启动传递命令行的过程分析
内核在启动时可以传递一个字符串命令行,来控制内核启动的过程,例如:"console=ttyS2,115200 mem=64M@0xA0000000"这里指定了控制台是串口2,波特率是115200,内存大小是64M,物理基地址是0xA0000000。另外我们可以在内核中定义一些全局变量,使用这些全局变量控制内核的配置,例如usb驱动中定义了static int nousb; /* D
2015-11-14 09:05:53 457
转载 linux内核命令行解析
概述内核引导参数大体上可以分为两类:一类与设备无关、另一类与设备有关。内核源码树下的 Documentation/kernel-parameters.txt 文件列出了所有可用的引导参数,并指明了处理每个参数的具体文件。注意:对于模块而言,引导参数只能用于直接编译到核心里的模块,格式是使用"模块名.参数=值"模式指定,比如:usbcore.blinkenlights=1 。动态加载的模块可以在
2015-11-14 08:51:26 3375
转载 noapic和acpi=off能帮我做到什么?
06年1月的时候写过一篇有关acpi和apic的帖子。当时写这个帖子有两个原因:一是确实遇到了很多人混淆了apic和acpi的差别,也难怪,他们两个长得也太像了。二来是因为当时与次相关的两个核心参数(noapic,acpi=off)帮我解决了一个当时我觉得不可思议的问题,所以觉得有必要记录下来。后来我又写了一个帖子,说到了又一次用这两个参数解决疑难杂症的事情。没有想到,从那以后,我
2015-11-13 14:23:12 14298
转载 kworker内核工作队列详解
工作队列是另一种将工作推后执行的形式,它可以把工作交给一个内核线程去执行,这个下半部是在进程上下文中执行的,因此,它可以重新调度还有睡眠。 区分使用软中断/tasklet还是工作队列比较简单,如果推后的工作不需要睡眠,那么就选择软中断或tasklet,但如果需要一个可以重新调度,可以睡眠,可以获取内存,可以获取信号量,可以执行阻塞式I/O操作时,那么,请选择工作队列吧! 在老的
2015-11-10 21:52:52 15042
转载 Linux workqueue工作原理
1. 什么是workqueue Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程. 工作队列(workqueue)是另外一
2015-11-09 10:08:10 555
原创 自己编译操作系统,安装systemtap
自己编译的操作系统操作系统的版本小于(3.5),在进行安装systemtap必须选择一下配置项:1. CONFIG_DEBUG_INFO2. CONFIG_KPROBES3. CONFIG_RELAY4. CONFIG_DEBUG_FS5. CONFIG_MODULES6. CONFIG_MODULE_UNLOAD7. CONFIG_UPROBES 或者CONFIG_
2015-11-08 18:01:29 750
原创 初始化一个会话
概述当UAC希望初始化一个会话,它首先构造一个INVITE请求。这个INVITE请求一个服务器来建立一个会话。这个请求可能会由proxy层层转发,最后到达一个或者多个可能能够处理这个邀请的UAS。这些UAS需要看看是否用户接收这个邀请。UAS可以接收这个请求,通过发送2xx应答。如果邀请被拒绝,根据拒绝的原因,3xx,4xx,5xx或者6xx应答将会发送。在发送终结应答之前,UAS可以发送一些
2015-11-07 22:02:58 951
转载 Linux进程管理之SMP负载平衡
一:前言之前在分析Cpuset的时候提起过cpu负载平衡(load balance),当时因为分析的对象是cpuset,所以忽略了负载平衡的实现,在本节的分析中,我们来深入分析这一个过程.鉴于篇幅问题,这里只分析SMP系统的的负载平衡,至于超线性和NUMA的情况,这里就不做介绍了.另外,在本文的分析中还会涉及到之前对CFS以及CFS组调度的一些知识.如果有对这些不太熟悉的,建议先阅读本站有关C
2015-11-07 14:58:14 1803
转载 Linux Scheduling Domains
Scheduling Domains 引入的背景Scheduling Domains 是现代硬件技术尤其是多 CPU 多核技术发展的产物。现在,一个复杂的高端系统由上到下可以这样构成:它是一个 NUMA 架构的系统,系统中的每个 Node 访问系统中不同区域的内存有不同的速度。同时它又是一个 SMP 系统。由多个物理 CPU(Physical Package) 构成。这些物
2015-11-07 12:45:17 663
转载 linux在多核处理器上的负载均衡原理
现在互联网公司使用的都是多CPU(多核)的服务器了,Linux操作系统会自动把任务分配到不同的处理器上,并尽可能的保持负载均衡。那Linux内核是怎么做到让各个CPU的压力均匀的呢?做一个负载均衡机制,重点在于:1. 何时检查并调整负载情况? 2. 如何调整负载?先看第一个问题。如果让我这样的庸俗程序员来设计,我第一个想到的就是每隔一段时间检查一次负载是
2015-11-07 06:45:19 3202
转载 linux在多核处理器上的负载均衡原理(2)
假如现在是 Core 3 在执行idle_balance,则先在domain 1里找最忙的group,找到第二忙的group是core 0(core 4不在domain 1里,所以不会找到它),再从core 0里找最忙的runqueue(运行队列),core 0就一个运行队列,所以直接就是它对应的runqueue了,然后从该runqueue里挪出几个任务到Core 3,这一层domain的均衡做完
2015-11-07 06:44:16 791
转载 Linux-2.6.21的负载均衡
1负载均衡思想负载均衡是指多CPU系统(如SMP-Symmetric Multi-Processor,NUMA-Non Uniform Memory Architecture) 中的所有逻辑CPU发挥的功效相当,最大限度地利用所有的硬件资源,从而提高系统的性能。本文介绍Linux2.6.21内核负载均衡的设计思想。1.1调度域和调度组为了充分发挥硬件性能,在多CPU系统上做
2015-11-07 06:29:31 1033
转载 【内核】进程切换 switch_to 与 __switch_to
经典代码!!!#define switch_to(prev, next, last) \do { \/* \ * Context-switching clobbers(彻底击败) all registers, so we clobber \ * them explicitly, via unused output variables. \
2015-11-03 09:22:18 2877
原创 对话(Dialog)
一个UA的核心概念就是对话。对话是表现为两个用户代理(UA)之间的持续一段时间的点对点的SIP关系。对话(Dialog)使得用户代理之间的消息顺序传递和两个用户代理之间的请求正确路由更加容易。对话(Dialog)可以认为是对SIP消息解释的上下文关系。本节将讨论如何通过请求和应答来创建一个对话(Dialog),并且在对话(Dialog)中如何发起和响应后续的请求。一个对话在参与对话的UA中都有
2015-11-02 00:49:36 813
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人