存储映射I/O使一个磁盘文件与存储空间中的一个缓冲区相映射,对缓冲区的读、写操作就是对文件的读、写操作,从而能够不再使用read、write系统调用。...len:须要映射的字节数。 prot:对映射存储区的保护要求,不能超过open文件时的权限。...PROT_READ:映射区可读 PROT_WRITE:映射区可写 PROT_EXEC:映射区可运行 PROT_NONE:映射区不可訪问 flag:影响映射存储区的属性。...MAP_PRIVATE:对映射区的存储操作导致创建该映射文件的一个私有副本。 filedes:指定要被映射的文件描写叙述符,映射之前须要先打开该文件。 off:要映射字节在文件里的起始偏移量。...表示存储区中有地址无法映射到文件里。 mmap实际上是将包括文件内容的内核缓冲区映射到应用程序地址空间,然后用memcpy直接进行数据的拷贝。
存储映射I/O能将磁盘文件映射到存储空间的一个缓冲区。从而实现从缓冲区读,写文件。这样,就可以在不使用read和write的情况下执行I/O。使用存储映射来进行I/O操作一般有三个方面的应用。...其中前三种可以任意组合,而PROT_NONE表示映射区域不可访问。对映射区域的访问权限不能超过open文件的时候指定的权限。 flags:指定映射区域的属性。...子进程能够通过fork继承存储映射区域,但是exec的新程序不行。 如果修改的映射区域通过MAP_SHARED标志指定属性,那么修改映射区域的操作并不会立即写回文件。...当一个进程终止的时候,会自动解除存储映射区域的映射。我们也可以是由munmap来解除映射。...10字节大小到映射区域,设置映射区域可读,可写。
静态资源映射 SpringBoot对于SpringMVC的自动化配置都在WebMVCAutoConfiguration类中。 ?...(361) WebMvcConfigurer接口中定义了addResourceHandlers处理静态资源的默认映射关系.(500) ?...cacheControl)); } } } 其中 this.resourceProperties.getStaticLocations() 返回静态资源的默认映射关系...}; classpath:/META-INF/resources/ classpath:/resources/ classpath:/static/ classpath:/public/ 第五个默认的资源映射...,可以放在静态资源路径下或者类路径下,静态资源路径优先级高。
2、File类 至于IO流,也就是输入输出流,从文件出发到文件结束,至始至终都离不开文件,所以IO流还得从文件File类讲起。...3、初探IO流 1.1 什么是IO 我想在座各位肯定经历都过这样的场景。...流操作完毕后,必须释放系统资源,调用close方法,千万记得。...从 Mac OS X开始与Linux统一。 2.3 字节输入流(InputStream) java.io.InputStream抽象类是表示字节输入流的所有类的超类(父类),可以读取字节信息到内存中。...close:先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
pom.xml 注入资源 3.3.1 1、webjars 是jar包的方式引入静态资源...,所有/webjars/**,都去classpath:/META-INF/resources/webjars/资源 pom注入资源后启动应用可访问 ?...image.png 2、/**访问当前项目的任何资源,(静态资源的文件夹) classpath:/META-INF/resources/ classpath:/resources/ classpath:...3、欢迎页,静态资源文件下查找所有index.html页面;被"/**"映射, 访问index页面 ? ? image.png ? 4)所有的**/favicon.ico都是在静态资源文件下查找 ?
标准文件访问方式 ---- 直接IO方式 OPEN +O_DIRECT = 绕过内核缓冲区的直接访问,有效避免了CPU和内存的多余时间开销。要求内存边界对齐。...直接IO,绕过缓存,不会出现write成功数据丢失情况。...注意:直接IO的缺点就是如果访问的数据不在应用程序缓存中,那么每次数据都会直接从磁盘进行加载,这种直接加载会非常慢,通常直接IO跟异步IO结合使用会得到较好的性能。...---- O_SYNC 缓存同步 为了保证磁盘系统与缓冲区内容一致,Linux系统提供了sync,fsync,fdatasync三个函数。...---- Linux文件IO流程图 内核中会有一个线程,不断地将高速页缓冲区中的数据写入到物理磁盘中。
静态资源映射规则 1.静态资源访问 1.0 查看官网文档对应说明 1.1 静态资源目录 1.2 静态资源访问前缀 请注意: 加了静态资源访问前缀后,访问静态资源时,就必须加上前缀,这个多用于拦截器对静态资源的拦截...1.3 改变默认的静态资源路径----自己规定静态资源都放到哪个路径下面 请注意:指定新的静态资源文件夹的位置之后,springboot默认的就不生效了,也就是说我们要通过我们指定的文件夹的位置去访问静态资源...原理: 静态映射/** 请求进来,先去找Controller看能不能处理。...请注意: 加了静态资源访问前缀后,访问静态资源时,就必须加上前缀,这个多用于拦截器对静态资源的拦截 ---- 1.3 改变默认的静态资源路径----自己规定静态资源都放到哪个路径下面 spring:...private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS; ---- 3、欢迎页的处理规则 HandlerMapping:处理器映射
SpringBoot对静态资源的映射规则; @ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false...} String staticPathPattern = this.mvcProperties.getStaticPathPattern(); //静态资源文件夹映射...()) .setCachePeriod(cachePeriod)); } } //配置欢迎页映射...,都去(静态资源的文件夹)找映射== "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/",...页面;被"/**"映射;== localhost:8080/ 找index页面 ==4)、所有的 **/favicon.ico 都是在静态资源文件下找;==
今天王子就与大家一起看看SpringBoot中关于资源映射部分的主要源码实现。...SSM中的资源映射 在谈SpringBoot之前,我们先回顾一下SSM中关于资源配置是如何实现的。...,那么我们继续来看SpringBoot的资源映射吧。...SpringBoot的资源映射 其实SpringBoot的资源映射也是一脉相承的,当我们初始化一个SpringBoot项目后,静态资源会默认存在resource/static目录中,那么SpringBoot.../", "classpath:/public/",“/” 自定义配置 好了,到现在我们已经知道了SpringBoot的默认资源映射来源,那么我们如何配置自定义的资源映射路径呢?
今天就与大家一起看看SpringBoot中关于资源映射部分的主要源码实现。 建议环境允许的情况下,小伙伴们自己使用idea创建一个springBoot项目,跟着文章一起看一看源码,更容易理解。...SSM中的资源映射 在谈SpringBoot之前,我们先回顾一下SSM中关于资源配置是如何实现的。...,那么我们继续来看SpringBoot的资源映射吧。...SpringBoot的资源映射 其实SpringBoot的资源映射也是一脉相承的,当我们初始化一个SpringBoot项目后,静态资源会默认存在resource/static目录中,那么SpringBoot...static/", "classpath:/public/",“/” 自定义配置 好了,到现在我们已经知道了SpringBoot的默认资源映射来源,那么我们如何配置自定义的资源映射路径呢?
今天我们要学习的是基础IO部分,主要涉及内存和外设之间的数据交互。接下来,就让我们共同探讨这部分内容吧,那我们就开始吧!...本文章重点: 复习C文件IO相关操作 认识文件相关系统调用接口 认识文件描述符,理解重定向 对比fd和FILE,理解系统调用和库函数的关系 理解文件系统中inode的概念 认识软硬链接,对比区别 认识动态静态库...文件在哪里——>文件在磁盘——>磁盘属于硬件,由操作系统进行管理——>所有人想访问磁盘都绕不开操作系统——>使用操作系统的接口——>提供文件级别的系统调用接口——>吧冉语言的文件操作接口都可以在Linux...3.read函数 read函数是Linux下的一个系统调用接口,C语言的fread函数的底层就是read。作用为从一个特定的文件流中读取内容。...4.close函数 close函数也是Linux下的一个系统调用接口,C语言的fclose底层就是close。 参数 fd:就是调用open时的返回值,本质是第一个文件描述符。
因为习惯使用vim 编辑器,而早期的vi 的键盘设置跟现在的qwert键盘的按键差别较大,所以我一般选择将不常用的Caps_Lock与常用的Esc 互换,在Win下有很多好用的软件可以直接更改,linux
一 mmap系统调用 1.内存映射 所谓的内存映射就是把物理内存映射到进程的地址空间之内,这些应用程序就可以直接使用输入输出的地址空间,从而提高读写的效率。...Linux提供了mmap()函数,用来映射物理内存。...,映射选项和映射页是否可以共享。...当映射关系解除后,对原来映射地址的访问将导致段错误发生。...struct file *,struct vm_area_struct *); linux有2个方法建立页表: (1) 使用remap_pfn_range一次建立所有页表.
本文将结合用户态的接口以及内核态的实现剖析文件IO。...Reference: The Linux Programming Interface: Chapter 4/14/15, Kernel/fs 通用接口 通用IO包含open/read/write/close...文件创建标志 - 创建以及后续IO的选项,不可读写。...因为这个原因,写操作并不能实时的进行持久化,需要linux使用journal机制来保证文件系统的崩溃一致性,然而journal机制本身又需要进行flush。...这里需要注意,先释放fd资源,再释放文件资源。
——>其实我们还可以发现 这个文件其实就是基类,而外设就是派生类,然后指针指向什么就调用什么对象,这就是多态,只不过Linux必须用C语言写,所以只能用函数指针来完成这个工作!!...4、理解了Linux的一切皆文件后,懂得了文件操作的底层,即使以后在使用其他语言的文件操作时对接口不熟,但只要给时间查一下,很快就会懂得怎么用了!!...——>因为人们在经过大量的工程实验后,发现我们总是或多或少要使用一些多态的特性,比如说写操作系统的人必然也是有可能开发语言的人,他在写的时候就意识到Linux里面很多虚拟化的东西,要不是你必须拿C去写,...——>因为很多地方需要对软件做分层,设置出各种虚拟化的场景(比如刚刚提到的文件虚拟系统就是,只不过Linux必须用C写,否则肯定用C++写更方便) ——>封装、继承、多态!...缓冲区的大小 #define FLUSH_NOW 1 //立刻刷新 #define FLUSH_LINE 2 //行刷新 #define FLUSH_ALL 4 //全刷新 typedef struct IO_FILE
将文件映射到物理内存,将进程虚拟空间映射到那块内存。这样,进程不仅能像访问内存一样读写文件,多个进程映射同一文件,还能保证虚拟空间映射到同一块物理内存,达到内存共享的作用。...(不过虚拟内存这个词也不算错) 虚拟空间原理 物理内存 首先,物理地址实际上也不是连续的,通常是包含作为主存的DRAM和IO寄存器 以前的CPU(如X86)是为IO划分单独的地址空间,所以不能用直接访问内存的方式...(如指针)IO,只能用专门的方法(in/read/out/write)诸如此类。...现在的CPU利用PCI总线将IO寄存器映射到物理内存,所以出现了基于内存访问的IO。还有一点补充的,就如同进程空间有一块内核空间一样,物理内存也会有极小一部分是不能访问的,为内核所用。...vm_area_struct: linux使用vm_area_struct来表示一个独立的虚拟内存区域,一个进程可以使用多个vm_area_struct来表示不用类型的虚拟内存区域(如堆,栈,代码段,MMAP
Linux 中主要有五种IO模式:阻塞IO, 非阻塞IO, IO 多路复用,信号驱动IO和异步IO; 如果从同步非同步,阻塞非阻塞角度来看,又可以分为:同步阻塞IO, 同步非阻塞IO,异步阻塞IO和异步非阻塞...IO; 每种IO模型,都有自己的使用模式,他们对于特定的应用程序都有自己的优点:其简单分布如下图所示 ?...每种IO模型都有自己的使用场景,他们对于特定的应用程序都有自己的优点; 具体可参考:https://blog.csdn.net/tjiyu/article/details/52959418 XXX TO-DO...资源来源自网络。
对于每个连接或文件,通常需要创建一个单独的线程或进程来处理,这会导致资源消耗很高。...节约资源:NIO 可以节省系统资源,因为程序不需要创建大量的线程或进程来处理并发连接。 异步编程:NIO 是异步编程的核心,允许程序执行其他任务而不必等待 I/O 完成。这在事件驱动编程中非常有用。...fdset 从用户态拷贝到内核态,在高并发下是个巨大的性能开销(可优化为不拷贝); 调用 select 阻塞后,用户进程虽然没有轮询,但在内核还是通过遍历的方式来检查 fd 的就绪状态(可通过异步 IO...在 Linux 2.4 内核前主要是 select 和 poll,自 Linux 2.6 内核正式引入 epoll 以来,epoll 已经成为了目前实现高性能网络服务器的必备技术。...mmap 将用户空间的一块地址和内核空间的一块地址同时映射到相同的一块物理内存地址(不管是用户空间还是内核空间都是虚拟地址,最终要通过地址映射映射到物理地址),使得这块物理内存对内核和对用户均可见,减少用户态和内核态之间的数据交换
Linux IO 缓存体系,stdio和内核缓存的区别,Page Cache和Buffer Cache的区别。 Buffered IO、mmap(2)、Direct IO的区别。...文件的内容需要映射到实际的物理磁盘,这种映射关系由文件系统来完成;Buffer Cache用于缓存存储设备块(比如磁盘扇区)的数据,而不关心是否有文件系统的存在(文件系统的元数据缓存在Buffer Cache...所以后面的讨论基本上是讨论 IO 相关的系统调用和文件系统Page Cache的一些机制。 Linux内核中的IO栈 这一小节来看 Linux 内核的 IO 栈的结构。先上一张全貌图[4]: ?...设备层,通过 DMA 与内存直接交互,完成数据和具体设备之间的交互 结合这个图,想想Linux系统编程里用到的Buffered IO、mmap(2)、Direct IO,这些机制怎么和 Linux IO...mmap(2)直接把Page Cache映射到了用户态的地址空间里了,所以mmap(2)的方式读文件是没有第二次拷贝过程的。那Direct IO做了什么?
目录 端口复用 端口复用映射原理 GPIOx AFRL GPIOx AFRH 流程 ---- 端口复用 STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。...端口复用映射原理 STM32F4系列微控制器IO引脚通过一个复用器连接到内置外设或模块。该复用器一次只允许一个外设的复用功能(AF)连接到对应的IO口。...从表中可以看出,32 位寄存器 GPIOx_AFRL 每四个位控制一个 IO 口,所以每个寄存器控制 32/4=8 个 IO 口。...寄存器对应四位的值配置决定这个 IO 映射到哪个复用功能 AF。 ...流程 首先,我们要使用 IO 复用功能外设,必须先打开对应的 IO 时钟和复用功能外设时钟。
领取专属 10元无门槛券
手把手带您无忧上云