首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
操作系统笔记1,设备坐标的理解
发布时间:2019-12-25 16:25
浏览次数:

最近在学Win32的编程,看的是《Windows程序设计第5版》一书,这本书是台湾人翻译的,有些译法和大陆不一样,书中还有一些错误的地方,很多时候需要中英文对照阅读,下载请点击

操作系统概论

计算机系统由硬件和软件两部分组成。硬件指计算机的各个部件,包括:存储器、处理器、输入/输出设备及电源、机箱等。软件是指存在计算机系统中或外存储器中的程序及数据的集合。

计算机软件分为系统软件和应用软件。

系统软件是计算机厂商为了便于用户使用计算机而驻存在计算机硬件(如硬盘和软盘)内的系统支持程序。主要的系统软件包括:操作系统、编译和解释程序、汇编程序、连接装入程序、编辑程序和设备驱动程序等。

应用软件是用户为了专门的应用目的,向计算机厂商或其他软件商购买的或者自己开发的解决某一类问题的软件。典型的有:数据库管理软件、图像处理软件、各种办公软件和杀毒软件等。

其中操作系统是一种首要的、最基本的、最重要的系统,也是最庞大、最复杂的系统软件。

cmd

1. JasperReport介绍

    JasperReport 是一个开源的Java报表引擎,它不像其他的报表工具,例如Crystal报表是基于Java的,没有自己的表达式语法。Jasper Reports有提供丰富的内容到屏幕上,到打印机,或转换成PDF,HTML,XLS,RTF,ODT,CSV,TXT和XML文件的能力。Jasper Reports是一个Java类库,需要嵌入到Java应用程序中。Jasper Report的特点如下:

  • 具有灵活的报表布局;
  • 可以用文字或图形显示数据;
  • 开发人员可以通过多种方式提供数据;
  • 可以接受来自多个数据源的数据;
  • 可以生成水印(水印是这样的方式被放置在主图像的副图像);
  • 可以生成子报表;
  • 能够导出报表到多种格式的。

https://download.csdn.net/download/u013238941/10611720

1.1 什么是操作系统

通常把操作系统定义为用以控制和管理计算机系统资源,方便用户使用的程序和数据结构的集合。

(1)系统观点——计算机资源管理

在计算机系统中,CPU是计算机硬件的核心,是计算机系统的心脏;操作系统则是计算机软件的核心,是计算机系统的大脑,是整个系统的控制中心,是计算机或智能控制和管理系统中首要的、最重要的、最复杂的系统软件。

计算机系统内运行的程序无时无刻地争夺计算机有限的资源,操作系统的作用在于组织和管理整个计算机系统的硬件和软件资源,在用户和程序之间分配系统资源,使之协调一致、高效地完成各种复杂的任务。

(2)用户观点——用户使用计算机的界面

通过操作系统,计算机能提供更多、质量更高的服务。安装不同的操作系统,呈现在用户面前将会是完全不同的两类“虚拟”计算机,因此操作系统是用户与计算机硬件之间的接口。用户一般通过以下方式获得计算机系统提供的服务。

①命令方式:通过键盘输入有关命令直接使用计算机,以获得计算机所能提供的服务,也可以将若干命令集中在一个文件中,以批处理的方式连续运行命令,获得多种服务。

②系统调用:用户可在应用程序中调用操作系统向用户提供的服务程序,以获得系统服务。

③图形界面:用户可以在窗口环境中通过鼠标、按键、菜单和对话框等方式操纵计算机。

(3)软件观点——程序和数据结构的集合

操作系统是直接与硬件相邻的第一层软件,是由大量极其复杂的系统程序和众多的数据结构集成的。在计算机中的所有软件中,操作系统起到了核心和控制的作用,其它软件的运行都要依赖他的支持。操作系统是在系统中永久运行的超级程序。

在桌面或任意磁盘新建一个TXT--输入CMD并保存--修改扩展名为.BAT

2. 开发流程

    JasperReport完全由Java编写,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。它主要目的是辅助生成面向页面的、准备打印的文档。下面的流程图描述了一个典型的报表开发的工作流程。

 图片 1

    如上图所示,JasperReport报表开发分为四个阶段:

(1)设计报表

    这个阶段是创建jrxml文件,该文件是包含报表布局定义的XML文档,可以使用JasperSoft Studio或iReport这两种可视化开源开发工具来创建。

(2)编译报表

    这一阶段是将源文件(*.jrxml)编译成二进制文件(*.jasper),该jasper文件可以随应用程序运行。

(3)执行报表

    该步骤是将应用程序中的数据填充在报表模板中,即jasper文件。这一阶段将会产生jasper打印文件(*.jrprint),该文件可以用来打印或导出报表。

(4)导出报表到所需要的格式中

    JasperReport提供了各种形式的导出格式,如:HTML,PDF,Excel等。该阶段可以导出需要的报表格式。

好了,下面开始正文:

1.2 操作系统的发展

md 文件夹名 新建文件夹
cd 文件夹名 进入到该目录
cd.. 返回上一层目录
cd 返回根目录
cd.>文件名 新建文件
rd 文件夹名 删除文件夹(只能删除空文件夹)
copy 文件(夹)名1 文件(夹)名2 1复制到2中
move 文件(夹)名1 文件(夹)名2 1剪切到2中
del 文件名 删除文件
del 文件夹名 删除文件夹内的所有文件
ren 文件(夹)名1 文件(夹)名2 将名字1改成名字2
dir 文件夹名 查看该目录下的所有文件信息
type 文件名 查看文件内容

3. 实现原理

    JasperReport Library为报表开发提供了丰富的类库,其中生成报表并打印、导出全过程如下图所示。

 

图片 2

    开发流程如下:

(1)开发报表设计文件,也就是一个*.jrxml文件。

(2)使用JasperReports提供的JasperCompileManager工具编译*.jrxml文件,编译后生成一个*.jasper文件。

(3)使用JasperReports提供的JasperFillManager工具填充编译后的*.jasper文件,填充后生成一个*.jrprint文件。

(4)使用导出管理器JasperExportManager或者各种格式的文件导出器JRXxxExporter将*.jrprint文件导出成各种格式的报表文件。也可以使用JRViewer工具类来直接浏览报表。也可以使用打印管理器JasperPrintManager来打印报表。

在看到GDI(GDI Graphic Device Interface图形设备接口)操作系统笔记1,设备坐标的理解。映射方式这一节的时候,书中又是逻辑坐标,又是设备坐标,又是视口,窗口,又是视埠什么的,搞得人头都大了。虽然我现在还没有完全读懂,但是我感觉我已经抓住了理解这些东西的主线,下面的东西就当作我的笔记吧:

1.早期的计算机和人工操作方式

在早期的计算机系统中,每一次独立的运行都需要很多的人工干预,操作过程烦琐,占用机时多,也很容易产生错误,在一个程序的运行过程中要独占系统的全部硬件资源,设备利用率很低。

when move attention ,at last you can change the name
D:aa2>move 1.txt D:aa11.txt

4. 相关实现类

    在JasperReport的开发流程中,主要涉及下面的这几个类:

(1)net.sf.jasperreports.engine.design.JasperDesign

    这个类可以在JasperReport类库内置的XML解析器对XML report design进行解析处理之后得到[2]。其对应与报表模板文件在内存中的形式,即*.jrxml文件。

(2)net.sf.jasperreports.engine.JasperReport

    这个类的实例包含了一个经过编译的report design对象。生成它的时机是对报表编译之后,但尚未对其填入数据的时候。编译过程中,JasperReport需要生成一个临时的类文件,用以保存report 表达式,如变量表达式、文本、图像表达式、组表达式等等。这个临时的Java Source File是被动态编译的,编译器使用的是JDK中用来执行应用程序的编译器类(compiler class)。如果 tools.jar不在classpath中,编译过程将采用javac.exe来进行后台编译。编译后所得的字节码保存在JasperReport类中,用来在执行期填充数据和给表达式赋值。对应二进制报表文件在内存中的形式,也就是对应的*.jasper文件。

(3)net.sf.jasper.engine.JasperPrint

    当一个报表已经装填好数据之后,这个文档就以JasperPrint类的实例出现。这个类可以直接用JasperReport内置的viewer进行查看,也可以序列化到硬盘以备后用,或者发送到网上去。这个类的实例是报表装填过程后的产物,它可以被JasperReport类库中的导出方法导出成各种流行的格式如PDF,HTML,XML等等。

(4)net.sf.jasperreports.engine.xml.JRLoader

    装载器用于报表生成的各个主要阶段如编译,填充等。用户和引擎都可以利用这个类来装载所需的序列化对象如file、URLs、intput stream等。这个类最令人感兴趣的函数当属loadOnjectFromLocation(String location)[3]。当用户使用这个类从指定地点装载对象的时候,该函数将首先将location解释为一个合法的URL,如果解析失败,函数将认为所提供的location是硬盘上的一个文件名,并将试图读取它。如果在指定地点没找到文件,它将通过classpath定位一个相应于该location的资源,所有努力失败之后,将抛出异常。

(5)net.sf.jasperreports.engine.JasperCompileManager

    这是一个与编译有关的类,利用它提供的一些编译方法,允许我们将一个报表设计文档(*.jrxml文件)编译成一个二进制文件(*.jasper文件)。此外,它也可以直接将net.sf.jasperreports.engine.design.JasperDesign(*.jrxml文件在内存中的形式)对象编译成net.sf.jasperreports.engine.JasperReport对象。

(6)Class net.sf.jasper.engine.JasperFillManager 

    这个类用来实现报表的数据填充。报表填充就是为报表的数据查询提供数据库连接,给报表的参数设置值等。填充之前是*.jasper文件,经过填充后就变成了*.jrprint文件--这是一个可显示或者可导出成报表的文件。这个类提供了很多方法来接受各种类型的report design,可以是一个对象、文件、或输入流。它的输出结果也是多样的:file、Object、output Stream。

(7)net.sf.jasperreports.engine.JasperPrintManager

    用于将一个*.jrprint文件完成打印。在JapserReports中,我们可以通过这个类来打印报表,它包含了所有的打印功能。它提供了打印整个文档或者部分文档、显不显示打印对话框的方法。使用这个类可以将JasperReports文档的一页作为一个java.awt.Image对象来显示。

(8)net.sf.jasperreports.engine.JasperExportManager

    这个管理类对不同来源和不同去处(文件、输入输出流等)的数据提供不同的方法。用于将可显示的报表导出成各种格式的报表文件,例如PDF、HTML、XML和其他的格式。

(9)net.sf.jasperreports.engine.export.JRXxxExporter

    这是一系列的文件导出器,它们用于将*.jrprint文件导出成对应格式的报表文件。例如XSL、PDF、HTML、XML、CSV、RTF、TXT和其他的格式。JRXlsExporter、JRPdfExporter、JRXmlExporter、JRCsvExporter、JRHtmlExporter、JRTextExporter、JRRtfExporter。

(10)net.sf.jasperreports.engine.JasperRunManager

    这个类可以直接将*.jasper文件导出成各种格式的报表文件,有时候在报表填充过程中我们不希望生成中间的net.sf.jasperreports.engine.JasperPrint对象,而直接生成我们所需要的文档格式,例如:PDF或HTML。

1.逻辑坐标和设备坐标

2.脱机输入/输出和批处理系统

(1)脱机输入/输出

为了解决人工干预与CPU速度不匹配的矛盾,提高计算机的使用效率,在计算机中配备了“监控程序”。用户的控制指令和操作步骤可以写在源程序前或专门的控制卡片上。“监控程序”先读入控制命命令,并按命令的指示一步一步自动执行,这就是“操作系统”的雏形。

为了解决慢速输入/输出设备与CPU速度的不匹配问题,可将用户打在卡片上或纸带上的程序和数据通过外围小计算机预先输入到磁带上,运行时再从磁带上高速读入内存,输出也同样通过磁带中转。这种方式就是“脱机输入/输出”。

(2)批处理系统

脱机输入/输出进一步提高了极端及的运行效率,但自前一个惩处运行结束到启动后一个程序运行这段时间内,程序员或操作员还需要进行很多的人工干预。批处理的基本思想是:操作员取来一批作业,将它们输入到磁带中,操作系统先从磁带上将第一个作业读入内存,启动它运行,并将运行结果输出到另一个磁带中,当第一个程序运行完毕,操作系统自动的从输入磁带上读入下一个作业,并予以运行和输出,直到整批作业全部处理完毕。

由于系统作业是成批地进行处理,但内存中智能保持一个运行作业,故该类系统又称为单道批处理系统。

5. 报表数据源

    Jasper报表引擎获得来自数据源的数据,可以从数据库,XML文件,对象数组和集合中的对象来获得。前面我们介绍了利用JasperFillManager来实现报表的数据填充,具体是由fillReportXXX()方法获取数据源进行填充。

(1)JDBC数据源

    JRResultSetDataSource类关联入一个java.sql.ResultSet对象。这是当报表数据从关系数据库中提取最常用的数据源实现。如果使用java.sql.Connection传递给引擎,它首先执行相关的查询,并将该返回java.sql.ResultSet中的对象在一个JRResultSetDataSource实例。

(2)JavaBean数据源

    JRBeanArrayDataSource类和JRBeanCollectionDataSource类实现了可以分别包装的JavaBean对象的数组或集合。数组或集合中的每个对象都将被视为对这种类型的数据源中的一个记录。一个特定的JavaBean属性和相应的报表字段之间的映射是通过命名约定进行。报表字段的名称必须是相同的所指定的JavaBeans的规范JavaBean属性的名称。

(3)基于Map数据源

    父级应用程序已经存储在内存中的java.util.Map对象提供填充数据的实现类JRMapArrayDataSource和JRMapCollectionDataSource非常有用。被包装的数组或集合中的每个映射对象被认为是数据源中的一个虚拟的记录,每个报表字段的值从映射中使用报表字段名作为键提取。

(4)TableModel的数据源

    许多客户端应用程序的数据以表格形式显示。在许多应用中常见的需求是允许用户打印该表格形式的报告。实现类JRTableModelDataSource使生成的表格格式的Swing应用程序报告的任务。这个类封装了一个javax.swing.table.TableModel对象。列在包装的TableModel对象可以通过他们的名字或他们的基于0索引来访问。

(5)XML数据源

    类JRXmlDataSource是基于DOM,它使用XPath表达式来选择XML文档数据的数据源的实现。 XML数据源中的记录是通过XPath表达式选择的节点元素表示。字段值是由每个记录使用由字段描述(JRXML<fieldDescription>元素)所提供的XPath表达式检索。

(6)CSV数据来源

    JRCsvDataSource 代表了从结构化文本文件中检索其数据的数据源的实现,通常为CSV。字段值是正在使用他们的列索引检索。

(7)XLS数据来源

    JRXlsDataSource 代表其检索的Excel文件的数据的数据源的实现。报表字段映射为这个数据源的实现也是基于字段列索引。

(8)空数据来源

    类JREmptyDataSource,模拟与内部虚拟空的记录给定数量的数据源。它是由用户界面的工具来提供基本的报表预览功能,或在特殊报告模板,或用于测试和调试目的。

   

到此为止,JasperReport报表开发的整个流程和实现原理已经介绍完了,在了解了这些之后,后面实践起来心里就要清楚一些。

   首先,逻辑坐标这个名词就让很多人望而却步,确实,不能“望文生义”地理解的翻译就不是好翻译   ------鲁迅。哈哈,开个玩笑,我们要理解这两个东西,首先要想到如果你要用Win32要绘制一个东西,该怎么做呢?比如绘制一个矩形,假设我们调用的是Rectangle(hdc,30,20,50,80),(这个函数的用法是Rectangle(hdc,left,top,right,bottom),我叫雷锋,不用谢我)。可以看到,跟很多GDI函数一样,这个函数里面使用了很多数字,坐标。让我们回忆一下小学知识,绘制一个东西,不仅应当搞清楚他的长度,还应该搞清楚他的单位,那么这里的30,20,50,80的单位是什么呢?很多人会说,是像素!这个答案是对的,但是又不全对。事实上,Windows默认的映射方式(Mapping Mode,简称就是MM)是MM_TEXT,在MM_TEXT映射方式(TEXT实际上跟文字没有多大关系,是这种映射方式下的坐标方向,从左到右,从上到下,跟文字阅读方式一样)下,这个单位确实是像素。实际上,逻辑坐标和设备坐标的区别就在于他们的单位不一样!

3.缓冲、终端和DMA技术

(1)缓冲技术

脱机、批处理还没有完全解决CPU与外部设备速度匹配问题,无论你是从读卡机还是从磁带中读入,相对于CPU来说,读入数据的速度总是嫌慢,进一步的解决方法是采用缓冲技术。原理:将数据存放在一个特定的缓冲区,当CPU从缓冲区中得到了数据,在对它进行运算之前吗,再启动输入设备以输入下一个数据至缓冲区。这样CPU在记性运算时,外部设备的输入工作也在同时进行。同样输出也采用缓冲技术。采用带缓冲的输入/输出技术后,CPU与外部设备能做到并行操作,减少了互相等待的时间,极大提高了CPU与各种外部设备的使用效率。

(2)中断技术

具有缓冲的输入输出也带来了新的问题。一个问题时处理机要知道I/O设备什么时候已经完成了输入操作,以便处理数据并启动CIA一个I/O。如果考CPU反复地查询输入设备的状态,就会浪费很多CPU时间。中断技术的出现解决了这个难题 。

只要I/O设备一旦完成输入/输出操作,它就会自动向CPU发出中断信号,CPU收到中断信号后,就会暂停当前的处理工作,在做一些必要的现场保护、中断处理工作后,转图中断服务程序。中断服务程序读出缓冲区的数据,然后启动下一个IU/O操作。从中断服务程序返回后,操作系统恢复被中断的运算过程。

中断处理机构需要在系统栈啥保存中断返回地址,还要保护中断时的其它现场。在完成中断服务,中断程序要恢复原先的中断现场,取得断口地址,使计算机基础原先的处理工作。CPU在处理一个中断事务时,若果又收到一个优先级更高的中断请求,就会暂停当前的中断服务,转为处理更为紧迫的操作,这样就想成了中断的嵌套。

(3)DMA技术

对于慢速的I/O设备,CPU在执行有关并的中断服务程序后,还可利用剩下的大部分时间来执行其他的计算工作。但是对于磁带、磁盘或高速网络通信接口,CPU响应中断和处理数据所费的时间可以比数据到达的时间间隔更长。这样,即使处理机的时间全部用于处理中断和接收输入数据,也仍然会发生数据丢失的情况。

为了解决这个难题,产生了直接存储器存取(DMA)技术。一旦收到DMA发来的中断请求后,CPU在设置了缓冲区、指针和计数器后,DMA就可以不再需要CPU的干预,在内存和设备之间传送整块数据。这样,通过DMA每传送一个数据块仅需要一次中断处理,而不是像低速设备那样每出传送一个数据都需要一次中断处理。

参考文献

[1] JasperReport在线教程.http://gitbook.net/jasper_reports/jasper_getting_started.html

[2] JasperReports 报表的开发流程.http://topmanopensource.iteye.com/blog/1866879

[3] JasperReport API. http://jasperreports.sourceforge.net/api/

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有