软考笔记——2.2存储、文件、设备管理

一、存储

1、页式存储管理

将进程空间分为一个个页,假设每个页大小为4K,同样的将系统的物理空间页分为一个个4K大小的物理块(页帧号)。这样,每次将需要运行的逻辑页装入物理块中,运行完再装入其他需要运行的页,就可以分批次运行完进程,而无需将整块逻辑空间全部装入物理内存中

  • 优点:利用率高、碎片小(页没有装满就为碎片小)(只在最后一个页中有)、分配及管理简单
  • 缺点:增加了系统开销,可能产生抖动现象

 【例题】某计算机系统页面大小为4K,若进程的页面变换表如下所示,逻辑地址为十六进制1D16H.该地址经过变换后,其物理地址应为十六进制( 3D16H

 页号在高位,页偏移在地位,逻辑地址转换为物理地址时页内偏移是不变的,只有页号会变 

 解析:页面大小为4K,则页内偏移递地址为12位(2^12=4K,表示是页内地址占12位,页内偏移占12位),才能表示4K大小空间;由此,可知逻辑地址1D16H的低12位D16H为偏移地址,高4位1为逻辑页号,在页表中对应物理块号3,因此物理地址为3D16H

2、页面置换算法

有时候,进程空间分为100个页面,而系统内存只有10个物理块,无法满足全部分配,就需要将马上要执行的页面先分配进去,而后根据算法进行淘汰,使100个页面能够按执行顺序调入物理块中执行完成

缺页就表示需要执行的页不在物理块中,需要从外部调入内存,会增加执行时间,因此,缺页数越多,系统效率越低

最优算法:OPT,理论的算法,无法实现,是在进程执行完之后进行的最佳效率计算,用来让其他算法比较差距。原理是选择未来最长时间内不被访问的页面置换,这样可以保证未来执行的都是马上要访问的

先进先出算法:FIFO,先调入内存的页先被置换淘汰,会产生抖动现象,即分配的页数越多,缺页率可能越多(即效率越低)

最近缺少使用:LRU,在最近的过去,进程执行过程中,过去最少使用的页面被置换淘汰,根据局部性原理,这种方式效率高,且不会发生抖动现象

 

 3、快表

快表是一块小容量的相联存储器,由快速存储器组成,按内容访问,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号。

快表是将页表存于Cache中;慢表是将页表存于内存上

因此慢表需要访问两次内存才能取出页,而快表是访问一次Cache和一次内存,因此更快

4、 段式存储管理

将进程分为一个个段,每段也有段号和段内地址,与页式存储不同的是,每段物理大小不同,分段是根据逻辑整体分段的

地址表示法:(段号   段内偏移):其中段内偏移不能超过该段号对应的段长,否则越界错误,而此地址对应的真正内存地址应该是:段号对应的基地址+段内偏移

  • 优点:程序逻辑完整,修稿互不影响
  • 缺点:内存利用率低,内存碎片浪费大

 

 

 5、段页式存储管理

对进程空间先分段,后分页,具体原理图和优缺点如下:

  • 优点:空间浪费小、存储共享容易、能动态连接
  • 缺点:由于管理软件的增加,复杂性和开销也增加,执行速度下降

6、 空闲存储空间管理

空闲区表法:将所有空闲空间整合成一张表,即空闲文件目录

空闲链表法:将所有空闲空间链接成一个链表,根据需要分配

成组链接法:既分组,每组内又链接成链表,是上述两种方法的综合

位示图法:对每个物理空间用一位标识,为1则使用,为0则空闲,形成一张位示图

 

 二、文件

1、文件结构

计算机系统中采用的索引文件结构如下图所示

 系统中有13个索引节点,0-9位直接索引,即每个索引节点存放的是内容,假设每个物理盘大小位4KB,可共存4KB*10=40KB数据

10号索引节点为一级间接索引节点大小为4KB,存放的并非直接数据,而是链接到直接物理盘的地址,假设每个地址占4B,则共有1024个地址,对应1024个物理盘,可存1024*4KB=4098KB数据

二级索引节点类似,直接盘存放一级地址,一级地址再存放物理盘块地址,而后链接到存放数据的物理盘,容量又扩大了一个数量级,为1024*1024*4KB数据

 2、树形文件目录

相对路径:是从当前路径开始的路径

绝对路径:是从根目录开始的路径

全文件名=绝对路径+文件名。要注意,绝对路径和相对路径是不加最后的文件名的,只是单纯的路径序列

树形结构主要是区分相对路径和结对路径

三、 设备管理

1、设备的分类方式:

  • 按数据组织分类:块设备、字符设备
  • 资源分配角度分类:独占设备、共享设备和虚拟设备
  • 数据传输速率分类:低速设备、中速设备、高速设备 

I/O软件(输入输出软件)层次结构

 

 2、输入输出技术

程序控制(查询)方式:CPU主动查询外设是否完成数据传输,效率极低(CPU与外设串行工作

程序中断方式:外设完成数据传输后,向CPU发送中断,等待CPU处理数据,效率相对较高。适用于键盘等实时性较高的场景(CPU与外设并行工作

中断响应时间指的是从发出中断请求到开始进入中断处理程序;中断处理时间指的是从中断处理开始到中断处理结束。中断向量提供中断服务程序的入口地址。多级中断嵌套,使用堆栈来保护断点和现场

DMA方式(直接主存存取):CPU只需完成必要的初始化等操作,数据传输的整个过程都由DMA控制器来完成,在主存和外设之间建立直接的数据通路,效率很高。适用于硬盘等高速设备。(CPU与外设并行工作

一个总线周期结束后,CPU会响应DMA请求开始读取数据;CPU响应程序中断方式请求是在一条指令执行结束时;区分指令执行结束和总线周期结束

3、虚设备和SPOOLING技术

一台实际的物理设备,例如打印机,在同一时间只能由一个进程使用,其他进程只能等待,且不知道什么时候打印机空闲,此时,极大的浪费了外设的工作效率

引入SPOOLING技术,就是在外设上建立两个数据缓冲区,分别称为输入井和输出井,这样,无论多少进程,都可以共用这一台打印机,只需要将打印命令发出,数据就会排队存储在缓冲区中,打印机会自动按顺序打印,实现了物理外设的共享,使得每个进程都感觉在使用一个打印机,这就是物理设备的虚拟化,如下图所示

 【例题】计算机系统中主机与外设间的输入输出控制方式有多种,其中占用主机CPU时间最多的是( D

A、通道                B、DMA                C、中断                D、程序查询

解析:在计算机中,输入输出控制方式主要有5种,分别是程序查询方式(程序控制方式)、程序中断方式、DMA工作方式、通道方式、I/O处理机。这5种方式占用主机CPU时间按多到少排序为:程序查询方式(程序控制方式)、程序中断方式、DMA工作方式、通道方式、I/O处理机 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传是Web开发中常见的功能之一,Java中也提供了多种方式来实现文件上传。其中,一种常用的方式是通过Apache的commons-fileupload组件来实现文件上传。 以下是实现文件上传的步骤: 1.在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> ``` 2.在前端页面中添加文件上传表单: ```html <form method="post" enctype="multipart/form-data" action="upload"> <input type="file" name="file"> <input type="submit" value="Upload"> </form> ``` 3.在后台Java代码中处理上传文件: ```java // 创建一个DiskFileItemFactory对象,用于解析上传的文件 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置缓冲区大小,如果上传的文件大于缓冲区大小,则先将文件保存到临时文件中,再进行处理 factory.setSizeThreshold(1024 * 1024); // 创建一个ServletFileUpload对象,用于解析上传的文件 ServletFileUpload upload = new ServletFileUpload(factory); // 设置上传文件的大小限制,这里设置为10MB upload.setFileSizeMax(10 * 1024 * 1024); // 解析上传的文件,得到一个FileItem的List集合 List<FileItem> items = upload.parseRequest(request); // 遍历FileItem的List集合,处理上传的文件 for (FileItem item : items) { // 判断当前FileItem是否为上传的文件 if (!item.isFormField()) { // 获取上传文件文件名 String fileName = item.getName(); // 创建一个File对象,用于保存上传的文件 File file = new File("D:/uploads/" + fileName); // 将上传的文件保存到指定的目录中 item.write(file); } } ``` 以上代码中,首先创建了一个DiskFileItemFactory对象,用于解析上传的文件。然后设置了缓冲区大小和上传文件的大小限制。接着创建一个ServletFileUpload对象,用于解析上传的文件。最后遍历FileItem的List集合,判断当前FileItem是否为上传的文件,如果是,则获取文件名,创建一个File对象,将上传的文件保存到指定的目录中。 4.文件上传完成后,可以给用户一个提示信息,例如: ```java response.getWriter().write("File uploaded successfully!"); ``` 以上就是使用Apache的commons-fileupload组件实现文件上传的步骤。需要注意的是,文件上传可能会带来安全隐患,因此在处理上传的文件时,需要进行严格的校验和过滤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值