
操作系统
文章平均质量分 90
程光CS
Auf dem Wasser zu singen, Op.72, D.774 - Auf dem Wasser zu singen, Op.72, D.774
展开
-
操作系统:虚拟内存
我们就可以利用这一特性,把最常访问的几个页表项存储到访问速度更快的硬件,于是计算机科学家们,就在 CPU 芯片中,加入了一个专门存放程序最常访问的页表项的 Cache,这个 Cache 就是 TLB(Translation Lookaside Buffer) ,通常称为页表缓存、转址旁路缓存、快表等。多级页表虽然解决了空间上的问题,但是虚拟地址到物理地址的转换就多了几道转换的工序,这显然就降低了这俩地址转换的速度,也就是带来了时间上的开销。,每一片称为页,在 Linux 下,每一页的大小为 4KB。原创 2023-10-13 23:02:51 · 80 阅读 · 0 评论 -
Linux中的五种IO模型
Linux中有以下五种IO模型。一、同步阻塞IO(Blocking IO, BIO)二、同步非阻塞IO(Non-Blocking IO, NIO)三、IO多路复用 四、信号驱动 I/O 五、异步 I/O(Async IO, AIO)原创 2023-04-19 11:37:29 · 609 阅读 · 0 评论 -
什么是I/O 多路复用:select、poll、epoll讲解
在BIO方式实现的Socket 模型中,可以通过多线程实现客户端请求并发处理,每个线程通过BIO的方式处理一个客户端长链接。但是这种方式在高并发的场景下并不适用,假如有一万个连接,系统就要对应维护一万个线程,空闲的连接也要独占一个线程,频繁的线程上下文切换会对系统造成很大压力。既然为每个请求分配一个线程的方式不合适,那有没有可能只使用一个线程来维护多个 Socket 呢?答案是有的,那就是 I/O 多路复用技术。线程通过read()、write()这些系统调用只能阻塞在一个文件描述符(fd)上,而IO多转载 2023-04-19 11:33:51 · 464 阅读 · 0 评论 -
进程间通信方式——管道、消息队列、共享内存、信号量、信号、Socket
所谓的管道,就是内核里面的一串缓存。管道传输的数据是无格式的流且大小受限,从一端写从另一端读,一个管道有写端和读端两个文件描述符fd。我们可以使用 fork 创建子进程,创建的子进程会复制父进程的文件描述符,两个进程就可以通过各自的 fd 写入和读取同一个管道文件实现跨进程通信了。一般进程只用管道一端,另一个进程用另一端,避免读写混乱。在 shell 里通过管道符 | 将多个命令连接在一起,实际上也就是创建了多个子进程,它们之间通过匿名管道来通信。管道的通信方式是效率低的,因此管道不适合进程间频繁地转载 2023-04-17 21:03:12 · 1582 阅读 · 0 评论 -
什么是DMA与零拷贝
因此在高并发的场景下,针对大文件的传输的方式,应该使用「异步 I/O + 直接 I/O」来替代零拷贝技术。绕开 PageCache 的 I/O 叫直接 I/O,使用 PageCache 的 I/O 则叫缓存 I/O。通常,对于磁盘,异步 I/O 只支持直接 I/O。如果网卡支持 SG-DMA 技术,那么在sendfile() 系统调用的过程中网卡的 SG-DMA 控制器可以直接将数据从PageCache拷贝到网卡,不需要CPU在内存中进行数据拷贝,因此称为零拷贝。原创 2023-03-14 19:55:47 · 696 阅读 · 0 评论