- 博客(19)
- 收藏
- 关注
原创 用户进程共享3~4G内核地址空间---Linux内核笔记
首先要说明的一点是:Linux在内核态运行时(中断生生或系统调用发生后进入内核态),使用的是当前进程的页目录,这样做的好处是不用频繁的切换页目录,防止频繁刷新TLB,提高效率。每个用户进程有自己独立的0~3G地址空间,共享3~4G地址空间,也就是说每个进程页表的前768项是独立的,后面的256项全部进程共享。中断发生或系统调用后,进程陷入内核态,这时候需要使用3G~4G的内核地址空间,那么内核是在
2008-01-01 23:05:00
3179
1
原创 共享内存的实现---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
2211
原创 Linux中实时进程的调度---Linux内核笔记
Linux的进程分普通进程和实时进程,而实时进程又分SCHED_FIFO与SCHED_RR,它们都比普通进程的优先级高。对于SCHED_FIFO进程,它就一直运行直到退出,除非它阻塞才会释放CPU, 或被更高优先级的实时进 程抢占。对于SCHED_RR(时间片轮转)进程,只有当它的时间片用完,内核会把它放到进程队列的末尾。我们来看看在2.4内核中对应的调度代码:asmlinkage
2007-12-14 23:48:00
7397
原创 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
9948
原创 中断发生后栈的布局--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
1678
原创 初识FVWM-窗口管理器
fvwm是一款X11下的窗口管理器,它的设计目标是最小化内存消耗,提供虚拟桌面,还有就是给于用户最大的自由。它最吸引人的地方莫过于极大的可定制性,几乎所有窗口管理器所做的事情你都可以去定制。不管是最大化,最小化,移动,关闭窗口,还是标题栏的颜色,大小,以及鼠标单击,双击和拖动时的动作,你都可以去控制。也许有些时候把权利过多的给于用户并不明智,但fvwm做了,事实证明有很多人使用它,喜欢它。如果你不
2007-10-29 13:45:00
2027
原创 多处理器系统在指定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
1538
原创 在视频(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
4374
1
原创 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
2658
原创 用C实现C++的多态---剖析GTK的"对象" (四)
七. 写自己的子对象/************************************************************** 子对象RenderObject,继承于CObject-------render_object.h***************************************************************/#ifnde
2006-06-15 10:07:00
1107
原创 用C实现C++的多态---剖析GTK的"对象" (三)
六. 全部代码/***********************************************************************object.h文件************************************************************************/#ifndef _H_OBJECT_H_#define _H_O
2006-06-15 10:05:00
1185
原创 用C实现C++的多态---剖析GTK的"对象" (二)
四. 如何构造一个对象 我们用下面的结构来描述一个对象: typedef struct _ClassType { char* name; /*对象名,唯一*/ int object_size;/*对象大小,创建实列时分配内存要用到*/ int class_size; /*全部虚函数大小,如sizeof(CObjectClass)*
2006-06-14 16:58:00
1333
原创 用C实现C++的多态---剖析GTK的"对象" (一)
用C实现C++的多态---剖析GTK的"对象" (一)一. 前言 前一段时间用到GTK图形库,对它的C语言实现的面像对象概念很感兴趣,在这里写下自己的一点见解,同时也是理理自己的思路。二. C++中的多态 class A { virtual void output(void) { pri
2006-06-14 16:28:00
2109
原创 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
1299
原创 自己动手制作linux硬盘启动
要求: 有一个已安装的linux系统和一个空的硬盘, 这里用VMWare 虚拟机作测试环境,用knoppix作linux系统。 用这样的环境仅仅是为了方便说明。1) 从光盘启动knoppix2) 用fdisk为硬盘分区 (记得要切换到root用户,VMWare创建系统时默认为SCSI硬盘, 不过这里假设硬盘为hda)3) mke2fs hda14) mount /
2006-06-12 17:02:00
2042
原创 制作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
2269
原创 在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
2429
转载 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
2328
转载 最简单明了的驱动开发说明: Windows NT 设备驱动程序开发基础(转)
关键字 设备驱动程序 一、背景介绍 1.1 Windows NT操作系统的组成 1.1.1 用户模式(User Mode)与内核模式(Kernel Mode) 从Intel 80386开始,出于安全性和稳定性的考虑,该系列的CPU可以运行于ring0 ~ring3从高到低四个不同的权限级,对数据也提供相应的四个保护级别。运行于较 低级别的代码不能随意调用高级别的
2005-11-14 21:29:00
2328
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人