2016年计算机体系结构领域研究热点调研报告

2016年计算机体系结构领域研究热点有哪些?为回答这个问题,本文分析了2016年CCF推荐会议中124篇关于计算机体系结构的前沿论文,对其研究主题进行分类和统计,归纳出了“新领域-老问题矩阵”。本文记录了这个矩阵的构成,以及通过这个矩阵得到的一些有意思的发现。

理解mmap

mmap普通文件

小时候,我以为mmap就是用来把磁盘上的文件加载到内存中,是除了read/write系统调用外,读写文件的另一种方式。使用read/write系统调用读写文件时,我们需要提供一个指针,表明我们需要读写文件的位置。同时需要指明内存缓冲区的地址及其大小,来让read把文件的某一部分存进缓冲区,或是让write把缓冲区的数据写进文件的指定位置。如果使用mmap,系统会把整个文件一次性读取到内存中(对用户来说是一次性,但实现时可以使用缺页异常的方法按需读取,该操作对用户透明)。这段内存就成了磁盘中文件的映像,操作系统会把我们对这片内存的操作,同步到磁盘上。对于用户来说,操作这片内存就是在操作文件。

Linux如何操作设备中的存储器?

对设备的操作实际上是通过读写设备中的memory或者register来完成的。操作方式有两种:I/O ports操作方式和I/O memory操作方式。前者存在于部分体系结构中,通过专门的IO指令(in/out)来实现。后者不需要特殊指令,允许我们像操作内存那样操作设备memory或者register,并可以封装前者,更为简单也更流行。这里我们讨论I/O memory的操作方式。在I/O memory操作方式下,设备中的memory或register被称作I/O memory[1]。那么Linux是如何操作I/O memory的呢?

设备驱动 - Linux Device Driver Model

写在前面

理解device driver model,我觉得最难的就是“忘掉自己曾经知道的”。学习内核很多情况下都需要这项技能:忘掉自己知道的,我们才不至于望文生义想当然,才能去接纳新知识,才能够耐着性子去阅读思考,才会更关注“为什么要这样呢”。所以如果刚接触Linux内核的你对设备驱动存在些许认识或者幻想,现在都请忘了吧。文中出现的术语如device、driver等,为了避免想当然,一开始都请把它当成一个名字而已,不要试图猜测其语义,也最好不要翻译成中文(所以请原谅文中的中英文混杂)。当我们理解了以后再看这些术语,我们就会恍然大悟它们为什么叫这个名字了。

开源中的企业

之前接触开源纯粹是没项目做时找乐子以及被免费开放的源代码吸引,出于个人角度。通过近期与开源软件行业较为深入的合作,以及阅读的一些科普小文章,在这里谈谈我对开源和企业的理解。

从socket应用到网卡驱动:Linux网络子系统分析概述

socket是互联网的基础,我们所熟知的互联网应用大部分是基于socket及其变种,如:浏览器、即时通信软件等。socket这个术语最早出现在TCP规范RFC793中。后来它也作为伯克利编程接口。它的定义为如下二元组:

socket:=(IP:port)

由此,TCP连接可以定义为:

TCP Connection := {socket1, socket2}

本文将从socket应用出发,分层深入Linux网络模块内部,去分析内部运行原理。

阅读理解:理解不理解当是自己说的算

事情是这样的,最近有很多书要读,所以想在寒假里训练一下阅读速度。我认为买一本专门的训练材料还是必要的,那种可以算出我的每分钟阅读字数和理解程度的材料——没错,最后我使用了一本英语考试阅读理解、快速阅读那种形式的书。看到这里有人可能已经觉得我脑残了,可是当时我并不自知。