15 |宇文拓>

尚未进行身份认证

我要认证

每天进步一点点

等级
TA的排名 13w+

开篇词:如何驾驶 Linux 这辆性能出色的越野车

Linux 的优秀之处自然不必多说。如果将操作系统比作一辆汽车,那 Linux 就是一辆性能出色的多功能越野车,上山下海飞天无所不能。如果你拥有了它,一定不会只满足于驾驶它上下班,不能只会挂挡、踩油门和控制方向之类的基本操作。我们想充分了解并掌握它,挖掘其更多潜能。但是,这个过程有相当的难度。Linux 系统编程的难点我们来看看掌握 Linux 的拦路虎。对于有一定 Linux 开发基...

2020-09-22 12:06:11

第01课:细说系统调用规范,入行要先熟悉套路

本课程主要带大家深入研究 Linux 系统编程。系统编程的任务,可以定义为使用系统提供的功能解决我们面对的实际问题,而系统调用,则是系统开放给应用执行特定功能的接口。本文首先从 Linux 系统调用讲起,主要包括以下内容:系统调用概述系统调用的两种调用方式系统调用的两种执行过程系统调用的标准使用方法另外,还会扩展两个知识点:与早期 Linux 相比,2.6 以后版本的内核,是如何...

2020-09-22 12:06:09

第02课:精细控制文件 I/O,编写更稳健的应用

在 Linux 中有条重要的哲学,即一切皆文件,本文就来着重讲讲文件操作。首先从磁盘文件开始,探讨除打开、读、写、关闭等常规操作外,还有哪些可控操作。理解和掌握各个步骤的行为细节,可以帮助开发者写出性能更好、更加稳健的应用。本文主要包括以下几部分内容:默认的文件读写行为在应用层选择合适的文件 IO 缓存控制文件内容在磁盘设备上的更新控制文件内容的预读取策略混合使用库函数和系统调用2...

2020-09-22 12:06:08

第03课:深入程序布局内部,增强应用控制能力

本文将探讨程序的静态布局和动态布局。静态布局指可执行文件在硬盘上的内部布局,而动态布局,则是程序被系统加载到内存之后的布局。主要包括以下几部分内容:可执行文件里有什么影响程序静态布局的因素如何控制程序的动态布局检查地址范围3.1 可执行文件里有什么对于这个问题,相信有经验的开发人员都能给出这样的回答:可执行文件包含了源文件编译生成的可执行指令和数据。在日常开发中,理解到这个程度已经...

2020-09-22 12:06:06

第04课:理解进程内存排布,掌握程序动态

简单来讲,进程就是运行中的程序。更进一步,在用户空间中,进程是加载器根据程序头提供的信息将程序加载到内存并运行的实体。在本文中,我们就来深挖进程在用户空间内的更多细节,主要包括以下几部分内容:进程的虚拟空间排布进程的启动监控子进程的状态进程的终止4.1 进程的虚拟空间排布4.1.1 虚拟空间及其功能在理解虚拟空间排布之前,先要明确虚拟空间的概念。上一篇,我们讲解的 ELF 文件头...

2020-09-22 12:06:04

第05课:理解线程实现,达成高效率与低复杂度

目前,多线程模型非常常见,从终端应用到大型服务器程序都会大量使用。在本文中,我们就来深入探究下 Linux 线程的内部细节,让读者对线程的把控更加胸有成竹,得心应手,主要包括以下几方面内容:线程的内存布局线程的实现方案内核中的用户线程与进程线程的同步线程的连接和分离线程的取消线程特有数据5.1 线程的内存布局一个进程可以包含多个线程。多个线程可以并发执行,从而提高系统整体吞吐...

2020-09-22 12:06:02

第06课:探究进程间通信技术,优化数据传输效率

在前面的课程中,我们讲过不同进程运行在各自的虚拟地址空间内,相互之间被操作系统隔离开。就像在《黑客帝国》中,每个人都生活在一个封闭的充满营养液的容器里,人与人之间利用接在后脑勺的数据线通过 Matrix 互相交流一样,在 Linux 中进程间的相互通信需经过内核中转。内核中转的不同实现方式,催生出了进程间不同的通信技术。在本文中,我们就来探究进程间通信的不同方式及底层实现原理,主要包括以下几方面...

2020-09-22 12:06:01

第07课:解析共享库工作机理,灵活组织大型项目

共享库的使用在当今的各类计算机系统中都已经非常常见,它的出现让大型项目的组织形式更加灵活,管理更加方便,而且极大地节省了需要的存储和运行空间。本节课我们就来深入到共享库的内部去了解一下其工作的细节,主要包括以下几方面内容:共享库产生的渊源位置独立代码的工作原理动态链接器的工作过程共享库的版本维护7.1 共享库产生的渊源7.1.1 静态库在共享库出现之前,公用功能是以静态库的形式存...

2020-09-22 12:05:59

第08课:理解文件系统设计思想,站在巨人肩上

对任何计算机系统来说,数据都是非常重要的资产,计算机中的数据通常是以文件的形式保存在磁盘上的。对大多数的计算机用户来说,通常只需要关心文件呈现出来的组织方式,而不需要关心它们在磁盘上保存和管理的技术细节。但是对某些特殊应用的开发人员来说,仅仅了解到这种程度是远远不够的,还需要对数据在磁盘上的组织方式的细节有更深入地理解,有时甚至还需要针对特定的应用场景设计自己的文件系统。本节课我们就以历史悠久而...

2020-09-22 12:05:58

第09课:掌握信号处理,稳健处理中断和异常

信号在操作系统中有悠久的历史,信号的概念和使用方式都非常简单,但是要编写出真正实用而稳定的信号处理程序却并不容易。本节课我们就来深入地了解一下 Linux 中信号处理的底层细节,帮助读者更好地利用系统的各种信号,主要包括以下几方面内容:信号的基本概念信号处理流程可重入与异步安全信号处理程序注意要点信号对阻塞的系统调用的中断9.1 信号的基本概念信号是操作系统中当某个事件发生时对...

2020-09-22 12:05:56

第10课:理解时钟与定时器,电子世界中的脉动

时钟对计算机系统来说非常重要,在硬件层面,时钟信号是推动 CPU 运转的动力源;在软件层面,很多非常重要的系统功能都依赖于对时间的度量和处理。本节课,我们就来深入了解一下计算机系统的定时硬件,学习 Linux 中的操作系统定时器的系统调用的使用方法,并讨论一下应用层定时器的实现思路,主要包括以下几方面内容:时钟与定时器概述Linux 传统间隔定时器Linux POSIX 定时器应用层定...

2020-09-22 12:05:55

第11课:理解系统安全,保护你的重要资产

在互联网上运行的系统,安全性非常重要。对大多数的系统来说,验证登录用户的账号和密码是保护系统的第一道防线,本节课我们就来详细讨论一下 Linux 系统中账户密码的验证过程,主要包括以下几方面的的内容:Linux 验证登录用户的步骤;Linux 对用户敏感账户信息的保护手段;通过量化的计算让读者对 Linux 的安全性有直观的体会。11.1 Linux 验证登录用户不管是本地登录,还是...

2020-09-22 12:05:53

第12课:掌握线程同步,让复杂工作流协调有序

从根本上说,多线程编程的最终目的,就是最大限度地利用 CPU 的计算资源,尽量让所有的 CPU 核心都保持忙碌状态。这里有两方面的意思:一是不要让 CPU 闲下来,保持它始终有工作做;二是尽量让所有的 CPU 都有大体相当的负载,不要出现有的 CPU 核心很忙,而有的 CPU 核心却没事可做的情况。CPU 什么时候会闲下来呢?最常见的情况就是在等待 I/O 操作的时候,所以,当某些工作...

2020-09-22 12:05:52

第13课:活用内存映射与虚拟内存,让应用更高效

本节课,我们要介绍几个对虚拟内存进行系统级控制的系统调用,合理使用它们,能极大地提高应用的执行效率,增强应用的安全性,主要包括以下几方面内容:内存映射内存保护内存锁定13.1 内存映射13.1.1 概述内存映射的功能是在进程的内存映射表中建立一条新的映射表项,也就是分配一块新的虚拟内存给调用进程。并且,可以指定内存内容与某个文件内容相对应。提供内存映射功能的系统调用是:void...

2020-09-22 12:05:50

第14课:合理控制优先级,根据职责赋予权利

Linux 是一个多用户多任务的操作系统,即使是在单核心 CPU 的系统上,用户也感觉系统中的多个进程在同时运行。实际上,内核使用的是一套固定的调度策略,多个进程轮流使用 CPU,并快速地轮流切换。但是,对于不同功能的进程,它们的任务优先级和对实时性的要求是不一样的,有什么办法能控制进程这一行为呢?在本节课中,我们就来介绍一下 Linux 中影响进程被内核调度的参数,并介绍控制这些参数的系统调用...

2020-09-22 12:05:49

第15课:理解文件扩展属性,让属性设置无限灵活

在《第08课:理解文件系统设计思想,站在巨人肩上》一节课中,我们了解到文件通用和固定的属性信息是保存在索引节点中的。为了保持索引节点结构紧凑的同时,能够实现对文件属性的灵活扩展,Linux 内核从 2.6 开始添加了对扩展属性的支持。在本节课中,我们就来详细了解一下文件的扩展属性,包括它的使用和实现方式,同时还将讨论其在访问控制中的应用,以及其他可能的应用场景,主要包括以下几方面内容:文件扩...

2020-09-22 12:05:47

第16课:监控文件系统,谁动了我的文件

文件系统监控功能在很多系统软件中都有重要的应用,如各种云同步软件、安全防护软件、多种开发工具,以及一些资产监控软件,等等。在本节课中,我们就来讨论一下 Linux 中的文件系统监控功能,包括它的使用方法和实现原理等,主要包括以下几方面内容:文件系统监控概述相关的系统调用创建初始 inotify 对象控制监控目标和事件读取发生的事件通知关闭监控对象底层实现原理系统限制16.1 ...

2020-09-22 12:05:46

第17课:深入虚拟文件系统,文件哲学的延伸

特殊文件系统,指的是在磁盘上没有对应的存储数据的文件系统,这其中最常见的,要属记录进程和内核运行参数的 proc 文件系统。在本节课中,我们就来详细讨论一下 proc 文件系统,包括其中几个常用文件所包含的信息及可能的使用场景,主要包括以下几方面内容:proc 文件系统概述proc 文件系统详解注意事项17.1 proc 文件系统概述在 Linux 的内核中,虚拟文件系统转换层(V...

2020-09-22 12:05:44

第18课:探究进程隐藏与反隐藏,知己知彼百战不殆

进程隐藏技术在主机和网络安全领域有很实用的应用。比如,对红方,安全人员会在蜜罐系统上隐藏一些敏感进程,防止引起入侵者的警觉;对黑方,有些木马程序会使用进程隐藏技术让自己躲过系统管理人员的排查和监控,从而让自己能不被察觉地在被攻击系统上长期运行。前者对自己的系统有完全的控制权,所以,采用修改 Linux 内核,增加进程隐藏机制的方式就可以很干净地实现;而后者,因为要尽量隐蔽自己的行踪,所以通常不...

2020-09-22 12:05:42

第19课:深入内存管理,定制自己的内存管理系统

C/C++ 程序具有强大而灵活的内存操作能力,而要驾驭这种强大的能力,要求开发者具有与之匹配的内功。对内存使用不当,很容易造成非常严重的后果。在 C/C++ 开发中,经常遇到的比较头痛的内存使用问题有内存泄漏、内存重释放和内存溢出。在本节课中,我们就来重点讨论 Linux 应用的内存管理,并在现有内存管理机制的基础上,进一步讨论这几种常见内存使用问题的调试功能的实现思路,主要包括以下几方面内容:...

2020-09-22 12:05:41

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。