自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿木的专栏

我思故我在

  • 博客(19)
  • 收藏
  • 关注

原创 用户进程共享3~4G内核地址空间---Linux内核笔记

首先要说明的一点是:Linux在内核态运行时(中断生生或系统调用发生后进入内核态),使用的是当前进程的页目录,这样做的好处是不用频繁的切换页目录,防止频繁刷新TLB,提高效率。每个用户进程有自己独立的0~3G地址空间,共享3~4G地址空间,也就是说每个进程页表的前768项是独立的,后面的256项全部进程共享。中断发生或系统调用后,进程陷入内核态,这时候需要使用3G~4G的内核地址空间,那么内核是在

2008-01-01 23:05:00 3092 2

原创 共享内存的实现---Linux内核笔记

系统调用mmap()通过映射一个普通文件实现共享内存。系统V则是通过映射特殊文件系统shm中的文件实现进程间的共享内存通信。也就是说,每个共享内存区域对应特殊文件系统shm中的一个文件(这是通过shmid_kernel结构联系起来的)。struct shmid_kernel /* private to the kernel */{  struct kern_ipc_perm shm_perm;

2007-12-15 10:47:00 2172

原创 Linux中实时进程的调度---Linux内核笔记

Linux的进程分普通进程和实时进程,而实时进程又分SCHED_FIFO与SCHED_RR,它们都比普通进程的优先级高。对于SCHED_FIFO进程,它就一直运行直到退出,除非它阻塞才会释放CPU, 或被更高优先级的实时进 程抢占。对于SCHED_RR(时间片轮转)进程,只有当它的时间片用完,内核会把它放到进程队列的末尾。我们来看看在2.4内核中对应的调度代码:asmlinkage

2007-12-14 23:48:00 7301

原创 linux对TSS(任务状态描述符)的使用---Linux内核笔记

linux2.4之前的内核有进程最大数的限制,受限制的原因是,每一个进程都有自已的TSS和LDT,而TSS(任务描述符)和LDT(私有描述符)必须放在GDT中,GDT最大只能存放8192个描述符,除掉系统用的12描述符之外,最大进程数=(8192-12)/2, 总共4090个进程。从Linux2.4以后,全部进程使用同一个TSS,准确的说是,每个CPU一个TSS,在同一个CPU上的进程

2007-12-13 22:18:00 9811

原创 中断发生后栈的布局--linux内核笔记

异常发生后栈的布局:ssespeflagscseip   以上由硬件自动完成压栈工作ERROR_ CODE -----异常码,有些异常无异常码,用0代替(pushl 0)function    -----异常处理函数 pushl %ds pushl %eax xorl %eax,%eax pushl %ebp pushl %edi pushl %esi pushl %edx decl %eax  

2007-12-13 21:50:00 1643

原创 初识FVWM-窗口管理器

fvwm是一款X11下的窗口管理器,它的设计目标是最小化内存消耗,提供虚拟桌面,还有就是给于用户最大的自由。它最吸引人的地方莫过于极大的可定制性,几乎所有窗口管理器所做的事情你都可以去定制。不管是最大化,最小化,移动,关闭窗口,还是标题栏的颜色,大小,以及鼠标单击,双击和拖动时的动作,你都可以去控制。也许有些时候把权利过多的给于用户并不明智,但fvwm做了,事实证明有很多人使用它,喜欢它。如果你不

2007-10-29 13:45:00 1915

原创 多处理器系统在指定cpu上运行进程

 CPUSET是linux内核中的轻量级对象,它能使用户区分多个处理器,在每个处理器上单独运行进程,通过创建cpu集的方式。这是通过文件系统的方式实现的(旧内核是通过syscall方式)。1) mkdir /dev/cpuset2) mount -t cpuset none /dev/cpuset3) mkdir /dev/cpuset/my_cpu04) echo

2007-10-25 21:23:00 1426

原创 在视频(YUV2 or YV12)上叠加字幕

在视频(YUV2 or YV12)上叠加字幕 ,一般的方法是把YUV转成RGB,与RGB叠加完成后再转回YUV,但这样会导致:1)把原始视频转成RGB再转回YUV是损失视频质量,我们都知道YUV与RGB之间的转换是有播音员损的。 2) 转换会浪费cpu, 影响效率。那么我们能不能直接把字幕转成YUV,然后再叠加呢?答案就yes。(待续)

2007-10-12 16:52:00 4241 2

原创 linux 下使用UNICODE

因为要使用FreeType显示中 文,而FreeType需要UNICODE的字符,所以要把字符转成UNICODE。1) 检查系统是哪种编码,我的系统是FC6,用命令locale显示本机当前编码格式:LANG=zh_CN.UTF-8LC_CTYPE="zh_CN.UTF-8"LC_NUMERIC="zh_CN.UTF-8"2) 使用iconv转到UNICODE void utf2unicode(ch

2007-10-12 16:38:00 2584

原创 用C实现C++的多态---剖析GTK的"对象" (四)

七. 写自己的子对象/************************************************************** 子对象RenderObject,继承于CObject-------render_object.h***************************************************************/#ifnde

2006-06-15 10:07:00 1072

原创 用C实现C++的多态---剖析GTK的"对象" (三)

六. 全部代码/***********************************************************************object.h文件************************************************************************/#ifndef _H_OBJECT_H_#define _H_O

2006-06-15 10:05:00 1134

原创 用C实现C++的多态---剖析GTK的"对象" (二)

四. 如何构造一个对象    我们用下面的结构来描述一个对象:    typedef struct _ClassType    {        char* name; /*对象名,唯一*/        int   object_size;/*对象大小,创建实列时分配内存要用到*/        int   class_size; /*全部虚函数大小,如sizeof(CObjectClass)*

2006-06-14 16:58:00 1293

原创 用C实现C++的多态---剖析GTK的"对象" (一)

用C实现C++的多态---剖析GTK的"对象" (一)一. 前言            前一段时间用到GTK图形库,对它的C语言实现的面像对象概念很感兴趣,在这里写下自己的一点见解,同时也是理理自己的思路。二. C++中的多态              class A {                     virtual void output(void) { pri

2006-06-14 16:28:00 2066

原创 Splicing MPEG Video Streams in the Compressed Domain(翻译)

MPEG视频拼接纲要:1.       简介2.       Splicing算法3.       帧转换4.       速率控制5.       实验结果: PSNR、Buffer、Splicing MPEG2 Stream6.       感言7.       参考文献  1.       简介Splicing(拼接技术)通常用在视频编辑应用中

2006-06-14 10:13:00 1261

原创 自己动手制作linux硬盘启动

要求: 有一个已安装的linux系统和一个空的硬盘, 这里用VMWare 虚拟机作测试环境,用knoppix作linux系统。        用这样的环境仅仅是为了方便说明。1) 从光盘启动knoppix2) 用fdisk为硬盘分区 (记得要切换到root用户,VMWare创建系统时默认为SCSI硬盘, 不过这里假设硬盘为hda)3) mke2fs hda14) mount /

2006-06-12 17:02:00 1986

原创 制作LiveCD

1) 需要的工具Redhat9.0、VMware虚拟机,选择用grub作loader2) 制作ramdisk               A) cd /usr/local && mkdir initrd    B) dd if=/dev/zero of=initrd.img bs=1024 count=4000    C) mke2fs -F -m 0 initrd.img    D) mount

2006-05-12 23:18:00 2125

原创 在Redhat9下安装GTK-FrameBuffer

在Redhat9下安装GTK-FrameBuffer操作系统:redhat9软件:gtk+-2.2(这里要说一下,用gtk+-2.2是因为它的依赖库glib等rh9已经满足,用高版本的还要安装高版本的glib、pango等)第一步:编译1>./configure --prefix=/usr/local --with-gdktarget=linux-fb2>make && make install第

2006-02-17 21:18:00 2383

转载 gcc详解(收藏)

在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器.目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序.GCC不仅功能非常强大,结构也异常灵活.最值得称道的一点

2006-02-15 11:51:00 2277

转载 最简单明了的驱动开发说明: Windows NT 设备驱动程序开发基础(转)

关键字 设备驱动程序 一、背景介绍 1.1 Windows NT操作系统的组成 1.1.1 用户模式(User Mode)与内核模式(Kernel Mode) 从Intel 80386开始,出于安全性和稳定性的考虑,该系列的CPU可以运行于ring0 ~ring3从高到低四个不同的权限级,对数据也提供相应的四个保护级别。运行于较 低级别的代码不能随意调用高级别的

2005-11-14 21:29:00 2247

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除