当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪第九学 linux内核——内存寻址——分页机制(1)               先前我们介绍段机制的时候说到,x86的段机制把程序的逻辑地址转换成线性地址,这里要讲的分页机制是把线性地址映射成物理地址,也就说说,x86其实.........
    ▪java设计模式之原型模式      原型模式 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。     作者:GB_young 发表于2013-5-11 15:17:15 原文链接 阅读:33 评论:0 查看评论 ......
    ▪下载android的linux内核的方法       1、安装git        android的linux内核可以从http://android.git.kernel.org/下载,但下载需要使用git,windows版的git可以从http://code.google.com/p/msysgit/下载,有完全安装版和便携版(porta.........

[1]第九学 linux内核——内存寻址——分页机制(1)
    来源: 互联网  发布时间: 2013-11-19

         先前我们介绍段机制的时候说到,x86的段机制把程序的逻辑地址转换成线性地址,这里要讲的分页机制是把线性地址映射成物理地址,也就说说,x86其实是用了两套机制把逻辑地址转换成物理地址的。我们也提到linux内核是怎样绕过段机制从而让x86的分段机制看起来不起作用的,我们还说到这样的处理造成了段的数据保护的问题。下来我们就来讨论x86的分页机制。我们的思路依然是先介绍x86的分页机制,然后再讨论linux在上边的实现。

      我们还是从实现linux分页机制的软硬件构造上入手。实现分页机制的硬件结构有:四个专用于分页机制的32位寄存器:CR0、CR1、CR2、CR3,分页部件,页面高速缓存;软件结构有:页,页表,页目录,页表项。

1、四个寄存器

        我们说CR0这个寄存器决定了我们是否启用分页机制,CR0=0时表示不启用分页机制,此时经过段机制转换来的地址直接映射到物理地址(大家可以想到,如果这样的话,像上节linux内核的处理方法,势必会带来段的数据保护问题的),反之,映射到4G的线性地址。

        CR1暂时没用。

        CR2是缺页线性地址寄存器,当发生缺页异常的时候,该寄存器保存最后一次出现缺页的全32位线性地址,这在异常处理时会介绍到,这里我们不深究它的实现过程。

        CR3就厉害了,它被叫做页目录基址寄存器,顾名思义,它保存的是页目录的物理地址。我们就是通过该寄存器里边的值,找到对应的页目录中的页表项,从而知道我们的一个页是存储里内存中的哪个位置的。

2、页与页表

        1)、页

       分页机制是这么一个思路:我们将线性地址空间划分成若干相等的片,这一片就称为一个页,并给各页编号,从0开始,如第1页,第2页等。相应的,我们也把物理地址空间划分成与页大小相等的若干存储块,也同样为他们编号,仍然可以从0开始。程序的映射过程是这样的,现在我们的程序的容量是以页为单位(即要么占一个页大小,要么占几个页大小),那么我们要控制线性地址空间中的每个页怎么往物理地址里边存就比较容易了。

        这样就有一个问题了,因为页是固定大小的,那么它过大或者过小都会影响内存使用率。页过大,有时候会存在冗余空间;页过小,若有分支指令,则会存在在页之间跳转的情况,同样影响效率。x86支持的标准页大小为4KB(也支持4MB)。

        2)、页表

        页表是把线性地址转换成物理地址的一种数据结构。它的作用相当于段描述符表。它包括两个成员:

        物理页面基地址:线性地址空间中的一个页装入内存后所对应的物理页面的起始地址。

        页的属性:描述一些页的属性信息。

        我们说过页面大小为4KB,即一个页面会占4KB的空间,那么每个页面的物理页面基地址必然是4KB的整数倍,这样其地址的最低12位总是0,那么我们就可以用这12位存放页的属性,这样用32位的地址就完全可以描述页的映射关系,也就是页表中一个表项占四个字节就够了。

        不过,4GB的线性地址空间可以被划分为1M个4KB大小的页,每个页表项占4个字节,则1M个页表项就需要占4MB的空间,而且还要求是连续的,这显然是不现实的,于是把这4MB的页表再以4KB为大小分页,分为1KB个页,同样对每个项描述需要四个字节,这就是两级页表。

       

       

作者:bcs_01 发表于2013-5-11 12:35:19 原文链接
阅读:45 评论:0 查看评论

    
[2]java设计模式之原型模式
    来源: 互联网  发布时间: 2013-11-19

原型模式

用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

 

 

作者:GB_young 发表于2013-5-11 15:17:15 原文链接
阅读:33 评论:0 查看评论

    
[3]下载android的linux内核的方法
    来源: 互联网  发布时间: 2013-11-19

1、安装git

       android的linux内核可以从http://android.git.kernel.org/下载,但下载需要使用git,windows版的git可以从http://code.google.com/p/msysgit/下载,有完全安装版和便携版(portable)两个版本可供选择,不常用git的话选portable版就可以了。

      下载portable版的git后,解压缩,然后运行git-bash,会出现一个console窗口。

2、android的kernel有多个部分,可根据需要运行以下命令下载需要的内容。

      在git的console窗口中执行以下命令即可下载内核:

    $ git clone https://android.googlesource.com/kernel/common.git  //这个是linux内核,也可以是git clone http://android.git.kernel.org/kernel/common,网上许多地方介绍的命令是git clone git://android.git.kernel.org/kernel/common,但现在似乎是不能用了。

    $ git clone https://android.googlesource.com/kernel/goldfish.git

    $ git clone https://android.googlesource.com/kernel/msm.git

    $ git clone https://android.googlesource.com/kernel/omap.git

    #git clone https://android.googlesource.com/kernel/samsung.git

    $ git clone https://android.googlesource.com/kernel/tegra.git

3、checkout出对应的内核

   进入samsung目录

   $git branch -a    //列出所有可用的内核版本

   $git checkout  remotes/origin/android-samsung-3.0-ics-mr1   //checkout出想要使用的内核

如果要下载所有的android源文件,下载方法见http://source.android.com/source/downloading.html

 

补充:关于android安装开发过程中的需要的一些开发包,在终端执行以下命令:

          sudo apt-get install git-core gnupg valgrind flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

 

作者:taozi343805436 发表于2013-5-11 14:24:34 原文链接
阅读:69 评论:0 查看评论

    
最新技术文章:
▪主-主数据库系统架构    ▪java.lang.UnsupportedClassVersionError: Bad version number i...    ▪eclipse项目出现红色叉叉解决方案
▪Play!framework 项目部署到Tomcat    ▪dedecms如何做中英文网站?    ▪Spring Batch Framework– introduction chapter(上)
▪第三章 AOP 基于@AspectJ的AOP    ▪基于插件的服务集成方式    ▪Online Coding开发模式 (通过在线配置实现一个表...
▪观察者模式(Observer)    ▪工厂模式 - 程序实现(java)    ▪几种web并行化编程实现
▪机器学习理论与实战(二)决策树    ▪Hibernate(四)——全面解析一对多关联映射    ▪我所理解的设计模式(C++实现)——解释器模...
▪利用规则引擎打造轻量级的面向服务编程模式...    ▪google blink的设计计划: Out-of-Progress iframes    ▪FS SIP呼叫的消息线程和状态机线程
▪XML FREESWITCH APPLICATION 实现    ▪Drupal 实战    ▪Blink: Chromium的新渲染引擎
▪(十四)桥接模式详解(都市异能版)    ▪你不知道的Eclipse用法:使用Allocation tracker跟...    ▪Linux内核-进程
▪你不知道的Eclipse用法:使用Metrics 测量复杂度    ▪IT行业为什么没有进度    ▪Exchange Server 2010/2013三种不同的故障转移
▪第二章 IoC Spring自动扫描和管理Bean    ▪CMMI简介    ▪目标检测(Object Detection)原理与实现(六)
▪值班总结(1)——探讨sql语句的执行机制    ▪第二章 IoC Annotation注入    ▪CentOS 6.4下安装Vagrant
▪Java NIO框架Netty1简单发送接受    ▪漫画研发之八:会吃的孩子有奶吃    ▪比较ASP和ASP.NET
▪SPRING中的CONTEXTLOADERLISTENER    ▪在Nginx下对网站进行密码保护    ▪Hibernate从入门到精通(五)一对一单向关联映...
▪.NET领域驱动设计—初尝(三:穿过迷雾走向光...    ▪linux下的块设备驱动(一)    ▪Modem项目工作总结
▪工作流--JBPM简介及开发环境搭建    ▪工作流--JBPM核心服务及表结构    ▪Eclipse:使用JDepend 进行依赖项检查
▪windows下用putty上传文件到远程Linux方法    ▪iBatis和Hibernate的5点区别    ▪基于学习的Indexing算法
▪设计模式11---设计模式之中介者模式(Mediator...    ▪带你走进EJB--JMS编程模型    ▪从抽象谈起(二):观察者模式与回调
▪设计模式09---设计模式之生成器模式(Builder)也...    ▪svn_resin_持续优化中    ▪Bitmap recycle方法与制作Bitmap的内存缓存
▪Hibernate从入门到精通(四)基本映射    ▪设计模式10---设计模式之原型模式(Prototype)    ▪Dreamer 3.0 支持json、xml、文件上传
▪Eclipse:使用PMD预先检测错误    ▪Jspx.net Framework 5.1 发布    ▪从抽象谈起(一):工厂模式与策略模式
▪Eclipse:使用CheckStyle实施编码标准    ▪【论文阅读】《Chain Replication for Supporting High T...    ▪Struts2 Path_路径问题
▪spring 配置文件详解    ▪Struts2第一个工程helloStruts极其基本配置    ▪Python学习入门基础教程(learning Python)--2 Python简...
▪maven springmvc环境配置    ▪基于SCRUM的金融软件开发项目    ▪software quality assurance 常见问题收录
▪Redis集群明细文档    ▪Dreamer 框架 比Struts2 更加灵活    ▪Maven POM入门
▪git 分支篇-----不断更新中    ▪Oracle非主键自增长    ▪php设计模式——UML类图
▪Matlab,Visio等生成的图片的字体嵌入问题解决...    ▪用Darwin和live555实现的直播框架    ▪学习ORM框架—hibernate(二):由hibernate接口谈...
▪(十)装饰器模式详解(与IO不解的情缘)    ▪无锁编程:最简单例子    ▪【虚拟化实战】网络设计之四Teaming
▪OSGi:生命周期层    ▪Javascript/Jquery——简单定时器    ▪java代码 发送GET、POST请求
▪Entity Framework底层操作封装(3)    ▪HttpClient 发送GET、POST请求    ▪使用spring框架,应用启动时,加载数据
▪Linux下Apache网站目录读写权限的设置    ▪单键模式的C++描述    ▪学习ORM框架—hibernate(一):初识hibernate
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3