javai-o底层是如何工作的?-java开发java经验技巧

javai-o底层是如何工作的?-java开发java经验技巧

ID:31317798

大小:81.00 KB

页数:5页

时间:2019-01-08

javai-o底层是如何工作的?-java开发java经验技巧_第1页
javai-o底层是如何工作的?-java开发java经验技巧_第2页
javai-o底层是如何工作的?-java开发java经验技巧_第3页
javai-o底层是如何工作的?-java开发java经验技巧_第4页
javai-o底层是如何工作的?-java开发java经验技巧_第5页
资源描述:

《javai-o底层是如何工作的?-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、JavaI/O底层是如何工作的?-编程开发技术JavaI/O底层是如何工作的?木文由ImportNew・liken翻译自howtodoinjava。欢迎加入翻译小组。转载请见文末要求。本博文主要讨论T/0在底层是如何工作的。本文服务的读者,迫切希架了解JavaI/O操作是在机器层面如何进行映射,以及应用运行时硬件都做了什么。假定你熟悉基本的1/0操作,比如通过Java1/0API读写文件。这些内容不在本文的讨论范围。H录•缓存处理和内核VS用八空间•虚拟內存•内存分页•面向文件、块的I/O•文件锁定•而向流的I/O缓存处理和内核VS用户空间缓冲与缓

2、冲的处理方式,是所有1/0操作的基础。术语“输入、输岀”只对数据移入和移岀缓存有意义。任何时候都要把它记在心中。通常,进程执行操作系统的I/O请求包括数据从缓冲区排出(写操作)和数据填充缓冲区(读操作)。这就是1/0的整体概念。在操作系统内部执行这些传输操作的机制可以非常复杂,但从概念上讲非常简单。我们将在文中用一小部分來讨论它。上图显示了一个简化的“逻辑”图,它表示块数据如何从外部源,例如一个磁盘,移动到进程的存储区域(例如RAM)中。首先,进程要求其缓冲通过read()系统调用填满。这个系统调用导致内核向磁盘控制硬件发出一条命令要从磁盘获取数据

3、。磁盘控制器通过DMA直接将数据写入内核的内存缓冲区,不需要主CPU进一步帮助。当请求read()操作时,一旦磁盘控制器完成了缓存的填写,内核从内核空间的临吋缓存拷贝数据到进程指定的缓存屮。冇一点需要注意,在内核试图缓存及预取数据时,内核空间屮进程请求的数据可能已经就绪了。如果这样,进程请求的数据会被拷贝出来。如果数据不可用,则进程被挂起。内核将把数据读入内存。虚拟内存你可能已经多次听说过虚拟内存了。让我再介绍一2所冇现代操作系统都使用虚拟内存。虚拟内存意味着人工或者虚拟地址代替物理(硕件RAM)内存地址。虚拟地址有两个重要优势:1.多个虚拟地址可

4、以映射到相同的物理地址。2.一个虚拟地址空间可以大于实际可用駛件内存。在上面介绍中,从内核空间拷贝到最终用户缓存看起来增加了额外的工作。为什么不告诉磁盘控制器直接发送数据到用户空间的缓存呢?好吧,这是由熄拟内存实现的。用到了上面的优势1。通过将内核空间地址映射到相同的物理地址作为一个用户空间的虚拟地址,DMA硬件(只能访问物理内存地址)可以填充缓存。这个缓存同时对内核和用户空间进程可见。Uwrspace:KernelspaceDMA师・怖州眈Pro<«j$㈣1%帖~1•欣旳buffer/]\\.•/J•///XDisk*userviftvol;

5、•:.kernel血喇这就消除了内核和用户空间之间的拷贝,但是需要内核和用户缓冲区使用相同的页面对齐方式。缓冲区必须使用的块大小的倍数磁盘控制器(通常是512字节的磁盘扇区)。操作系统将其内存地址空间划分为页而,这是固定大小的字节组。这些内存页总是磁盘块大小的倍数和通常为2倍(简化寻址)。典型的内存贝面大小是1024、2048和4096字节。虚拟和物理内存页面大小总是相同的。内存分页为了支持虚拟内存的第2个优势(拥有大于物理内存的可寻址空间)需要进行虚拟内存分页(通常称为页交换)。这种机制凭借虚拟内存空间的页可以持久保存在外部磁盘存储,从而为其他虚

6、拟页放入物理内存提供了空间。木质上讲,物理内存担当了分页区域的缓存。分页区是磁盘上的空间,内存页的内容被强迫交换出物理内存时会保存到这里。调整内存页面人小为磁盘块人小的倍数,让内核可以宜接发送指令到磁盘控制器皱件,将内存页写到磁盘或者在需要时重新加载。事实证明,所有的磁盘I/O操作都是在页面级别上完成的。这是数据在现代分页操作系统上在磁盘与物理内存之间移动的唯一方式。现代CPU包含一个名为内存管理单元(MMU)的子系统。这个设备逻辑上位于CPU与物理内存之间。它包含从虚拟地址向物理内存地址转化的映射信息。当CPU引用一个内存位置时,MMU决定哪些页

7、需要驻留(通常通过移位或屏蔽地址的某些位)以及转化虚拟页号到物理页号(由硬件实现,速度奇快)。面向文件、块I/O文件I/O总是发生在文件系统的上下文切换中。文件系统跟磁盘是完全不同的事物。磁盘按段存储数据,每段512字节。它是硬件设备,对保存的文件语义一无所知。它们只是提供了一定数量的可以保存数据的插槽。从这方面來说,一个磁盘的段与内存分页类似。它们都有统一的大小并且是个可寻址的大数组。另一方而,文件系统是更高层抽彖。文件系统是安排和翻译保存磁盘(或其它可随机访问,面向块的设备)数据的一种特殊方法。你写的代码儿乎总是与文件系统交互,而不与磁盘直接交

8、互。文件系统定义了文件名、路径、文件、文件属性等抽象。一个文件系统组织(在硬盘中)了一系列均匀大小的数据块。有些块保存元信

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。