linux内核分析与应用
linux内核分析与应用
废言Pro
时间加努力
展开
-
linux内核分析及应用 -- Linux 网络层数据流分析(下)
8.3 netfilter 和 lvs通过上一节的介绍我们已经知道,在网络中收发数据最后都会经过 netfilter 层,本节我们继续分析 netfilter 层的具体逻辑。另外,很多网络软件都是在 netfilter 层设置 hook 点来过滤网络包,比如 lvs,本节也会简单介绍。8.3.1 netfilterLinux 在网络层提供了一套包过滤机制,即 netfilter,它在整...原创 2019-11-06 23:50:01 · 452 阅读 · 0 评论 -
linux内核分析及应用 -- Linux 网络层数据流分析(上)
计算机网络是个庞大且复杂的话题,这不是一本书就可以说清楚的。然而,在互联网极大普及的今天,很少有应用程序不与网络打交道,我还是抱着授人以渔的思想,尝试介绍 Linux 在网络层面的整体架构,这样在解决具体问题的时候,才可以有针对性地进行分析。本章不打算从头到尾来解释 Linux 网络从物理层到应用层的所有实现。关于理论方面的知识,可以单独学习 Andrew 的《计算机网络》,Steven 的《...原创 2019-11-06 23:49:09 · 1010 阅读 · 0 评论 -
linux内核分析及应用 -- Linux 的进程隔离技术与 Docker 容器
近两年容器技术突然变得很火热,几乎所有开发人员都在学习这个技术。技术人员并不见得一定比女性购物更加理智,有时候,选择一种新技术也仅仅是为了追赶时髦和潮流。从实现的角度来讲,容器技术不是全新的发明,Docker 容器只是针对 Linux 内核提供的基础功能(例如 namespace、cgroup)进行了扩展。本章不打算介绍所有与虚拟化相关的技术和实现方案,而是探讨和容器相关的虚拟化技术。主要...原创 2019-11-06 23:48:03 · 2809 阅读 · 1 评论 -
linux内核分析及应用 -- 文件系统
Linux 内核设计,基本上是围绕着“一切皆文件”的思想来展开的。所以,我们能见到的系统调用或者模块功能,都需要使用文件系统。假如没有文件系统,我们就只能直接操作块设备、字符设备等,这需要对外部存储设备运行原理非常了解才行,比如机械盘的结构、不同设备的驱动程序。文件系统的出现给用户屏蔽了这些细节,让我们把精力集中在数据结构组织上,而不用关注硬件的运行原理。本章着重介绍 Linux 的文件系统,...原创 2019-11-06 23:43:18 · 705 阅读 · 0 评论 -
linux内核分析及应用 -- 输入输出(下)
5.5 Redis 对 epoll 的封装Redis 的作者和 Nginx 的作者一样,不喜欢引入第三方的库,比如 libevent、libev 来做事件处理,而是自己封装了 epoll,不像 Memcachd 的 I/O 模型还得依赖 libevent。Redis 的 I/O 模型针对不同系统做了不同的实现,比如 Linux 中的实现是对 epoll 的封装,BSD 中的实现是对 kqueu...原创 2019-07-10 13:54:40 · 404 阅读 · 0 评论 -
linux内核分析及应用 -- 输入输出(上)
计算机从诞生之日起就和输入输出(I/O)密不可分,图灵机和冯 · 诺伊曼体系中输入与输出就是基本概念之一。图灵机是一个计算机的理论模型,本质上是状态机;冯 · 诺伊曼体系是图灵机的实现,包括运算、控制、存储、输入、输出五个部分。冯 · 诺伊曼体系相对之前的计算机最大的创新在于程序和数据的存储,以此实现机器内部编程,如图5-1所示。图5-1 冯 · 诺伊曼计算机体系结构我们平时编写的应用...原创 2019-07-10 11:11:37 · 1429 阅读 · 0 评论 -
linux内核分析及应用 -- 中断机制
我们编写的程序在运行的时候,并不会一直占据着 CPU 资源,比如你需要和外部设备做交互(读写磁盘数据、读写网络接口等),那么你就要主动放弃 CPU,当外部设备数据就绪后,就会通过中断机制来通知 CPU 切换回你刚才运行程序的上下文继续往下执行。另外,即使是 CPU 密集型运算的程序,系统也并不仅仅给一个进程来运行。为了对系统中所有的进程公平起见,一般会通过时钟中断的机制,定期打断当前在 CPU...原创 2019-07-03 13:30:16 · 1103 阅读 · 0 评论 -
linux 内核与分析 -- 内存管理(下)
3.5 Linux 的内存分配和管理下面我们来讨论内存管理的相关问题,通过前面的分析,我认为内存管理需要考虑以下几个问题: 内存经过频繁申请归还之后,会出现碎片,称为外部碎片,导致没有足够大的连续内存空间,如何解决该问题? 被申请占用的内存块没有有效利用,存在浪费称为内部碎片,如何解决? 每次申请完内存之后是否需要刷新进程页表,是否有性能问题? 内存申请是...原创 2019-04-19 08:45:17 · 653 阅读 · 0 评论 -
linux内核分析与应用 -- 内存管理(上)
我们知道,在大部分程序运行的时候,几乎都离不开堆(heap)和栈(stack),所有数据结构的分配也都是在堆和栈上进行的,堆和栈都是建立在内存之上的。很多时候,内存几乎对程序员来讲是透明的,你只管使用,而不需要对其背后的管理机制做更加深入的了解,比如以 Java 为代表的运行在虚拟机上的语言,都有内存管理器来进行垃圾回收的机制。但是不幸的是,很多时候我们还是会遇到一些内存溢出的问题(out-o...原创 2019-04-19 08:40:58 · 1365 阅读 · 0 评论 -
linux内核分析与应用 -- 并发(下)
2.4 常见开源软件中的并发问题分析前一节介绍了 Linux 中相关并发工具,实际场景中有很多应用,下面我们来对几个开源软件的并发设计进行分析。2.4.1 Nginx 原子性下面我们通过分析 Nginx 中的原子变量实现,来介绍程序如何能做到保证原子性的。Nginx 为了保证原子性设计了 atomic 函数,atomic 的代码如下:static ngx_inline ngx...原创 2019-04-18 20:09:23 · 693 阅读 · 0 评论 -
linux内核分析与应用 -- 并发(上)
很多程序员在面试的时候经常会被问到线程安全相关的问题,比如什么是线程安全,什么又是线程不安全,假如线程不安全,如何解决才能做到线程安全。这时候,往往会出现五花八门的答案,而且大多数都是本末倒置。很多时候,人们经常会用一些现象来回答问题,比如房价高这个问题,很多时候大家就会归结于某些现象:温州炒房团、丈母娘经济、对比国际大城市房价等。但是,我们需要的是“原理性的解释”,比如影响房价的经济学原理如供需...原创 2019-04-18 20:06:25 · 420 阅读 · 0 评论 -
linux内核分析与应用 -- 进程与线程(下)
1.3 进程的调度在一个 CPU 中,同一时刻最多只能支持有限的进程或者线程同时运行(这取决于 CPU 核数量),但是在一个运行的操作系统上往往可以运行很多进程,假如运行的进程占据 CPU 进程时间很长,就有可能让其他进程饿死。为了解决这种问题,操作系统引入了进程调度器来进行进程的切换,目的是轮流让其他进程获取 CPU 资源。1.3.1 进程调度机制的架构在每个进程运行完毕时,系统可以...原创 2019-03-08 09:49:52 · 533 阅读 · 0 评论 -
linux内核分析和应用 -- 进程与线程(上)
只要是计算机科班出身的技术人员,肯定都学过现代操作系统课程。一般在操作系统的书中都会有这样的定义:简单来说,进程就是在操作系统中运行的程序,是操作系统资源管理的最小单位。一个进程可以管理多个线程,线程相对轻量,可以共享进程地址空间。我在很多次面试的时候,向求职者提问过进程和线程在 Linux 中到底有什么区别,不只是科班出身的应届生,连工作多年的老手,也有很多回答不准确。传统的教育缺乏...原创 2019-02-25 16:52:53 · 877 阅读 · 0 评论