CS:APP读书笔记-3-程序的机器级表示
第三章:程序的机器级表示 面对现在的可执行文件,我们千头万绪不知道该怎么去理解它。在Windows上,我们知道双击去运行它;Linux上,我们可以在命令行中通过./file的形式去执行。这一章,我们将会走进程序的机器级表示,来理解代码时如何被转变成CPU可以理解的模式的,我们又是如何来表示我们在源代码中的各种数据,而CPU又是如何访问它们。除此外,我们还将学习到我们常用的流程控制又是如何实...
第三章:程序的机器级表示 面对现在的可执行文件,我们千头万绪不知道该怎么去理解它。在Windows上,我们知道双击去运行它;Linux上,我们可以在命令行中通过./file的形式去执行。这一章,我们将会走进程序的机器级表示,来理解代码时如何被转变成CPU可以理解的模式的,我们又是如何来表示我们在源代码中的各种数据,而CPU又是如何访问它们。除此外,我们还将学习到我们常用的流程控制又是如何实...
第二章:信息的表示与处理 我们的操作系统能力那么大,它又是怎么来表示这些东西呢?每天打开电脑,我们要面对的文本,英文字母,数字,符号,中文和各种风马牛不相及的语言,他们各自的字符加起来成千上万,这些看起来完全不同的东西,如何在计算机内部进行统一的表达?在第一章,我们提到了ASCII这一种编码方式,但是它能表示的仅仅是很小一部分。整数,分数,实数我们又该怎么表示?在这一章,我们会主要学习三种...
第一章:计算机系统漫游 计算机是一个很庞大的东西,在初次面对的时候难免束手无策,不知从何下手。我们常见的操作系统是Windows,除了它其实还有Linux、Unix、MAC、RTOS这些分类。后续的讲解,将会以Linux1作为目标,但是请放心,虽然名字各不相同,但是它们的基本组成都还是保持着一致,不必担心知识迁移的问题。 文件的表示 我们常说的源代码,其实就是一个文本文件。比如,下面这...
最近做一个分析,碰到了采用椭圆曲线的情况,顺路学习一下这种加密方式的用法和基本原理。这里作为记录学习的过程和想法。RSA见得多了,比较熟。ECC见得少,还没有符号,看起来是真的痛苦。 相对于传统的对称加密(DES/AES),非对称加密拥有一个更优的品质,那就是不用传输密钥本身来实现两端的加解密,同时还可以胜任身份认证的过程。本期漫谈,我们会简单的涉及到椭圆曲线的意义和如何使用openssl...
终于算忙到了头,可以继续看dpdk了。接着来看这个ipsec-gw,乍一看官网的Sample Guides,这一节基本不涉及怎么组织构建代码的,只给了几个配置文件语法,算了,凑合一样的看。 简介 开篇就提到了没实现Internet Key Exchange (IKE),只提供手动设置安全策略和安全关联,这样也好,我们可以直奔大纲,弯弯绕绕的复杂可以略过。注意这里提到了几个RFC,如果想要...
VMDq进行L2转发时,将进入流量拆分成多个队列。简单来说,入口的包通过各自的属性,比如MAC地址,VLAN ID来进行分配,划拨到具体的rx队列中去,而这些队列组成一个pool。常见的pool数量有8,16,32,64。 基本流程 前面的差别都不大,基础操作。初始EAL环境,检查可用的lcore,检查可用的ports,建立mbuf_pool,随后开始初始化port。即下方这个port_...
将一个流中的包进行重排序。该示例至少需要三个lcore。 Rx-core:负责从NIC接收数据包,通过软队列发送给worker Worker-core:从软队列接收包,并设置好转发port。 Tx-core:从worker通过软队列获取包,将乱序的包插入到重排序缓冲区,并取出排序后的包进行转发。 简要流程 前面都是基础的初始化操作,注意一下通过rte_ring_crea...
Basic multi-process 这一种multi-process实现起来最简单,启动参数直接指定即可。-proc-type=primary参数指定主从关系。primary和second之间,通过ring组成一个环形。通过这个共享的内存空间进行通信。缺点就是一旦primary挂了,必须连带着second一起重来。 if (rte_eal_process_type() == RTE_...
示例非常清晰易懂。这个例子展示了,怎么把一个service给注册起来并且map到对应的lcore中去。 基本流程 通过三个函数来注册并且启用service rte_service_component_register rte_service_component_runstate_set rte_service_runstate_set 随后,在apply_profile中,通过完全...
mdns 完成了一个icmp ping request的示例,停一下。因为感觉后续的dns协议实际上是应用层的了,完整实现和dpdk的关系不大,还是先回头继续看dpdk。在mdns中用到的一些函数还不是很熟悉,还是得多用才行。不过mdns中用到的文件配置初始化的方法倒是挺有用的,后续可以持续的借鉴。 由于dpdk的各种示例排布比较紧凑,有些库的用法直接在一起,比如l2fwd-ev...