<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[HelloNerd的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/HelloNerd</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; HelloNerd]]></copyright><item><title><![CDATA[浅谈linux进程的切换]]></title><link>https://blog.youkuaiyun.com/HelloNerd/article/details/80698329</link><guid>https://blog.youkuaiyun.com/HelloNerd/article/details/80698329</guid><author>HelloNerd</author><pubDate>Thu, 14 Jun 2018 22:57:42 +0800</pubDate><description><![CDATA[前文介绍了linux的进程的一些静态特性，这里开始简单描述一下进程是怎么切换的。首先，什么是进程切换？进程切换就是为了控制进程的执行，内核挂起正在CPU上运行的进程，并恢复以前挂起的某个进程的行为。什么时候会切换？发生schedule()的时候。都要切换什么？切换地址空间、内核态堆栈和硬件上下文。硬件上下文是什么？进程切换的时候，要把被切出的进程的一些寄存器信息存起来，等到再切回这个进程的时候，要...]]></description><category></category></item><item><title><![CDATA[浅谈linux的进程的静态特性——pid，进程状态，进程链表，等待队列]]></title><link>https://blog.youkuaiyun.com/HelloNerd/article/details/80691323</link><guid>https://blog.youkuaiyun.com/HelloNerd/article/details/80691323</guid><author>HelloNerd</author><pubDate>Thu, 14 Jun 2018 17:42:04 +0800</pubDate><description><![CDATA[本文有点长，建议分开食用。本文可以看做是介绍进程的一些特性，也可以看做是对进程描述符的各个重要字段的介绍。1. 什么是进程进程就是程序执行的一个实例。进程在创建时执行和父进程相同的代码，但是拥有自己的独立的数据拷贝（堆栈）。所以，进程可以看做一个分配系统资源的实体。系统资源包括CPU时间、内存。在linux源代码里，进程可以称之为task，也可以称之为thread。所以内核代码里看到这两个单词，都...]]></description><category></category></item><item><title><![CDATA[Linux的内存寻址——浅谈分段和分页机制]]></title><link>https://blog.youkuaiyun.com/HelloNerd/article/details/80537517</link><guid>https://blog.youkuaiyun.com/HelloNerd/article/details/80537517</guid><author>HelloNerd</author><pubDate>Fri, 01 Jun 2018 18:10:58 +0800</pubDate><description><![CDATA[本文会以80x86架构，linux2.6为例，简单介绍内存的分段和分页机制。1. 三种内存地址关于内存地址，首先要了解它有三种，分别是逻辑地址、线性地址和物理地址。把逻辑地址转换为线性地址是由一个叫做分段单元的硬件电路完成的。同样地，还有一个叫做分页单元的硬件电路负责把线性地址转换为物理地址。那现在很明确地，当我们讨论分段的时候，就是讨论逻辑地址是如何转换成线性地址的。当我们讨论分页的时候，就是在...]]></description><category></category></item><item><title><![CDATA[DPDK如何针对cache提高性能]]></title><link>https://blog.youkuaiyun.com/HelloNerd/article/details/80449050</link><guid>https://blog.youkuaiyun.com/HelloNerd/article/details/80449050</guid><author>HelloNerd</author><pubDate>Fri, 25 May 2018 11:11:57 +0800</pubDate><description><![CDATA[前面介绍了一些cache的相关背景知识，这里单独写一篇博客，总结一下对于DPDK来说，为了提升性能，在cache方面有哪些需要注意的点。①适时的使用cache预取技术。在处理网卡队列的时候，多数时候都是在处理连续的内存，此时应该主动调用预取函数，可以提升效率。②为了解决cache一致性问题，数据结构尽量声明为cache line对齐。并且多核访问的数据，可以设计成每CPU变量。③系统环境中开启大页...]]></description><category></category></item><item><title><![CDATA[DPDK学习——cache相关知识④]]></title><link>https://blog.youkuaiyun.com/HelloNerd/article/details/80448992</link><guid>https://blog.youkuaiyun.com/HelloNerd/article/details/80448992</guid><author>HelloNerd</author><pubDate>Fri, 25 May 2018 11:08:37 +0800</pubDate><description><![CDATA[6. TLB和大页6.1 TLB如前所说，TLB也是一种cache，用于存放页表项的cache，方便快速完成逻辑地址到物理地址的转换。6.2 大页但是一个常规页4k，假设一个程序用了512页，总共2MB，这就需要TLB里至少方下512个页表项才能保证每次都能命中，但TLB大小有限。所以为了减少TLB不命中的情况，可以使用大页，以1G为单位进行分页。7. DDIO7.1 提出DDIO的背景/原因①随...]]></description><category></category></item><item><title><![CDATA[DPDK学习——cache相关知识③]]></title><link>https://blog.youkuaiyun.com/HelloNerd/article/details/80448904</link><guid>https://blog.youkuaiyun.com/HelloNerd/article/details/80448904</guid><author>HelloNerd</author><pubDate>Fri, 25 May 2018 11:04:37 +0800</pubDate><description><![CDATA[4. cache预取背景：cache操作对大多数程序员透明，但当对程序执行效率有很高要求的时候，程序员可以一定程度上控制cache。4.1 Cache局部性①时间局部性：程序即将用到的指令或数据，可能就是目前正在使用的指令或数据，可以在当前的指令数据使用完后暂存在cache中。典型的例子就是for循环。②空间局部性：程序即将使用的指令或数据可能与目前正在使用的指令或数据在空间上相邻或相近。所以可以...]]></description><category></category></item><item><title><![CDATA[DPDK学习——cache相关知识②]]></title><link>https://blog.youkuaiyun.com/HelloNerd/article/details/80448805</link><guid>https://blog.youkuaiyun.com/HelloNerd/article/details/80448805</guid><author>HelloNerd</author><pubDate>Fri, 25 May 2018 11:00:26 +0800</pubDate><description><![CDATA[2 Cache地址映射和变换2.1 背景Cache的容量很小，L3也只有几十兆，而内存容量有好几G，在这种情况下要把内存中的内容放到cache中，需要一个映射算法和分块机制。2.2 分块机制cache和内存以块为单位进行数据交换。块以在内存的一个存储周期中能访问到的数据长度为限。当今主流大小都是64字节，所以一个cache line就是64大小的数据块。2.3 映射算法映射算法要把内存中的内容按照...]]></description><category></category></item><item><title><![CDATA[DPDK学习——cache相关知识①]]></title><link>https://blog.youkuaiyun.com/HelloNerd/article/details/80448271</link><guid>https://blog.youkuaiyun.com/HelloNerd/article/details/80448271</guid><author>HelloNerd</author><pubDate>Fri, 25 May 2018 10:50:31 +0800</pubDate><description><![CDATA[1. cache系统1.1 出现原因：内存性能对于CPU来说仍然很慢，处理器从内存中读数据多达上百个时钟周期，这几个周期里，处理器只能等待。所以提出了Cache以匹配处理器与内存之间的巨大速度鸿沟。1.2 三级cache：一级cache一般分为数据cache和指令cache，3~5个指令周期就能访问到数据，一般只有几十K；二级cache中数据和指令无差别的放在一起，需要十几个处理器周期访问到数据，...]]></description><category></category></item><item><title><![CDATA[动态规划方法解旅行商问题（TSP Traveling Salesperson Problem）]]></title><link>https://blog.youkuaiyun.com/HelloNerd/article/details/50920234</link><guid>https://blog.youkuaiyun.com/HelloNerd/article/details/50920234</guid><author>HelloNerd</author><pubDate>Fri, 18 Mar 2016 08:27:17 +0800</pubDate><description><![CDATA[本文依照具体例子说明如何用动态规划算法解tsp货郎商问题
网上很多相关文章介绍的时候都缺乏例子，以至于太抽象不够直观。本文用具体例子来介绍动态规划法解决tsp。tsp是为了在一个图中求得一个最优路径，经过所有jie d
对于下图，我们用v1，v2，v3，……v6表示每个节点。因为求的是一个回路，所以从任意一点出发都没有区别。所以我们以v1做起点。
用二维邻接矩阵W表示各个节点之间的距离。
D[v2][{v3}]表示，v2经过v3，最终回到起点v1的路]]></description><category></category></item></channel></rss>