<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ybxuwei的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ybxuwei</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ybxuwei]]></copyright><item><title><![CDATA[《深入理解Linux内核》-2.5. Linux分页]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/80888566</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/80888566</guid><author>ybxuwei</author><pubDate>Mon, 02 Jul 2018 19:06:41 +0800</pubDate><description><![CDATA[Linux采用一种可以兼容32位和64位系统的分页模型。正如前一章所说，32位系统上使用两级分页是足够的，但是64位系统上需要更多层级的分页。Linux直到2.6.10，使用三级分页，2.6.11之后使用四级分页。图2-12阐述了这四种页表，它们分别是：


全局页目录
顶层页目录
中层页目录
页表


全局页目录包含若干顶层页目录的地址，顶层页目录又包含若干中层页目录的地址，中层页目录又包含一些...]]></description><category></category></item><item><title><![CDATA[《深入理解Linux内核》-2.4. 硬件分页]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/80708768</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/80708768</guid><author>ybxuwei</author><pubDate>Fri, 15 Jun 2018 18:19:32 +0800</pubDate><description><![CDATA[分页单元用来把线性地址转换成物理地址。它的一个主要的任务就是根据线性地址的访问权限检查请求的访问类型。如果访问的内存不合法，它会产生一个页面错误异常（参考第4章和第8章）。

出于性能考虑，线性地址被分成固定大小的组，叫做页面；一个页面中连续的线性地址被映射到连续的物理地址上。如此，内核可以对一个页面进行权限控制，而不需要针对其中的每个线性地址。一般情况下，我们说页面时，就是指一个线性地址集合和这...]]></description><category></category></item><item><title><![CDATA[《深入理解Linux内核》-2.3. linux分段]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/80657461</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/80657461</guid><author>ybxuwei</author><pubDate>Mon, 11 Jun 2018 20:29:15 +0800</pubDate><description><![CDATA[译者注：    

本节讲的是“linux分段”，上一节是“硬件分段”，硬件分段主要讲80x86如何从硬件层提供分段支持，而本节讲的linux如何使用分段来实现操作系统，当然基于硬件分段也可以实现windows操作系统，但是linux和windows使用相同的硬件基础设施来实现自己的系统的方式肯定是不一样的。所以有本节单独介绍linux分段的必要，读者有必要搞清楚二者的关系，否则在阅读本节的时候容...]]></description><category></category></item><item><title><![CDATA[《深入理解Linux内核》-2.2. 硬件分段]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/80634207</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/80634207</guid><author>ybxuwei</author><pubDate>Sat, 09 Jun 2018 16:52:45 +0800</pubDate><description><![CDATA[声明： 以下是对原文知识点的提炼总结，并非对照翻译。因为直接翻译并不容易理解。

本节涉及的概念：

段

linux把内存地址粗略的分为几个区域，分别用作不同的功能，就叫分段。为什么要分段？因为linux进程对不同地址空间的初始化、申请释放、访问权限都不相同，所以要区分对待。

常见的有六种段，它们是大学课程里面就介绍过的：cs、ss、ds、es、fs、gs。我们主要关注前三种段，它们分别是代码...]]></description><category></category></item><item><title><![CDATA[《深入理解Linux内核》-2.1. 内存地址]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/80600349</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/80600349</guid><author>ybxuwei</author><pubDate>Wed, 06 Jun 2018 20:15:11 +0800</pubDate><description><![CDATA[80x86体系上有三种地址：

逻辑地址（Logical address）


机器语言指令中用来指定操作数的地址。逻辑地址包含段和偏移，偏移定义了段到实际地址的举例。


线性地址（Linear address，也叫虚拟地址）


32位的无符号整数，最大可以表示4GB的内存空间。


物理地址 


用来定位内存芯片中的内存单元。对应于从微处理器针脚发送给存储器总线的电信号。


内存管理单元...]]></description><category></category></item><item><title><![CDATA[《深入理解Linux内核》-3.3. 进程切换]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/78896292</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/78896292</guid><author>ybxuwei</author><pubDate>Mon, 25 Dec 2017 20:05:50 +0800</pubDate><description><![CDATA[3.3. 进程切换为了控制进程的执行，内核必须能够挂起正在运行的进程并恢复运行其他之前被挂起的进程。这个活动通过进程切换，任务切换或上下文切换执行这种各样的操作。接下来的章节介绍Linux系统上的进程切换。3.3.1. 硬件上下文虽然每个进程拥有自己的地址空间，但是它们必须共享相同的CPU寄存器。因此恢复执行一个进程之前，内核必须保证用该进程先前被挂起时的寄存器值来初始化这些寄存器。这组在进程恢复运]]></description><category></category></item><item><title><![CDATA[《深入理解Linux内核》-3.2. 进程描述符]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/78602474</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/78602474</guid><author>ybxuwei</author><pubDate>Wed, 22 Nov 2017 13:06:19 +0800</pubDate><description><![CDATA[3.2. 进程描述符为了管理进程，内核必须对每个进程正在做什么有一个清晰的画面。比如，它必须知道进程的优先级、它是正在运行还是被某个事件阻塞、它的地址空间是多少、它被允许访问哪些地址等等。进程描述符发挥了这些作用，它是一个task_struct类型的结构，包含与单个进程有关的所有信息。正因为存放了这么多信息，进程描述符是非常复杂的。除了大量的包含进程属性的字段，文件描述符还包含若干个指向其他数据结构]]></description><category></category></item><item><title><![CDATA[《深入理解Linux内核》-3.1. 进程，轻量级进程，和线程]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/78531372</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/78531372</guid><author>ybxuwei</author><pubDate>Tue, 14 Nov 2017 15:51:38 +0800</pubDate><description><![CDATA[3.1. 进程，轻量级进程]]></description><category></category></item><item><title><![CDATA[《深入理解Linux内核》-3. 进程]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/78523572</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/78523572</guid><author>ybxuwei</author><pubDate>Mon, 13 Nov 2017 19:11:38 +0800</pubDate><description><![CDATA[3. 进程]]></description><category></category></item><item><title><![CDATA[《深入理解Linux内核》-3.5. 进程的销毁]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/78521677</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/78521677</guid><author>ybxuwei</author><pubDate>Mon, 13 Nov 2017 16:28:00 +0800</pubDate><description><![CDATA[linux内核翻译]]></description><category></category></item><item><title><![CDATA[linux文件描述符限制和单机最大长连接数]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/77969032</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/77969032</guid><author>ybxuwei</author><pubDate>Wed, 13 Sep 2017 17:52:20 +0800</pubDate><description><![CDATA[linux文件描述符限制和单机最大长连接数相关参数linux系统中与文件描述符相关的参数有以下几个：
soft/hard nofile
file-max（/proc/sys/fs/file-max）
nr_open（/proc/sys/fs/nr_open）
这三个参数的作用都是限制一个进程可以打开的最大文件数，它们之间有什么区别和联系呢？本文会从内核代码出发，分析这些参数是怎么影响文件打开的，以及]]></description><category></category></item><item><title><![CDATA[linux终端关闭时为什么会导致在其上启动的进程退出？]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/77149575</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/77149575</guid><author>ybxuwei</author><pubDate>Sun, 13 Aug 2017 20:13:28 +0800</pubDate><description><![CDATA[现象经常在linux下开发的人应该都有这样的经验，就是在终端上启动的程序，在关闭终端时，这个程序的进程也被一起关闭了。看下面这个程序，为了是进程永远运行，在输出helloworld后，循环调用sleep：直接关闭这个终端，在另一个终端上查找该进程，已经找不到了：这个行为看起来似乎是理所当然的，也符合人的第一感觉：”在终端上启动的程序是属于终端的，所以当关闭终端时，这个终端里的一包裹进程都一起被解决掉]]></description><category></category></item><item><title><![CDATA[boost::io_service解读]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/53352603</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/53352603</guid><author>ybxuwei</author><pubDate>Sat, 26 Nov 2016 16:28:36 +0800</pubDate><description><![CDATA[boost::io_service的队列模型、线程模型、源码解读。]]></description><category></category></item><item><title><![CDATA[std::string源码探秘和性能分析]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/51326830</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/51326830</guid><author>ybxuwei</author><pubDate>Thu, 05 May 2016 22:15:15 +0800</pubDate><description><![CDATA[std::string源码探秘和性能分析本文主要讲c++标准库的string的内部实现，以及对象拷贝的性能分析。]]></description><category></category></item><item><title><![CDATA[一个c++封装的zookeeper库]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/51152911</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/51152911</guid><author>ybxuwei</author><pubDate>Thu, 14 Apr 2016 16:53:02 +0800</pubDate><description><![CDATA[一个c++ 封装的zookeeper库]]></description><category></category></item><item><title><![CDATA[一个自动生成visual studio工程的脚本]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/50761227</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/50761227</guid><author>ybxuwei</author><pubDate>Sun, 28 Feb 2016 19:59:02 +0800</pubDate><description><![CDATA[本文介绍一个自制的脚本，功能是根据当前目录结构自动生成vs工程，并把目录对应到筛选器，自动包含所有源文件。

出发点：
    linux下的c/c++开发缺乏一个高效的可视化编辑工具，利用visual studio的强大的语法检测、智能的代码提醒、支持tab页的编辑器等功能，会让代码编辑效率事半功倍。但是vs的windows天性使其并不能直接建立linux可构建的工程，而且要保持源码和工程]]></description><category></category></item><item><title><![CDATA[一个支持函数，浮点数表达式求值算法]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/38961273</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/38961273</guid><author>ybxuwei</author><pubDate>Sun, 31 Aug 2014 18:38:01 +0800</pubDate><description><![CDATA[由于工作原因，需要写一个可以解析表达式的接口]]></description><category></category></item><item><title><![CDATA[程序员技术练级攻略]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/27085605</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/27085605</guid><author>ybxuwei</author><pubDate>Mon, 26 May 2014 15:30:58 +0800</pubDate><description><![CDATA[月光博客6月12日发表了《写给新手程序员的一封信》，翻译自《An
 open letter to those who want to start programming》，我的朋友（他在本站的id是Mailper）告诉我，他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙，于是，我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给我发来了一些他的心得和经历]]></description><category></category></item><item><title><![CDATA[Linux进程权限的研究——real user id, effective user id, saved set-user-id]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/23563423</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/23563423</guid><author>ybxuwei</author><pubDate>Sun, 13 Apr 2014 12:16:16 +0800</pubDate><description><![CDATA[本文主要讨论linux进程访问文件的权限]]></description><category></category></item><item><title><![CDATA[read/write/fsync与fread/fwrite/fflush的关系和区别]]></title><link>https://blog.youkuaiyun.com/ybxuwei/article/details/22727565</link><guid>https://blog.youkuaiyun.com/ybxuwei/article/details/22727565</guid><author>ybxuwei</author><pubDate>Tue, 01 Apr 2014 13:54:22 +0800</pubDate><description><![CDATA[read/write/fsync： 
1. linux底层操作；
2. 内核调用， 涉及到进程上下文的切换，即用户态到核心态的转换，这是个比较消耗性能的操作。
fread/fwrite/fflush： 
1. c语言标准规定的io流操作，建立在read/write/fsync之上

2. 在用户层， 又增加了一层缓冲机制，用于减少内核调用次数，但是增加了一次内存拷贝。


两者之]]></description><category></category></item></channel></rss>