实时调度
实时调度 参考《多线程编程指南》1.POSIX 标准指定了三种调度策略:先入先出策略 (SCHED_FIFO)、循环策略 (SCHED_RR) 和自定义策略 (SCHED_OTHER)。SCHED_FIFO 是基于队列的调度程序,对于每个优先级都会使用不同的队列。SCHED_RR 与 FIFO 相似,不同的是前者的每个线程都有一个执行时间配额。SCHED_FIFO 和 SCHED_RR 是对 POSIX Realtime 的扩展。SCHED_OTHER 是缺省的调度策略。提供了两个调度范围:进程范围 (PTHREAD_SCOPE_PROCESS) 和系统范围(PTHREAD_SCOPE_SYSTEM)。具有不同范围状态的线程可以在同一个系统甚至同一个进程中共存。进程
进程控制--进程的其他操作
一、获得进程ID 系统调用getpid用来获取当前进程的ID。输入命令man 2 getpid可获得该函数的声明:#include <sys/types.h>#include <unistd.h>pid_t getpid(void); 程序7-9是一个使用getpid简单的例子#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(void){pid_t pid;if ((pid = fork()) == -1){ printf("fork error!n"); exit(1);}if (pid == 0) printf("getpid return %dn",getpid());exit(0); } 运行程序结果如下:$ ./7-9getpid return 5
linux/unix中设置线程优先级
在linux下我们可以通过int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);来创建线程,但是如何设置线程的优先级呢?在讨论这个问题的时候,我们先要确定当前线程使用的调度策略,posix提供了int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);函数来获取所使用的调度策略,它们是:SCHED_FIFO, SCHED_RR 和 SCHED_OTHER。我们可以使用int sched_get_priority_max(int policy);int sched_get_priority_min(int policy);来获取线程线程可是设置的
Linux调度策略及线程优先级设置
Linux调度策略及线程优先级设置 Linux内核的三种调度策略:1,SCHED_OTHER 分时调度策略,2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃3,SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平Linux线程优先级设置首先,可以通过以下两个函数来获得线程可以设置的最高和最低优先级,函数中的策略即上述三种策略的宏定义:int sched_get_priority_max(int policy);int s
互斥锁pthread_mutex_t的使用
互斥锁pthread_mutex_t的使用http://hi.baidu.com/cunlin/blog/item/1f9e3f384c6bbeffb211c79c.html 有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pthread_mutex_t是一个结构,而PTHREAD_MUTEX_INITIALIZER则是一个结构常量。 动态方式是采用pthread_mutex_init()函数来初始化互斥锁,API定义如下: int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *m
有关音频编码的知识与技术参数(转载)
自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。1、什么是采样率和采样大小(位/bit)? 声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,为了复原波形,一次振动中,必
音频编码基础知识
音频编码基础知识 通常我们采用脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。1、什么是采样率和采样大小(位/bit)? 频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,为了复原波形,一次振动中,必须有2个点的采样,人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要
数字视频基础知识简介
一、数字视频的采样格式及数字化标准模拟视频的数字化包括不少技术问题,如电视信号具有不同的制式而且采用复合的YUV信号方式,而计算机工作在RGB空间;电视机是隔行扫描,计算机显示器大多逐行扫描;电视图像的分辨率与显示器的分辨率也不尽相同等等。因此,模拟视频的数字化主要包括色彩空间的转换、光栅扫描的转换以及分辨率的统一。模拟视频一般采用分量数字化方式,先把复合视频信号中的亮度和色度分离,得到YUV或YIQ分量,然后用三个模/数转换器对三个分量分别进行数字化,最后再转换成RGB空间。(一)、数字视频的采样格式根据电视
H264基本概念之 色彩空间(RGB vs YUV)
很早以前就知道RGB,三基色原理,即任何色彩都可以由红、绿、蓝混合而成,后来上了图像处理这门课才知道YUV(YCbCr)也是一种表示色彩的方式,只不过它是通过亮度和色度表示的。我猜想,如果色彩空间可以用三个独立的变量去表示,类似三维空间,那么通过建立不同的正交基,是完全可以对这个三维空间进行描述的,只是映射的方式不同而已,最重要的是找到有实际意义的物理表示。当对RGB进行压缩时,显然利用不上人类视觉系统对亮度比色度更敏感的特性,所以需要进行RGB向YUV的转换。可以说RGB是用来在LCD、CRT上显示用的,而YUV更便于视频信
H264基本概念之 采样(sampling)、帧(frame)与场(field)
一、视频信号的采样(上图来自参考文献2) 视频信号不同于音频信号,它是一个随着时间和空间时变的二维信号,通过采样、编码将模拟信号转换到数字信号,方便传输和存储。视频信号是由一系列的图像组成,时间上对视频模拟信号进行采样就是每个一段时间提取一个图像,而空间采样是指每一个图像由多少个像素点组成,像素点越多,图像画面越清晰。人的视觉系统决定了采样频率,当采样频率是10~20帧每秒,对快速运动的图像,人眼可以感觉到图像不流畅;当采样频率为20~30帧时,基本上看起来比较流畅。当采样频率更高时,其实图像的质量提
H264 编解码框架简介
H264 编解码框架简介阅读完H264/AVC 编解码器的介绍,脑海中只是留下以下三条:1、H264并没有明确规定一个编解码器如何实现,只是规定了一个编码后的视频比特流的句法,和该比特流的解码方法,这个与MPEG 相似。2、H264和以前的标准(如H261、H263、MPEG-1、MPEG-4)的编解码器实现流程没有太大区别,主要的不同在于各功能块的细节。3、H264就是利用实现的复杂性获得压缩性能的明显改善。(至于复杂度的评估,以后会介绍)下面介绍一下H264的编码器框图:编码器采用的仍是变换和预测的混合编码法。在图6.1中,输入的帧或场Fn以宏块为单位
Linux 音频 API 指南
由于历史的原因,在 Linux 环境下有多种API系统可用于声音编程。但没有合适的指引就难以找到合乎自己需要的体系。这里是一个指引,是由Lennart Poettering <mzoybt (at) 0pointer (dot) net>所写(参见:Homepage of Lennart ), 目的就是带你走出这个密林。 最简单的指引莫过于问自己:"我想(用 Linux Sound API)做些什么?"。下面就是答案: 我想写一个类似于媒体播放器的软件! 那就用 GStreamer。除非你只想基于KDE来编程,那么,你可以选择使用Phonon。 我想在自己的应用程序中加入事件声音! 使
宽带语音编码--机遇与实施挑战
宽带语音编码--机遇与实施挑战引言 随着 IP 电话的广泛应用以及 3G 无线手持终端即将大量投产,通过"新型"分组电话网络提供优于普通长话音质的音频性能面临巨大机遇。我们可利用数据网络不受目前电话网络 8 KHZ 采样率(4 KHZ 通频带)限制的功能来实现优于普通长话音质的语音。我们提供低价的 DSP 进行宽带信号压缩,便于其在分组网络上传输,这也是目前上述功能成为现实的原因之一。 本文所讨论的课题就是宽带语音编码器及其实施所面临的挑战。我们将探讨标准化的宽带语音编码器,并讨论当前技术状态以及发展方向。此外,我们
C语言-内存管理之二[内存指令]
C语言-内存管理之二[内存指令]http://blog.chinaunix.net/u3/99677/showart.php?id=2005205内存指令malloc 原型:extern void *malloc(unsigned int num_bytes);头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的。) 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 当内存不再使用时,应使用free()函数将内存块释放。 举例: /*malloc.c*/ #include <syslib.h> #include <
C语言-内存管理之三[理解static关键字]
C语言-内存管理之三[理解static关键字]理解static关键字1.3理解static关键字C/C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 1.3.1面向过程设计中的static1.3.1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://Example 1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){ n=20; cout<<n<<endl; f
C语言-内存管理之一[内存分配]
C语言-内存管理之一[内存分配]http://blog.chinaunix.net/u3/99677/showart.php?id=2005197内存分配1.1 内存分配1.1.1内存分配方式内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量等。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内存分配。程序在运
详解linux下的串口通讯开发
详解linux下的串口通讯开发 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。串口通讯指的是计算机依次以位(bit)为单位来传送数据,串行通讯使用的范围很广,在嵌入式系统开发过程中串口通讯也经常用到通讯方式之一。Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备。在linux系
using select on a fifo
The right way to handle on-going input from file descriptors is to use select(). All readable events are flagged (one such event is “end of file”, which is indicated by a 0-sized read()). For example, if we’re reading from file descriptor fd: fd_set rfds; int rc; FD_ZERO(&rfds); FD_SET(fd, &rfds); tv.tv_sec = 1; tv.tv_usec = 0; rc = select(fd + 1, &rfds, NULL, NULL, &tv); if (rc > 0) { char buf[80]; ssize_t got = read(fd, buf, sizeof(bu
进程间通信系列--管道
进程间通信系列--管道管道可以说是最古老的IPC形式,所谓管道,是指进程间建立的一条通信的通道,从本质上看,管道是UNIX文件概念的推广管道通信的介质是文件,先看一下管道的特点:1.管道的特点: (1)管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; (2)无名管道只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);后来发展了FIFO(也称有名管道) (3)单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,
Unix系列shell程序编写
*Shell是什么? 任何发明都具有供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多)。Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。 为了不同的需要,UNIX提供了不同的Shell。现在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)为例,一步步的领略UNIXShell的强大功能,占先其强大魅力,达到更方便灵活的管理、应用UNIX的目的。 1.UNIX内核和Shell的交互方法 启动UNIX时,程序UNIX(内核)将被调入计算机内存,并一直保留在内存中直到机器关闭。在引导过程