- 博客(24)
- 资源 (7)
- 收藏
- 关注
翻译 《深入理解Linux内核》-2.5. Linux分页
Linux采用一种可以兼容32位和64位系统的分页模型。正如前一章所说,32位系统上使用两级分页是足够的,但是64位系统上需要更多层级的分页。Linux直到2.6.10,使用三级分页,2.6.11之后使用四级分页。图2-12阐述了这四种页表,它们分别是:全局页目录顶层页目录中层页目录页表全局页目录包含若干顶层页目录的地址,顶层页目录又包含若干中层页目录的地址,中层页目录又包含一些...
2018-07-02 19:06:41
638
翻译 《深入理解Linux内核》-2.4. 硬件分页
分页单元用来把线性地址转换成物理地址。它的一个主要的任务就是根据线性地址的访问权限检查请求的访问类型。如果访问的内存不合法,它会产生一个页面错误异常(参考第4章和第8章)。出于性能考虑,线性地址被分成固定大小的组,叫做页面;一个页面中连续的线性地址被映射到连续的物理地址上。如此,内核可以对一个页面进行权限控制,而不需要针对其中的每个线性地址。一般情况下,我们说页面时,就是指一个线性地址集合和这...
2018-06-15 18:19:32
794
翻译 《深入理解Linux内核》-2.3. linux分段
译者注: 本节讲的是“linux分段”,上一节是“硬件分段”,硬件分段主要讲80x86如何从硬件层提供分段支持,而本节讲的linux如何使用分段来实现操作系统,当然基于硬件分段也可以实现windows操作系统,但是linux和windows使用相同的硬件基础设施来实现自己的系统的方式肯定是不一样的。所以有本节单独介绍linux分段的必要,读者有必要搞清楚二者的关系,否则在阅读本节的时候容...
2018-06-11 20:29:15
1129
翻译 《深入理解Linux内核》-2.2. 硬件分段
声明: 以下是对原文知识点的提炼总结,并非对照翻译。因为直接翻译并不容易理解。本节涉及的概念:段linux把内存地址粗略的分为几个区域,分别用作不同的功能,就叫分段。为什么要分段?因为linux进程对不同地址空间的初始化、申请释放、访问权限都不相同,所以要区分对待。常见的有六种段,它们是大学课程里面就介绍过的:cs、ss、ds、es、fs、gs。我们主要关注前三种段,它们分别是代码...
2018-06-09 16:52:45
434
翻译 《深入理解Linux内核》-2.1. 内存地址
80x86体系上有三种地址:逻辑地址(Logical address)机器语言指令中用来指定操作数的地址。逻辑地址包含段和偏移,偏移定义了段到实际地址的举例。线性地址(Linear address,也叫虚拟地址)32位的无符号整数,最大可以表示4GB的内存空间。物理地址 用来定位内存芯片中的内存单元。对应于从微处理器针脚发送给存储器总线的电信号。内存管理单元...
2018-06-06 20:15:11
250
翻译 《深入理解Linux内核》-3.3. 进程切换
3.3. 进程切换为了控制进程的执行,内核必须能够挂起正在运行的进程并恢复运行其他之前被挂起的进程。这个活动通过进程切换,任务切换或上下文切换执行这种各样的操作。接下来的章节介绍Linux系统上的进程切换。3.3.1. 硬件上下文虽然每个进程拥有自己的地址空间,但是它们必须共享相同的CPU寄存器。因此恢复执行一个进程之前,内核必须保证用该进程先前被挂起时的寄存器值来初始化这些寄存器。这组在进程恢复运
2017-12-25 20:05:50
1258
翻译 《深入理解Linux内核》-3.2. 进程描述符
3.2. 进程描述符为了管理进程,内核必须对每个进程正在做什么有一个清晰的画面。比如,它必须知道进程的优先级、它是正在运行还是被某个事件阻塞、它的地址空间是多少、它被允许访问哪些地址等等。进程描述符发挥了这些作用,它是一个task_struct类型的结构,包含与单个进程有关的所有信息。正因为存放了这么多信息,进程描述符是非常复杂的。除了大量的包含进程属性的字段,文件描述符还包含若干个指向其他数据结构
2017-11-22 13:06:19
1836
原创 linux文件描述符限制和单机最大长连接数
linux文件描述符限制和单机最大长连接数相关参数linux系统中与文件描述符相关的参数有以下几个:soft/hard nofilefile-max(/proc/sys/fs/file-max)nr_open(/proc/sys/fs/nr_open)这三个参数的作用都是限制一个进程可以打开的最大文件数,它们之间有什么区别和联系呢?本文会从内核代码出发,分析这些参数是怎么影响文件打开的,以及
2017-09-13 17:52:20
7054
1
原创 linux终端关闭时为什么会导致在其上启动的进程退出?
现象经常在linux下开发的人应该都有这样的经验,就是在终端上启动的程序,在关闭终端时,这个程序的进程也被一起关闭了。看下面这个程序,为了是进程永远运行,在输出helloworld后,循环调用sleep:直接关闭这个终端,在另一个终端上查找该进程,已经找不到了:这个行为看起来似乎是理所当然的,也符合人的第一感觉:”在终端上启动的程序是属于终端的,所以当关闭终端时,这个终端里的一包裹进程都一起被解决掉
2017-08-13 20:13:28
11998
2
原创 std::string源码探秘和性能分析
std::string源码探秘和性能分析本文主要讲c++标准库的string的内部实现,以及对象拷贝的性能分析。
2016-05-05 22:15:15
15752
1
原创 一个自动生成visual studio工程的脚本
本文介绍一个自制的脚本,功能是根据当前目录结构自动生成vs工程,并把目录对应到筛选器,自动包含所有源文件。出发点: linux下的c/c++开发缺乏一个高效的可视化编辑工具,利用visual studio的强大的语法检测、智能的代码提醒、支持tab页的编辑器等功能,会让代码编辑效率事半功倍。但是vs的windows天性使其并不能直接建立linux可构建的工程,而且要保持源码和工程
2016-02-28 19:59:02
3363
转载 程序员技术练级攻略
月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给我发来了一些他的心得和经历
2014-05-26 15:30:58
790
原创 Linux进程权限的研究——real user id, effective user id, saved set-user-id
本文主要讨论linux进程访问文件的权限
2014-04-13 12:16:16
3725
原创 read/write/fsync与fread/fwrite/fflush的关系和区别
read/write/fsync: 1. linux底层操作;2. 内核调用, 涉及到进程上下文的切换,即用户态到核心态的转换,这是个比较消耗性能的操作。fread/fwrite/fflush: 1. c语言标准规定的io流操作,建立在read/write/fsync之上2. 在用户层, 又增加了一层缓冲机制,用于减少内核调用次数,但是增加了一次内存拷贝。两者之
2014-04-01 13:54:22
9185
原创 APUE练习题3.5 - 文件重定向
原题:3.5The Bourne shell, Bourne-again shell, and Korn shell notation digit1>&digit2says to redirect descriptor digit1 to the same file as descriptordigit2. What is the differ
2014-03-24 20:02:35
1144
1
原创 APUE练习题3.2——write your own dup2
Advanced Programming in the Unix Environment练习题3.2:题目:Write your own dup2 function that performs the same service as the dup2 function described in Section 3.12, without calling the fcntl function.
2014-03-16 20:57:03
1285
原创 visual studio运行时库MT、MTd、MD、MDd的研究
在开发window程序是经常会遇到编译好好的程序拿到另一台机器上面无法运行的情况,这一般是由于另一台机器上面没有安装响应的运行时库导致的,那么这个与编译选项MT、MTd、MD、MDd有什么关系呢?这是msdn上面的解释:MT:mutithread,多线程库,编译器会从运行时库里面选择多线程静态连接库来解释程序中的代码,即连接LIBCMT.lib库MTd:mutithread+debug,多
2013-06-14 17:53:59
9219
5
转载 shell判断语句(配置软件安装环境非常有用)
shell 判断语句 流程控制 "if" 表达式 如果条件为真则执行then后面的部分: if ....; then .... elif ....; then .... else .... fi 大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等… 通常用" [ ] "来表示条件测试。注意这里的空格
2013-04-15 17:27:24
1548
Advanced_Programming_in_the_UNIX_Environment_2nd_Ed.chm
2011-11-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人