精华内容
下载资源
问答
  • 以下关于CISC和RISC的叙述中,错误的是() A. 在CISC中,复杂指令都采用硬布线逻辑来执行 B. 一般而言,采用CISC技术的CPU,其芯片设计复杂度更高 C. 在RISC中, 更适合采用硬布局逻辑执行指令 D. 采用RISC技术,...

    天道酬勤,思者常新。


    以下关于CISC和RISC的叙述中,错误的是()

    A. 在CISC中,复杂指令都采用硬布线逻辑来执行
    B. 一般而言,采用CISC技术的CPU,其芯片设计复杂度更高
    C. 在RISC中, 更适合采用硬布局逻辑执行指令
    D. 采用RISC技术,指令系统中的指令种类和寻址方式更少。

    正确答案:B

    解析:

    本题考查CISC和RISC的区别,这是一种常见的考题,二者的区别如下表所示:
    在这里插入图片描述
    总结:RISC实现起来更简单,实现方式更多。 CISC反之。


    最近在进行软考系列精选真题解析, 欢迎点赞、关注、阅读~

    展开全文
  • 各种软件系统架构图解析

    千次阅读 2019-01-09 15:10:22
    2.ErrorHandling Aspect:整个系统采用一致的错误/异常处理方式。 3.Log Aspect:用于系统异常、日志记录、业务操作记录等。 四.规则 1.系统各层次及层内部子层次之间都不得跨层调用。 2.Entity object 在...

    发布一企业技术架构图,供大家参考。

     

     

    该技术架构图是本人根据多年企业技术架构经验而制定,是企业技术的总架构图,希望对CTO们有所借鉴。

     简单说明:

    1.中间件基础运行环境是经过统一规划的以WebLogic、JBOSS为主的集群环境                            

    2.企业集成平台是以基础业务应用为基础服务于上层平台和基础业务应用的高度集成平台         

    3.数据中心是企业公共数据的集中管理比如用户数据、企业编码,可以通过数据集成平台或服务集成平台分发给其他应用     

     

    项目做了不少,都没画过架构图,这次被要求画图,画的很丑,请大家看图本身包含的系统架构信息

    一、架构整体图

      

       1、核心是两库一线

      1.1 接口总线

        所有算法功能抽象成接口,其中大部分接口的方法都是泛型方法,是为了解决某一大类问题的

      1.2 代码库

        代码库包含现接口总线中接口的各种实现

      1.3 应用库

        提供用户的界面或者提供给外部的服务

        是通过容器配置调用算法库中的代码来实现的各种应用          

     

    二、应用关系图

           1、应用通过配置从应用库中组装出自己的应用系统

           2、应用本身之外的东西尽量使用拦截器处理(授权访问、权限数据推送、异常处理、缓存、日志等)

           3、使用消息队列做高并发应用支撑(秒杀类似应用)

           4、使用分布式任务系统做周期作业、数据维护、数据计算等

     

     

    ENode架构图

     

    什么是ENode

    ENode是一个.NET平台下,纯C#开发的,基于DDD,CQRS,ES,EDA,In-Memory架构风格的,可以帮助开发者开发高并发、高吞吐、可伸缩、可扩展的应用程序的一个应用开发框架。

    • 开源项目地址:https://github.com/tangxuehua/enode
    • 作者博客地址:http://www.cnblogs.com/netfocus/category/496012.html
    • QQ交流群号:185916873
    • 微信公众号:ENode

    ENode框架特色

    1. 一个DDD开发框架,完美支持基于六边形架构思想的开发
    2. 实现CQRS架构思想,并且框架提供C端命令的处理结果的返回,支持同步返回和异步返回
    3. 内置Event Sourcing(ES)架构模式,让C端的数据持久化变得通用化
    4. 聚合根常驻内存,in-memory domain model
    5. 聚合根的处理基于Command Mailbox, Event Mailbox的思想,类似Actor Model, Actor Mailbox
    6. 严格遵守聚合内强一致性、聚合之间最终一致性的原则
    7. Group Commit Domain event
    8. 基于聚合根ID+事件版本号的唯一索引,实现聚合根的乐观并发控制
    9. 框架保证Command的幂等处理
    10. 通过聚合根ID对命令或事件进行路由,做到最小的并发冲突、最大的并行处理
    11. 消息发送和接收基于分布式消息队列EQueue,支持分布式部署
    12. 基于事件驱动架构范式(EDA,Event-Driven Architecture)
    13. 基于队列的动态扩容/缩容
    14. EventDB中因为存放的都是不可变的事件,所以水平扩展非常容易,框架可内置支持
    15. 支持Process Manager(Saga),以支持一个用户操作跨多个聚合根的业务场景,如订单处理,从而避免分布式事务的使用
    16. ENode实现了CQRS架构面临的大部分技术问题,让开发者可以专注于业务逻辑和业务流程的开发,而无需关心纯技术问题

    晚上把公司应用的架构结合之前研究的东西梳理了下,整理了一张架构规划图,贴在这里备份

    下面是个人理解的做架构的几个要点:

    1、系统安全

    这是首要考虑的,以这张图为例,网络划分为3个区:

    a) DMZ区可以直接公网访问,也可以 与App Core区互通,但不能直接与DB Core区互通 (通常这里放置 反向代理Web服务器)

    b) App Core区能与DMZ区、DB Core区互通,但是无法直接从公网访问 (通常这里放置 应用服务器、中间件服务器之类)

    c) DB Core区仅与App Core区互通 (通常这里放置 核心数据库)

    2、尽量消除单点故障

    上图中,除了“硬件负载均衡”节点外,其它节点都可以部署成集群(DB有点特殊,传统RDBMS要实现分布式/集群还是比较困难的,要看具体采用的数据库产品,并非所有数据库都能方便的做Sharding),Jboss本身可以通过Domain模式+mod_cluster实现集群、Redis通过Master/Slave以Sentinel方式可以实现HA、IBM MQ本身就支持集群、FTP Server配合底层储存阵列也可以做到HA、Nginx静态资源服务器自不必说

    3、成本

    尽量采用开源成熟产品,jboss、redis、nginx、apache、mysql、rabbit MQ都是很好的选择。硬件负载均衡通常成本不低,但是效果明显,如果实在没钱,域名解析采用DNS轮询策略,也能达到类似效果,只不过可靠性略差。

    4、Database问题

    常规企业应用中,传统关系型数据仍然是主流,但是no-sql经过这几年发展,技术也日渐成熟了,一些非关键数据可以适当采用no-sql数据库,比如:系统日志、报文历史记录这类相对比较独立,而且增长迅速的数据,可以考虑存储到no-sql db甚至HDFS、TFS等分布式开源文件系统中。

    如果系统数据量级达到单机RDBMS的上限,尽早考虑Sharding方案,目前mysql在这方面比较成熟,其它数据库就不好说了。

    5、性能

    web server、app server这些一般都可以通过集群实现横向扩张,满足性能日常增长的需求。最大的障碍还是DB,如果规模真达到了DB的上限,还是考虑换分布式DB或者迁移到“云”上吧。

     

    HBase 系统架构图

      

      组成部件说明   Client:      使用HBase RPC机制与HMaster和HRegionServer进行通信      Client与HMaster进行通信进行管理类操作      Client与HRegionServer进行数据读写类操作      Zookeeper:      Zookeeper Quorum存储-ROOT-表地址、HMaster地址      HRegionServer把自己以Ephedral方式注册到Zookeeper中,HMaster随时感知各个HRegionServer的健康状况      Zookeeper避免HMaster单点问题      HMaster:      HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master在运行      主要负责Table和Region的管理工作:      1 管理用户对表的增删改查操作      2 管理HRegionServer的负载均衡,调整Region分布      3 Region Split后,负责新Region的分布      4 在HRegionServer停机后,负责失效HRegionServer上Region迁移      HRegionServer:      HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据

      

      HRegionServer管理一些列HRegion对象;     每个HRegion对应Table中一个Region,HRegion由多个HStore组成;    每个HStore对应Table中一个Column Family的存储;      Column Family就是一个集中的存储单元,故将具有相同IO特性的Column放在一个Column Family会更高效

      HStore:      HBase存储的核心。由MemStore和StoreFile组成。      MemStore是Sorted Memory Buffer。用户写入数据的流程:

      

      Client写入 -> 存入MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 触发Compact合并操作 -> 多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除 -> 当StoreFiles Compact后,逐步形成越来越大的StoreFile -> 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split成2个Region,Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。 由此过程可知,HBase只是增加数据,有所得更新和删除操作,都是在Compact阶段做的,所以,用户写操作只需要进入到内存即可立即返回,从而保证I/O高性能。

      HLog      引入HLog原因:      在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的内存数据就会丢失,引入HLog就是防止这种情况      工作机制:      每个HRegionServer中都会有一个HLog对象,HLog是一个实现Write Ahead Log的类,每次用户操作写入Memstore的同时,也会写一份数据到HLog文件,HLog文件定期会滚动出新,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知,HMaster首先处理遗留的HLog文件,将不同region的log数据拆分,分别放到相应region目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

      HBase存储格式      HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,格式主要有两种:      1 HFile HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile      2 HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File

      HFile

      

      图片解释:     HFile文件不定长,长度固定的块只有两个:Trailer和FileInfo      Trailer中指针指向其他数据块的起始点      File Info中记录了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等      Data Index和Meta Index块记录了每个Data块和Meta块的起始点      Data Block是HBase I/O的基本单元,为了提高效率,HRegionServer中有基于LRU的Block Cache机制      每个Data块的大小可以在创建一个Table的时候通过参数指定,大号的Block有利于顺序Scan,小号Block利于随机查询      每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成, Magic内容就是一些随机数字,目的是防止数据损坏

      HFile里面的每个KeyValue对就是一个简单的byte数组。这个byte数组里面包含了很多项,并且有固定的结构。

      

      KeyLength和ValueLength:两个固定的长度,分别代表Key和Value的长度     Key部分:Row Length是固定长度的数值,表示RowKey的长度,Row 就是RowKey      Column Family Length是固定长度的数值,表示Family的长度      接着就是Column Family,再接着是Qualifier,然后是两个固定长度的数值,表示Time Stamp和Key Type(Put/Delete)      Value部分没有这么复杂的结构,就是纯粹的二进制数据

      HLog File

      

      HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括 sequence number和timestamp,timestamp是“写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。     HLog Sequece File的Value是HBase的KeyValue对象,即对应HFile中的KeyValue

      

      结束语:这篇文章是我专门在网上弄下来的,算是hbase部分的终极篇吧,我的服务端的源码系列也要基于这个顺序来开展。

     

     

    一.三层架构图

     

    二.系统各层次职责
    1.UI(User Interface)层的职责是数据的展现和采集,数据采集的结果通常以Entity object提交给BL层处理。Service Interface侧层用于将业务或数据资源发布为服务(如WebServices)。
    2.BL(Business Logic)层的职责是按预定的业务逻辑处理UI层提交的请求。
    (1)Business Function 子层负责基本业务功能的实现。
    (2)Business Flow 子层负责将Business Function子层提供的多个基本业务功能组织成一个完整的业务流。(Transaction只能在Business Flow 子层开启。)
    3.ResourceAccess层的职责是提供全面的资源访问功能支持,并向上层屏蔽资源的来源。
    (1)BEM(Business Entity Manager)子层采用DataAccess子层和ServiceAccess子层来提供业务需要的基础数据/资源访问能力。
    (2)DataAccess子层负责从数据库中存取资源,并向BEM子层屏蔽所有的SQL语句以及数据库类型差异。
    DB Adapter子层负责屏蔽数据库类型的差异。
    ORM子层负责提供对象-关系映射的功能。
    Relation子层提供ORM无法完成的基于关系(Relation)的数据访问功能。
    (3)ServiceAccess子层用于以SOA的方式从外部系统获取资源。
    注: Service Entrance用于简化对Service的访问,它相当于Service的代理,客户直接使用Service Entrance就可以访问系统发布的服务。Service     Entrance为特定的平台(如Java、.Net)提供强类型的接口,内部可能隐藏了复杂的参数类型转换。
    (4)ConfigAccess子层用于从配置文件中获取配置object或将配置object保存倒配置文件。
    4.Entity侧层跨越UI/BEM/ResourceManager层,在这些层之间传递数据。Entity侧层中包含三类Entity,如下图所示:

     
    三.Aspect
     Aspect贯穿于系统各层,是系统的横切关注点。通常采用AOP技术来对横切关注点进行建模和实现。
    1.Securtiy Aspect:用于对整个系统的Security提供支持。
    2.ErrorHandling Aspect:整个系统采用一致的错误/异常处理方式。
    3.Log Aspect:用于系统异常、日志记录、业务操作记录等。

    四.规则
    1.系统各层次及层内部子层次之间都不得跨层调用。
    2.Entity object 在各个层之间传递数据。
    3.需要在UI层绑定到列表的数据采用基于关系的DataSet传递,除此之外,应该使用Entity object传递数据。
    4.对于每一个数据库表(Table)都有一个DB Entity class与之对应,针对每一个Entity class都会有一个BEM Class与之对应。
    5.有些跨数据库或跨表的操作(如复杂的联合查询)也需要由相应的BEM Class来提供支持。
    6.对于相对简单的系统,可以考虑将Business Function子层和Business Flow 子层合并为一个。
    7.UI层和BL层禁止出现任何SQL语句。

    五.错误与异常
            异常可以分为系统异常(如网络突然断开)和业务异常(如用户的输入值超出最大范围),业务异常必须被转化为业务执行的结果。
    1.DataAccess层不得向上层隐藏任何异常(该层抛出的异常几乎都是系统异常)。
    2.要明确区分业务执行的结果和系统异常。比如验证用户的合法性,如果对应的用户ID不存在,不应该抛出异常,而是返回(或通过out参数)一个表示验证结果的枚举值,这属于业务执行的结果。但是,如果在从数据库中提取用户信息时,数据库连接突然断开,则应该抛出系统异常。
    3.在有些情况下,BL层应根据业务的需要捕获某些系统异常,并将其转化为业务执行的结果。比如,某个业务要求试探指定的数据库是否可连接,这时BL就需要将数据库连接失败的系统异常转换为业务执行的结果。
    4.UI层(包括Service层)除了从调用BL层的API获取的返回值来查看业务的执行结果外,还需要截获所有的系统异常,并将其解释为友好的错误信息呈现给用户。

    六.项目组织目结构
     以BAS系统为例。
    1.主目录结构:
     
    2.命名空间命名:每个dll的根命名空间即是该dll的名字,如EAS.BL.dll的根命名空间就是EAS.BL。每个根命名空间下面可以根据需求的分类而增加子命名空间,比如,EAS.BL的子空间EAS.BL.Order与EAS.BL.Permission分别处理不同的业务逻辑。
    3.包含众多子项目的庞大项目的物理组织:
     
    核心子项目Core的位置:

     
    Core子项目中包含一些公共的基础设施,如错误处理、权限控制方面等。

    七.发布服务与服务回调
    EAS系统为例。
     
    1.同UI层的Page一样,服务也不允许抛出任何异常,而是应该以返回错误码(int型,1表示成功,其它值表示失败)的形式来表明服务调用出现了错误,如果方法有返回值,则返回值以out参数提供。
    2. 如果BAS系统提供了WebService(Remoting)服务,则BAS必须提供BAS.Entrance.dll。 BAS.Entrance.dll封装了与BAS服务交换信息的通信机制,客户系统只要通过BAS.Entrance.dll就可以非常简便地访问BAS 提供的服务。
    3.如果BAS需要通过WebService(Remoting)回调客户系统,则必须提供仅仅定义了接口的BAS.CallBack.dll,客户系统将引用该dll,实现其中的接口,并将其发布为服务,供BAS回调。
    4.当WebService的参数或返回值需要是复杂类型――即架构图中的Service Entity,则Service Entity应该在对应的BAS.EntranceParaDef.dll或BAS.CallBackParaDef.dll中定义。 WebService定义的方法中的复杂类型应该使用Xml字符串代替(注意,Entrance和CallBack接口对应服务的方法的参数是强类型的),而Xml字符串和复杂类型对象之间的转换应当在BAS.Entrance.dll或BAS.CallBack.dll中实现。

     

     

        从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,分别介绍如下:

        1)应用程序层

             Android平台不仅仅是操作系统,也包含了许多应用程序,诸如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用程序。这些应用程序都是       用Java语言编写的,并且这些应用程序都是可以被开发人员开发的其他应用程序所替换,这点不同于其他手机操作系统固化在系统内部的系统软件,更加灵活和个    性化。

        2)应用程序框架层

             应用程序框架层是我们从事Android开发的基础,很多核心应用程序也是通过这一层来实现其核心功能的,该层简化了组件的重用,开发人员可以直接使用其提    供的组件来进行快速的应用程序开发,也可以通过继承而实现个性化的拓展。

             a) Activity Manager(活动管理器)

                  管理各个应用程序生命周期以及通常的导航回退功能

             b) Window Manager(窗口管理器)

                  管理所有的窗口程序

             c)  Content Provider(内容提供器)

                  使得不同应用程序之间存取或者分享数据

            d) View System(视图系统)

                  构建应用程序的基本组件

             e) Notification Manager(通告管理器)

                  使得应用程序可以在状态栏中显示自定义的提示信息

             f) Package Manager(包管理器) 

                  Android系统内的程序管理

             g)Telephony Manager(电话管理器)

                  管理所有的移动设备功能

             h)Resource Manager(资源管理器)

                  提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等

             i)Location Manager(位置管理器)

                 提供位置服务

             j)XMPP Service(XMPP服务)

                 提供Google Talk服务 

        3)系统运行库层

             从图中可以看出,系统运行库层可以分成两部分,分别是系统库和Android运行时,分别介绍如下:

             a)系统库

                  系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。其主要分为如下几个:

                  Ø  Surface Manager:

                      执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。 

         Ø  Media Framework: 

                      多媒体库,基于PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM。

                  Ø  SQLite:

                      小型的关系型数据库引擎 

                  Ø  OpenGL|ES:

                     根据OpenGL ES 1.0API标准实现的3D绘图函数库 

                  Ø  FreeType:

                      提供点阵字与向量字的描绘与显示 

                  Ø  WebKit:

                      一套网页浏览器的软件引擎

                  Ø  SGL:

                      底层的2D图形渲染引擎 

                  Ø  SSL:

                      在Andorid上通信过程中实现握手 

                  Ø  Libc:

                 从BSD继承来的标准C系统函数库,专门为基于embedded linux的设备定制

             b)Android运行时

                 Android应用程序时采用Java语言编写,程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分。

                 Ø  核心库

                     核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如android.os、android.net、android.media等等。

                 Ø  Dalvik虚拟机

                     Android程序不同于J2me程序,每个Android应用程序都有一个专有的进程,并且不是多个程序运行在一个虚拟机中,而是每个Android程序都有一                个Dalivik虚拟机的实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化          以及支持多个虚拟机的特点。需要注意的是,不同于J2me,Android程序在虚拟机中执行的并非编译后的字节码,而是通过转换工具dx将Java字节码转成dex格          式的中间码。

        4)Linux内核层 

            Android是基于Linux2.6内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核。

     

     

    Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架。

    Entity Framework的主要特点:

    1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2);

    2. 强劲的映射引擎,能很好地支持存储过程;

    3. 提供Visual Studio集成工具,进行可视化操作;

    4. 能够与ASP.NET, WPF, WCF, WCF Data Services进行很好的集成。

    架构图一

    架构图2

     

     

     

      刚刚来到一家新公司,首先会对项目进行一个大致了解,研究了两天了,有了个总体的把握了,下面就是我这个小菜鸟画的简单系统架构图!  

      有的时候架构庞大的吓人,有的时候架构一眼看穿,但里面却暗藏杀机,真的需要我们去认真学习,揣摩!

      不久前在园子里面看过一篇文章其中说道,设计架构无非就是一个字 → “”,当时看到这个字,想起来还真的是这么一回事,不过这里面去包含了很多的东西,我们现在就是不知道怎么拆,这个也不是一时半会能够了解的,需要我们认认真真的做,慢慢的积累,到时候就知道怎么拆了,而且还拆的很到位,所以加油!

      对于这个拆字园友们也给出了很多的理解,这是只是个人看法!

     

     

     

    Struts2 架构图

    Struts2架构图 


            请求首先通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和Dispatcher;FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。 
            ActionMapper取得了ActionMapping后,在Dispatcher的serviceAction方法里创建ActionProxy,ActionProxy创建ActionInvocation,然后ActionInvocation调用Interceptors,执行Action本身,创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。 


    Struts2部分类介绍 
    这部分从Struts2参考文档中翻译就可以了。 
    ActionMapper 
            ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,它屏蔽了Action对于Request等java Servlet类的依赖。Struts2中它的默认实现类是DefaultActionMapper,ActionMapper很大的用处可以根据自己的需要来设计url格式,它自己也有Restful的实现,具体可以参考文档的docs\actionmapper.html。 
    ActionProxy&ActionInvocation 
            Action的一个代理,由ActionProxyFactory创建,它本身不包括Action实例,默认实现DefaultActionProxy是由ActionInvocation持有Action实例。ActionProxy作用是如何取得Action,无论是本地还是远程。而ActionInvocation的作用是如何执行Action,拦截器的功能就是在ActionInvocation中实现的。 
    ConfigurationProvider&Configuration 
            ConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主要是尤其实现类XmlConfigurationProvider及其子类StrutsXmlConfigurationProvider来解析, 


    Struts2请求流程 
    1、客户端发送请求 
    2、请求先通过ActionContextCleanUp-->FilterDispatcher 
    3、FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action 
    4、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,这儿已经转到它的Delegate--Dispatcher来执行 
    5、ActionProxy根据ActionMapping和ConfigurationManager找到需要调用的Action类 
    6、ActionProxy创建一个ActionInvocation的实例 
    7、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用 
    8、Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。添加PreResultListener可以在Interceptor中实现,不知道其它还有什么方式? 

     

    短连接聊天服务 ,每半分钟刷新一次..

    客户端可切换3种渲染模式,全位图blit传输:sprite区块和MC

     

     

    架构图:

    模块与模块之间的通信也通过sendNotifcation发送消息。

     

    神仙道寻路方法:

    1. 2点是否可以直接到达,可以,则不走寻路,直接行进 2. 2点不能直接到达,进行寻路,找不到结果,寻找替代点 3. 正常寻路

    关于flash共享库:

    如果a的库里的资源设置了共享资源并设置了一个url 把a发布的swf放到设置的url的位置 b引入a的库里共享的资源..再发布b..这时b会自动从那个设置的url加载a

    浏览器缓存地址:C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files

    网页游戏的swf都加载到这里了。

    <深度排序>

    那就不停的 遍历 更具显示对象的Y 设置它们再容器里面的深度  不知道把同屏显示对象的Y再数组里面排序好 再设置深度 速度快  还是变排序边设置深度快 并且在数组里面排序好 这种方法要速度很好

    把图层封装成一个类。 和NPC和玩家都共同继承一个接口 iworldObject 加一个属性 depth. 创建的时候设置 这个属性。然后sortOn("depth");

    Array.Numberic 啊 默认都是 从小到大排序的 depth 是他的一个属性 npc 也统一有这个属性 然后就不用y轴排序了,看你的 y+height 挺纠结的 统一用 depth 这个属性排序

    这里判断这个 玩家的深度如果已经符合,就不要排序。 setChildIndex 消耗挺大的

     

     

    详解三层架构图

     PS: 在看三层架构的时候,找的了一个我感觉不错的材料,里面有如下一张图,打算详细的解释一下这张图,也总结一下三层的知识

      

    一、系统各层次职责

         1.UIUser Interface)层的职责是数据的展现和采集,数据采集的结果通常以Entity object提交给BL层处理Service Interface侧层用于将业务或数据资源发布为服务(如WebServices)。

        2.BLBusiness Logic)层的职责是按预定的业务逻辑处理UI层提交的请求。

        (1Business Function 子层负责基本业务功能的实现。

        (2Business Flow 子层负责将Business Function子层提供的多个基本业务功能组织成一个完整的业务流(Transaction只能在Business Flow 子层开启。)

        3ResourceAccess层的职责是提供全面的资源访问功能支持,并向上层屏蔽资源的来源。

      (1BEMBusiness Entity Manager)子层采用DataAccess子层和ServiceAccess子层来提供业务需要的基础数据/资源访问能力。

      (2DataAccess子层负责从数据库中存取资源,并向BEM子层屏蔽所有的SQL语句以及数据库类型差异。

        DB Adapter子层负责屏蔽数据库类型的差异。

        ORM子层负责提供对象-关系映射的功能。

        Relation子层提供ORM无法完成的基于关系(Relation)的数据访问功能。

      (3ServiceAccess子层用于以SOA的方式从外部系统获取资源。

             注:Service Entrance用于简化对Service的访问,它相当于Service的代理,客户直接使用Service Entrance就可以访问系统发布的服务。Service      Entrance为特定的平台(如Java.Net)提供强类型的接口,内部可能隐藏了复杂的参数类型转换。

      (4ConfigAccess子层用于从配置文件中获取配置object或将配置object保存倒配置文件。

        4Entity侧层跨越UI/BEM/ResourceManager层,在这些层之间传递数据。Entity侧层中包含三类Entity,如下图所示:

      

    二、Aspect

        Aspect贯穿于系统各层,是系统的横切关注点。通常采用AOP技术来对横切关注点进行建模和实现。

        1Securtiy Aspect:用于对整个系统的Security提供支持。

        2ErrorHandling Aspect:整个系统采用一致的错误/异常处理方式。

        3Log Aspect:用于系统异常、日志记录、业务操作记录等。

     

    三、规则

        1.系统各层次及层内部子层次之间都不得跨层调用。

        2Entity object 在各个层之间传递数据。

        3.需要在UI层绑定到列表的数据采用基于关系的DataSet传递,除此之外,应该使用Entity object传递数据。

        4.对于每一个数据库表(Table)都有一个DB Entity class与之对应,针对每一个Entity class都会有一个BEM Class与之对应。

        5.有些跨数据库或跨表的操作(如复杂的联合查询)也需要由相应的BEM Class来提供支持。

        6.对于相对简单的系统,可以考虑将Business Function子层和Business Flow 子层合并为一个。

        7UI层和BL层禁止出现任何SQL语句。

     

    四、错误与异常

             异常可以分为系统异常(如网络突然断开)和业务异常(如用户的输入值超出最大范围),业务异常必须被转化为业务执行的结果。

        1DataAccess层不得向上层隐藏任何异常(该层抛出的异常几乎都是系统异常)。

        2.要明确区分业务执行的结果和系统异常。比如验证用户的合法性,如果对应的用户ID不存在,不应该抛出异常,而是返回(或通过out参数)一个表示验证 结果的枚举值,这属于业务执行的结果。但是,如果在从数据库中提取用户信息时,数据库连接突然断开,则应该抛出系统异常。

        3.在有些情况下,BL层应根据业务的需要捕获某些系统异常,并将其转化为业务执行的结果。比如,某个业务要求试探指定的数据库是否可连接,这时BL就需要将数据库连接失败的系统异常转换为业务执行的结果。

        4UI(包括Service)除了从调用BL层的API获取的返回值来查看业务的执行结果外,还需要截获所有的系统异常,并将其解释为友好的错误信息呈现给用户。

     

    五、项目组织目结构

        以BAS系统为例。

         1.主目录结构:

     

         2.命名空间命名:每个dll的根命名空间即是该dll的名字,如EAS.BL.dll的根命名空间就是EAS.BL。每个根命名空间下面可以根据需求的 分类而增加子命名空间,比如,EAS.BL的子空间EAS.BL.OrderEAS.BL.Permission分别处理不同的业务逻辑。

        3.包含众多子项目的庞大项目的物理组织:

     

    核心子项目Core的位置:

     

     

    Core子项目中包含一些公共的基础设施,如错误处理、权限控制方面等。

    六、发布服务与服务回调

    EAS系统为例。

     

         1.同UI层的Page一样,服务也不允许抛出任何异常,而是应该以返回错误码(int型,1表示成功,其它值表示失败)的形式来表明服务调用出现了错误,如果方法有返回值,则返回值以out参数提供。

         2.如果BAS系统提供了WebServiceRemoting)服务,则BAS必须提供BAS.Entrance.dll。 BAS.Entrance.dll封装了与BAS服务交换信息的通信机制,客户系统只要通过BAS.Entrance.dll就可以非常简便地访问BAS 提供的服务。

         3.如果BAS需要通过WebServiceRemoting)回调客户系统,则必须提供仅仅定义了接口的BAS.CallBack.dll,客户系统将引用该dll,实现其中的接口,并将其发布为服务,供BAS回调。

         4.当WebService的参数或返回值需要是复杂类型――即架构图中的Service Entity,则Service Entity应该在对应的BAS.EntranceParaDef.dllBAS.CallBackParaDef.dll中定义。 WebService定义的方法中的复杂类型应该使用Xml字符串代替(注意,EntranceCallBack接口对应服务的方法的参数是强类型 的),而Xml字符串和复杂类型对象之间的转换应当在BAS.Entrance.dllBAS.CallBack.dll中实现。

     

     

     

      之前用一张图分析了Google给出的MVP架构,但是在Google给出的所有案例里面除了基本的MVP架构还有其它几种架构,今天就来分析其中的Clean架构。同样的,网上介绍Clean架构的文章很多,我也就不用文字过多叙述了,还是用一张类图来分析一下Clean架构的这个案例吧。好了,先直接上图!

     

      

     

      上完图,再说一说我对Clean架构的一个理解吧。对比前一篇文章的MVP架构图可以看出,clean在一定程度上继承了mvp的设计思想,但是其抽象程度比mvp更高。初次看这个demo的时候,确实被震撼了一下——原来用Java可以这样写代码!!!跟之前用的一些项目框架和我自己平时写的一些代码对比一下,只能感叹clean的这种设计思想真不是一般的程序员可以想出来的。它对接口、抽象类和实现类之间的实现、继承、调用关系发挥到了一个比较高的层次,它并不是像我们平时写代码那样很直白地写下来,而是充分利用了面向对象的封装性、继承性和多态性,是对面向对象思想的一个高度理解。其实,要说clean复杂,它确实有些难理解,可是如果你真的理解了面向对象思想,那么又会觉得这样的设计完全在情理之中。

     

     

          最近几个月都没有整理Blog,都忙着整理总结之前一段时间做的项目和学习的内容,然后想到把这些东西融合在一起,设计一个开发框架。

    这个框架用到了一些.NET社区比较前沿的技术,比如ORM, IOC容器, AOP拦截等,在.NET 2.0的基础上构建了一个.NET Remoting的分布式开发框架。

    项目开发最关注的就是开发效率,其次是项目的可管理可控性,最后是架构的可扩展性。我希望在我的框架设计中能够将这三者很好的整合在一起。

    大致的思路是:

    1、可扩展性:通过IOC容器的使用降低项目中各个模块之间的依赖性;用领域模式来设计业务核心层,降低业务层对数据层和界面层的耦合度;分布式选择Remoting为主,可以再包装为WebService或者直接发布为WebService。

    2、将敏捷的项目管理思路引入到框架中,框架充分支持TDD测试驱动和运行日志驱动,为敏捷管理提供技术支持。

    3、初步通过AOP技术减少和核心业务无关的系统级代码:如事务处理、异常处理、日志记录等;并在将来为架构提供可视化的代码配置生成工具,以最快的速度构建项目的主体结构,并尽可能大的增大灵活性。

          目前框架的主体已经完成,也重新整理VSS上的项目结构,并重新命名为LightningFramework。正在做细节调整,接下来的时间会逐步完成相关文档和演示程序。下面是主架构图:

    Framework整体架构设计图.jpg

     

    展开全文
  • 操作系统是计算机系统中的一个系统软件。 它是这样一些程序模块的集合:它们能有效地组织和管理计算机系统中的硬件及软件资源,合理地组织计算机工作流程,控制程序的执行,并向用户提供各种服务功能,使得用户能够...

    一、第一章

    1.操作系统

    操作系统是计算机系统中的一个系统软件。

    它是这样一些程序模块的集合:它们能有效地组织和管理计算机系统中的硬件及软件资源,合理地组织计算机工作流程,控制程序的执行,并向用户提供各种服务功能,使得用户能够灵活、方便和有效地使用计算机,使整个计算机系统能高效地运行。

    2.预输入

    事先将装有用户程序和数据的纸带(或卡片)装入纸带输入机(或卡片机),在一台外围机的控制下,再抵带(卡片)上的数据(程序)输入到磁带上。当CPU需要这些程序和数据时,再从磁带上高速地调入内存。

    3.分布式操作系统

    (自底向上的分层设计)将操作系统分为若干个层次,每层又由若干个模块组成,各层之间只存在着单向的依赖关系,即高层仅依赖于它的低层。

    4.实时操作系统

    是一个能够在指定或者确定的时间内完成系统功能以及对外部或内部事件在同步或异步时间内做出响应的系统。

    5.互斥共享

    要求系统在一段时间内只允许一个进程(线程)访问某种资源。

    二、选择题

    1.在计算机系统中配置操作系统的主要目的是(2)。操作系统的主要功能是管理计算机系统中的(3)。

    A: (1)增强计算机系统的功能;(2)提高系统资源的利用率;

    (3)提高系统的运行速度;(4)合理组织系统的工作流程,以提高系统吞吐量。

    B: (1)程序和数据;(2)进程;(3)资源;(4)作业;(5)软件;(6)硬件。

    2.操作系统是一种(2),它负责为用户和用户程序完成所有(4)的工作,(4)不是操作系统关心的主要问题。

    A: (1)应用软件;(2)系统软件;(3)通用软件;(4)软件包。

    B: (1)与硬件无关并与应用无关;(2)与硬件相关而与应用无关;

    (3)与硬件无关而与应用相关;(4)与硬件相关并与应用相关。

    C: (1)管理计算机裸机;               (2)设计、提供用户程序与计算机硬件系统的接口;

    (3)管理计算机中的信息资源;(4)高级程序设计语言的编译

    3.在设计分时操作系统时,首先要考虑的是(2);在设计批处理操作系统时,首先要考虑的是(3);在设计实时操作系统时,首先要考虑的是(4)。

    A,B,C:(1)灵活性和可适应性;(2)交互性和响应时间;

    (3)周转时间和系统吞吐量;(4)实时性和可靠性。

    4.从下面关于操作系统的论述中,论述正确的是(1)。

    1)对批处理作业,必须提供相应的作业控制信息。

    2)对于分时系统,不一定全部提供人机交互功能。

    3)从响应角度看,分时系统与实时系统的要求相似。

    4)采用分时操作系统的计算机系统中,用户可以独占计算机操作系统中的文件系统。

    5)从交互角度看,分时系统与实时系统相似。

    5.在下列系统中,(2)是实时信息系统,(5)是实时控制系统。

    A,B:(1)计算机激光照排系统;(2)民航售票系统;(3)办公自动化系统;

    (4)计算机辅助设计系统;(5)火箭飞行控制系统。

    三、填空题

    1.一个完整的计算机系统包括( 硬件)和( 软件)两部分。

    2.只有计算机硬件而没有任何软件支持的计算机称为(裸机 )。

    3.计算机系统中的资源包括( 硬件资源)和( 软件资源)两部分。

    4单道批处理系统的特点包括单道性、( 顺序性)和自动性。

    5.操作系统的特征包括并发性、(共享性 )、( 异步性)和虚拟性。

    6.处理机管理主要包括( 进程控制)、进程同步、进程通信和( 进程调度)。

    7.操作系统为用户提供的接口主要有命令接口、( 程序接口)和图形用户接口

    8.MS-DOS是( 单用户单任务)操作系统,Windows 95是( 单用户多任务)操作系统,Windows XP是( 多用户多任务)操作系统。

    四、判断题

    1.( 错)用户用C语言编写的工资管理程序属于系统软件。

    2.( 对)在多道批处理系统中,内存中可同时驻留多道程序,这些程序可以并发执行。

    3.( 错)分时系统中,时间片设置得越小,则平均响应时间越短。

    会受到用户数量的影响

    4.(  错)实时系统在响应时间、可靠性及交互作用能力等方面一般都比分时系统要求高。

    交互性较差

    5.( 错)在分时系统中,为使多个用户能够同时与系统交互,最关键的问题是系统能及时接收多个用户的输入。

    能在一段时间内,使所有用户程序都能运行

    6.( 错)在软实时系统中,系统必须满足任务对截止时间的要求,否则可能出现不可预期的结果。

    硬实时任务(Hard real-time Task)。系统必须满足任务对截止时间的要求,否则可能出现难以预测的结果。

    软实时任务(Soft real-time Task)。它也联系着一个截止时间,但并不严格,若偶尔错过了任务的截止时间,对系统产生的影响也不会太大。

    7.( 对)可靠性是实时系统的一大特点。

    8.( 对)并行性是指两个或多个事件在同一时刻发生,强调时间点。

    9.( 错误)虚拟存储器是指从物理上扩充内存的容量。

    虚拟存储器技术实际上就是将内存和外存统一管理的存储技术,虚拟存储器的容量取决于计算机的地址结构和寻址方式。

    10.( 对)微内核操作系统结构是现代操作系统普遍采用的结构。

    微内核由一群尽可能将数量最小化的软件程序组成,它们负责提供实现一个操作系统所需要的各种机制与功能,微内核操作系统就是一种基于微内核架构的操作系统。

    二.第二章

    1.进程上下文

    进程执行活动全过程的静态描述。

    进程上下文指进程切换时需要保持的进程状态,包括寄存器值、用户地址空间内容和核心栈状态。

    <p>

           抽象语法和传输语法之间的对应关系,称上下文关系。</p>

    <p>

           上下文语境指一个语句的上下文(书面语),或前言后语(口语)。</p>

    2.直接制约

    直接制约(同步)是由于进程间的相互合作而引起的,如一组在异步环境下的并发进程,各自的执行结果互为对方的执行条件,从而限制各进程的执行速度的过程称为并发进程的直接制约。

    解释:一般来说,一个进程相对另一个进程的运行速度是不确定的。也就是说,进程之间是在异步环境下运行的,每个进程都以各自独立的、不可预知的速度向运行的终点推进。但是,相互合作的进程需要在某些确定点上协调工作。一个进程到达了这些点后,除非另一进程已完成了某些操作,否则就不得不停下来等待这些操作的结束。

     多个相互合作的进程,在一些关键点上可能需要互相等待或互相交换信息,这种相互制约关系称为进程同步。

     在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一个进程才允许去访问此临界资源,进程之间的这种相互制约关系称为互斥。

     其实互斥是进程同步的一种特殊情况,互斥也是为了达到让进程之间协调推进的目的。

    3.临界区

    每个进程访问临界资源的那段程序代码为临界区。

    4.进程同步

    进程同步是指一组并发进程由于相互合作,共同完成某种任务,因而相互等待,使得各进程按一定的速度执行的过程。

    5.内核线程

    内核级线程,是指由内核管理的线程。用户应用程序通过API和系统调用(system call)来访问线程工具。

    进程是程序的一次执行,该程序可与其它程序并发执行。

    线程是进程内的一个可调度的执行单元。

    线程是进程的一个组成部分。一个进程可以有多个线程。一个进程至少有一个可执行的线程。

    扩展:

    一般操作系统可分为三个层次,最外层是进程和管程,中间是内核,最内层是硬件系统。

     

    进程是一个比较抽象的概念,它实际上就是从动态观点来看的一个具有独立功能的程序段。进程是操作系统的逻辑实体,它完成一些相对独立的操作,譬如命令翻译进程、信息接受进程等等。它是操作系统软件中最基本的活动单元。

     

            管程又称监控程序,它也是操作系统软件中的某一片段,可用来管理进程,特别是并发进程,还可用于资源管理与分配等。

     

            内核提供进程和管程之间的通信和同步机制,并且直接与系统的处理机相接。它是操作系统与计算机硬件结构与层次相关的层次。操作系统的基本功能都属于内核。

    二、选择题(不包含P,V原语操作)

    1.进程的三个基本状态是(阻塞)、(就绪)、(执行)(就绪)到(执行)是由进程调度所引起的;由(执行)到(阻塞)是正在执行的进程发生了某事件,使之无法继续执行而引起的。

    A,B,C:(1)挂起;(2)阻塞;(3)就绪;(4)执行;(5)睡眠;(6)完成;(7)僵尸。

    2.在一个单处理机系统中,存在7个进程,则最多有(6)个进程处于就绪队列,(7个进程处于阻塞状态。

    A,B:(1)7;(2)6;(3)5;(4)4;(5)3;(6)2;(7)1;(8)0。

    3.在分时系统中,导致进程创建的典型事件是(用户登录);在批处理系统中,导致进程创建的典型事件是(作业调度);由系统专门为运行中的应用进程创建新进程的事件是(提供服务)。在创建进程时,(为进程分配CPU)不是创建所必需的步骤。

    A:(1)用户注册;(2)用户登录;(3)用户记账;(4)用户通信。

    B:(1)作业录入;(2)作业调度;(3)进程调度;(4)中级调度。

    C:(1)分配资源;(2)进程通信;(3)共享资源;(4)提供服务。

    D:(1)为进程建立PCB;(2)为进程分配内存等资源;(3)为进程分配CPU;(4)将进程插入就绪队列。

    4.在生产者—消费者问题中,应设置互斥信号量mutex资源信号量full和empty。它们的初值应分别是(1)、(0)和(+n)。

    A,B,C:(1)0;(2)1;(3)-1;(4)-n;(5)+n;(6)n+1。

    查看PPT:会考大题

    解释:于记录型信号量,在执行一次wait操作时,信号量的值应当减1,当其值为小于0时,进程应阻塞。在执行singal操作时,信号量的值应当加1,当其值为小于等于0时,应唤醒阻塞队列中的进程。

    5.下面的叙述中,正确的一条是(3)。

    (1)一个进程的状态发生变化总会引起其他一些进程的状态发生变化。(错)

    (2)进程被挂起后,状态变为阻塞状态。

    (3)信号量的初值不能为负数。

    (4)在进程对应的代码中使用wait、signal操作后,可以防止系统死锁。

    [解析] 进程一般有三种基本状态:运行、就绪和阻塞。状态变化如下:

     ①当一个就绪进程被进程调度程序选中时,该进程的状态从就绪变为运行。

     ②当正在运行的进程等待某一事件或申请的资源得不到满足时,该进程的状态从运行变为阻塞。

     ③当一个阻塞进程等待的事件发生时,该进程的状态从阻塞变为就绪。

     ④当一个进程的时间片用完时,该进程的状态从运行变为就绪。

     由此可见,本题应该选择C。

    三、填空题

    1.进程特征包括其结构特征、( 并发性)、( 动态性)、独立性和( 异步性)

    2.若进程的用户程序段在执行时,该进程处于(用户态 ),也称为(目态 )

    3.PCB中包含有进程的描述信息、(控制信息 )以及(资源信息 ),是进程动态特征的集中反映。

    4.进程空间分为用户空间和(系统空间 )。

    5.在比较进程和程序时,进程是(动态 )的概念,而程序是( 静态)的概念。

    6.由共享公有资源而造成的对并发进程执行速度的制约称为( 间接制约)

    异步与间接制约,同步于直接制约。

    7.进程同步机制应遵循的原则包括(空闲让进)、(忙则等待)、(有限等待)和(让权等待)。

    8.进程通信包括( 共享存储器)、(管道)和(消息传递系统)三种方式。

    9.线程的基本状态包括(执行)状态、(就绪)状态和(阻塞)状态。

    10.在间接通信方式中,进程之间的通信需要通过( 消息邮箱)来暂时存放消息。

    四、判断题

    1.( 错)操作系统的一个重要概念是进程,不同进程所执行的代码也不同。

    进程有,程序段,代码段,和程序的进程控制块(PCB)。

    2.( 对)操作系统通过PCB来控制和管理进程,用户进程可从PCB中读出与本身运行状态相关的信息。

    3.( 对)当进程由执行状态变为就绪状态时,CPU现场信息必须被保存在PCB中。

    4.( 错)当进程申请CPU得不到满足时,它将处于阻塞状态。

    可以处于就绪状态。

    5.( 对)管程每次只允许一个进程进入。

    6.( 对)wait、signal操作可以解决一切互斥问题。

    7.( 错)程序的顺序执行具有不可再现性。

    <p>

        封闭性指的是程序一但开始执行,其计算结果就取决于程序本身,不受外界因素影响.可再现性是指当程序重复执行多次时,必将得到相同结果.</p>可再现性

    8.( 错)临界区是指进程中用于实现进程同步的那段代码。

    9.( 对)当某进程处于静止就绪状态时,该进程在外存。

    10.( 错)原语可以并发执行,并且其执行过程可以被中断。

    <p>

            原语执行期间可以响应中断,只是不能进行进程切换,不能中断。</p>

    三.第三章

    1.作业

    (1) 用户角度

    我们把一次应用业务处理过程中,从输入开始到输出结束,用户要求计算机所做的有关该次业务处理的全部工作称为一个作业。

    如下编程过程的可以认为是作业的一个例子。 

    编辑输入> 编 译> 链 接> 执 行> 输 出                     

    (2) 系统角度

    从计算机系统的角度看,作业是一个比程序更广的概念,它由程序、数据和作业说明书三部分组成。

    系统通过作业说明书控制文件形式的程序和数据,使之操作和执行。在批处理系统中,作业是抢占内存的基本单位,也就是说,批处理系统是以作业为单位把程序和数据调入内存以便执行的。

    2.处理机调度

    操作系统按照某种策略和算法选取一个处于就绪状态的进程占用处理机,并进行相应的上下文切换以建立与占用处理机进程相适应的执行环境

    3.周转时间

        从作业被提交给系统开始,到作业完成为止的这段时间间隔

    4.死锁

    两个或着两个以上的并发进程,它们共享系统的某些资源,该组进程中每个进程都已经占有了部分资源,但都不能释放自己已经占有资源的情况下,还需要获得被其他进程已经占有的资源才能继续执行,从而造成它们相互等待,永远不能继续推进的一种状态。

    5.临时性资源

        由一个进程产生,被另一个进程使用短暂时间后即无用的资源,也称为“消耗性资源”。

    二、选择题

    1.作业调度是从处于后备)状态的队列中选取作业投入运行,(周转时间)是指作业进入系统到作业完成所经过的时间间隔,(时间片轮转算法不适合作业调度。

    A:(1)运行;(2)提交;(3)后备;(4)完成;(5)阻塞;(6)就绪。

    B:(1)响应时间;(2)周转时间;(3)运行时间;(4)等待时间;(5)触发时间。

    C:(1)先来先服务;(2)短作业优先;(3)最高优先权优先;(4)时间片轮转。

    作业从进入系统到运行结束,一般要经历进入、收容、运行、完成四个阶段。相应地,我们说此作业处于进入、后备、执行、完成四个不同的状态。

    • 进入状态:即提交状态,作业从输入设备进入输入井
    • 后备状态:操作员把作业输入到直接存取的后援存取器后(外存),为进入系统的作业建立作业控制块,并把它加入到后备作业队列中,等候作业调度程序调度。这一过程也称为作业注册
    • 运行状态:作业被作业调度程序选中,且分配了必要的资源,建立一组相应的进程后,该作业就进入了运行状态。它分为三种状态:即就绪状态、执行状态、阻塞状态。
    • 完成状态:当作业正常运行结束或因发生错误而终止时,作业进入完成阶段。

        一般来说,作业调度程序需从处于后备状态的队列中选取适当的作业投入运行。

    2.如果为每一个作业只建立一个进程,则为了照顾短作业用户,应采用(短作业优先);为照顾紧急作业的用户,应采用(基于优先权的剥夺调度算法);为能实现人机交互作用应采用(时间片轮转法);为了兼顾短作业和长时间等待的作业应采用(高响应比优先);为了使短作业、长作业及交互型作业用户都比较满意应采用(多级反馈队列调度算法);为了使作业的平均周转时间最短应采用(短作业优先)算法。

    A,B,C,D,E,F:(1)FCFS调度算法;(2)短作业优先;(3)时间片轮转法;(4)多级反馈队列调度算法;(5)基于优先权的剥夺调度算法;(6)高响应比优先。

        HRN)是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。

    本题考查处理器的调度算法。

    • 为了照顾短作业,赋予短作业高的优先级,所以采用短作业优先调度算法。

    ②为了照顾紧急作业,必须采用可剥夺的调度算法,且同时需要赋予紧急作业高的优先级,所以采用基于优先级的剥夺调度算法。

    ③为了实现人机交互,即需要较短的响应时间。时间片轮转调度算法,是保证响应时间最短的处理器调度算法。

    ④为了使各种作业都满意,只有采用多级反馈队列调度算法,这样才能相对平衡地满足不同种作业的需要。

    3.系统产生死锁是指若干进程等待被其他进程所占用而又不可能被释放的资源)。产生死锁的基本原因是(系统资源不足)和(进程推进顺序不当),产生死锁的四个必要条件是互斥条件、(请求和保持条件)、不剥夺条件和(环路条件

    A:(1)系统发生重大故障;(2)若干进程同时处于阻塞状态;(3)若干进程正在等待永远不可能得到的资源;(4)请求的资源数大于系统提供的资源数;(5)若干进程等待被其他进程所占用而又不可能被释放的资源。

    B:(1)资源分配不当;(2)系统资源不足;(3)作业调度不当;(4)资源的独占性。

    C:(1)进程推进顺序不当;(2)进程调度不当;(3)系统中进程太多;(4)CPU运行太快。

    D:(1)请求和阻塞条件;(2)请求和释放条件;(3)请求和保持条件;(4)释放和阻塞条件;(5)释放和请求条件。

    E:(1)线性增长条件;(2)环路条件;(3)无序释放条件;(4)有序释放条件;(5)无序请求条件。

    4.下述解决死锁的方法中,属于死锁预防策略的是资源有序分配法),属于死锁避免策略的是(银行家算法

    A,B:(1)银行家算法;(2)资源有序分配法;(3)资源分配图化简法;(4)撤消进程法。

    死锁的预防可以采取以下3种措施:资源的静态分配策略;允许进程剥夺使用其他进程占有的资源;采用资源有序分配法。

    在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。

    5.死锁的预防是通过破坏产生死锁的四个必要条件来实现的。下列方法中,下列方法中,(一次性分配策略)破坏了“请求与保持”条件,(资源有序分配策略)破坏了“循环等待”条件

    A,B:(1)银行家算法;(2)一次性分配策略;(3)资源有序分配策略;(4)SPOOLing技术。

    三、填空题

    1.作业的输入方式包括( 联机输入 )、( 脱机输入 )、( 直接耦合 )和( 网络输入)。

    2.作业在其生存期间会经历( 提交 )、( 后备 )、执行以及( 完成 )等状态。

    3.处理机调度的类型分为( 高级调度 )、中级调度和( 低级调度 )。其中,中级调度又称为( 进程调度 )和( 短程调度 )。

    进程调度必不可少。

    4.优先数的确定分为( 静态优先数 )和( 动态优先数 )两种。

    系统在创建进程时就确定了它的优先数,该优先数在进程的整个生存期内不再改变,这种优先数属于静态优先数。

    系统在创建进程时确定了它的优先数,但该优先数在进程的整个生存期内可以随着情况的变化而发生改变,这种优先数属于动态优先数。

    5.根据响应时间分类,可以将实时系统分为( 强实时系统 )、( 弱实时系统 )和一般实时系统。

    响应为毫秒级和微秒级。响应为秒级,十秒级。

    6.死锁的处理方法包括( 预防死锁 )、( 避免死锁 )、( 检测死锁 )和(解决死锁 )。

    四、判断题

    1.( 错)系统处于不安全状态必然会导致死锁。

    不安全状态不一定导致系统进入死锁状态。因为,安全性检查中使用的向量Max是进程执行前提供的,而在实际运行过程中,一个进程需要的最大资源量可能小于Max,如一个进程对应的程序中有一段进行错误处理的代码,其中需要n个A种资源,若该进程在运行过程中没有碰到相应的错误而不需要调用该段错误处理代码,则它实际上将完全不会请求这n个A种资源。

    2.( 对)竞争可同时共享的资源,不会导致系统进入死锁状态。

    3.( 错)计算作业的优先权应高于I/O型作业的优先权。

    一般来说,I/O型作业的优先权是高于计算型作业的优先权,这是由于I/O操作需要及时完成,它没有办法长时间保存所要输入/输出的数据,而系统进程的优先权应高于用户进程的优先权。作业的优先权与长作业、短作业或者是系统资源要求的多少没有必然的关系。4.(错 )资源要求多的作业,其优先权应高于资源要求少的作业。

    而资源要求低的作业应当给予较高的优先级让其更早完成释放出占有资源以便其他作业顺利进行,若给资源要求多的作业更高的优先级,那么在没有有效手段避免死锁的情况下,多个资源要求多的作业共同工作容易造成死锁。

    5.(对 )在动态优先权时,随着进程执行时间的增加,其优先权降低。

    在动态优先权中,随着进程执行时间的增加其优先权随之降低,随着作业等待时间的增加其优先权应上升。

    6.( 对)预防死锁设置的限制条件比避免死锁严格,不利于进程的并发执行。

    死锁预防是设法至少破坏产生死锁的四个必要条件(互斥条件、请求与保持条件

    、不可剥夺条件、循环等待条件)之一,严格的防止死锁的出现,而死锁避免则不那么严格的限制产生死锁的必要条件的存在,因为即使死锁的必要条件存在,也不一定发生死锁。死锁避免是在系统运行过程中注意避免死锁的最终发生。

    7.( 错)实时系统的输出结果的正确性仅仅依赖于结果的正确性。

    不仅取决于程序的逻辑正确性,也取决于结果产生的时间。

    8.( 对)在多级反馈队列调度算法中,优先权越高的队列,其执行的时间片越短。

    在多级队列反馈算法中,系统按优先级别设置若干个就绪队列;不同优先级别的队列有不同的时间片,对级别较高的队列分配较小时间片Si(1,2,3,…),从而s1<s2<…<sn。

    9.( 错)响应比是等待时间与要求服务的时间之比。

    响应比=作业周转时间/作业执行时间

    10.( 对)作业的概念一般用于早期批处理系统和现在的大型机、巨型机系统中,对于微机和工作站系统一般不使用作业的概念。

    四.第四和第五

    一、名词解释

    1.地址映射

    为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。(把用户程序装入内存时对有关指令的地址部分的修改为物理内存地址的过程,也称为地址重定位。)

    2.动态重定位

    程序和数据装入内存时需对目标程序中的地址进行修改。这种把逻辑地址转变为内存的物理地址的过程叫重定位。

    3.虚拟存储器

    虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。

    4.静态链接

    在程序装入之前,将各目标模块及它们所需要的库函数链接成一个完整的装配模块,以后不再拆开。

    5.对换

    指把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据调入内存。

    二、选择题

    1.静态重定位是在作业的(装入过程)中进行的,动态重定位是在作业(执行过程)中进行的。

    A,B:(1)编译过程;(2)装入过程;(3)修改过程;(4)执行过程。

     

    2.在动态分区式内存管理中,倾向于优先使用低址部分空闲区的算法是(首次适应算法);能使内存空间中空闲区分布得比较均匀的算法是(循环首次适应算法);每次分配时,把既能满足要求,又是最小的空闲区分配给进程的算法是(最佳适应算法)。

    A,B,C:(1)最佳适应算法;(2)最坏适应算法;(3)首次适应算法;(4)循环首次适应算法。

    每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲分区分布得更均匀,从而减少了查找空闲分区时的开销,但这样会缺少大的空闲分区。

    所谓“最佳”是指每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。为了加速寻找,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。这样,第一次找到的能满足要求的空闲区必然是最佳的。

    3.在回收内存时可能出现下述几种情况:(1)释放区与插入点前一分区F1相邻接,此时应(F1分区的表项为新表项,但修改新表项的大小);(2)释放区与插入点后一分区F2相邻接,此时应(F2分区的表项作为新表项,同时修改新表项的大小和起始地址);(3)释放区不与F1和F2相邻接,此时应(为回收区建立一个分区表项,填上分区的大小和起始地址)。

    A,B,C:(1)为回收区建立一个分区表项,填上分区的大小和起始地址;(2)以F1分区的表项作为新表项且不做任何改变;(3)以F1分区的表项为新表项,但修改新表项的大小;(4)以F2分区的表项作为新表项,同时修改新表项的大小和起始地址。

     

    4.下述存储管理方式中,会产生内部碎片的是(固定分区),会产生外部碎片的是(分段式)。

    A,B:(1)分段式;(2)分页式;(3)段页式;(4)固定分区;(5)可变分区。

    只要是固定的分配就会产生内部碎片,其余的都会产生外部碎片。如果固定和不固定同时存在(例如段页式),物理本质还是固定的,

     分段虚拟存储管理:每一段的长度都不一样(对应不固定),所以会产生外部碎片。

     分页虚拟存储管理:每一页的长度都一样(对应固定),所以会产生内部碎片。

     段页式分区管理:地址空间首先被分成若干个逻辑分段(这里的分段只是逻辑上的,而我们所说的碎片都是物理上的真实存在的,所以是否有碎片还是要看每个段的存储方式,所以页才是物理单位),每段都有自己的段号,然后再将每个段分成若干个固定的页。所以其仍然是固定分配,会产生内部碎片。

     固定式分区管理:很明显固定,会产生内部碎片。

    5.在请求调页系统中有着多种置换算法:

    (1)选择最先进入内存的页面予以淘汰的算法称为(OPT算法);

    (2)选择在以后不再使用的页面予以淘汰的算法称为(FIFO算法);

    (3)选择自上次访问以来所经历时间最长的页面予以淘汰的算法称为(LRU置换算法);

    (4)选择自某时刻开始以来访问次数最少的页面予以淘汰的算法称为(LFU置换算法)。

    A,B,C,D:(1)FIFO算法;(2)OPT算法;(3)LRU算法;(4)NRU算法;(5)LFU算法。

    三、填空题

    1.程序被装入内存时由操作系统的连接装入程序完成程序的逻辑地址到内存地址的转换,也称为(静态重定位)。

    2.程序的装入方式包括(绝对装入方式)、(静态重定位装入方式)和(动态重定位装入方式)三种。

    3.程序的链接方式包括(静态链接方式)、(装入时动态链接)和(运行时动态链接)三种。

    4.单一连续分配内存的基本思想是将内存分为(系统区)和(用户区)两部分。

    5.在分区管理方式中,空闲分区的管理所使用的数据结构包括(空闲分区表)和(空闲分区链)。

    6.将系统中所有空闲的小分区集中起来形成一个大分区的过程称为(拼凑)。

    7.分页管理地址中的地址结构包括(页号)和(页内地址)两部分。

    8.分段存储管理的逻辑地址由(段号)和(段内地址)两部分组成。

    9.比较分页与分段管理,页的大小是(固定)的,由(系统)决定,而段的大小是(不固定)的,由(用户)决定。

    10.虚拟存储器的主要特征包括多次性、(对换性)和(虚拟性)

    四、判断题

    1.(错 )即使在多道程序设计的环境下,用户也能设计用物理地址直接访问内存的程序。

    在多道程序的环境中,编译程序不可能预知经过编译过后的所得到的目标模块应该放在内存的何处。

    2.(对)内存分配最基本的任务是为每道程序分配内存空间,其所追求的主要目标是提高存储空间的利用率。

    内存分配最基本的任务是为每道程序分配内存空间,其所追求的主要目标是提高存储空间的利用率和地址映射是指将程序空间中的逻辑地址变为内存空间的物理地址。

    3.( 错)虚拟存储器是物理上扩充内存容量。

    虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。

    4.( 对)在非虚拟存储器中,要求作业在运行前必须全部装入内存,且在运行过程中也必须一直驻留内存。

    非虚拟存储器中,作业必须全部装入内存且在运行过程也一直驻留内存,这是虚拟存储器和非虚拟存储器的主要区别标志之一。

    5.( 错)在请求段页式系统中,以页为单位管理用户的虚空间,以段为单位管理内存空间。

    段为单位管理逻辑地址,页为单位管理物理地址。

    6.( 对)在请求分段存储管理中,分段的尺寸受内存空间的限制,但作业的总的尺寸不受内存空间的限制。

     

    7.( 错)虚拟性是虚拟存储器最重要的特征。

    还包含多次性和对换性。

    8.( 对)产生时间局部性的典型原因是程序中存在着大量的循环操作。

    时间局部性:某条指令一旦执行,不久后该指令可能再次执行;如果数据被访问过,不久后该数据可能再次被访问。产生时间局部性的典型原因是由于程序中存在着大量的循环操作

    空间局部性:一旦程序访问了某个存储单元,不久后,其附近的存储单元也将被访问,集中在那一定范围内。

    9.( 错)在分页式存储管理和分段式存储管理中,分页的地址空间是一维的,分段的地址空间也是一维的。

    分段的地址空间是二维的。一个地址包括段号和段内地址。

    10.( 对)与分页系统相比,分段系统更容易实现信息的共享。

     

    在一个请求分页系统中,假如一个作业的页面走向为:4,3,2,1,4,3,5,4,3,2,1,5。当分配给该作业的物理块数M 4,分别采用最佳置换算法、LRU FIFO 页面置换算法,计算访问过程中所发生的缺页次数和缺页率。
    2013年山大软件工程复试笔试题_文档下载https://doc.docsou.com/bbfed2e7dc88a70bcbcd281fe7244ccac110b6341.html

    五.第六和第五

    一、名词解释

    1.设备控制器

    计算机中的一个实体,是CPUI/O设备之间的接口,它接收从CPU发来的命令,并去控制一个或多个I/O设备工作。以实现I/O设备和计算机之间的数据交换。

    2.字符设备

    信息的传输以字符为单位,用于数据的输入和输出。典型的字符设备如交互式终端、打印机等。字符设备的传输速率较低,通常为几个字节至数千字节,且不可寻址,常采用中断驱动方式。

    3.设备驱动程序

    I/O进程与设备控制器之间的通信程序,其主要任务是接收上层软件发来的抽象要求,并将其转换为具体要求后,发送给设备控制器,启动设备去执行。

    4SPOOLing

    在联机情况下实现的同时外围操作称为SPOOLing(Simultaneaus Periphernal Operating On-Line),或称为假脱机操作,外部设备联机并行操作

    5I/O通道

    是一个独立于CPU的、专门用来管理I/O的特殊处理机。它有自己的指令系统,其中的指令被称为通道指令。

    二、选择题

    1I/O设备控制的发展过程中,最主要的推动因素是(减少主机对I/O控制的干预),提高I/O速度的设备利用率,在OS中主要依靠(缓冲管理)功能。使用户所编制的程序与实际使用的物理设备无关是由(设备独立性)功能实现的。

    A:(1)提高资源利用率;(2)提高系统吞吐量;(3)减少主机对I/O控制的干预;(4)提高CPUI/O设备的并行操作程序。

    BC:(1)设备分配;(2)缓冲管理;(3)设备管理;(4)设备独立性;(5)虚拟设备。

     

    2盘属于(块设备,其信息的存取是以(固定长数据块)为单位的;磁盘的I/O控制主要采取(DMA)方式;打印机的I/O控制主要采取(程序中断)方式。

    A:(1)字符设备;(2)独占设备(3)块设备;(4)虚拟设备。

    B:(1)位(bit);(2)字节;(3)帧;(4)固定长数据块。

    CD:(1)程序I/O方式;(2)程序中断;(3DMA;(4SPOOLing

     

    3操作系统中采用缓冲技术的目的是为了增强系统(并行操作)的能力,为了使多个进程能有效地同时处理输入和输出最好使用(缓冲池)。

    A:(1)串行操作;(2)并行操作;(3)控制操作;(4)中断操作。

    B:(1)缓冲池;(2)单缓冲;(3)双缓冲;(4)循环缓冲。

     

    4在单用户系统中可为(整个系统)设置一张逻辑设备表,在多用户系统中应为(每个用户(进程))设置一张逻辑设备表

    AB:(1)整个系统;(2)每个用户(进程);(3)每种逻辑设备;(4)每种物理设备。

     

    5磁盘高速缓冲设在(内存),其主要目的是提高磁盘I/O的速度

    A:(1)磁盘控制器;(2)磁盘;(3)内存;(4cache

    B:(1)缩短寻道时间;(2)提高磁盘I/O的速度;(3)提高磁盘空间的利用率;(4)保证数据的一致性;(5)提高CPU执行指令的速度。

    三、填空题

    1.按照信息交换的单位可把设备分为(字符设备)和(块设备两大类;而按照设备的共享属性又可把设备分为(独占设备)、(共享设备)和(虚拟设备)三大类。

    2I/O设备的控制方式可分为程序控制方式、(DMA方式)、中断方式和(通道方式)等。

    3I/O设备接口是指I/O设备与(设备控制器)之间的接口,在该接口中含有三种不同的信号,分别是(控制信号)、(数字信号)和(状态信号

    4通道可分为(字节多路通道)、(数组选择通道)和(数组多路通道)三种。

    5.为了缓冲CPUI/O设备速度不匹配的矛盾,在CPUI/O设备之间引入了缓冲技术,缓冲可分为(单缓冲)、双缓冲、(循环缓冲)和(缓冲池)四种。

    6.设备分配所使用的数据结构主要包括(设备控制表)、(控制器控制表)、(通道控制表)和(系统设备表)。

    7设备分配的方式主要有(静态分配)和(动态分配)两种。

    8.在SPOOLing系统中,(输入井)是模拟脱机输入时的磁盘设备,用于暂存I/O设备输入的数据;(输出井)是模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。

    9.磁盘访问时间包括(寻道时间)、旋转延迟时间和(数据传输时间)。

    10在磁盘调度算法中,(最短寻道时间优先)算法会产生进程“饥饿”现象,而(扫描)算法可避免进程“饥饿”现象。

    四、判断题

    1.(错 )在一般大型计算机系统中,主机对外围设备的控制可通过通道、设备控制器和设备三个层次来实现,其中设备控制器可控制通道,设备在通道控制下工作。

    通道控制控制器,设备在控制器控制下工作。

    2.(错 )字符设备的一个基本特征是可寻址的,即能指定输入时的源地址和输出时的目标地址。

    块设备可寻址,字符设备不行。

    3.(对 )共享设备必须是可寻址的随机访问的设备。

    4.(错 )在分配共享设备和独占设备时,都可能引起进程死锁。

    分配共享设备是不会引起进程死锁的。

    5.(对 )设备独立性是指用户程序独立于具体使用的物理设备的一种特性。

    6.(错 )虚拟设备是指允许用户程序不必全部装入内存就可使用系统中的设备。

    虚拟设备将一台独占设备虚拟成多台逻辑设备,供多个用户进程同时使用, 通常把这种经过虚拟的设备称为虚拟设备。

    7.(错 )构成SPOOLing系统的基本条件是具有外围输入机和外围输出机。

    构成SPOOLing系统的基本条件是要有大容量、高速度的外存作为输入井和输出井。

    8.(对 )同一用户所使用的I/O设备也可以并行工作。

    9.(错 )驱动程序与I/O设备的特性紧密相关,因此应为每一个I/O设备配备一个专门的驱动程序。

    每一个应该改为每一类的I/O设配置驱动程序。

    10.(对 )优化文件物理块的分布可显著地减少寻道的时间,因此能有效地提高磁盘I/O的速度。

     六.第七章

     

    一、名词解释

    1.文件系统:

    操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。

    2.目标文件:

    把源程序经过相应语言的编译程序编译过,但尚未经过链接程序链接的目标代码所构成的文件。

    3.文件的逻辑结构:

    用户观点出发所观察到的文件组织形式,是用户可以直接处理的数据及其结构,它独立于文件的物理特性,又称为文件组织。

    4.有结构文件:

    由一个以上的记录构成的文件,又称为记录式文件。

    5.位示图:

    利用二进制的一位来表示磁盘中一个盘块的使用情况。当其值为“0“时,表示对应的盘块空闲;为“1”时,表示已经分配。由对应的位构成一个集合,称为位示图。

    二、选择题

    1.文件系统最基本的目标是(按名存取),它主要是通过(目录管理)实现的,文件系统所追求的最重要的目标是(高对文件的存取速度)。

    A,C:(1)按名存取;(2)文件共享;(3)文件保护;(4)提高对文件的存取速度;(5)提高I/O速度;(6)提高存储空间利用率。

    2.按逻辑结构可把文件分为(记录式文件)和(流式文件)两类,UNIX系统中的文件采用(索引文件)

    A,B:(1)读、写文件;(2)只读文件;(3)索引文件;(4)链式文件;(5)记录式文件;(6)流式文件。

    3在下列物理文件中,(顺序文件)将使文件顺序访问的速度最快;(隐式链接文件)最不适合对文件进行随机访问;(直接文件)能直接将记录键值转换成物理地址

    A,B,C:(1)顺序文件;(2)隐式链接文件;(3)显式链接文件;(4)索引文件;(5)直接文件。

    4.对文件空闲存储空间的管理,在MS-DOS中采用的是(文件分配表);UNIX中采用的是(成组链接法)。

    A,B:(1)空闲表;(2)文件分配表;(3)位示图;(4)成组链接法。

    5.在文件系统中是利用(目录)来管理文件的,为了允许不同用户的文件使用相同的文件名,通常文件系统中采用(多级目录);在目录文件中的每个目录项通常就是(FCB);在UNIX系统中的目录项则是(文件名和索引结点指针)。

    A:(1)文件控制块;(2)索引结点;(3)符号名表;(4)目录。

    B:(1)重名翻译;(2)多级目录;(3)文件名到文件物理地址的映射表;(4)索引表。

    C,D:(1)FCB;(2)文件表指针;(3)索引结点;(4)文件名和文件物理地址;(5)文件名和索引结点指针。

    三、填空题

    1(记录)是一组相关数据项的集合,用于描述一个对象在某方面的属性。

    2.文件系统由(文件管理有关的软件)、(被管理的文件)和(实施文件管理所需的数据结构)三部分组成。

    3.按照文件的用途可把文件分为(系统文件)、(用户文件)和(库文件)三大类。

    4.文件的物理结构不仅与(存储介质的存储性能)有关,而且与(所采用的外存分配方式)有关。

    5.根据记录的组织方式,可把文件的逻辑结构分为(顺序文件)、(索引文件)和(索引顺序文件)三大类。

    6.外存的分配方式有(连续分配)、(链接分配)和(索引分配)三大类。

    7.在树型目录结构中,根据路径的起点不同,可把路径分为(绝对路径)和(相对路径)两种。

    8.在采用空闲链表法来管理空闲盘区时,有(空闲盘块链)和(空闲盘区链)两种形式。

    9.文件的共享分为(基于索引结点的共享)和(利用符号链实现共享)两种方式。

    10.影响文件安全的主要因素包括(人为因素)、(系统因素)和(自然因素)。

    四、判断题

    1.(×)一个文件在同一系统中、不同的存储介质上的拷贝,应采用同一种物理结构。

    一个文件存放在磁带中通常为连续存放,文件在硬盘上一般不采用连续存放的的方法。不同文件系统存放的文件方法是不一样的。

    2.(√)文件的物理结构不仅与外存的分配方式相关,还与存储介质的特性相关,通常在磁带上只适合使用顺序结构。

    3.(×)顺序文件适合于建立在顺序存储设备上,而不适合于建立在磁盘上。

    进程在对换区中驻留的时间是短暂的,对换操作又较频繁,故对对换空间管理的主要目标,是提高进程换入和换出的速度.为此,采取的是连续分配方式,较少考虑外存中的碎片问题.

    顺序文件和链式文件。

    4.(×)显式链接文件将分配给文件的下一个物理盘块的地址登记在该文件的前一个物理盘块中。

    显式链接分配:是指把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。 该表在整个磁盘仅设置一张,每个表项中存放链接指针,即下一个盘块号。

    显式链接分配:是指把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。 该表在整个磁盘仅设置一张,每个表项中存放链接指针,即下一个盘块号。

    5.(√)顺序文件必须采用连续分配方式,而链接文件和索引文件则可采用离散分配方式。

    6.(×)在MS-DOS中采用的是隐式链接文件结构。

    MS-DOS 采用的是显示连接分配结构

    7.(√)对顺序文件进行检索时,首先从FCB中读出文件的第一个盘块号;而对索引文件进行检索时,应先从FCB中读出文件索引表的起始地址。

    8.(×)对一个具有三级索引表的文件,存取一个记录通常需要三冷饮访问磁盘。

    在采用三级索引文件系统中,访问数据块分别需要访问第1、第2、第3级索引块(或索引表)及数据块,所以要访问4次磁盘。

    9.(×)在文件较大时,无论进行顺序存取还是随机存取,通常都以索引文件方式为最快。

    进行随机存储时,索引文件速度快,若进行顺序存取时以顺序文件方式快

    10.(√)在索引文件中,索引表的每个表项中含有相应记录的关键字和该记录的物理地址。

    七.第九章

    名词解释

    1.简单命令:

     

    一个能完成某种功能的目标程序的名字。

     

    2.程序接口:

     

    操作系统专门为用户程序设置的,也是用户程序取得操作系统服务的唯一途径。程序接口通常是由各种类型的系统调用所组成。

     

    3.系统调用:

     

    应用程序请求操作系统内核完成某功能时的一种过程调用,是一种特殊的过程调用。

     

    4.外中断:

     

    磁盘、打印机等设置设备产生的中断

     

    5.内中断:

     

    指由于CPU内部事件悊引起的中断,如程序出错(非法指令、地址越界等)、电源故障等。内中断被译为“捕获”或“陷入”。

     

    选择题

    1OS向用户提供的接口有多种:通过(联机命令接口),用户可从终端键入dir(或ls)并按下回车键来显示当前目录的内容;通过(图形用户接口),用户可双击窗口中的图标来运行相应的程序;通过(系统调用接口),用户程序可使用open()来打开一个文件;通过(脱机用户接口),用户可将作业说明书和作业一起提交给系统,从而让系统按作业说明书的要求来运行作业。

     

    2.使命令的执行结果不在屏幕上显示,而将之引向另一个文件,这各功能称为(输出重定向);使命令所需的处理信息,不是从键盘接收,而是取自另一个文件,该功能称为(输入重定向);用于实现把第一条命令的输出作为第二条命令的输入,又将第二条命令的输出作为第三条命令的输入的功能的设施称为(管道(线))。

     

    3.用户程序通过系统调用creat来创建一个新文件时,在执行系统调用前,用户进程是运行在(用户态)下;在执行creat()的过程中,用户进程是运行在(系统态)下。

     

    4.在同一台个人计算机上,可以运行WindowsLinuxUNIXDOS等不同的操作系统,它们的系统调用一般是通过执行(相同的)系统调用指令来完成的;对运行在不同的硬件平台上的Linux操作系统,它们执行的系统调用指令一般是(不同的)。

     

    5.从下述关于脱机命令接口的不同论述中,正确的论述是(该接口是作业控制语言)。

     

    填空题

    1.操作系统是用户与计算机硬件系统之间的(接口)

     

    2.用户接口包括(命令接口)、(程序接口)和(图形接口)

     

    3.键盘终端处理程序有(面向字符方式)和(面向行方式)这两种方式来实现字符接收功能。

     

    4.命令解释程序由(常驻部分)、(初始化部分)和(暂存部分)三部分组成。

     

    5输入重定向的符号是(<);输出重定向的符号是(>>>),管道操作符号是(|

     

    6程序接口是操作系统专门为用户程序设置的,也是用户程序取得(操作系统服务)的唯一途径。

     

    7.系统调用的类型包括(进程控制类)、(文件操纵类)和(进程通信类)三大类。

     

    8.把Windows操作系统启动完毕后屏幕显示的画面称为(桌面)。

     

    判断题

    1.(×)联机命令接口是用户程序与OS之间的接口,因此它不是命令接口。

    Cmd

    2.(√)联机命令接口包括一组键盘命令、终端处理程序及命令解释程序三部分。

     

    3.(×)DOS中的命令分为内部命令和外部命令,其中内部命令实际上是由系统提供的一引起应用程序与实用程序。

    内部命令是随每次启动的COMMAND.COM装入并常驻内存,而外部命令是一条单独的可执行文件。在操作时要记住的是,内部命令在任何时候都可以使用,而外部命令需要保证命令文件在当前的目录中,或在Autoexec.bat文件已经被加载了路径。

    4.(×)在运行系统调用时,可由用户程序直接通过函数调用指令转向系统调用处理程序。

    系统调用是操作系统提供给编程人员的唯一接口。编程人员利用系统调用,在源程序中动态请求和释放系统资源,调用系统中已有的系统功能来完成那些与机器硬件部分

    一、第一章

    1.操作系统

    操作系统是计算机系统中的一个系统软件。

    它是这样一些程序模块的集合:它们能有效地组织和管理计算机系统中的硬件及软件资源,合理地组织计算机工作流程,控制程序的执行,并向用户提供各种服务功能,使得用户能够灵活、方便和有效地使用计算机,使整个计算机系统能高效地运行。

    2.预输入

    事先将装有用户程序和数据的纸带(或卡片)装入纸带输入机(或卡片机),在一台外围机的控制下,再抵带(卡片)上的数据(程序)输入到磁带上。当CPU需要这些程序和数据时,再从磁带上高速地调入内存。

    3.分布式操作系统

    (自底向上的分层设计)将操作系统分为若干个层次,每层又由若干个模块组成,各层之间只存在着单向的依赖关系,即高层仅依赖于它的低层。

    4.实时操作系统

    是一个能够在指定或者确定的时间内完成系统功能以及对外部或内部事件在同步或异步时间内做出响应的系统。

    5.互斥共享

    要求系统在一段时间内只允许一个进程(线程)访问某种资源。

    二、选择题

    1.在计算机系统中配置操作系统的主要目的是(2)。操作系统的主要功能是管理计算机系统中的(3)。

    A: (1)增强计算机系统的功能;(2)提高系统资源的利用率;

    (3)提高系统的运行速度;(4)合理组织系统的工作流程,以提高系统吞吐量。

    B: (1)程序和数据;(2)进程;(3)资源;(4)作业;(5)软件;(6)硬件。

    2.操作系统是一种(2),它负责为用户和用户程序完成所有(4)的工作,(4)不是操作系统关心的主要问题。

    A: (1)应用软件;(2)系统软件;(3)通用软件;(4)软件包。

    B: (1)与硬件无关并与应用无关;(2)与硬件相关而与应用无关;

    (3)与硬件无关而与应用相关;(4)与硬件相关并与应用相关。

    C: (1)管理计算机裸机;               (2)设计、提供用户程序与计算机硬件系统的接口;

    (3)管理计算机中的信息资源;(4)高级程序设计语言的编译

    3.在设计分时操作系统时,首先要考虑的是(2);在设计批处理操作系统时,首先要考虑的是(3);在设计实时操作系统时,首先要考虑的是(4)。

    A,B,C:(1)灵活性和可适应性;(2)交互性和响应时间;

    (3)周转时间和系统吞吐量;(4)实时性和可靠性。

    4.从下面关于操作系统的论述中,论述正确的是(1)。

    1)对批处理作业,必须提供相应的作业控制信息。

    2)对于分时系统,不一定全部提供人机交互功能。

    3)从响应角度看,分时系统与实时系统的要求相似。

    4)采用分时操作系统的计算机系统中,用户可以独占计算机操作系统中的文件系统。

    5)从交互角度看,分时系统与实时系统相似。

    5.在下列系统中,(2)是实时信息系统,(5)是实时控制系统。

    A,B:(1)计算机激光照排系统;(2)民航售票系统;(3)办公自动化系统;

    (4)计算机辅助设计系统;(5)火箭飞行控制系统。

    三、填空题

    1.一个完整的计算机系统包括( 硬件)和( 软件)两部分。

    2.只有计算机硬件而没有任何软件支持的计算机称为(裸机 )。

    3.计算机系统中的资源包括( 硬件资源)和( 软件资源)两部分。

    4单道批处理系统的特点包括单道性、( 顺序性)和自动性。

    5.操作系统的特征包括并发性、(共享性 )、( 异步性)和虚拟性。

    6.处理机管理主要包括( 进程控制)、进程同步、进程通信和( 进程调度)。

    7.操作系统为用户提供的接口主要有命令接口、( 程序接口)和图形用户接口

    8.MS-DOS是( 单用户单任务)操作系统,Windows 95是( 单用户多任务)操作系统,Windows XP是( 多用户多任务)操作系统。

    四、判断题

    1.( 错)用户用C语言编写的工资管理程序属于系统软件。

    2.( 对)在多道批处理系统中,内存中可同时驻留多道程序,这些程序可以并发执行。

    3.( 错)分时系统中,时间片设置得越小,则平均响应时间越短。

    会受到用户数量的影响

    4.(  错)实时系统在响应时间、可靠性及交互作用能力等方面一般都比分时系统要求高。

    交互性较差

    5.( 错)在分时系统中,为使多个用户能够同时与系统交互,最关键的问题是系统能及时接收多个用户的输入。

    能在一段时间内,使所有用户程序都能运行

    6.( 错)在软实时系统中,系统必须满足任务对截止时间的要求,否则可能出现不可预期的结果。

    硬实时任务(Hard real-time Task)。系统必须满足任务对截止时间的要求,否则可能出现难以预测的结果。

    软实时任务(Soft real-time Task)。它也联系着一个截止时间,但并不严格,若偶尔错过了任务的截止时间,对系统产生的影响也不会太大。

    7.( 对)可靠性是实时系统的一大特点。

    8.( 对)并行性是指两个或多个事件在同一时刻发生,强调时间点。

    9.( 错误)虚拟存储器是指从物理上扩充内存的容量。

    虚拟存储器技术实际上就是将内存和外存统一管理的存储技术,虚拟存储器的容量取决于计算机的地址结构和寻址方式。

    10.( 对)微内核操作系统结构是现代操作系统普遍采用的结构。

    微内核由一群尽可能将数量最小化的软件程序组成,它们负责提供实现一个操作系统所需要的各种机制与功能,微内核操作系统就是一种基于微内核架构的操作系统。

    二.第二章

    1.进程上下文

    进程执行活动全过程的静态描述。

    进程上下文指进程切换时需要保持的进程状态,包括寄存器值、用户地址空间内容和核心栈状态。

    <p>

           抽象语法和传输语法之间的对应关系,称上下文关系。</p>

    <p>

           上下文语境指一个语句的上下文(书面语),或前言后语(口语)。</p>

    2.直接制约

    直接制约(同步)是由于进程间的相互合作而引起的,如一组在异步环境下的并发进程,各自的执行结果互为对方的执行条件,从而限制各进程的执行速度的过程称为并发进程的直接制约。

    解释:一般来说,一个进程相对另一个进程的运行速度是不确定的。也就是说,进程之间是在异步环境下运行的,每个进程都以各自独立的、不可预知的速度向运行的终点推进。但是,相互合作的进程需要在某些确定点上协调工作。一个进程到达了这些点后,除非另一进程已完成了某些操作,否则就不得不停下来等待这些操作的结束。

     多个相互合作的进程,在一些关键点上可能需要互相等待或互相交换信息,这种相互制约关系称为进程同步。

     在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一个进程才允许去访问此临界资源,进程之间的这种相互制约关系称为互斥。

     其实互斥是进程同步的一种特殊情况,互斥也是为了达到让进程之间协调推进的目的。

    3.临界区

    每个进程访问临界资源的那段程序代码为临界区。

    4.进程同步

    进程同步是指一组并发进程由于相互合作,共同完成某种任务,因而相互等待,使得各进程按一定的速度执行的过程。

    5.内核线程

    内核级线程,是指由内核管理的线程。用户应用程序通过API和系统调用(system call)来访问线程工具。

    进程是程序的一次执行,该程序可与其它程序并发执行。

    线程是进程内的一个可调度的执行单元。

    线程是进程的一个组成部分。一个进程可以有多个线程。一个进程至少有一个可执行的线程。

    扩展:

    一般操作系统可分为三个层次,最外层是进程和管程,中间是内核,最内层是硬件系统。

     

    进程是一个比较抽象的概念,它实际上就是从动态观点来看的一个具有独立功能的程序段。进程是操作系统的逻辑实体,它完成一些相对独立的操作,譬如命令翻译进程、信息接受进程等等。它是操作系统软件中最基本的活动单元。

     

            管程又称监控程序,它也是操作系统软件中的某一片段,可用来管理进程,特别是并发进程,还可用于资源管理与分配等。

     

            内核提供进程和管程之间的通信和同步机制,并且直接与系统的处理机相接。它是操作系统与计算机硬件结构与层次相关的层次。操作系统的基本功能都属于内核。

    二、选择题

    1.进程的三个基本状态是(阻塞)、(就绪)、(执行)(就绪)到(执行)是由进程调度所引起的;由(执行)到(阻塞)是正在执行的进程发生了某事件,使之无法继续执行而引起的。

    A,B,C:(1)挂起;(2)阻塞;(3)就绪;(4)执行;(5)睡眠;(6)完成;(7)僵尸。

    2.在一个单处理机系统中,存在7个进程,则最多有(6)个进程处于就绪队列,(7个进程处于阻塞状态。

    A,B:(1)7;(2)6;(3)5;(4)4;(5)3;(6)2;(7)1;(8)0。

    3.在分时系统中,导致进程创建的典型事件是(用户登录);在批处理系统中,导致进程创建的典型事件是(作业调度);由系统专门为运行中的应用进程创建新进程的事件是(提供服务)。在创建进程时,(为进程分配CPU)不是创建所必需的步骤。

    A:(1)用户注册;(2)用户登录;(3)用户记账;(4)用户通信。

    B:(1)作业录入;(2)作业调度;(3)进程调度;(4)中级调度。

    C:(1)分配资源;(2)进程通信;(3)共享资源;(4)提供服务。

    D:(1)为进程建立PCB;(2)为进程分配内存等资源;(3)为进程分配CPU;(4)将进程插入就绪队列。

    4.在生产者—消费者问题中,应设置互斥信号量mutex资源信号量full和empty。它们的初值应分别是(1)、(0)和(+n)。

    A,B,C:(1)0;(2)1;(3)-1;(4)-n;(5)+n;(6)n+1。

    查看PPT:会考大题

    解释:于记录型信号量,在执行一次wait操作时,信号量的值应当减1,当其值为小于0时,进程应阻塞。在执行singal操作时,信号量的值应当加1,当其值为小于等于0时,应唤醒阻塞队列中的进程。

    5.下面的叙述中,正确的一条是(3)。

    (1)一个进程的状态发生变化总会引起其他一些进程的状态发生变化。(错)

    (2)进程被挂起后,状态变为阻塞状态。

    (3)信号量的初值不能为负数。

    (4)在进程对应的代码中使用wait、signal操作后,可以防止系统死锁。

    [解析] 进程一般有三种基本状态:运行、就绪和阻塞。状态变化如下:

     ①当一个就绪进程被进程调度程序选中时,该进程的状态从就绪变为运行。

     ②当正在运行的进程等待某一事件或申请的资源得不到满足时,该进程的状态从运行变为阻塞。

     ③当一个阻塞进程等待的事件发生时,该进程的状态从阻塞变为就绪。

     ④当一个进程的时间片用完时,该进程的状态从运行变为就绪。

     由此可见,本题应该选择C。

    三、填空题

    1.进程特征包括其结构特征、( 并发性)、( 动态性)、独立性和( 异步性)

    2.若进程的用户程序段在执行时,该进程处于(用户态 ),也称为(目态 )

    3.PCB中包含有进程的描述信息、(控制信息 )以及(资源信息 ),是进程动态特征的集中反映。

    4.进程空间分为用户空间和(系统空间 )。

    5.在比较进程和程序时,进程是(动态 )的概念,而程序是( 静态)的概念。

    6.由共享公有资源而造成的对并发进程执行速度的制约称为( 间接制约)

    异步与间接制约,同步于直接制约。

    7.进程同步机制应遵循的原则包括(空闲让进)、(忙则等待)、(有限等待)和(让权等待)。

    8.进程通信包括( 共享存储器)、(管道)和(消息传递系统)三种方式。

    9.线程的基本状态包括(执行)状态、(就绪)状态和(阻塞)状态。

    10.在间接通信方式中,进程之间的通信需要通过( 消息邮箱)来暂时存放消息。

    四、判断题

    1.( 错)操作系统的一个重要概念是进程,不同进程所执行的代码也不同。

    进程有,程序段,代码段,和程序的进程控制块(PCB)。

    2.( 对)操作系统通过PCB来控制和管理进程,用户进程可从PCB中读出与本身运行状态相关的信息。

    3.( 对)当进程由执行状态变为就绪状态时,CPU现场信息必须被保存在PCB中。

    4.( 错)当进程申请CPU得不到满足时,它将处于阻塞状态。

    可以处于就绪状态。

    5.( 对)管程每次只允许一个进程进入。

    6.( 对)wait、signal操作可以解决一切互斥问题。

    7.( 错)程序的顺序执行具有不可再现性。

    <p>

        封闭性指的是程序一但开始执行,其计算结果就取决于程序本身,不受外界因素影响.可再现性是指当程序重复执行多次时,必将得到相同结果.</p>可再现性

    8.( 错)临界区是指进程中用于实现进程同步的那段代码。

    9.( 对)当某进程处于静止就绪状态时,该进程在外存。

    10.( 错)原语可以并发执行,并且其执行过程可以被中断。

    <p>

            原语执行期间可以响应中断,只是不能进行进程切换,不能中断。</p>

    三.第三章

    1.作业

    (1) 用户角度

    我们把一次应用业务处理过程中,从输入开始到输出结束,用户要求计算机所做的有关该次业务处理的全部工作称为一个作业。

    如下编程过程的可以认为是作业的一个例子。 

    编辑输入> 编 译> 链 接> 执 行> 输 出                     

    (2) 系统角度

    从计算机系统的角度看,作业是一个比程序更广的概念,它由程序、数据和作业说明书三部分组成。

    系统通过作业说明书控制文件形式的程序和数据,使之操作和执行。在批处理系统中,作业是抢占内存的基本单位,也就是说,批处理系统是以作业为单位把程序和数据调入内存以便执行的。

    2.处理机调度

    操作系统按照某种策略和算法选取一个处于就绪状态的进程占用处理机,并进行相应的上下文切换以建立与占用处理机进程相适应的执行环境

    3.周转时间

        从作业被提交给系统开始,到作业完成为止的这段时间间隔

    4.死锁

    两个或着两个以上的并发进程,它们共享系统的某些资源,该组进程中每个进程都已经占有了部分资源,但都不能释放自己已经占有资源的情况下,还需要获得被其他进程已经占有的资源才能继续执行,从而造成它们相互等待,永远不能继续推进的一种状态。

    5.临时性资源

        由一个进程产生,被另一个进程使用短暂时间后即无用的资源,也称为“消耗性资源”。

    二、选择题

    1.作业调度是从处于后备)状态的队列中选取作业投入运行,(周转时间)是指作业进入系统到作业完成所经过的时间间隔,(时间片轮转算法不适合作业调度。

    A:(1)运行;(2)提交;(3)后备;(4)完成;(5)阻塞;(6)就绪。

    B:(1)响应时间;(2)周转时间;(3)运行时间;(4)等待时间;(5)触发时间。

    C:(1)先来先服务;(2)短作业优先;(3)最高优先权优先;(4)时间片轮转。

    作业从进入系统到运行结束,一般要经历进入、收容、运行、完成四个阶段。相应地,我们说此作业处于进入、后备、执行、完成四个不同的状态。

    • 进入状态:即提交状态,作业从输入设备进入输入井
    • 后备状态:操作员把作业输入到直接存取的后援存取器后(外存),为进入系统的作业建立作业控制块,并把它加入到后备作业队列中,等候作业调度程序调度。这一过程也称为作业注册
    • 运行状态:作业被作业调度程序选中,且分配了必要的资源,建立一组相应的进程后,该作业就进入了运行状态。它分为三种状态:即就绪状态、执行状态、阻塞状态。
    • 完成状态:当作业正常运行结束或因发生错误而终止时,作业进入完成阶段。

        一般来说,作业调度程序需从处于后备状态的队列中选取适当的作业投入运行。

    2.如果为每一个作业只建立一个进程,则为了照顾短作业用户,应采用(短作业优先);为照顾紧急作业的用户,应采用(基于优先权的剥夺调度算法);为能实现人机交互作用应采用(时间片轮转法);为了兼顾短作业和长时间等待的作业应采用(高响应比优先);为了使短作业、长作业及交互型作业用户都比较满意应采用(多级反馈队列调度算法);为了使作业的平均周转时间最短应采用(短作业优先)算法。

    A,B,C,D,E,F:(1)FCFS调度算法;(2)短作业优先;(3)时间片轮转法;(4)多级反馈队列调度算法;(5)基于优先权的剥夺调度算法;(6)高响应比优先。

        HRN)是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。

    本题考查处理器的调度算法。

    • 为了照顾短作业,赋予短作业高的优先级,所以采用短作业优先调度算法。

    ②为了照顾紧急作业,必须采用可剥夺的调度算法,且同时需要赋予紧急作业高的优先级,所以采用基于优先级的剥夺调度算法。

    ③为了实现人机交互,即需要较短的响应时间。时间片轮转调度算法,是保证响应时间最短的处理器调度算法。

    ④为了使各种作业都满意,只有采用多级反馈队列调度算法,这样才能相对平衡地满足不同种作业的需要。

    3.系统产生死锁是指若干进程等待被其他进程所占用而又不可能被释放的资源)。产生死锁的基本原因是(系统资源不足)和(进程推进顺序不当),产生死锁的四个必要条件是互斥条件、(请求和保持条件)、不剥夺条件和(环路条件

    A:(1)系统发生重大故障;(2)若干进程同时处于阻塞状态;(3)若干进程正在等待永远不可能得到的资源;(4)请求的资源数大于系统提供的资源数;(5)若干进程等待被其他进程所占用而又不可能被释放的资源。

    B:(1)资源分配不当;(2)系统资源不足;(3)作业调度不当;(4)资源的独占性。

    C:(1)进程推进顺序不当;(2)进程调度不当;(3)系统中进程太多;(4)CPU运行太快。

    D:(1)请求和阻塞条件;(2)请求和释放条件;(3)请求和保持条件;(4)释放和阻塞条件;(5)释放和请求条件。

    E:(1)线性增长条件;(2)环路条件;(3)无序释放条件;(4)有序释放条件;(5)无序请求条件。

    4.下述解决死锁的方法中,属于死锁预防策略的是资源有序分配法),属于死锁避免策略的是(银行家算法

    A,B:(1)银行家算法;(2)资源有序分配法;(3)资源分配图化简法;(4)撤消进程法。

    死锁的预防可以采取以下3种措施:资源的静态分配策略;允许进程剥夺使用其他进程占有的资源;采用资源有序分配法。

    在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。

    5.死锁的预防是通过破坏产生死锁的四个必要条件来实现的。下列方法中,下列方法中,(一次性分配策略)破坏了“请求与保持”条件,(资源有序分配策略)破坏了“循环等待”条件

    A,B:(1)银行家算法;(2)一次性分配策略;(3)资源有序分配策略;(4)SPOOLing技术。

    三、填空题

    1.作业的输入方式包括( 联机输入 )、( 脱机输入 )、( 直接耦合 )和( 网络输入)。

    2.作业在其生存期间会经历( 提交 )、( 后备 )、执行以及( 完成 )等状态。

    3.处理机调度的类型分为( 高级调度 )、中级调度和( 低级调度 )。其中,中级调度又称为( 进程调度 )和( 短程调度 )。

    进程调度必不可少。

    4.优先数的确定分为( 静态优先数 )和( 动态优先数 )两种。

    系统在创建进程时就确定了它的优先数,该优先数在进程的整个生存期内不再改变,这种优先数属于静态优先数。

    系统在创建进程时确定了它的优先数,但该优先数在进程的整个生存期内可以随着情况的变化而发生改变,这种优先数属于动态优先数。

    5.根据响应时间分类,可以将实时系统分为( 强实时系统 )、( 弱实时系统 )和一般实时系统。

    响应为毫秒级和微秒级。响应为秒级,十秒级。

    6.死锁的处理方法包括( 预防死锁 )、( 避免死锁 )、( 检测死锁 )和(解决死锁 )。

    四、判断题

    1.( 错)系统处于不安全状态必然会导致死锁。

    不安全状态不一定导致系统进入死锁状态。因为,安全性检查中使用的向量Max是进程执行前提供的,而在实际运行过程中,一个进程需要的最大资源量可能小于Max,如一个进程对应的程序中有一段进行错误处理的代码,其中需要n个A种资源,若该进程在运行过程中没有碰到相应的错误而不需要调用该段错误处理代码,则它实际上将完全不会请求这n个A种资源。

    2.( 对)竞争可同时共享的资源,不会导致系统进入死锁状态。

    3.( 错)计算作业的优先权应高于I/O型作业的优先权。

    一般来说,I/O型作业的优先权是高于计算型作业的优先权,这是由于I/O操作需要及时完成,它没有办法长时间保存所要输入/输出的数据,而系统进程的优先权应高于用户进程的优先权。作业的优先权与长作业、短作业或者是系统资源要求的多少没有必然的关系。4.(错 )资源要求多的作业,其优先权应高于资源要求少的作业。

    而资源要求低的作业应当给予较高的优先级让其更早完成释放出占有资源以便其他作业顺利进行,若给资源要求多的作业更高的优先级,那么在没有有效手段避免死锁的情况下,多个资源要求多的作业共同工作容易造成死锁。

    5.(对 )在动态优先权时,随着进程执行时间的增加,其优先权降低。

    在动态优先权中,随着进程执行时间的增加其优先权随之降低,随着作业等待时间的增加其优先权应上升。

    6.( 对)预防死锁设置的限制条件比避免死锁严格,不利于进程的并发执行。

    死锁预防是设法至少破坏产生死锁的四个必要条件(互斥条件、请求与保持条件

    、不可剥夺条件、循环等待条件)之一,严格的防止死锁的出现,而死锁避免则不那么严格的限制产生死锁的必要条件的存在,因为即使死锁的必要条件存在,也不一定发生死锁。死锁避免是在系统运行过程中注意避免死锁的最终发生。

    7.( 错)实时系统的输出结果的正确性仅仅依赖于结果的正确性。

    不仅取决于程序的逻辑正确性,也取决于结果产生的时间。

    8.( 对)在多级反馈队列调度算法中,优先权越高的队列,其执行的时间片越短。

    在多级队列反馈算法中,系统按优先级别设置若干个就绪队列;不同优先级别的队列有不同的时间片,对级别较高的队列分配较小时间片Si(1,2,3,…),从而s1<s2<…<sn。

    9.( 错)响应比是等待时间与要求服务的时间之比。

    响应比=作业周转时间/作业执行时间

    10.( 对)作业的概念一般用于早期批处理系统和现在的大型机、巨型机系统中,对于微机和工作站系统一般不使用作业的概念。

    四.第四和第五

    一、名词解释

    1.地址映射

    为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。(把用户程序装入内存时对有关指令的地址部分的修改为物理内存地址的过程,也称为地址重定位。)

    2.动态重定位

    程序和数据装入内存时需对目标程序中的地址进行修改。这种把逻辑地址转变为内存的物理地址的过程叫重定位。

    3.虚拟存储器

    虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。

    4.静态链接

    在程序装入之前,将各目标模块及它们所需要的库函数链接成一个完整的装配模块,以后不再拆开。

    5.对换

    指把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据调入内存。

    二、选择题

    1.静态重定位是在作业的(装入过程)中进行的,动态重定位是在作业(执行过程)中进行的。

    A,B:(1)编译过程;(2)装入过程;(3)修改过程;(4)执行过程。

     

    2.在动态分区式内存管理中,倾向于优先使用低址部分空闲区的算法是(首次适应算法);能使内存空间中空闲区分布得比较均匀的算法是(循环首次适应算法);每次分配时,把既能满足要求,又是最小的空闲区分配给进程的算法是(最佳适应算法)。

    A,B,C:(1)最佳适应算法;(2)最坏适应算法;(3)首次适应算法;(4)循环首次适应算法。

    每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲分区分布得更均匀,从而减少了查找空闲分区时的开销,但这样会缺少大的空闲分区。

    所谓“最佳”是指每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。为了加速寻找,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。这样,第一次找到的能满足要求的空闲区必然是最佳的。

    3.在回收内存时可能出现下述几种情况:(1)释放区与插入点前一分区F1相邻接,此时应(F1分区的表项为新表项,但修改新表项的大小);(2)释放区与插入点后一分区F2相邻接,此时应(F2分区的表项作为新表项,同时修改新表项的大小和起始地址);(3)释放区不与F1和F2相邻接,此时应(为回收区建立一个分区表项,填上分区的大小和起始地址)。

    A,B,C:(1)为回收区建立一个分区表项,填上分区的大小和起始地址;(2)以F1分区的表项作为新表项且不做任何改变;(3)以F1分区的表项为新表项,但修改新表项的大小;(4)以F2分区的表项作为新表项,同时修改新表项的大小和起始地址。

     

    4.下述存储管理方式中,会产生内部碎片的是(固定分区),会产生外部碎片的是(分段式)。

    A,B:(1)分段式;(2)分页式;(3)段页式;(4)固定分区;(5)可变分区。

    只要是固定的分配就会产生内部碎片,其余的都会产生外部碎片。如果固定和不固定同时存在(例如段页式),物理本质还是固定的,

     分段虚拟存储管理:每一段的长度都不一样(对应不固定),所以会产生外部碎片。

     分页虚拟存储管理:每一页的长度都一样(对应固定),所以会产生内部碎片。

     段页式分区管理:地址空间首先被分成若干个逻辑分段(这里的分段只是逻辑上的,而我们所说的碎片都是物理上的真实存在的,所以是否有碎片还是要看每个段的存储方式,所以页才是物理单位),每段都有自己的段号,然后再将每个段分成若干个固定的页。所以其仍然是固定分配,会产生内部碎片。

     固定式分区管理:很明显固定,会产生内部碎片。

    5.在请求调页系统中有着多种置换算法:

    (1)选择最先进入内存的页面予以淘汰的算法称为(OPT算法);

    (2)选择在以后不再使用的页面予以淘汰的算法称为(FIFO算法);

    (3)选择自上次访问以来所经历时间最长的页面予以淘汰的算法称为(LRU置换算法);

    (4)选择自某时刻开始以来访问次数最少的页面予以淘汰的算法称为(LFU置换算法)。

    A,B,C,D:(1)FIFO算法;(2)OPT算法;(3)LRU算法;(4)NRU算法;(5)LFU算法。

    三、填空题

    1.程序被装入内存时由操作系统的连接装入程序完成程序的逻辑地址到内存地址的转换,也称为(静态重定位)。

    2.程序的装入方式包括(绝对装入方式)、(静态重定位装入方式)和(动态重定位装入方式)三种。

    3.程序的链接方式包括(静态链接方式)、(装入时动态链接)和(运行时动态链接)三种。

    4.单一连续分配内存的基本思想是将内存分为(系统区)和(用户区)两部分。

    5.在分区管理方式中,空闲分区的管理所使用的数据结构包括(空闲分区表)和(空闲分区链)。

    6.将系统中所有空闲的小分区集中起来形成一个大分区的过程称为(拼凑)。

    7.分页管理地址中的地址结构包括(页号)和(页内地址)两部分。

    8.分段存储管理的逻辑地址由(段号)和(段内地址)两部分组成。

    9.比较分页与分段管理,页的大小是(固定)的,由(系统)决定,而段的大小是(不固定)的,由(用户)决定。

    10.虚拟存储器的主要特征包括多次性、(对换性)和(虚拟性)

    四、判断题

    1.(错 )即使在多道程序设计的环境下,用户也能设计用物理地址直接访问内存的程序。

    在多道程序的环境中,编译程序不可能预知经过编译过后的所得到的目标模块应该放在内存的何处。

    2.(对)内存分配最基本的任务是为每道程序分配内存空间,其所追求的主要目标是提高存储空间的利用率。

    内存分配最基本的任务是为每道程序分配内存空间,其所追求的主要目标是提高存储空间的利用率和地址映射是指将程序空间中的逻辑地址变为内存空间的物理地址。

    3.( 错)虚拟存储器是物理上扩充内存容量。

    虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。

    4.( 对)在非虚拟存储器中,要求作业在运行前必须全部装入内存,且在运行过程中也必须一直驻留内存。

    非虚拟存储器中,作业必须全部装入内存且在运行过程也一直驻留内存,这是虚拟存储器和非虚拟存储器的主要区别标志之一。

    5.( 错)在请求段页式系统中,以页为单位管理用户的虚空间,以段为单位管理内存空间。

    段为单位管理逻辑地址,页为单位管理物理地址。

    6.( 对)在请求分段存储管理中,分段的尺寸受内存空间的限制,但作业的总的尺寸不受内存空间的限制。

     

    7.( 错)虚拟性是虚拟存储器最重要的特征。

    还包含多次性和对换性。

    8.( 对)产生时间局部性的典型原因是程序中存在着大量的循环操作。

    时间局部性:某条指令一旦执行,不久后该指令可能再次执行;如果数据被访问过,不久后该数据可能再次被访问。产生时间局部性的典型原因是由于程序中存在着大量的循环操作

    空间局部性:一旦程序访问了某个存储单元,不久后,其附近的存储单元也将被访问,集中在那一定范围内。

    9.( 错)在分页式存储管理和分段式存储管理中,分页的地址空间是一维的,分段的地址空间也是一维的。

    分段的地址空间是二维的。一个地址包括段号和段内地址。

    10.( 对)与分页系统相比,分段系统更容易实现信息的共享。

     

    在一个请求分页系统中,假如一个作业的页面走向为:4,3,2,1,4,3,5,4,3,2,1,5。当分配给该作业的物理块数M 4,分别采用最佳置换算法、LRU FIFO 页面置换算法,计算访问过程中所发生的缺页次数和缺页率。
    2013年山大软件工程复试笔试题_文档下载https://doc.docsou.com/bbfed2e7dc88a70bcbcd281fe7244ccac110b6341.html

    五.第六和第五

    一、名词解释

    1.设备控制器

    计算机中的一个实体,是CPUI/O设备之间的接口,它接收从CPU发来的命令,并去控制一个或多个I/O设备工作。以实现I/O设备和计算机之间的数据交换。

    2.字符设备

    信息的传输以字符为单位,用于数据的输入和输出。典型的字符设备如交互式终端、打印机等。字符设备的传输速率较低,通常为几个字节至数千字节,且不可寻址,常采用中断驱动方式。

    3.设备驱动程序

    I/O进程与设备控制器之间的通信程序,其主要任务是接收上层软件发来的抽象要求,并将其转换为具体要求后,发送给设备控制器,启动设备去执行。

    4SPOOLing

    在联机情况下实现的同时外围操作称为SPOOLing(Simultaneaus Periphernal Operating On-Line),或称为假脱机操作,外部设备联机并行操作

    5I/O通道

    是一个独立于CPU的、专门用来管理I/O的特殊处理机。它有自己的指令系统,其中的指令被称为通道指令。

    二、选择题

    1I/O设备控制的发展过程中,最主要的推动因素是(减少主机对I/O控制的干预),提高I/O速度的设备利用率,在OS中主要依靠(缓冲管理)功能。使用户所编制的程序与实际使用的物理设备无关是由(设备独立性)功能实现的。

    A:(1)提高资源利用率;(2)提高系统吞吐量;(3)减少主机对I/O控制的干预;(4)提高CPUI/O设备的并行操作程序。

    BC:(1)设备分配;(2)缓冲管理;(3)设备管理;(4)设备独立性;(5)虚拟设备。

     

    2盘属于(块设备,其信息的存取是以(固定长数据块)为单位的;磁盘的I/O控制主要采取(DMA)方式;打印机的I/O控制主要采取(程序中断)方式。

    A:(1)字符设备;(2)独占设备(3)块设备;(4)虚拟设备。

    B:(1)位(bit);(2)字节;(3)帧;(4)固定长数据块。

    CD:(1)程序I/O方式;(2)程序中断;(3DMA;(4SPOOLing

     

    3操作系统中采用缓冲技术的目的是为了增强系统(并行操作)的能力,为了使多个进程能有效地同时处理输入和输出最好使用(缓冲池)。

    A:(1)串行操作;(2)并行操作;(3)控制操作;(4)中断操作。

    B:(1)缓冲池;(2)单缓冲;(3)双缓冲;(4)循环缓冲。

     

    4在单用户系统中可为(整个系统)设置一张逻辑设备表,在多用户系统中应为(每个用户(进程))设置一张逻辑设备表

    AB:(1)整个系统;(2)每个用户(进程);(3)每种逻辑设备;(4)每种物理设备。

     

    5磁盘高速缓冲设在(内存),其主要目的是提高磁盘I/O的速度

    A:(1)磁盘控制器;(2)磁盘;(3)内存;(4cache

    B:(1)缩短寻道时间;(2)提高磁盘I/O的速度;(3)提高磁盘空间的利用率;(4)保证数据的一致性;(5)提高CPU执行指令的速度。

    三、填空题

    1.按照信息交换的单位可把设备分为(字符设备)和(块设备两大类;而按照设备的共享属性又可把设备分为(独占设备)、(共享设备)和(虚拟设备)三大类。

    2I/O设备的控制方式可分为程序控制方式、(DMA方式)、中断方式和(通道方式)等。

    3I/O设备接口是指I/O设备与(设备控制器)之间的接口,在该接口中含有三种不同的信号,分别是(控制信号)、(数字信号)和(状态信号

    4通道可分为(字节多路通道)、(数组选择通道)和(数组多路通道)三种。

    5.为了缓冲CPUI/O设备速度不匹配的矛盾,在CPUI/O设备之间引入了缓冲技术,缓冲可分为(单缓冲)、双缓冲、(循环缓冲)和(缓冲池)四种。

    6.设备分配所使用的数据结构主要包括(设备控制表)、(控制器控制表)、(通道控制表)和(系统设备表)。

    7设备分配的方式主要有(静态分配)和(动态分配)两种。

    8.在SPOOLing系统中,(输入井)是模拟脱机输入时的磁盘设备,用于暂存I/O设备输入的数据;(输出井)是模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。

    9.磁盘访问时间包括(寻道时间)、旋转延迟时间和(数据传输时间)。

    10在磁盘调度算法中,(最短寻道时间优先)算法会产生进程“饥饿”现象,而(扫描)算法可避免进程“饥饿”现象。

    四、判断题

    1.(错 )在一般大型计算机系统中,主机对外围设备的控制可通过通道、设备控制器和设备三个层次来实现,其中设备控制器可控制通道,设备在通道控制下工作。

    通道控制控制器,设备在控制器控制下工作。

    2.(错 )字符设备的一个基本特征是可寻址的,即能指定输入时的源地址和输出时的目标地址。

    块设备可寻址,字符设备不行。

    3.(对 )共享设备必须是可寻址的随机访问的设备。

    4.(错 )在分配共享设备和独占设备时,都可能引起进程死锁。

    分配共享设备是不会引起进程死锁的。

    5.(对 )设备独立性是指用户程序独立于具体使用的物理设备的一种特性。

    6.(错 )虚拟设备是指允许用户程序不必全部装入内存就可使用系统中的设备。

    虚拟设备将一台独占设备虚拟成多台逻辑设备,供多个用户进程同时使用, 通常把这种经过虚拟的设备称为虚拟设备。

    7.(错 )构成SPOOLing系统的基本条件是具有外围输入机和外围输出机。

    构成SPOOLing系统的基本条件是要有大容量、高速度的外存作为输入井和输出井。

    8.(对 )同一用户所使用的I/O设备也可以并行工作。

    9.(错 )驱动程序与I/O设备的特性紧密相关,因此应为每一个I/O设备配备一个专门的驱动程序。

    每一个应该改为每一类的I/O设配置驱动程序。

    10.(对 )优化文件物理块的分布可显著地减少寻道的时间,因此能有效地提高磁盘I/O的速度。

     六.第七章

     

    一、名词解释

    1.文件系统:

    操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。

    2.目标文件:

    把源程序经过相应语言的编译程序编译过,但尚未经过链接程序链接的目标代码所构成的文件。

    3.文件的逻辑结构:

    用户观点出发所观察到的文件组织形式,是用户可以直接处理的数据及其结构,它独立于文件的物理特性,又称为文件组织。

    4.有结构文件:

    由一个以上的记录构成的文件,又称为记录式文件。

    5.位示图:

    利用二进制的一位来表示磁盘中一个盘块的使用情况。当其值为“0“时,表示对应的盘块空闲;为“1”时,表示已经分配。由对应的位构成一个集合,称为位示图。

    二、选择题

    1.文件系统最基本的目标是(按名存取),它主要是通过(目录管理)实现的,文件系统所追求的最重要的目标是(高对文件的存取速度)。

    A,C:(1)按名存取;(2)文件共享;(3)文件保护;(4)提高对文件的存取速度;(5)提高I/O速度;(6)提高存储空间利用率。

    2.按逻辑结构可把文件分为(记录式文件)和(流式文件)两类,UNIX系统中的文件采用(索引文件)

    A,B:(1)读、写文件;(2)只读文件;(3)索引文件;(4)链式文件;(5)记录式文件;(6)流式文件。

    3在下列物理文件中,(顺序文件)将使文件顺序访问的速度最快;(隐式链接文件)最不适合对文件进行随机访问;(直接文件)能直接将记录键值转换成物理地址

    A,B,C:(1)顺序文件;(2)隐式链接文件;(3)显式链接文件;(4)索引文件;(5)直接文件。

    4.对文件空闲存储空间的管理,在MS-DOS中采用的是(文件分配表);UNIX中采用的是(成组链接法)。

    A,B:(1)空闲表;(2)文件分配表;(3)位示图;(4)成组链接法。

    5.在文件系统中是利用(目录)来管理文件的,为了允许不同用户的文件使用相同的文件名,通常文件系统中采用(多级目录);在目录文件中的每个目录项通常就是(FCB);在UNIX系统中的目录项则是(文件名和索引结点指针)。

    A:(1)文件控制块;(2)索引结点;(3)符号名表;(4)目录。

    B:(1)重名翻译;(2)多级目录;(3)文件名到文件物理地址的映射表;(4)索引表。

    C,D:(1)FCB;(2)文件表指针;(3)索引结点;(4)文件名和文件物理地址;(5)文件名和索引结点指针。

    三、填空题

    1(记录)是一组相关数据项的集合,用于描述一个对象在某方面的属性。

    2.文件系统由(文件管理有关的软件)、(被管理的文件)和(实施文件管理所需的数据结构)三部分组成。

    3.按照文件的用途可把文件分为(系统文件)、(用户文件)和(库文件)三大类。

    4.文件的物理结构不仅与(存储介质的存储性能)有关,而且与(所采用的外存分配方式)有关。

    5.根据记录的组织方式,可把文件的逻辑结构分为(顺序文件)、(索引文件)和(索引顺序文件)三大类。

    6.外存的分配方式有(连续分配)、(链接分配)和(索引分配)三大类。

    7.在树型目录结构中,根据路径的起点不同,可把路径分为(绝对路径)和(相对路径)两种。

    8.在采用空闲链表法来管理空闲盘区时,有(空闲盘块链)和(空闲盘区链)两种形式。

    9.文件的共享分为(基于索引结点的共享)和(利用符号链实现共享)两种方式。

    10.影响文件安全的主要因素包括(人为因素)、(系统因素)和(自然因素)。

    四、判断题

    1.(×)一个文件在同一系统中、不同的存储介质上的拷贝,应采用同一种物理结构。

    一个文件存放在磁带中通常为连续存放,文件在硬盘上一般不采用连续存放的的方法。不同文件系统存放的文件方法是不一样的。

    2.(√)文件的物理结构不仅与外存的分配方式相关,还与存储介质的特性相关,通常在磁带上只适合使用顺序结构。

    3.(×)顺序文件适合于建立在顺序存储设备上,而不适合于建立在磁盘上。

    进程在对换区中驻留的时间是短暂的,对换操作又较频繁,故对对换空间管理的主要目标,是提高进程换入和换出的速度.为此,采取的是连续分配方式,较少考虑外存中的碎片问题.

    顺序文件和链式文件。

    4.(×)显式链接文件将分配给文件的下一个物理盘块的地址登记在该文件的前一个物理盘块中。

    显式链接分配:是指把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。 该表在整个磁盘仅设置一张,每个表项中存放链接指针,即下一个盘块号。

    显式链接分配:是指把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。 该表在整个磁盘仅设置一张,每个表项中存放链接指针,即下一个盘块号。

    5.(√)顺序文件必须采用连续分配方式,而链接文件和索引文件则可采用离散分配方式。

    6.(×)在MS-DOS中采用的是隐式链接文件结构。

    MS-DOS 采用的是显示连接分配结构

    7.(√)对顺序文件进行检索时,首先从FCB中读出文件的第一个盘块号;而对索引文件进行检索时,应先从FCB中读出文件索引表的起始地址。

    8.(×)对一个具有三级索引表的文件,存取一个记录通常需要三冷饮访问磁盘。

    在采用三级索引文件系统中,访问数据块分别需要访问第1、第2、第3级索引块(或索引表)及数据块,所以要访问4次磁盘。

    9.(×)在文件较大时,无论进行顺序存取还是随机存取,通常都以索引文件方式为最快。

    进行随机存储时,索引文件速度快,若进行顺序存取时以顺序文件方式快

    10.(√)在索引文件中,索引表的每个表项中含有相应记录的关键字和该记录的物理地址。

    七.第九章

    名词解释

    1.简单命令:

     

    一个能完成某种功能的目标程序的名字。

     

    2.程序接口:

     

    操作系统专门为用户程序设置的,也是用户程序取得操作系统服务的唯一途径。程序接口通常是由各种类型的系统调用所组成。

     

    3.系统调用:

     

    应用程序请求操作系统内核完成某功能时的一种过程调用,是一种特殊的过程调用。

     

    4.外中断:

     

    磁盘、打印机等设置设备产生的中断

     

    5.内中断:

     

    指由于CPU内部事件悊引起的中断,如程序出错(非法指令、地址越界等)、电源故障等。内中断被译为“捕获”或“陷入”。

     

    选择题

    1OS向用户提供的接口有多种:通过(联机命令接口),用户可从终端键入dir(或ls)并按下回车键来显示当前目录的内容;通过(图形用户接口),用户可双击窗口中的图标来运行相应的程序;通过(系统调用接口),用户程序可使用open()来打开一个文件;通过(脱机用户接口),用户可将作业说明书和作业一起提交给系统,从而让系统按作业说明书的要求来运行作业。

     

    2.使命令的执行结果不在屏幕上显示,而将之引向另一个文件,这各功能称为(输出重定向);使命令所需的处理信息,不是从键盘接收,而是取自另一个文件,该功能称为(输入重定向);用于实现把第一条命令的输出作为第二条命令的输入,又将第二条命令的输出作为第三条命令的输入的功能的设施称为(管道(线))。

     

    3.用户程序通过系统调用creat来创建一个新文件时,在执行系统调用前,用户进程是运行在(用户态)下;在执行creat()的过程中,用户进程是运行在(系统态)下。

     

    4.在同一台个人计算机上,可以运行WindowsLinuxUNIXDOS等不同的操作系统,它们的系统调用一般是通过执行(相同的)系统调用指令来完成的;对运行在不同的硬件平台上的Linux操作系统,它们执行的系统调用指令一般是(不同的)。

     

    5.从下述关于脱机命令接口的不同论述中,正确的论述是(该接口是作业控制语言)。

     

    填空题

    1.操作系统是用户与计算机硬件系统之间的(接口)

     

    2.用户接口包括(命令接口)、(程序接口)和(图形接口)

     

    3.键盘终端处理程序有(面向字符方式)和(面向行方式)这两种方式来实现字符接收功能。

     

    4.命令解释程序由(常驻部分)、(初始化部分)和(暂存部分)三部分组成。

     

    5输入重定向的符号是(<);输出重定向的符号是(>>>),管道操作符号是(|

     

    6程序接口是操作系统专门为用户程序设置的,也是用户程序取得(操作系统服务)的唯一途径。

     

    7.系统调用的类型包括(进程控制类)、(文件操纵类)和(进程通信类)三大类。

     

    8.把Windows操作系统启动完毕后屏幕显示的画面称为(桌面)。

     

    判断题

    1.(×)联机命令接口是用户程序与OS之间的接口,因此它不是命令接口。

    Cmd

    2.(√)联机命令接口包括一组键盘命令、终端处理程序及命令解释程序三部分。

     

    3.(×)DOS中的命令分为内部命令和外部命令,其中内部命令实际上是由系统提供的一引起应用程序与实用程序。

    内部命令是随每次启动的COMMAND.COM装入并常驻内存,而外部命令是一条单独的可执行文件。在操作时要记住的是,内部命令在任何时候都可以使用,而外部命令需要保证命令文件在当前的目录中,或在Autoexec.bat文件已经被加载了路径。

    4.(×)在运行系统调用时,可由用户程序直接通过函数调用指令转向系统调用处理程序。

    系统调用是操作系统提供给编程人员的唯一接口。编程人员利用系统调用,在源程序中动态请求和释放系统资源,调用系统中已有的系统功能来完成那些与机器硬件部分相关的工作,以及控制程序的执行速度等。因此,系统调用像一个黑箱子那样,对用户屏蔽了操作系统的具体动作而只提供有关的功能。它与一般用户程序、库函数和实用程序的区别是:系统调用程序是在核心态执行,调用它们需要一个类似于硬件中断处理的中断处理机制来提供系统服务。

    5.(×)操作系统是计算机硬件和计算机软件之间的接口。

     

    6.(×)对话框与窗口都可以改变大小。

    对话框不能改变大小。

    7.(√)窗口既可以移动,也可以改变大小,但是窗口在充满整个屏幕时是不能移动的。

    相关的工作,以及控制程序的执行速度等。因此,系统调用像一个黑箱子那样,对用户屏蔽了操作系统的具体动作而只提供有关的功能。它与一般用户程序、库函数和实用程序的区别是:系统调用程序是在核心态执行,调用它们需要一个类似于硬件中断处理的中断处理机制来提供系统服务。

    5.(×)操作系统是计算机硬件和计算机软件之间的接口。

     

    6.(×)对话框与窗口都可以改变大小。

    对话框不能改变大小。

    7.(√)窗口既可以移动,也可以改变大小,但是窗口在充满整个屏幕时是不能移动的。

    展开全文
  • PE结构&整体叙述

    千次阅读 多人点赞 2021-01-31 23:17:27
    由于Windows操作系统对内存属性结构的设置以页为单位,所以通常情况下,节在内存中的对齐单位必须至少是一个页的大小。对32位的Windows XP操作系统来说,这个值是4KB(1000h);而对于64位操作系统来说,这个值就是8...

    PE体系

    PE结构&整体叙述

    PE结构&导入表

    PE结构&导出表

    PE结构&基址重定位表

    PE结构&绑定导入实现

    PE结构&延迟加载导入表

    文章目录

    声明

    以下皆为手打,并非复制粘贴,一方面是为了自己以后复习,另一方面希望能方便大家。

    初识PE

    PE(Portable Executeable File Format,可移植的执行体文件格式),使用该格式的目标是使连接生成的EXE能在不同的CPU工作指令下工作。
    可执行文件的格式是操作系统工作方式的真实写照。Windows操作系统中可执行程序有好多种,比如COM,PIF,SCR,EXE等,这些文件的格式大部分都继承自PE。其中,EXE是最常见的PE 文件,动态链接库(大部分以dll为扩展名的文件)也是PE文件

    内存映射文件与PE内存映像

    内存映射文件:是指将硬盘上的文件不做修改地装载到内存中。这样,文件中字节与字节之间就是顺序排列的了。
    解释:
    在硬盘上,文件被分割成若干簇,这些簇不一定会按照文件内容顺序排列在一起,当我们访问磁盘上的文件时,需要计算机首先将不同位置的内容读取到内存。有了内存映射文件,访问就会变得更轻松和快捷,由于读取磁盘的操作集中到一起
    执行,读写效率会提高很多。被一次性读取到内存的文件字节按线性排列,访问相对简单,速度也提升了不少。

    PE内存映像:是指将PE文件按照一定的规则装载到内存中,装入后的整个文件头内容不会发送变化,但PE文件的某一部分如节的内容会按照字段中的
    对齐方式在内存中对齐,从而使得内存中的PE映像与装载前的PE文件不同。

    为什么PE内存映像不能和一般的内存映射文件一样呢?
    因为PE文件是由操作性装载进内存的,其目的是为了运行。为了配合操作系统的运行,方便调度,提高运行效率,PE映像必须按照一定的格式对齐,所以内存中的PE映像和原来硬盘上的文件时不同的,当然与内存映射文件也就不同。

    PE文件中的对齐

    数据在内存中的对齐

    由于Windows操作系统对内存属性结构的设置以页为单位,所以通常情况下,节在内存中的对齐单位必须至少是一个页的大小。对32位的Windows XP操作系统来说,这个值是4KB(1000h);而对于64位操作系统来说,这个值就是8KB(2000h)。

    数据在文件中的对齐

    为了提高磁盘利用率,通常情况下,定义的节在文件中的对齐单位要远小于内存对齐单位;通常会以一个物理扇区的大小作为对齐粒度的值,即512字节,十六进制是200h

    处于节约资源考虑,操作系统允许节在内存和文件中的对齐尺度不一致。这就直接造成PE在文件中和在内存中的大小也会不一致。通常情况下,PE在内存中的尺寸要比在文件中的尺寸要大。用户可以自定义这些对齐的值。

    注意:
    如果内存对齐被定义为小于操作系统页的大小,则文件对齐和内存对齐的值必须一致

    资源文件中资源数据的对齐

    资源文件中,资源字节码部分一般会要求以双字(4个字节)方式对齐,在资源表中详解。

    在这里插入图片描述
    在PE格式中,每一个大的部分的对齐方式就是按照200h大小对齐的

    在汇编语言中,Unicode字符串被定义为一个结构体,定义如下:

    typedef struct _NUICODE_STRING{
    	USHORT Length;     	//字符串的长度(字节数)
    	USHORT	MaximumLength;//字符串缓冲区的长度(字节数)
    	PWSTR	Buffer;	//字符串缓冲区
    }	UNICODE_STRING , *PUNICODE_STRING;
    

    16系统下的PE结构

    DOS头部分的存在见证了PE强大兼容性。为了保持与16位系统的兼容,在PE里依旧保留了16位系统下的标准可执行程序执行时所必需的文件头部(DOS MZ头)和指令代码(DOS Stub)。
    在16位操作系统下,PE结构可以分为两部分:DOS头和冗余数据,如下
    在这里插入图片描述
    在16位系统下,PE 的四部分内容被重新组合成两部分——可以在16位系统下运行的DOS头和冗余数据。把Windows下的PE文件存储到DOS系统并运行,它就是DOS系统下的一个EXE文件。
    DOS头分为两部分,DOS MZ头和DOS Stub(即指令字节码)。大部分情况下,这些指令实现的功能都非常简单,根本不会涉及重定位信息。再往后的PE头和PE数据区可以看成是16操作系统下的可执行文件的冗余数据。

    DOS MZ 头(长度0x40

    13B7:0100  4D 5A 90 00 03 00 00 00-04 00 00 00 FF FF 00 00   MZ..............
    13B7:0110  B8 00 00 00 00 00 00 00-40 00 00 00 00 00 00 00   ........@.......
    13B7:0120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
    13B7:0130  00 00 00 00 00 00 00 00-00 00 00 00 B0 00 00 00   ................
    

    在Windows的PE格式中,DOS MZ头定义如下:

    IMAGE_DOS_EADER STRUCT
    e_magic				WORD			?	;0000h -  EXE标志,“MZ”
    e_cblp				WORD			?	;0002h	-	最后(部分页中的字节数)
    c_cp				WORD			?	;0004h	-	文件中的全部和部分页数
    e_crlc				WORD			?	;0006h	-	重定位表中的指针
    e_cparhdr			WORD			?	;0008h	-	头部尺寸,以段落为单位
    e_minalloc			WORD			?	;000ah	-	所需的最小附加段
    e_maxalloc			WORD			?	;000ch	-	所需的最大附加段
    e_ss				WORD			?	;000eh	-	初始的SS值(相对偏移)
    e_sp				WORD			?	;0010h	-	初始的SP值
    e_csum				WORD			?	;0012h	-	补码校验值
    e_ip				WORD			?	;0014h	-	初始的IP值
    e_cs				WORD			?	;0016h	-	初始的CS值
    e_lfarlc			WORD			?	;0018h	-	重定位表的字节偏移量
    e_ovmo				WORD			?	;001ah	-	覆盖号
    e_res				WORD		4 dup(?);001ch	-	保留字
    e_oemid				WORD			?	;0024h	-	OEM标识符(相对e_oeminfo)
    e_oeminfo			WORD			?	;0026h	-	OEM信息
    e_res2				WORD		10dup(?);0028h	-	保留字
    e_lfanew			WORD			?	;003ch	-	PE头相对于文件的偏移地址
    

    如上所示,偏移1c以后(包括1c)在16系统下是没有定义的。由于其开始的标志字为“MZ”(Mark Zbikowski,它是DOS操作系统的开发者之一),所以称它为“DOS MZ头”。

    注意:DOS MZ头部分的字节码(包括DOS Stub程序字节码)的添加是由链接程序link.exe自动实现的。所以在源程序.asm中是找不到相应的定义语句的。

    DOS Stub(长度不固定)

    由于DOS Stub的大小 不固定,因此DOS头 的大小也是不固定的。DOS Stub部分是该程序在DOS 系统下运行的指令字节码
    举个例子:
    一个程序的DOS Stub(指令字节码)如下:

    13B7:0140  0E 1F BA 0E 00 B4 09 CD-21 B8 01 4C CD 21 54 68   ........!..L.!Th
    13B7:0150  69 73 20 70 72 6F 67 72-61 6D 20 63 61 6E 6E 6F   is program canno
    13B7:0160  74 20 62 65 20 72 75 6E-20 69 6E 20 44 4F 53 20   t be run in DOS 
    13B7:0170  6D 6F 64 65 2E 0D 0D 0A-24 00 00 00 00 00 00 00   mode....$.......
    13B7:0180  5D 5C 6D C1 19 3D 03 92-19 3D 03 92 19 3D 03 92   ]\m..=...=...=..
    13B7:0190  97 22 10 92 1E 3D 03 92-E5 1D 11 92 18 3D 03 92   ."...=.......=..
    13B7:01A0  52 69 63 68 19 3D 03 92-00 00 00 00 00 00 00 00   Rich.=..........
    

    那么这些指令都做了哪些工作:
    首先将这个程序名更改为“123”,然后复制到C:\Documents and Settings \administrator中。在命令提示符下输入下面指令:

    dubug 123 -U 0140 014d
    

    然后显示

    13B7:0140 0E            PUSH	CS         ;将CS段地址给DS                        
    13B7:0141 1F            POP	DS                                 
    13B7:0142 BA0E00        MOV	DX,000E         ;DS:DX指向要显示的字符串014e处                   
    13B7:0145 B409          MOV	AH,09           ;调用9号中断,屏幕显示字符串                  
    13B7:0147 CD21          INT	21                                 
    13B7:0149 B8014C        MOV	AX,4C01         ;调用4C号中断,正常退出程序                         
    13B7:014C CD21          INT	21                                 
    13B7:014C 5468……………………	数据区“This program”	;要显示的字符串  
    

    它就调用了int 21中断的9号功能,实现在屏幕输出一段字符串。

    32位系统下的PE结构

    16位系统中,PE头和PE数据部分被当成是冗余数据;在32位系统中,刚好相反,即DOS头称为冗余数据。所谓冗余,是针对DOS头不参与32位系统运行过程而言的。尽管该部分不参与运行,但也不能把这些数据从PE结构除去。在DOS MZ头中有一个IMAGE_DOS_HEADER.e_lfanew,没有它操作系统就定位不到标准的PE头部,这个可执行程序就会被操作系统认为是非法的PE映像

    定位标准PE头

    DOS头放在PE 的起始位置,然后在DOS MZ头中有一个字段e_lfanew专门去找标准PE头的偏移。该地段的值是一个相对偏移量。绝对定位的时候得加上DOS MZ 的基地址。

    PE文件结构

    在32位系统下,最重要的部分就是PE头和PE数据区。如下图
    在这里插入图片描述
    32位操作系统下的PE文件结构被划为为5个部分:
    DOS MZ头,DOS Stub,PE头,节表和节内容。
    节表和节内容两部分其实就是图中的PE数据区。DOS MZ头的大小是0x40(十进制:64)个字节,PE头的大小是456个字节(由于数据目录表项不一定是16个,准确地说,PE头也是一个不能确定大小的结构,该结构的实际大小由字段IMAGE_FILE_HEADER.SizeOfOptionalHeader来确定)。节表的大小之所以不固定,因为每个PE中节的数量是不固定的。但是每个节的描述信息是则是个固定值,共40个字节,节表是由不确定数量的节描述信息组成,其大小等于节的数量 X 40,节的数量由字段IMAGE_FILE_HEARDER.NumberOfSections来定义。DOS Stub和节内容都是大小不确定的。(前面所说的是节的描述信息是固定的,40字节,并非说节的内容是固定的,别混淆。)
    虽然节的描述信息确定,但是节的数量却是不确定的,所以呢,节内容自然也就不确定喽。
    PE文件头部 = DOS头 +PE头。

    总览PE结构

    在这里插入图片描述
    标准的PE文件一般由四大部分组成:

    1. DOS头
    2. PE头(IMAGE_NT_HEADERS
    3. 节表(多个IMAGE_SECTION_HEADERS结构)
    4. 节内容

    详述:
    DOS头的话,分为DOS MZ头 和DOS Stub

    PE头(IMAGE_NT_HEADERS)包括了4字节的标识符号(Signature),20个字节的基本头信息(IMAGE_FILE_HEADER),216个字节的扩展头信息(IMAGE_OPTIONAL_HEADER32
    (即PE头=Signature+IMAGE_FILE_HEADER+IMAGE_OPTIONAL_HEADER32

    PE文件头部=DOS头+PE头 +节表(PE头和PE文件头部不是一个意思,别混淆。)

    PE文件身体 = 节内容

    PE文件头部解析

    DOS MZ头IMAGE_DOS_HEADER

    IMAGE_DOS_EADER STRUCT
    e_magic				WORD			?	;0000h -  EXE标志,“MZ”
    e_cblp				WORD			?	;0002h	-	最后(部分页中的字节数)
    c_cp				WORD			?	;0004h	-	文件中的全部和部分页数
    e_crlc				WORD			?	;0006h	-	重定位表中的指针
    e_cparhdr			WORD			?	;0008h	-	头部尺寸,以段落为单位
    e_minalloc			WORD			?	;000ah	-	所需的最小附加段
    e_maxalloc			WORD			?	;000ch	-	所需的最大附加段
    e_ss				WORD			?	;000eh	-	初始的SS值(相对偏移)
    e_sp				WORD			?	;0010h	-	初始的SP值
    e_csum				WORD			?	;0012h	-	补码校验值
    e_ip				WORD			?	;0014h	-	初始的IP值
    e_cs				WORD			?	;0016h	-	初始的CS值
    e_lfarlc			WORD			?	;0018h	-	重定位表的字节偏移量
    e_ovmo				WORD			?	;001ah	-	覆盖号
    e_res				WORD		4 dup(?);001ch	-	保留字
    e_oemid				WORD			?	;0024h	-	OEM标识符(相对e_oeminfo)
    e_oeminfo			WORD			?	;0026h	-	OEM信息
    e_res2				WORD		10dup(?);0028h	-	保留字
    e_lfanew			WORD			?	;003ch	-	PE头相对于文件的偏移地址
    

    注意:
    注释后的偏移是基于IMAGE_DOS_HEADER头的

    DOS Stub (略过)

    DOS MZ 头的下面是DOS Stub。整个DOS Stub是一个字节块,其内容随着链接时使用的链接器不同而不同,PE中并没有与之对应的相关结构,所以不需要纠结。

    PE头标识Signature

    紧跟在DOS Stub后面的是PE头标识Signature。与大部分文件格式的头部结构一样,PE头部信息中有一个四字节的标识,该标识位于指针IMAGE_DOS_HEADER.e_lfanew指向的位置。其内容固定,对应于ASCII码的字符串“PE\0\0”

    标准PE头IMAGE_FILE_HEADER

    标准PE头IMAGE_FILE_HEADER紧跟于PE标识头后,位于IMAGE_DOS_HEADERe_lfanew+4的位置。由此位置开始的20字节为数据结构标准PE头IMAGE_FILE_HEADER的内容,此结构在微软的官方文档中被称标准通用对象文件格式(Common Object File Format,COFF)头。它记录了PE文件的全局属性,定义如下:

    IMAGE_FILE_HEADER STRUCT
    	Machine					WORD  	?;0004h	-	运行平台
    	NumberOfSections		WORD	?;0006h	-	PE中节的数量
    	TimeDateStamp			DWORD	?;0008h	-	文件创建日期和时间
    	PointerToSymbolTable	DWORD	?;000ch	-	指向符号表(用于调试)
    	NumberOfSymbols			DWORD	?;0010h	-	符号表中的符号数量
    	SizeOfOptionalHeader	WORD	?;0014h	-	扩展头结构的长度
    	Characteristics			WORD	?;0016h	-	文件属性
    

    注意:
    注释后的偏移是基于IMAGE_NT_HEADERS头的

    标准PE头IMAGE_OPTIONAL_HEADER32

    详细定义如下:

    IMAGE_OPTIONAL_HEADER32	STRUCT
    Magic WORD										?;0018h	-魔术字 107h=ROM Image 10Bh=exe Image
    MajorLinkerVersion			BYTE				?;001ah	-链接器版本号
    MinorLinkerVersion			BYTE				?;001bh	-
    SizeOfCode					DWORD				?;001ch	-所有含代码的节的总大小
    SizeOfInitializedData		DWORD				?;0020h	-所有含已初始化数据的节的总大小
    SizeOfUninitializedData		DWORD				?;0024h	-所有含未初始化数据的节的大小
    AddressOfEntryPoint			DWORD				?;0028h	-程序执行入口RVA
    BaseOfCode					DWORD				?;002ch	-代码的节的起始RVA
    BaseOfData					DWORD				?;0030h	-数据的节的起始RVA
    ImageBase					DWORD				?;0034h	-程序的建议装载地址
    SectionAlignment			DWORD				?;0038h	-内存中的节的对齐粒度
    FileAlignment				DWORD				?;003ch	-文件中的节的对齐粒度
    MajorOperatingSystemVersion	WORD				?;0040h	-操作系统版本号
    MinorOperatingSystemVersion	WORD				?;0042h	-
    MajorImageVersion			WORD				?;0044h	-该PE的版本号
    MinorImageVersion			WORD				?;0046h	-
    MajorSubsystemVersion		WORD				?;0048h	-所需子系统的版本号
    MinorSubsystemVersion		WORD				?;004ah	-
    Win32VersionValue			DWORD				?;004ch	-未用
    SizeOfImage					DWORD				?;0050h	-内存中的整个PE映像尺寸
    SizeOfHeaders				DWORD				?;0054h	-所有头+节表的大小
    CheckSum					DWORD				?;0058h	-校验和
    Subsystem					WORD				?;005ch	-文件的子系统
    DllCharacteristics			WORD				?;005eh	-DLL文件特性
    SizeOfStackReserve			DWORD				?;0060h	-初始化时的栈大小
    SizeOfStackCommit			DWORD				?;0064h	-初始化时实际提交的栈大小
    SizeOfHeapReserve			DWORD				?;0068h	-初始化时保留的堆大小
    SizeOfHeapCommit			DWORD				?;006ch	-初始化时实际提交的堆大小
    LoaderFlags					DWORD				?;0070h	-与调试有关
    NumberOfRvaAndSizes			DWORD				?;0074h	-下面的数据目标结构的项目数量
    DataDirectory	IMAGE_DATA_DIRECTORY 16dup(<>)	?;0078h	-	
    IMAGE_OPTIONAL_HEADER32	ENDS
    

    注意:
    注释后的偏移是基于IMAGE_NT_HEADERS头的

    文件执行时的入口地址,文件被操作系统装入内存后的默认基地址,以及节在磁盘和内存中的对齐单位等信息均可以在上面结构中找到。

    PE头IMAGE_NT_HEADERS

    这个结构是广义上的PE头,在标准的PE文件中其大小为456字节。它是SignatureIMAGE_FILE_HEADERIMAGE_OPTIONAL_HEADER32这三个数据结构的组合。
    在这里插入图片描述
    该结构的详细定义如下:

    IMAGE_NT_HEADERS STRUCT
    	Signature		DOWRD						?;			-PE文件标识,"PE\0\0"
    	FileHeader		IMAGE_FILE_HEADER			<>;0004h	-PE标准头
    	OptionalHeader	IMAGE_OPTIONAL_HEADER32		<>;0018h	-PE扩展头
    

    数据目录项 IMAGE_DATA_DIRECTORY

    IMAGE_OPTIONAL_HEADE32(扩展PE头)结构的最后一个字段为DataDirectory。该字段定义了PE文件中出现的所有不同类型的数据的目录信息。结构定义如下:

    IMAGE_DATA_DIRECTORY	STRUCT
    	VirtualAddress			DWORD		?;0000h	-数据的起始RVA
    	isize					DWORD		?;0004h	-数据块的长度
    
    

    总的数据目录一共由16个相同的IMAGE_DATA_DIRECTORY结构连续排列在一起组成,示意图如下:
    在这里插入图片描述
    这16个元组的数据每一项均代表PE中的某一个类型的数据,数据类型如下:

    0			Export table address  and size      				导出表地址和大小
    1			Import table address  and size      				导入表地址和大小
    2			Resource table address  and size      				资源表地址和大小
    3			Exception table address  and size      				异常表地址和大小
    4			Certificate table address  and size      			属性证书数据地址和大小
    5			base relocation table address  and size      		基址重定位表地址和大小
    6			Debugging information starting address  and size      				调试信息地址和大小
    7			Architecture-specific data      				预留为0
    8			Global pointer register relative virtual address     				指向全局指针寄存器的值
    9			Thread local storage(TLS) table address  and size   线程局部存储地址和大小
    10			Load configuration table address  and size      加载配置表地址和大小
    11			Bound import table address  and size      绑定导入表地址和大小
    12			Import  address table and size      		导入函数地址表和大小
    13			Delay import descriptor address and size      延迟导入表地址和大小
    14			CLR	Runtime Header	address and size      CLR运行时头部数据地址和大小
    15			Reserved      										系统保留
    

    节表项 IMAGE_SECTION_HEADER

    PE头IMAGE_NT_HEADERS后紧跟着节表。它由许多个节表项(IMAGE_SECTION_HEADER)组成,每个节表项记录了PE中某个特定的节有关的信息,如节的属性,节的大小,在文件和内存中的起始位置等。节表中节的数量由字段IMAGE_FILE_HEADER.NumberOfSections来定义。节表项的数据结构定义如下:

    IMAGE_SECTION_HEADER	STRUCT
    	Namel db	IMAGE_SIZEOF_SHORT_NAME dup(?);0000h	-8个字节节名
    	union Misc
    		PhysicalAddress						dd?
    		VirtualSize						 	dd?;0008h	-	节区的尺寸
    	ends
    	VirtualAddress							dd?;000ch	-	节区的RVA地址
    	SizeOfRawData							dd?;0010h	-在文件中对齐后的尺寸
    	PointerToRawData						dd?;0014h	-在文件中的偏移
    	PointerToRelocations					dd?;0018h	-在OBJ文件中使用
    	PointerToLinenumbers					dd?;001ch	-行号表的位置(供调试用)
    	NumberOfRelocations						dw?;0020h	-在OBJ文件中使用
    	NumberOfLinenumbers						dw?;0022h	-行号表中行号的数量
    	Characteristics							dd?;0024	-节的属性
    	IMAGE_SECTION_HEADER	ENDS
    

    注意:
    注释后的偏移是基于IMAGE_SECTION_HEADER头的

    数据结构字段详解

    IMAGE_NT_HEADER.Signature

    +0000h,双字。PE文件标识,被定义为00004550h。也就是“P”,“E”加上两个0,0x45就是“E”,0x50就是“P”,这也是PE这个称呼的由来.如果更改其中的任何一个字节,操作系统就无法把该文件识别为正确的PE文件。通过修改这个字段,会导致PE文件在32位系统中加载失败,但由于文件的其他部分(特别是DOS头)并没有破坏,系统还是可以识别出其为DOS系统下的可执行程序,并通过调用纯DOS环境来运行DOS Stub中的程序代码。
    确认操作系统中的某个PE文件携带病毒,并且开机后会被加载进内存运行,最简单的处理办法是通过Windows PE盘启动系统,在系统中找到病毒文件,使用记事本简单地修改其中任何一个字符,保存文件,重新开机启动后即可防止病毒文件被加载

    注意:
    此PE非彼PE,windows PE是一个操作系统,其全称为:Windows PreInstallation Environment,即Windows的预安装环境。该操作系统区别于Windows XP/2000/Vista等,可以从光盘引导。

    IMAGE_NT_HEADER.FileHeader

    +0004,结构。该结构指向IMAGE_FILE_HEADER,由于PE扩展自通用COFF规范,所以,该字段在官方文档中被称为标准COFF头

    IMAGE_NT_HEADER.OptionalHeader

    +0018h,结构。该结构指向IMAGE_OPTIONAL_HEADER32。在符合COFF规范的“.obj”目标文件中该部分并不存在,所以被称为OptionalHeader(“可选头”)
    可选头又分为两部分,前10个字段原属于COFF,用来加载和执行一个可执行文件后21个字段则是通过链接器追加的。作为PE扩展部分,用于描述可执行文件的一些信息,供PE加载器加载使用。

    IMAGE_FILE_HEADER的字段详解

    IMAGE_FILE_HEADER.Machine

    +0004,单字。用来指定PE文件运行的平台。由于Windows最初被设计为可以运行在Intel,Sun,Dec,IBM等多种硬件平台上,或者能模拟这些平台的软件环境中,而不同的硬件平台其指令的机器码不相同,因此为不同平台编译的EXE是无法通用的。
    下面列出常见值:
    在这里插入图片描述

    IMAGE_FILE_HEADER.NumberOfSections

    +0006h,单字。文件中存在的节的总数。Windows XP中,可以有0个节,但数值不能小于1,也不能超过96。如果将该值设置为0,则操作系统装载时会提示不是有效的win32程序。如果想在PE中增加或删除节,必须变更此处的值。
    另外,这个值既不能比实际内存中存在的节多,也不能比它少,否则装载时会发生错误,提示不是有效的Win32应用程序

    IMAGE_FILE_HEADER.TimeDateStamp

    +0008h,双字。编译器创建此文件时的时间戳。低32为存放的值是字1970年1月1日00:00时开始到创建时间为止的总秒数。
    该数值可以随意修改而不会影响程序运行。所以,有的链接器在这里填入固定的值,有的则随意写入任何值,这对用户创建的文件并没有实际的意义。另外,这个时间值与操作系统文件属性可以看到的三个时间(创建时间,修改时间,访问时间)也没用任何联系

    IMAGE_FILE_HEADER.PointerToSymbolTable

    +000Ch,双字。COFF符号表的偏移。如果不存在COFF符号表,此值为0。对于映像文件来说,此值为0,因为微软已经不赞成在PE中使用COFF调试信息。

    IMAGE_FILE_HEADER.NumberOfSymbols

    +0010h,双字。符号表中元素的数目。由于字符串表紧跟在符号表后,所以可以利用这个值来定位字符串表。对于映像文件来说,此值为0,主要用于调试。

    IMAGE_FILE_HEADER.SizeOfOptionalHeader

    +0014h。单字。指定结构IMAGE_OPTIONAL_HEADER32的长度,默认情况下这个值等于00e0h;如果是64位PE文件,该结构的默认大小为00F0h
    用户可以自己定义这个值的大小,不过需要注意两点:
    (1)更改完以后,需要自行将文件中IMAGE_OPTIONAL_HEADER32的大小扩充为你指定的值(一般以0补足)
    (2)扩充完以后,要维持文件中的对齐特性(比如在HelloWorld.exe中,此处增加了8个字节后,一定要在后面相应删除8个字节,以保证.text节起始位置处于0400h

    IMAGE_FILE_HEADER.Characteristics

    +0016h,单字。文件属性标志字段,它的不同数据位定义了不同的文件属性。
    在这里插入图片描述

    解释:

    1. 当位13为1时,这表示是一个DLL文件,那么系统将使用调用DLL入口函数的方式执行文件入口函数;当位13为0时,表示这是一个普通的可执行文件,系统直接跳到入口处执行。对于普通的可执行PE文件来说,这个字段的值一般是0fh,而对于DLL文件来说,这个字段的值一般是210eh。
    2. 当第0位为1时,表明此文件不包含基址重定位信息,因此必须将其加载到文件头中指定的基地址字段位置。如果进程空间此处的基地址被占用,加载器会报错。在程序运行前如果发现文件中存在可重定位信息,链接器会执行移出可执行文件中的重定位信息的操作。
    3. 当第1位为1时,表明此映像文件是合法的,可以运行。如果未设置此标志,表明出现链接器错误
    4. 当第7位为1时,表明文件是小尾方式,即内存中,最低有效位LSB位于最高有效位MSB的前面,与第15位的大尾方式(MSB在前,LSB在后)一样,都不赞成使用该标志,最好将其设置为0
    5. 当第10位为1时,如果此映像文件在可移动存储介质上,那么加载器将完全加载它并把它复制到内存交换文件中
    6. 当第11位为1时,如果此映像文件在网络上,那么加载器也将完全加载它并把它复制到内存交换文件中
    7. 当第13位为1时,表明此映像文件是动态链接库(DLL)。这样的文件总被认为是可执行文件,尽管它们并不能直接运行
    8. 可执行文件的标志设置为010fh,即第0,1,2,3,8位分别设置为1,表明该文件为可执行文件,不含重定位信息,不含符号和行号信息,文件只在32位平台运行。

    IMAGE_OPTIONAL_HEADER32的字段详解

    IMAGE_OPTIONAL_HEADER32.Magic

    +0018h,单字。魔术字,说明文件的类型,如果为010BH,则表示该文件为PE32;如果为0107h,则表示文件为ROM映像;如果为020BH,则表示该文件为PE32+,即64位下的PE文件

    IMAGE_OPTIONAL_HEADER32.MajorLinkerVersion

    IMAGE_OPTIONAL_HEADER32.MinorLinkerVersion

    +001ah,单字。这两个字段都是字节型,指定链接器版本号,对执行没有任何影响

    IMAGE_OPTIONAL_HEADER32.SizeOfCode

    +001h,双字。所有代码节的总和(以字节计算),该大小是基于文件对齐后的大小,而非内存对齐后的大小。稍后还会介绍一个字段SizeOfmage,它是基于内存对齐后的大小。需要注意一点:判断某个节是否包含代码的方法不是根据节的属性中是否含有IMAGE_SCN_MEM_EXECUTE标志,而是根据节的属性是否含有IMAGE_SCN_CNT_CODE标志

    IMAGE_OPTIONAL_HEADER32.SizeOfInitializedData

    +0020h,双字。所有包含已经初始化的数据的节的总大小。

    IMAGE_OPTIONAL_HEADER32.SizeOfUninitializedData

    +0024h,双字。所有包含为初始化的数据的节的总大小。这些数据被定为未初始化,在文件中不占用空间;但在内加载到内存以后,PE加载程序应该为这些数据分配适当大小虚拟地址空间

    IMAGE_OPTIONAL_HEADER32.AddressOfEntryPoint

    +0028h,双字。在Windows中,可执行程序运行在虚拟地址空间中,由于4GB空间对于程序是唯一的,所以这里的虚拟空间可以简单地理解为真实的地址。该字段的值是一个RVA,它记录了启动代码距离该PE加载后的起始位置到底有多少个字节。
    如果在一个可执行文件中附加了一段自己的代码,并且想让这段代码首先被执行,一般都要修改这里的值使之指向自己的代码位置。对于一般程序映像来说,它就是启动地址;对于设备驱动程序来说,它是初始化函数的地址。入口点对于DLL来说是可选的,如果不存在入口点,这个字段必须设置为0。

    IMAGE_OPTIONAL_HEADER32.BaseOfCode

    +002Ch,双字。代码节的起始RVA,表示映像被加载内存时代码节的开头相对于映像基址的偏移地址。一般情况下,代码节紧跟在PE头部后面,节的名称通常为“.text”

    IMAGE_OPTIONAL_HEADER32.BaseOfData

    +0030h,双字。数据节的起始RVA,表示映像被加载进内存时数据节的开头相对于映像基地址的偏移地址。一般情况下,数据节位于文件末尾,节的名称通常为“.data”

    IMAGE_OPTIONAL_HEADER32.ImageBase

    +0034h,双字。该字段指出了PE映像的优先装入地址。也就是在IMAGE_OPTIONAL_HEADER32.AddressOfEntryPoint中说的程序被加载到内存后的起始VA。那么为什么要设置这个地址呢?因为链接器在产生可执行文件的时候,是对应这个地址来生成机器码的。如果操作系统也是按照这个地址加载机器码到内存中,那么指令中的许多重定位信息就不需要修改了,这样运行速度就会更快一些。

    前面说过,对于EXE文件来说,每个文件使用的都是独立的虚拟地址空间,所以,优先装入的地址通常不会被其他模块占据。也就是说,EXE文件总是能按照这个地址装入,这就意味着装入后的EXE文件不需要进行重定位了

    在链接的时候,可以使用参数“-base”来指定优先装入的地址,如果不确定,那么链接器默认装入EXE的地址就是0x00400000。而相对于DLL文件来说,它默认优先装入地址则是0x10000000。如果一个进程用到了多个DLL文件,其装入地址可能会发生冲突。PE加载器会调整其中的地址,使所有的DLL文件都能被正确装入。所以,不要错误地认为内存中动态链接库的基地址和其文件头字段IMAGE_OPTIONAL_HEADER32.ImageBase指定的完全一样。

    你可以自己定义这个值,但取值有限制:第一,取值不能超出边界,即取的值必须在进程地址空间中;第二,该值必须是64KB的整数倍

    IMAGE_OPTIONAL_HEADER32.SectionAlignment

    +0038h,双字。内存中节的对齐粒度,该字段指定了节被装入内存后的对齐单位。

    解释:
    为什么16位汇编里取数时要从偶地址开始?(取一个字从偶地址开始,只需要一个CPU周期就可以取到;而从奇地址取一个字,则需要两个CPU周期)其实对齐和它一个道理,内存中的数据存取以页面为单位。

    win32的页面大小是4KB,所以Win32 PE中节的内存对齐粒度一般都选择4KB大小。十六进制表示为01000h,

    SectionAlignment必须大于或等于FileAlignment,当它小于系统页面大小时,必须保证SectionAlignment和FileAlignment

    IMAGE_OPTIONAL_HEADER32.FileAlignment

    +003ch,双字。文件中节的对齐粒度。文件中的节对齐并不是提高本身代码的执行效率,同样也是为了提高文件从磁盘加载的效率。Windows XP同来组织硬盘的所有文件系统都是基于簇(分配单元)的,每个簇包含几个物理扇区。扇区是磁盘物理存取的最小单位。簇越大,硬盘存储信息的容量就越大,但存取所花费的时间也越长。通常情况下,Windows会选择使用(200h)512字节的簇大小(1个物理扇区的大小)来格式化分区,最大可以达到4KB。

    IMAGE_OPTIONAL_HEADER32.MajorOperatingSystemVersion

    IMAGE_OPTIONAL_HEADER32.MinorOperatingSystemVersion

    +0040h,23和24标准的两个字段都为单字,共计为双字。标识操作系统的版本号,分为主版本号和次版本号两部分

    IMAGE_OPTIONAL_HEADER32.MajorImageVersion

    IMAGE_OPTIONAL_HEADER32.MinorImageVersion

    +0044h,双字。本PE文件映像的版本号

    IMAGE_OPTIONAL_HEADER32.MajorSubsystemVersion

    IMAGE_OPTIONAL_HEADER32.MinorSubsystemVersion

    +0048h,双字。运行所需要的子系统的版本号。

    IMAGE_OPTIONAL_HEADER32.Win32VersionValue

    +004ch,双字。子系统版本的值,暂时保留未用,必须设置为0,比如将此处的值更改为696C6971h,程序运行将失败。错误如下:
    在这里插入图片描述

    IMAGE_OPTIONAL_HEADER32.SizeOfHeaders

    +0054h,双字。所有头+节表按照文件对齐粒度对齐后的大小(即含补足的0)。在PE文件中,该部分数据是严格按照200h对齐的,如果不对齐,系统在加载时会提示出错

    IMAGE_OPTIONAL_HEADER32.CheckSum

    +0058h,双字。校验和,在大多数的PE文件中,该值是0,但在一些内核模式的驱动程序和系统DLL中,该值则是必须存在且正确的,比如kernel32.dll中PE的检验和是0011E97Eh。Windows系统目录下有一个动态链接库IMAGEHELP.DLL,它是Win32中专门用来操作PE文件的函数库,这里面的函数CheckSumMappedFile就是用来计算文件头检验和的,对于整个PE文件也有一个检验和函数MapFileAndCheckSum。该动态链接库中还包括其他一些常用的函数。

    IMAGE_OPTIONAL_HEADER32.Subsystem

    +005Ch,单字。指定使用界面的子系统,取值如下表。这个字段决定了系统如何为程序建立初始的界面,链接时使用的参数-subsystem:xxx选项指定的就是这个字段的值,如果将子系统指定为Windows命令行用户交互模式(Command User Interface,CUI),那么系统会自动为程序建立一个控制台窗口;如果指定为Windows GUI,窗口程序代码必须由用户自己建立。

    取值 常量符号 含义
    0 IMAGE_SUBSYSTEM_UNKNOWN 未知的子系统
    1 IMAGE_SUBSYSTEM_NATIVE 设备驱动程序和Native Windows进程
    2 IMAGE_SUBSYSTEM_WINDOWS_GUI Windows图形用户界面
    3 IMAGE_SUBSYSTEM_WINDOWS_CUI Windows字符模式(控制台)
    7 IMAGE_SUBSYSTEM_POSIX_CUI POSIX字符模式(控制台)
    9 IMAGE_SUBSYSTEM_WINDOWS_CE_CUI Windows CE图形界面
    10 IMAGE_SUBSYSTEM_EFI_APPLICATION 可扩展固件接口(EFI)应用程序
    11 IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIIVER 带引导服务的EFI驱动程序
    12 IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIIVER 带运行时服务的EFI驱动程序
    13 IMAGE_SUBSYSTEM_EFI_ROM EFI ROM映像
    14 IMAGE_SUBSYSTEM_XBOX XBOX

    MASM32的link程序的链接开关-subsystem的常见选项如下表

    链接开关 取值 常见文件尾
    -subsystem:native subsystem=1 .sys
    -subsystem:windows subsystem=2 .exe
    -subsystem:console subsystem=3 .exe

    IMAGE_OPTIONAL_HEADER32.DllCharacteristics

    +005eh,单字。DLL文件属性,它是一个标志集,不是针对DLL文件,而是针对所有的PE文件的。

    数据位 常量符号 为1时的含义
    0 保留,必须为0
    1 保留,必须为0
    2 保留,必须为0
    3 保留,必须为0
    6 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE DLL可以在加载时被重定位
    7 IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 强制代码实施完整性验证
    8 IMAGE_DLLCHARACTERISTICS_NX_COMPAT 该映像兼容DEP
    9 IMAGE_DLLCHARACTERISTICS_DO_ISOLATION 可以隔离,但并不隔离此映像
    10 IMAGE_DLLCHARACTERISTICS_NO_SEH 映像不使用SEH
    11 IMAGE_DLLCHARACTERISTICS_NO_BIND 不绑定映像
    12 保留,必须为0
    13 IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 该映像为一个WDM driver
    14 保留,必须为0
    15 IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 可用于终端服务器

    这个字段定义了PE文件装载时的一些特性

    IMAGE_OPTIONAL_HEADER32.SizeOfStackReserve

    +0060h,双字,初始化时保留的栈大小。该字段表示为初始线程的栈而保留的虚拟内存数量,然而并不是留出的所有虚拟内存都可以用栈(真正的栈大小由下一个字段SizeOfStackCommit决定)。该字段的默认值为0x100000(1MB),如果调用API函数CreatThread时,把NULL当做传入的参数,那么创建出来的栈大小也会是1MB

    IMAGE_OPTIONAL_HEADER32.SizeOfStackCommit

    +0064h,双字,初始化时实际提交的栈大小。保证初始线程的栈实际占用内存空间的大小,它是被系统提交的,这些提交的栈不存在于交换文件里,而是存在于内存里。对于Microsoft的链接器来说,这个域的初始值为0x1000字节(1页),对于TLINK32,则为2页。

    IMAGE_OPTIONAL_HEADER32.SizeOfHeapReserve

    +0068h,双字,初始化时保留的堆大小。用来保留给初始进程堆使用的虚拟内存,这个堆的句柄可以通过调用GetProcessHeap函数获得。每一个进程至少会有一个默认的进程堆,该堆在进程启动的时候被创建,而且说进程的生命期中永远不会被删除。默认值为1MB,我们可以通过链接器的“-heap”参数指定起始的保留堆内存大小和实际提交的堆大小。

    IMAGE_OPTIONAL_HEADER32.SizeOfHeapCommit

    +006Ch,双字。初始化时实际提交的堆大小,在进程初始化时设定的堆所占用的内存空间,默认值为1页。

    IMAGE_OPTIONAL_HEADER32.LoaderFlags

    +0070h,双字。加载标志

    IMAGE_OPTIONAL_HEADER32.NumberOfRvaAndSize

    +0074h,双字。定义数据目录结构的数量,一般为00000010h,即16个。该值由字段SizeOfOptionalHeaders决定,实际应用中可以取2~16的值

    IMAGE_OPTIONAL_HEADER32.DataDirectory

    +0078h,结构。由16个IMAGE_DATA_DIRECTORY结构线性排列而成,用于定义PE中16种不同类别的数据所在的位置和大小。以下是对这16数据的说明:

    • 导出数据所在的节通常被命名为.edata,它包含一些可被其他EXE程序访问的符号的相关信息,比如导出函数和资源等。这些符号通常出现在DLL中,但DLL也可以包含导入符号,而且在某些EXE中也可以有导出符号。
    • 导入数据所在的节通常被命名为.idata,它包含了PE映像中所有导入的符号。导入信息在EXE和DLL中几乎都存在
    • 异常表数据所在的节通常被命名为.pdata。该节是由用于异常处理的函数表项组成的数组。可选文件头中的ExceptionTable(异常表)字段指向它。在将他们放进最终的映像文件之前,这些表项必须按函数地址进行排序,并且这些函数表项的描述必须符合特定的目标平台。该部分的数据主要用于基于表的异常处理,适用于除X86之外的所有CPU
    • 资源数据所在的节通常被命名为.rsrc。该节是一个多层的二叉排序树,该树的节点指向PE中各种类型的资源,如图标,对话框,菜单等。树的深度可达231层,但是PE中经常使用的只有3层:类型层,名称层,语言代码层。
    • 属性证书数据的作用类似PE文件的校验和或者MD5码,通过这种属性证书方式可以验证一个PE文件是否被非法修改过,为PE文件添加属性证书表可以使该PE与属性证书相关联。属性证书表是由一组连续的按八进制(从任意字节边界开始的16个连续字节)边界对齐的属性证书表项组成,每个属性证书表项指向WIN_CERTIFICATE结构。此结构可以在WinTrust.H文件中找到,结构定义如下:
    WIN_CERTIFICATE STRUCT
    	dwLength			DWORD		?;0000h
    	wRevision			WORD		?;0004h
    	wCertificateType	WORD		?;0006h
    	bCertificate		byte		?;0008h
    	WIN_CERTIFICATE  ENDS
    

    注意:
    该数据并不作为映像的一部分被映射到内存,因此,DataDirectory.Certificate_VirtualAddress字段是文件偏移,而不是RVA

    DataDirectory.Certificate_VirtualAddress字段给出了属性证书表中第一个属性证书表项在文件中的偏移,与后续的属性证书表项,可以通过当前属性证书表项的文件便宜加上WIN_CERTIFICATE.dwLength字段的值,并将结果向上舍入为8个字节的倍数来访问。后续的属性证书表项可以一直以这种方式访问,直到这些WIN_CERTIFICATE.dwLength字段(已经向上舍入为8字节的倍数)的和等于可选文件头中的DataDirectory.Certificate_isize的值。如果上述的值最后不等于isize字段的值,要么是属性证书表被破坏了,要是isize域被修改了。

    • 基址重定位信息所处的节通常被命名为.reloc,基址重定位表包含了映像中所有需要重定位的内容。它被划分别许多块,每一块表示一个4KB页面范围内的基址重定位信息,它必须从32位边界开始。一般情况下,Windows加载器是不需要处理由链接器解析的基址重定位信息,除非该映像不能被如约地加载到IMAGE_OPTIONAL_HEADER32.ImageBase指定的位置。
    • 调试数据所处的节通常被命名为.debug,它指向IMAGE_DEBUG_DIRECTORY结构数组。其中的每个元素都描述了PE中的一些调试信息。要获得IMAGE_DEBUG_DIRECTORY结构的数目,可以用isize字段除以IMAGE_DEBUG_DIRECTORY结构的大小
      注意:
      在默认情况下,调试信息并不会映射到映像到虚拟地址空间中。调试目录可以位于一个可丢弃的.debug节(如果存在)中,或者位于PE文件的其他节中,或者不任何节中。所以,它可能被加载到虚拟内存中,而大部分情况下是被丢弃的。
    • 预留,必须为0
    • Global Ptr数据描述的是被存在全局指针寄存器中的一个值
    • 线程本地存储数据所处的节,通常命名为.tls。线程本地存储(TLS)是Windows支持的一种特殊存储类别,其中的数据对象不是栈变量,是对应于运行相应代码的单个线程。因此,每个线程都可以为使用TLS定义的变量来维护一个不同有其它线程的值
      当创建线程时,PE加载器通过线程环境块(TEB)的地址放入FS寄存器来传递线程的TLS数组地址,距TEB开头0x2C的位置处有一个指针指向该TLS数据。线程本地存储技术是特定于intel x86平台。
    • 加载配置信息用于包含保留SEH技术,该技术基于x86的32位系统,它提供了一个安全的结构化异常处理程序列表,操作系统在进行异常处理时要用到这些异常处理程序
    • 绑定导入数据的存在主要是为了优化导入信息,提高PE的加载效率。当PE文件被加载到内存时,加载器会先检查导入表,然后把需要加载的DLL载入到地址空间中。加载器还有一项比较重要的工作是根据导入信息的描述使用动态链接库里输入函数的实际地址取替换IAT表的内容,这个步骤会花去一部分时间。但是,如果程序员(或者链接器)可以完全知道函数的地址,就可以直接把数据中的元素替换为地址,这能节省想当多的时间,这种方法称为绑定。简单来说,绑定是由程序员或链接器代替Windows PE加载器完成了一部分对导入表的处理工作(在加载时)
    • IAT是导入地址表的英文缩写。准确地讲,它是导入表的一部分,这个双字数组里定义了所有导入函数的VA,程序可以直接通过跳转指令跳转到该VA处执行
    • 延迟导入数据也和动态链接库调用有关,这种数据的存在是为了给“应用程序直到首次调用某个DLL中的函数或数据时才加载这个DLL(即延迟加载)”这种行为提供一种统一的访问机制
    • CLR数据所处的节通常被命名为.cormeta,该信息是.NET框架的一个重要组成部分,所有基于.NET框架开发的程序,其初始化部分都是通过访问这部分定义而实现的。PE加载时将通过该结构加载代码托管机制需要的所有动态链接库文件,并完成与CLR有关的一些其他操作。
    • 系统预留,未定义

    IMAGE_DATA_DIRECTORY

    IMAGE_DATA_DIRECTORY.VirtualAddress:
    +0000h,双字。如上所述,这个字段记录了特定类型的起始RVA。当然针对不同的数据结构,该字段包含的数据含义并不一样,有的数据甚至还不是RVA(如属性证书数据中该字段的值表示的值FOA)
    IMAGE_DATA_DIRECTORY.isize:
    +0004h,双字。该字段记录了特定类型的数据块的长度。

    节表项IMAGE_SECTION_HEADER的字段

    IMAGE_SECTION_HEADER.Name1

    +0000h,8字节,该字段一共就8节,一般情况下是一个以“\0”结尾的ASCII码字符串来标识节的名称,内容可以自行定义
    该名称并不遵循Ansi字符串必须以“\0”结尾的规则,如果不以“\0”结尾,系统依然会认为它是一个字符串,但会根据8个字节的长度对其进行截断处理

    IMAGE_SECTION_HEADER.Misc

    +0008h,双字。该字段是一个union型的数据,这是节的数据在没有对齐前的真实尺寸,步过很多PE文件该值并不准确

    IMAGE_SECTION_HEADER.VirtualAddress

    +000ch,双字。节区的RVA地址

    IMAGE_SECTION_HEADER.SizeOfRawData

    +0010h,双字。节咋文件中对齐后的尺寸。一般512(200h)字节。

    IMAGE_SECTION_HEADER.PointerToRawData

    +0014h,双字。节区起始数据在文件中的偏移。

    IMAGE_SECTION_HEADER.PointerToRelocations

    +0018h,双字。在“.obj”文件中使用,指向在重定位表的指针

    IMAGE_SECTION_HEADER.PointerToLinenumbers

    +001ch,双字,行号表的位置(供调试用)

    IMAGE_SECTION_HEADER.NumberOfRelocations

    +0020h,单字。重定位表的个数(在OBJ文件中使用)

    IMAGE_SECTION_HEADER.NumberOfLinenumbers

    +0022h,单字。行号表中行号的数量

    IMAGE_SECTION_HEADER.Characteristics

    +0024h,双字。节的属性。这个字段很重要,这是节的属性标志字段,其中不同的数据为代表不同的属性,如下:

    数据位 常量符号 位为1时的含义
    5 IMAGE_SCN_CNT_CODE或00000020h 节中包含代码
    6 IMAGE_SCN_CNT_INITIALIZED_DATA或00000040h 节中包含已初始化数据
    7 IMAGE_SCN_CNT_UNINITIALIZED_DATA或00000080h 节中包含未初始化数据
    8 IMAGE_SCN_CNT_LINK_OTHER或00000100h 保留供将来使用
    25 IMAGE_SCN_MEM_DISCARDABLE或02000000h 节中的数据在进程开始以后将丢弃,如.reloc
    26 IMAGE_SCN_MEM_NOT_CACHED或04000000h 节中的数据不会经过缓存
    27 IMAGE_SCN_MEM_NOT_PAGED或08000000h 节中的数据不会被交换到磁盘
    28 IMAGE_SCN_MEM_SHARED或10000000h 表示节中的数据将被不同的进程所共享
    29 IMAGE_SCN_MEM_EXECUTE或20000000h 映射到内存后的页面包含可执行属性
    30 IMAGE_SCN_MEM_READ或40000000h 映射到内存后的页面包含可读属性
    31 IMAGE_SCN_MEM_WRITE或80000000h 映射到内存后的页面包含可写属性

    代码节的属性一般为60000020h,也就是可执行,可读和“节中包含代码”;数据节的属性一般为c0000040h,也就是可读,可读和“包含已初始化数据”;而常量节(对应源代码中的.const段)的属性为40000040h,也就是可读和“包含已初始化数据”;资源节的属性和常量节的属性一般是相同的。
    节属性的定义不一定必须是这些值。比如,PE文件被压缩工具压缩以后,包含代码的节往往被同时设置成具有可执行,可读和可写属性,因为解压部分需要将解压后的代码回写到代码段中

    展开全文
  • 软件各种系统架构图

    万次阅读 多人点赞 2017-12-08 10:53:44
    2.ErrorHandling Aspect:整个系统采用一致的错误/异常处理方式。 3.Log Aspect:用于系统异常、日志记录、业务操作记录等。 四.规则 1.系统各层次及层内部子层次之间都不得跨层调用。 2.Entity ...
  • 【最全】软件测试基础理论选择题(含答案)

    万次阅读 多人点赞 2020-03-05 19:17:40
    B、发现软件错误 C、证明软件正确 D、找出软件中全部错误 【答案】B 2、下面说法正确的是( ) A、经过测试没有发现错误说明程序正确 B、测试的目标是为了证明程序没有错误 C、成功的测试是发现了迄今尚未发现的错误的...
  • 1 整理2009~2016年系统构架师”软件架构设计”题目 2 内容见文档:”考点按章节整理\第 9 章 软件架构设计\软件架构设计.docx” 3 更新文档:”各年例题分类.xlsx” 考题分布 软件架构设计 目录 软件...
  • X.5.4 Invalid command arguments 命令叙述错误 X.5.5 Wrong protocol version 错误的通讯协议版本 X.6.X 表示邮件内容或媒介(Message Content or Media)的问题,收件者与寄件者双方必需支持同样的内容类别...
  • X.5.4 Invalid command arguments 命令叙述错误 X.5.5 Wrong protocol version 错误的通讯协议版本 X.6.X 表示邮件内容或媒介(Message Content or Media)的问题,收件者与寄件者双方必需支持同样的内容类别...
  • 下列关于操作系统叙述中,哪一个是错误的? 操作系统应为用户提供良好的界面 操作系统是计算机系统中的一个应用软件 × 操作系统向用户屏蔽了硬件操作细节 操作系统管理着计算机系统中的各种资源 解释 操作系统...
  • 作者前面详细介绍了熊猫...这些基础性知识不仅和系统安全相关,同样与我们身边的APP、常用软件系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,开发厂商进行相关的漏洞修补,安全保障任重道远。
  • 本文翻译自:http://www.aosabook.org/en/index.html (卷2第1章)  中文版参考了这里的翻译:...  开源软件已成为一些超大型网站的基础组件。并且随着那些网站的发展,围绕它们的架构出现
  • 操作系统概述题库

    千次阅读 多人点赞 2018-08-02 09:56:19
    C、操作系统是计算机系统中的一个应用软件(系统软件) D、操作系统向用户屏蔽了硬件操作细节 解析: 2、下列关于批处理操作系统的叙述中,哪一个是正确的? A、批处理操作系统的系统资源利用率不高 B、...
  • 中断机制是操作系统中极为重要的一个部分。操作系统在管理输入输出设备时,在处理外部的各种事件时,都需要通过中断机制进行处理。所以也有人把操作系统称为是由...在本节中,首先介绍中断的概念,然后叙述中断系统...
  • 内存不能read 或written的常见原因: 使用Windows操作系统的人有时会遇到这样的错误信息:“0X????????指令引用的 0x00000000内存,该内存不能written”,然后应用程序被关闭。如果去请教一些“高手”,得到的回答...
  • 软件测试

    千次阅读 2010-06-16 18:29:00
    软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发...
  • 下列关于操作系统叙述中,哪一个是错误的? A、 操作系统管理着计算机系统中的各种资源 B、 操作系统应为用户提供良好的界面 C、 操作系统是计算机系统中的一...
  • 机房收费系统软件需求说明书

    千次阅读 热门讨论 2014-02-19 21:18:53
    软件需求说明书 1引言 1.1编写目的 本系统的需求规格说明书是为了使用户和开发者对该系统的初始规定有一个共同的理解,使之成为整个开发工作的基础文档,是对需求分析的... 待开发的软件系统的名称;机房收费系统 b
  • 本文主要叙述如何使用C#让窗体最小化至任务栏,同时在系统托盘区的图标点击左键能显示窗体,右键能关联控件显示3个常用功能:显示窗体、隐藏窗体和退出功能.主要涉及到的控件是notifyIcon和contextMenuStrip,希望作者以...
  •  A、 操作系统管理着计算机系统中的各种资源 B、 操作系统应为用户提供良好的界面 C、 操作系统是计算机系统中的一个应用软件 D、 操作系统向用户屏蔽了硬件操作细节2、(5分)下列关于批处理操作系统叙述中,哪...
  • 操作系统MOOC课后习题答案

    千次阅读 2021-03-25 18:35:21
    第一章 导论 1.1 什么是操作系统随堂测验 1、操作系统的核心目标是()。 A、管理硬件 B、运行程序 C、让用户方便使用 D、提高CPU利用率 答案:B 2、从设备到本地缓冲之间传输数据由()...1、下面关于分时系统叙述
  • 软件问题(特别是右键第三方加载项) 安装清华紫光输入法3.0版本有的时候会出现explorer.exe出错,取消清华紫光输入法,用其他输入法输入如果没有问题,可以判断为输入法问题。卸载清华紫光输入法,即可解决。 清华...
  • 前文分享了MSF利用MS17-010漏洞进行反弹Shell,再上传勒索病毒,复现了WannaCry勒索病毒。...同时,由于作者技术真的菜,只能叙述自己摸索的过程,如果存在错误或不足之处,还望告知。希望这篇基础性文章对您有所帮助~
  • CVTE的软件支持工程师的笔试题主要分为选择题(20道)和编程题(2道),考查内容主要是C语言、Linux操作系统为主。编程题都比较简单,没有什么难度;选择题涉及的范围还是比较广的。不过有三点比较“坑”的地方: ...
  • windows内核错误处理

    千次阅读 2015-02-11 15:23:01
    人总会犯错误错误恢复是软件工程的一部分。程序中总会发生异常情况,其中一些源自程序中的Bug,或者在我们的代码中或者在调用我们代码的用户模式应用程序中。另一些涉及到系统装载或硬件的瞬间状态。无论什么原因...
  • 作为芸芸众程序员的一员,我对软件开发中的一切都充满问题。今天是关于测试,作为一名唯物主义者,我相信众物都有其神,于是我找到了测试之神。 接着,我和神有了一次长谈,我问,他答。
  • 第二章:软件建设的过程和工具第二节:软件构建的过程、系统和工具问题一:广义的软件构造过程 :Programming(coding)(编码)--&gt;Build(构建)--&gt;Code review Static code analysis(代码评审)--&...
  •  中国平安银行关于软件测试笔试试题(一)  中国平安银行关于软件测试笔试试题(二)  多选题  1、基于组件设计的系统特征包括(该题为必答题)  封装 耦合 内聚 抽象  2、可能与正在运行的进程无关的中断事件有...
  • 操作系统复习习题

    万次阅读 多人点赞 2020-07-07 08:56:31
    第一章 课上习题 1-1与计算机硬件关系最密切的软件是 OS ...1-7在下面关于并发性的叙述正确的是?并发性是指若干事件在同一时间间隔发生 1-8操作系统的资源共享有什么方式?互斥访问共享;同时访问共享 1-9下面对OS不

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,083
精华内容 11,633
关键字:

关于系统软件的叙述错误的是