学习
实践
活动
工具
TVP
写文章

详解io端口io内存

(MMIO)的技术,该技术是PCI规范的一部分,IO设备端口被映射到内存空间,映射后,CPU访问IO端口就如同访问内存一样。 IO端口:当寄存器或内存位于IO空间时,称为IO端口。一般寄存器也俗称I/O端口,或者说I/Oports,这个I/O端口可以被映射在MemorySpace,也可以被映射在I/OSpace。 (五)在Linux下对IO端口IO内存访问方式总结 1)在Linux下访问IO端口 对于某一既定的系统,它要么是独立编址、要么是统一编址,具体采用哪一种则取决于CPU的体系结构。 前一种途径不映射到内存空间,直接使用 intb()/outb()之类的函数来读写IO端口;后一种MMIO是先把IO端口映射到IO内存(“内存空间”),再使用访问IO内存的函数来访问 IO端口。 2、内存映射方式 将IO端口映射为内存进行访问,在设备打开或驱动模块被加载时,申请IO端口区域并使用ioport_map()映射到内存,之后使用IO内存的函数进行端口访问,最后,在设备关闭或驱动模块被卸载时释放

1K10

完成端口IO模型

IOCP(IO完成端口)是一种伸缩性的IO模型,广泛应用于各种类型的高性能服务器,如Apache等。 IO完成端口,应用程序使用线程池处理异步IO请求的一种机制。 最初设计:   应用程序发出一些异步IO请求,设备驱动把这些工作项目排序到完成端口,在完成端口上等待线程池便可以处理这些完成IO。 完成端口实际上是一个WINDOWS IO结构,可以接收多种对象的句柄。                                     ,创建一个或者多个工作线程,在完成端口上执行并处理投递到完成端口上的IO请求                                  3 完成端口和重叠IO                                IO操作完成后,系统向完成端口对象发送一个完成通知封包。

49980
  • 广告
    关闭

    年末·限时回馈

    热卖云产品年终特惠,2核2G轻量应用服务器6.58元/月起,更多上云必备产品助力您轻松上云

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    IO 端口寻址方式

    使用 ISA 总线结构的传统 PC 机其 I/O 地址空间范围是 0x000 -- 0x3FF,有 1024 个 I/O端口地址可供使用。 另外,IBM PC 机也部分地使用了统一编址方式。 例如,CGA 显示卡上显示内存的地址就直接占用了存储器地址空间 0xB800 -- 0xBC00 范围。因此若要让一个字符显示在屏幕上,可以直接使用内存操作指令往这个内存区域执行写操作。

    53020

    独立编址,统一编址,IO端口IO内存,冯·诺伊曼,哈佛结构

    IO空间,内存空间 X86:支持内存空间,IO空间,独立编址。 ARM,MIPS,PowerPC只支持内存空间,即统一编址。 IO端口IO内存:对于X86系统区别很大,例如,网卡接口,可以连接在IO的这一组地址总线上,也可以连接在内存的这一组地址总线上,就可分别出现IO端口IO内存的区别。 IO端口:当一个寄存器或内存位于IO空间时,称之为IO端口。 )//写字节端口(8位)其余访问16位,32位IO端口的函数为:inw,outw,inl,outl。 IO内存:当一个寄存器或内存位于内存空间时,称之为IO内存

    7910

    内存IO的交换

    当然,还可以在open的时候加上O_DIRECT标记,做直接IO,就连buffers都不进了,直接读写磁盘。 swap分区或swap文件实际上最终是到达了增大内存的效果。当然,如果频繁交换的话,被交换出去的数据的访问就会慢一些,因为要有IO操作了。 1. low:当剩余内存慢慢减少,触到这个水位时,就会触发kswapd线程的内存回收。 high: 进行内存回收时,内存慢慢增加,触到这个水位时,就停止回收。 不能有太多的脏页,否则会给磁盘IO造成很大压力,例如在内存不够做内存回收时,还要先回写脏页,也会明显耗时。 zRAM机制 不用swap分区,也可以用zRAM机制来缓解内存紧张: 从内存里拿出一段内存空间(compressed block),作为交换空间模拟硬盘的交换分区,用来交换匿名页,并且让kernel看到的物理内存大小不包括这段内存

    1.6K31

    嵌入式Linux系统是如何管理IO端口以及IO内存的呢?老司机给你讲讲

    “ 三、IO端口IO内存的区分及联系 这两者如何区分就涉及到硬件知识,X86体系中,具有两个地址空间:IO空间和内存空间,而RISC指令系统的CPU(如ARM、PowerPC等)通常只实现一个物理地址空间 IO端口:当寄存器或内存位于IO空间时,称为IO端口。一般寄存器也俗称I/O端口,或者说I/O ports,这个I/O端口可以被映射在Memory Space,也可以被映射在I/O Space。 前一种途径不映射到内存空间,直接使用 intb()/outb()之类的函数来读写IO端口;后一种MMIO是先把IO端口映射到IO内存(“内存空间”),再使用访问IO内存的函数来访问 IO端口。 2、内存映射方式 将IO端口映射为内存进行访问,在设备打开或驱动模块被加载时,申请IO端口区域并使用ioport_map()映射到内存,之后使用IO内存的函数进行端口访问,最后,在设备关闭或驱动模块被卸载时释放 例如:Intel x86平台普通使用了名为内存映射(MMIO)的技术,该技术是PCI规范的一部分,IO设备端口被映射到内存空间,映射后,CPU访问IO端口就如同访 问内存一样。

    70221

    内存IO的交换【转】

    当然,还可以在open的时候加上O_DIRECT标记,做直接IO,就连buffers都不进了,直接读写磁盘。 swap分区或swap文件实际上最终是到达了增大内存的效果。当然,如果频繁交换的话,被交换出去的数据的访问就会慢一些,因为要有IO操作了。 1. low:当剩余内存慢慢减少,触到这个水位时,就会触发kswapd线程的内存回收。 high: 进行内存回收时,内存慢慢增加,触到这个水位时,就停止回收。 不能有太多的脏页,否则会给磁盘IO造成很大压力,例如在内存不够做内存回收时,还要先回写脏页,也会明显耗时。 zRAM机制 不用swap分区,也可以用zRAM机制来缓解内存紧张: 从内存里拿出一段内存空间(compressed block),作为交换空间模拟硬盘的交换分区,用来交换匿名页,并且让kernel看到的物理内存大小不包括这段内存

    38920

    虚拟内存 & IO & 零拷贝

    运行的代码也不受任何的限制,可以自由地访问任何有效地址,也可以直接进行端口的访问。 CPU 的诸多检查,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段(TSS)中 I/O 许可位图(I/O Permission Bitmap)中规定的可访问端口进行直接访问 : 阻塞 IO 和非阻塞 IO 判定标准:数据准备阶段,应用程序是否阻塞等待操作系统将数据从硬件加载到内核空间; 同步 IO 和异步 IO 判定标准:数据拷贝阶段,数据是否备好后直接通知应用程序使用,无需等待拷贝 3.3 IO 多路复用 为了解决非阻塞 IO 存在的频繁的系统调用这个问题,随着内核的发展,出现了 IO 多路复用模型。 比如数据库聚簇索引,成百上千万的数据内存无法满足查找就需要到内存查找,而因为 B+树层高很低,只需要几次磁盘 IO 就能获取数据到内存,所以在这种磁盘到内存访问上 B+树更适合。

    25220

    IO之Standard IO

    VxWorks provides a standard I/O package (stdio.h) with full ANSI C support that ...

    32330

    linux 监控网络IO、磁盘、CPU、内存

    linux 监控网络IO、磁盘、CPU、内存 CPU:vmstat ,sar –u,top 磁盘IO:iostat –xd,sar –d,top 网络IO:iftop -n,ifstat,dstat – nt,sar -n DEV 2 3 磁盘容量:df –h  内存使用:free –m,top 1.查看什么进程占用端口:  netstat -antp | fgrep <port> 2.查看进程资源: ● %MEM,进程使用内存的百分比。  ● VSZ,进程使用的虚拟内存大小,以K为单位。  ● RSS,进程占用的物理内存的总数量,以K为单位。  ● TTY,进程相关的终端名。   ,包括物理内存总量、已用内存、空闲内存以及用作缓冲区的内存量 Swap一行:虚存统计信息,包括交换空间总量、已用交换区大小、空闲交换区大小以及用作缓存的交换空间大小 2、下半部分显示了各个进程的运行情况 (默认单位kB) RES: 进程所占物理内存大小(默认单位kB) SHR: 进程所占共享内存大小(默认单位kB) S: 进程的运行状态 %CPU: 采样周期内进程所占cpu百分比 %MEM: 采样周期内进程所占内存百分比

    9920

    Java - IO 内存流和打印流

    IO 内存流和打印流操作 字符编码 计算机中所有的信息组成都是二进制数据,所有能够描述的中文文字都是经过处理后的结果;所有的语言文字都会使用编码来进行描述,例如:ASCII码 常见编码 GBK/GB2312 由结果看出,系统使用GB2312进行解码,而文件是使用ISO8859-1进行编码,编码和解码的字符集不同由此导致了 乱码现象 的出现 内存操作流 在不产生新文件的情况下;利用内存流来实现输入与输出的操作 构造方法 public ByteArrayOutputStream() 内存输出流(输出数据 ) toByteArray()* public byte [] toByteArray() 将所有保存在内存中的字节数据变为字节数组存在 ; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; class PrintUtil 继承结构 java.lang.Object java.io.OutputStream java.io.FileOutputStream java.io.PrintStream 构造方法 PrintStream

    19610

    IO之Basic IO

    Basic I/O system的7个函数:creat(), remove(), open(), close(), read(), write(), ioctl...

    39730

    IO之Formatted IO

    28140

    IO类型与IO模型

    IO类型 同步与异步(synchronous,asynchronous):关注消息通知机制 同步: 进程发出系统调用之后,不会立即有返回信息,但是一旦有返回信息,则一定是最终结果. IO模型的分类 阻塞I/O 非阻塞I/O 复用I/O 事件驱动I/O 异步I/O 自己画的 ? 画完之后参考网上的 ? 阻塞I/O模型 ? 当用户进程发起系统调用之后,在内核还没有完成该调用任务时,进程会一直被挂起,直到内核将调用完成(内核将数据从磁盘取出到内核内存做处理,处理完之后在将数据转移至进程内存),这时进程才可以继续工作。 (该进程在数据从内核内存转移至进程内存时,是被挂起)。 当用户进程发起系统调用之后,该进程可以发送多个处理请求交给内核处理,select,poll,epoll都是IO多路复用的机制。

    1.1K70

    文件 IO 与标准 IO

    一个通用的 IO 模型通常包括打开文件、读写文件、关闭文件这些基本操作,主要涉及到 4 个函数:open()、read()、write()以及 close()。 文件IO tips:我们在 Linux 系统下,可以通过 man 命令查看某函数的用法和帮助信息以及头文件引用信息。 char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 在 Linux 内核提供的标准文件 IO unistd.h> ssize_t read(int fd, void *buf, size_t count); 关闭文件 #include <unistd.h> int close(int fd); 标准IO

    44240

    Java IO(IO流)-2

    IO流 第一部分 (OutputStreamWriter BufferOutputStream) 转换流 超类为Reader和Writer 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节

    27100

    同步 IO 和异步 IO

    io 操作大致分为两种: 文件 io 网络 io io 操作分为两步 发起 io 请求 接收处理 io 同步 io 和异步 io 最大的区别就是同步 io 的发起方(用户线程)会阻塞或轮询等待 io 完成 同步 io 的特点 1、同步 io 是用户线程发起 io 请求并以阻塞或轮询的方式来等待 io 的完成 2、同步 ioio 的发起方,同时也是处理方 3、同步 io 是需要将内核态准备就绪的数据拷贝到用户态 ,所以需要阻塞用户态程序并等待 io 完成 异步 io 的特点 1、异步 io 在用户线程发起 io 请求后会立即返回继续执行后续的逻辑流 2、异步 ioio 的发起方,但内核态才是处理方 3、异步 io 的处理方是内核态,所以不需要阻塞 阻塞 io: 用户线程发起 io 请求并阻塞用户线程释放 CPU 执行权,等待内核态的 io 处理完成。 总结以上几种 io 模型,除了最后一个是异步 io 模型,其它的 io 模型都是同步。

    24330

    理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度、环境不一样。所以,我们先说明基本的IO操作及环境。 IO内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。 2、5种IO模型 《UNIX网络编程》说得很清楚,5种IO模型分别是阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型、异步IO模型;前4种为同步IO操作,只有异步IO模型是异步IO操作。 3-1、阻塞IO调用和非阻塞IO调用、阻塞IO模型和非阻塞IO模型 注意这里的阻塞IO调用和非阻塞IO调用不是指阻塞IO模型和非阻塞IO模型: 阻塞IO调用 :在用户进程(线程)中调用执行的时候,进程会等待该 所以, 阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动的IO模型者为同步IO模型,只有异步IO模型是异步IO。 END 我知道你 “在看”

    14.4K61

    Java IO(IO流)-1

    IO流 第一部分 (outputStream/InputStream Writer/Redaer) IO流对象中输入和输出是相辅相成的,输出什么,就可以输入什么. IO的命名方式为前半部分能干什么,后半部分是父类的名字.

    62400

    FFmpeg内存IO模式(内存区作输入或输出)

    ,而这片内存并无一个URL属性可用时,则只能使用内存IO模式来取得输入数据。 ,而这片内存并无一个URL属性可用时,则只能使用内存IO模式。 实现机制 如下是与内存IO操作相关的一些关键数据结构及函数,我们从API接口层面来看一下内存IO的实现机制,而不深入分析内部源码。FFmpeg的API注释非常详细,从注释中能得到很多有用信息。 当使用内存IO模式时,用户应调用avio_alloc_context()对此结构的read_packet和write_packet函数指针进行赋值。 如果使用内存IO模式,应在此之前分配AVFormatContext并设置其pb成员。

    3K10

    扫码关注腾讯云开发者

    领取腾讯云代金券