Linux虚拟内存基础知识
1.从80386开始,Intel处理器的线性32被分为3个域,最高十位为此线性地址在页目录的索引;中间十位为此线性地址在页表中的索引;最低12为物理地址的低12位(也可以说是页内偏移量)。每个进程一定有各自独立的页表(注意:这里说的是进程,而不是线程。在linux里线程其实就是轻量级的进程,他们是连页目录都相同的进程,只是他们的的堆栈在线性空间的位置不同)。
2.线性地址(也就是虚拟地址)被分成以固定长度为单位的组,成为页。而分页单元把所有ram分成固定长度的页框(又叫物理页)页框的长度和页的长度一致。注意区分页和页框,页只是一个数据块,可以存放在实际的任何页框中,也就是说,页是内容,页框是容器。
3.一个进程的线性地址空间可以分为n多个连续的页,而这些也可以通过mmu和页表去转换为实际的物理地址去访问对应的页框(物理页)。所以一个进程的线性页可以对应任何一个物理页,只要修改页表就可以修改,线性页和物理页的对应关系。
4.当mmu开启后,不管是内核还是应用程序在此后的过程中所用的地址都是虚拟地址,都是要通过mmu进行转换才能访问到实际的物理地址。所以不管是内核还是应用程序的对任何内存的访问都要对应一张页表,进行从虚拟地址到物理地址的转换。
5.对页表的访问操作同样也用的是虚拟地址,众所周知在fork出一个新进程A 时肯定至少要为这个新线程建立长度为1k*4的一级页表,而内核对这个一级页表进行的任何修改操作同样也是使用虚拟地址进程操作的。同样,如果上面 fork出的线程A如果需要对某个虚拟地址进行读写操作时,这时mmu就会发现在一级页表内找不到这个虚拟地址对应的二级页表,mmu这时会产生一个缺页中断,通知内核,内核这时会申请1k*4+4k的空间。其中1k用于分配给这个虚拟地址空间所对应的二级页表,4k用于给进程的代码或者数据用。
通过以上分析可以总结出,要申请一个4M空间至少要4M+2k*4的物理空间。(呵呵,为什么要加“至少”呢,因为如果要申请的4M的空间落在两个二级页表之中的话,那就必须要两个二级页表了,最极端的情况是,这4M分别在不同的页表中,这时就需要1M*4+1K*4的空间来放页表了。
6.内核在启动后,会把896m的以下的RAM全部映射到内核空间,即以 0xC0000000为基地址的位置。这时内核对虚拟地址0xC0000000~0xC0000000+896m操作即是对0X0~896m的物理地址操作。内核代码和静态内核数据结构就存放在这个0xC0000000~0xC0000000+
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
忘记在哪里看到的了。。原作者请见谅~~
Fedora Core 6
对于服务进程的变化
bluetooth
相关的服务有 bluetooth,hcid,hidd,sdpd,dund,pand
capi
仅针对ISDN
用户
mctrans SELINUX
必须的服务。
mdmpd
监视多路设备的服务
pcscd
支持智能卡的服务,这是FC6
加入智能卡支持的特征之一
补充几个Fedo ......
与Windows将硬盘看做“C盘”、“D盘”几个独立的分区不同,Linux将整个文件系统看做一棵树,这棵树的树根叫做根文件系统,用/表示。各个分区通过“挂载”(mount)以文件夹的形式访问。
在/中的文件夹很多,本文介绍常见文件夹的意义。Linux的目录结构确实比较复杂,但设置合 ......
最近公司要做linux嵌入式系统,目前主板是采用x86结构。所以就在自己的本本上装了一个虚拟的红旗6。
因为是新手,刚开始的时候认为linux裁剪难的应该是系统内核裁剪,可是一段时间发现不是的。相比之下内核是比较简单的。
内核裁剪主要的工作是你需要什么功能就把对应的模块选上,难点只是英语不容易看懂,要到网上搜索翻 ......
我用的是Centos5.4 DVD光盘安装的linux操作系统,安装linux的时候选上开发工具,Xmanager,与数据库相关的包。
操作系统安装完成之后需要进行一系列的配置才能安装oracle10g,下面把主要步骤记录下来。
1.安装完操作系统之后还是有些包没有安装,然而安装oracle10g的时候需要用到,没有安装的包有:
libXp-1.0.0-8.i386.rp ......