精华内容
下载资源
问答
  • 线上线下混合式教学的《Linux服务器高级架构》在线开放课程建设与应用.pdf
  • Linux开放源码最佳实践指南:应用.pdf
  • 开放“基础设施”丰富Linux应用.pdf
  • Linux应用开发自学之路

    万次阅读 多人点赞 2018-06-09 21:33:27
    在 「关于我 」那篇博文里,朋友们应该知道了我不是科班出身,是由机械强行转行到Linux应用开发方向。下面我就详细向大家介绍自己这一路上的转行历程,希望对大家有所启发。   我是学机械专业的,对于机械专业我...

     

    前言

     

     

     

     

    在 「关于我 」那篇博文里,朋友们应该知道了我不是科班出身,是由机械强行转行到Linux应用开发方向。下面我就详细向大家介绍自己这一路上的转行历程,希望对大家有所启发。

     

    我是学机械专业的,对于机械专业我还是很感兴趣,而且当年这个专业也是我自己选择的。本科时成绩没排第一,但也排专业前列。硕士时成绩一直是专业第一,还拿过国家奖学金。由此可见,我还是挺热爱机械的,考研时甚至还想去中科院深造(可惜落榜了),想成为一名机械砖家。

     

     

    转折点

     

     

     

    但转机在我毕业之后。本来我就想一直踏踏实实的做机械,但阴差阳错的,第一份工作由机械工程师调剂到电子工程师。虽然是电子工程师,但做了很多代码工作,那时候学了一些Verilog,以及C#,并且用C#开发了一个测试工具及一个生产用的上位机,据说那个测试工具现在还在电子部门使用。也就是那时,我真正接触到了编程,并深深的被编程世界所着迷。

     

    可是,我在学校学的是机械啊,跟软件相关的东西顶多是C语言及汇编语言,但C语言是十年前(那时候)学的,早就还给老师了。因此,为了工作的需要,我硬着头皮开始学习编程。我每天早上6点起床,学习一个小时后7点去赶班车,晚上下班回来再继续学习。在这样的条件下我学会了Verilog及C#,同时对STM32有个大概的了解。

     

    但那个岗位毕竟不是完全做软件工作,还需要做电子方面的工作。做软件的都知道,写代码的时候需要一个不被打扰的环境,而我那个岗位,一天可以接到十几个电话,严重干扰我的软件开发进度,因此,我决定离开公司,去做真正的软件工程师。

     

     

    入门

     

     

     

    第二份工作,我是嵌入式工程师。在去公司之前,我系统的学了一遍51,看的是 「郭天祥十天学会51单片机」,对单片机有个初步的入门。真正入职后,再利用一个月的时间系统学习一遍C语言,看的是C语言之父写的 「C程序设计语言」。这本书虽然写于80年代,但现在看来依然不过时。而且这本书比较薄,容易看完,比较有成就感。

     

    看完 「C程序设计语言」之后,最好再看 「C和指针」 ,「C专家编程」,「C陷阱与缺陷」。这三本书号称「C语言三剑客」 ,学完它们你的C语言水平绝对是非常之高了。做我们这行,C语言是基础语言,一定要把C语言完全拿下。

     

    之后为了工作的需要,开始接触了Marvell 88MC200及88MW300。这两款是WIFI芯片,但本质是单片机,采用的是ARM M3内核。底层驱动已经由厂家写好了,我们要做的工作就是在SDK基础上做应用做二次开发。在这个过程中,我对敏捷开发有了初步的认识,看了 「高效程序员的45个习惯:敏捷开发修炼之道」这本书。

     

    在第二家公司里,我知道了物联网的整体解决方案,对于物联网的整体框架有了更深入的了解。同时对嵌入式开发所需的技能有了全面的掌握,达到能够独立做一个物联网项目的水平。当然,期间还学会了版本控制工具git,看的是 「Pro Git」及 「git权威指南」。同时再进一步系统学习了STM32,看的书是野火的 「STM32库开发实战指南」,但看的视频却是正点原子的。这里强烈推荐正点原子的视频,真的是做的非常好。

     

    由于我是转行,我自知底子薄,起点比别人落后很多,因此我很刻苦学习。我就住在公司附近,公司8点上班,我依然6点起床,12点睡觉。平时没事的时候就在公司学习,看代码,写代码,调代码,甚至好几个周末也是在公司度过。为了转行我一心扑在了学习上,放弃了一切娱乐活动,只为能赶上同事一点半点。这个状态一直持续了我在这个公司的整个过程。

     

     

    新挑战

     

     

     

    可惜,一年之后我不得不离开了,因为我老婆在广州,我去广州追随我老婆了。由于我面试时的不错表现,以及我不错的英语口语,我顺利的被广州一家外资世界500强录用。我的新岗位是Linux应用开发工程师,使用C++开发。而在那时,我既不会Linux,也不会C++,所以公司敢录用我真的是勇气可嘉。

     

    从单片机到Linux又是一个比较大的跨度。Linux主要有三个方向:运维、应用、底层,而我选择的是应用方向。为了工作的需要,我必须先拿下C++。好在公司是外企,几乎不加班,于是我有充足的时间学习。可是,每天坐班车的时间加起来有三个小时,这么好的时间我不能浪费啊,于是,我买了个iPad,下载一套视频,在班车上也进行学习。当然,我也注意保护眼睛,在班车上绝不看书,看视频的时候也经常往窗外看看。

     

    这里讲讲自学过程中是采用看书还是看视频的方式。我采用的是先看视频再看书的方式。为什么要这样?因为我个人觉得,很多技术书都是很厚的一本,自己看下来要花费很多时间精力,而且很多知识点在工作中很少会用到,可以暂时先略过的。视频一般会比较短,一般是几天就能看完,而且老师一般只挑重点的讲。我们时间都很宝贵,我建议先把老师讲的知识完全掌握了以后,再利用书籍进一步扩展其它知识。但是,不管是看书还是看视频,一定要写代码,一定要写代码,一定要写代码,否则非常容易造成眼高手低!!

     

    我这家公司里我依然保持着早上6点起床,晚上11点睡觉的习惯。这样早上有1个小时,晚上3个小时,班车上3个小时,一天总共有7个小时可以用于学习。而周末我会睡个懒觉,7点起床,依然11点睡觉,周末几乎不出门,所以周末又有大量的时间可以用来学习。

     

    C++实在是太难了,我用了一个多月才将视频里的知识完全拿下来。之后,在工作中,陆续开始看「C++ Primer」 进一步巩固。其它书籍推荐:「Effective C++」,「C++语言的设计与演化」,「C++ 标准程序库」。在stackoverflow上有个C++必读书单,可以去看看。

     

    学完C++我再学习了Linux系统编程,同样采用的是先视频后书籍的方式进行。不管是视频还是书籍,一定要看最经典的。市面上有太多良莠不齐的视频和书籍,如果选择了一个质量不好的材料来看,不仅会浪费很多时间,而且有可能还会被误导。对于视频的选择,可以去各大培训机构,里面通常有一些免费视频资料供我们下载。

     

    对于Linux应用的学习,主要有六部分:1. 环境搭建;2. 基本操作;3. 系统编程;4. 网络编程;5. 数据库编程,6. Shell编程。下面一一详细介绍。

     

    1. 环境搭建

    作为Linux工程师,毋庸置疑一定需要Linux环境。对于Linux环境的获取,我们通常有两种方式:

    • 将电脑整体安装为Linux系统;

    • 在电脑里安装一个虚拟机,跑Linux电脑;

    • Window+Linux双系统。

    得到Linux环境后还不够,还要知道如何配置、如何远程连接Linux电脑、如何与Linux电脑互传文件、如何在主机上阅读Linux电脑中的代码,等等。

     

    2. 基本操作

    众所周知,Linux很少或几乎没有界面,所有的操作几乎都可以通过命令行来完成。对于运维人员来说,需要掌握相当大量的Linux命令。而对于应用、驱动方向的人员来说,只需掌握一些基本的常用的命令即可。对于这部分很多人建议看 「鸟哥的私房菜」 ,但我觉得这个更适合运维人员,我们无需掌握那么多命令。

     

    3. 系统编程

    在学系统编程之前,一定要先学习Makefile,这会为后续的学习提高很大效率。之后的系统编程,主要有几大块:IO编程、进程、线程、进程间通讯(包括管道、信号、信号量、共享内存等)。这几部分学完了,基本也就差不多了。

     

    4. 网络编程

    网络编程主要就是socket,poll,epoll,以及对TCP/IP的理解,同时要学会高并发式服务器的编写。

     

    5. 数据库编程

    数据库的内容其实并不属于Linux,但在项目中经常要用到。这部分主要要学会数据库的基本操作,以及如何写一套接口去操作数据库。

     

    6. Shell编程

    Shell是Linux下的脚本语言,功能虽然不如高级语言强大,但它可能做很多事,在某些场合甚至比高级语言要方便得多。当然除了Shell脚本,还有Python脚本。

     

    Linux应用编程书籍推荐:

    • UNIX环境高级编程。简称APUE,号称程序员的圣经。它不是一本API字典,它还讲述了很多操作系统的细节,内存,文件系统等方面,是一本难得的好书。但是它起点有点高,不适合初学者。

    • Linux程序设计。如果觉得APUE有点难入门的话,可以选择此书进行入门。

    • Unix/Linux系统编程手册。这本书号称是一本超越APUE的书,它是一本比较新的书,里面新增了APUE所没有的Linux/Unix新特性。而且对于一些概念性的东西讲的确实比APUE好。但至于能否超载APUE,还有待历史的考验。

    • UNIX 网络编程。也是一本非常经典的书,主要是网络编程方向的。

    • MySQL必知必会。本书在Amazon上长期排在数据库销售榜首,建议想快速了解数据库原理和MySQL的新手阅读。快餐性质,简洁明快,小开本,而且很薄,比较好阅读。

    • Linux Shell脚本攻略。这本书很薄很精华,它追求的不是全,而是精,所以用它来入门再适合不过了。

     

    学完以上六部分,基本就有能力完成Linux环境下的应用编程了。当然,在有些场合我们可能还需要用到Python脚本。像我公司的项目部分脚本就是用Python完成的。对于Python的入门,可以参考 「简明Python教程」。但如果想进一步提高的话,那就需要阅读大量书籍了。对于Linux层级的脚本应用,掌握一些基础的足够了。

     

    以上就是我的Linux应用开发自学之路,虽然我离高手还有很长的距离,但我还是将自己的这段自学经历分享出来,希望能够帮助朋友们少走一些弯路,同时也期待和高手一起学习、提高。好了,今天的分享就至此为止。

    ---------------

    我是良许,世界500强外企 Linux 开发工程师,专业生产 Linux 干货。欢迎关注我的公众号「良许Linux」,回复「1024」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。

     

     

     

     

    展开全文
  • 基于Linux开放实验平台的实现和应用.pdf
  • 本文介绍了国内外开放式数控系统的研究现状,}同述了RT-Linux操作系统的系统框架和原理,重点讨论了基于RT-Linux开放式数控系统的软件体系结构。
  • 百年教育职业培训中心/ 广东开放大学 终结性考核 参考资料 百年教育职业培训中心 编制
  • 基于Linux的源代码开放浏览器Linux在嵌入式系统中的应用正在迅速扩大,这意味着软件开发工程师必须弄懂如何将...
  • Linux主机开放指定端口

    千次阅读 2020-07-29 15:29:35
    有的时候会出现我们的应用程序在linux主机上已经正常启动了,但是本地还是无法连接访问。 出现这种情况的原因一般是如下两种: 主机的端口没有开放。 主机与本地之间的网络不通。 确定问题与解决问题 下面主要介绍...

    背景

    一般我们的项目开发完成之后,都会部署到相应的测试环境或者生产环境。有的时候会出现我们的应用程序在linux主机上已经正常启动了,但是本地还是无法连接访问。

    出现这种情况的原因一般是如下两种:

    1. 主机的端口没有开放。
    2. 主机与本地之间的网络不通。

    最简单粗暴的方法就是关闭防火墙,但是我们都知道防火墙对网络安全来说相当重要,为了安全性考虑,很多时候是不能关闭防火墙的。下面将介绍怎么去开放我们的网络端口。

    确定问题与解决问题

    下面主要介绍主机网络连通,端口不通的情况,这种情况需要我们到主机开放网络端口,具体操作操作如下。

    温馨提示:
    确保你的程序正常启动并使用了该端口,如果没有使用,即使开放了该端口,也是无法正常访问的。

    一、 主机端口不通之开放端口号

    测试命令1:telnet 10.19.83.194 90
    在这里插入图片描述
    测试命令2:ping10.19.83.194
    在这里插入图片描述
    根据以上两个截图的结果,我们可以知道主机网络是通的,但是端口不通。

    1.1 开放端口方法一(修改防火墙配置文件):

    // 编辑防火墙配置文件命令
     vi /etc/sysconfig/iptables
    
    // 在末尾加上自己指定的端口
    // -m state --state NEW 这个条件是当connection的状态为初始连接(NEW)时候的策略
     -A INPUT -m state --state NEW -m tcp -p tcp --dport 90 -j ACCEPT
    
    // 清除以前配置
     iptables -F 
    
    // 重启防火墙
     systemctl restart iptables.service
    

    在这里插入图片描述
    在我们开放端口之后,就能够正常访问了,如下图。
    在这里插入图片描述

    1.2 开放端口方法二(命令方式):

     // 开放端口命令
     firewall-cmd --zone=public --add-port=28080/tcp --permanent
     // 或者
     /sbin/iptables -I INPUT -p tcp --dport 28080 -j ACCEPT
    
     // 重启防火墙命令
     systemctl restart firewalld.service
    

    参数解释:

    1. zone=public 作用域
    2. add-port=28080/tcp 添加的端口,格式为:端口/通讯协议
    3. permanent 永久生效,没有此参数则重启后失效

    如下图则为开放成功
    在这里插入图片描述

    二、 主机网络不通的情况

    想要判断两个环境的网络是否连通,其实也很简单,使用 ping 命令测试一下是否能正常ping通。
    命令格式:ping IP
    测试案例:ping 10.19.83.194

    结论:

    出现如下图所示,数据包正常发送接收,没有丢失,说明我本地与该测试主机网络是没问题的。
    在这里插入图片描述
    如果数据包丢失或者超时,说明网络是不通的,这种情况先核查一下IP地址是否有误。确定无误之后需要进一步检测网络环境;如果是在项目中遇到网络不通情况,则需要想上级申请打通网络策略。
    在这里插入图片描述

    ================================== 底线 =======================================

    展开全文
  • Linux 内核分析及应用

    千次阅读 2018-11-06 11:55:57
    同时,对诸多经典应用程序进行了剖析,如 Nginx、Memcached、Redis、LVS 等,讲解如何利用操作系统提供的底层支持进行合理的应用设计和实现。 内容简介 本书由架构师亲力打造,分享了他十多年后端开发经验,特别是...

    编辑推荐

    本书分模块介绍了 Linux 操作系统的内核设计和实现,针对关键概念、算法和数据结构做了重点的讲解。同时,对诸多经典应用程序进行了剖析,如 Nginx、Memcached、Redis、LVS 等,讲解如何利用操作系统提供的底层支持进行合理的应用设计和实现。

    内容简介

    本书由架构师亲力打造,分享了他十多年后端开发经验,特别是围绕 Linux 系统进行的服务开发经验。

    本书共8章,主要内容包括:

    • 第1章介绍 Linux 对进程和线程的实现原理,并分析了 Memcached 和 Nginx 工作进程池模型的实现;
    • 第2章介绍并发的概念以及 Linux 中的并发相关工具,然后分析常见开源软件的并发问题;
    • 第3章介绍 Linux 是如何进行内存管理的,分析了 Memcached 和 Redis 的内存管理机制;
    • 第4章介绍 Linux 系统对中断进行的封装和实现;
    • 第5章介绍 I/O 的全过程,以及某些开源系统中 I/O 相关调用的实现等;
    • 第6章介绍 Linux 文件系统的整体架构及核心概念,然后介绍 ext4 文件系统的特点,以及 TFS 小文件系统的设计思路;
    • 第7章介绍 Linux 进程隔离技术,以及 Docker 容器的部分实现;
    • 第8章介绍 Linux 网络层数据的流转过程,以及 lvs 如何在 netfilter 上定制,后分析了 Nginx 服务器 socket 监听初始化的过程。

    作者简介

    陈科,曾在阿里巴巴等多家互联网公司担任架构师、技术总监等职位,参与设计和开发了多个应对高并发、高可用的互联网系统,对 Linux 系统以及围绕 Linux 生态体系的开源软件有深入研究,热爱分享,在 UPYUN、DBA+、高可用架构群等组织的会议或者讨论组中做过专题分享。

    本书内容

    对本书的赞誉

    本书在分析 Linux 进程、并发、内存、中断、IO、网络的同时,还分析了目前大家熟知的 Nginx、Memcached、Redis、LVS 等知名开源软件,理论结合实践,让人受益匪浅。特别是结合了容器化技术的分析,让读者从底层了解容器化(Docker)的基本原理,在容器化火热的今天,不得不说作者特别贴心。这是一本开发人员、架构师都值得一看的增强内功的书。

    ——许泽彬,淘宝技术专家


    经过20多年的发展,Linux 已经成为互联网技术的基石之一。虽然关于 Linux 的书籍众多,但几乎是现代操作系统理念的介绍,或者在此之上结合 Linux 源码加以分析,从而使读者了解操作系统的演变和实现。本书的内容更贴合互联网时代,让读者重温 Linux 之外,作者更希望引发大家思考操作系统的魅力。每一章不仅介绍核心理念和实现,而且还带领大家拓展技术的延展性,重新思考 Nginx、Redis、LVS 等产品的技术发展脉络。饮水思源,思考技术的延展性的书籍少之又,本书是难得佳品。

    ——杨翔,广东三维家信息科技有限公司 CTO、前蚂蚁金服高级技术专家


    本书的作者是我多年的老友,其对技术的兴趣与钻研精神令我非常敬佩。本书很好地将 Linux 内核与现今流行的重要技术相结合,阐述了很多技巧,然而最令我欣赏的是作者对“知其然,知其所以然”的实践与布道。技巧可以让人即刻受益,然而在“思想”就显得渺小了,领悟了技术思想将使人终身受益!我们也看到很多老鸟们在会耍十八般武艺后,遇到了发展和晋升的瓶颈,归根到底是缺乏这种思想和实践。本书以实战的方式演绎了如何去“知其然”,更示范了如何去“知其所以然”,就如同名家教你如何临摹名画,引人入胜,发人深省。

    ——胡志强,前马云公益基金会平台总经理,阿里巴巴技术总监


    IT 大时代,技术浪潮席卷整个人类社会。作为一名程序员或者架构师,每天会面对纷繁的技术领域与挑战,掌握扎实的操作系统、数据结构与算法、编译原理、数学知识,是最基础、最重要的,直接决定个人职业生涯的未来。我与本书作者认识多年且有机会一同共事,一直以来对其深厚的技术底蕴、孜孜不倦的技术钻研,甚为佩服!本书对 Linux 内核源代码的分析深入浅出,娓娓道来,涵盖了 Linux 内核的各个重要方面,并且涉及目前业界热门的容器与虚拟化技术,如果读者能够沿着本书的脉络,结合 Linux 源代码阅读,一定能够开卷有益,收获良多!

    ——冯黎,前华为软件开放平台架构师


    对于从事 Linux 平台的开发者来说,了解 Linux 内核尤为重要,它不仅可以使我们对 Linux 更加了解,而且使我们分析问题会更加深入本质。本书从 Linux 内核分析到实际应用,结合 Nginx、Redis、Memcached 等常用应用的实际问题进行详尽的分析,特别是对于一些关键技术点,作者都给予了深入的剖析和评价,对于从事 Linux 平台的开发者来说本书无疑是一次知识盛宴。

    ——刘晓飞,前58同城首席架构师,技术总监


    设计和实现一款优秀的操作系统内核或者应用程序充满了挑战,也正因为如此,深入理解 Linux 内核以及运行在 Linux 内核之上的具有代表性的应用程序就显得非常有意义。我与本书作者陈科相识已久,见证了他多年战斗在一线,有着丰富的企业级系统架构经验。本书分模块介绍了 Linux 操作系统的内核设计和实现,针对关键概念、算法和数据结构做了重点的讲解;并结合诸多经典应用程序解析了如何利用操作系统提供的底层支持进行合理的设计和实现。Linux 是一个庞大且伟大的工程,如果你不满足于站在巨人的肩膀上,想要知其所以然,提升自己面对未知问题时的“迁移学习”能力,那么本书将是一个很好的起点。

    ——郁佳杰,贝贝网 CTO


    现在是一个 IOT 正在兴起的时代,我们的编程视角不断地放大,从普通的 PC 机到人手一部的智能机,再到各式各样的终端设备,这样的高速成长离不开底层的操作系统升级。以毫不夸张地说,Linux 系统占据了绝对的重要地位,我们任何的系统设计和架构最后都可以追溯到系统内核中。

    阿里巴巴最近10年在技术上突飞猛进,某种程度上正是得益于对 Linux 系统底层的深度定制和使用,这才能研发出一系列的中间件和云产品,支撑着 N 个双11。

    我和本书作者陈科认识好多年,每一次的交流我都能吸收到更多的技术灵感,我认为这正是本书能够带来的价值。掌握内核之后,理解和认识任何其他技术简直是不费吹灰之力。很多人会觉得研究内核没有用处,其实我们经常讲的高并发、多线程等,正是 Linux 赋予我们的能力。

    我已经要沉浸在这本书的乐趣中了,相信这本书可以让大家能够更快地掌握和理解 Linux 精髓,这是一件非常伟大的贡献!

    ——焦英俊,未达科技创始人,前阿里巴巴中文站首席架构师,技术总监


    本书作者拥有丰富的架构工作经验,是以架构师身份在学习、实践 Linux 的过程中总结出来的产物。本书内容涵盖了 Linux 重要概念的分析过程,引导读者一步步进入到 Linux 源码的世界,对刚接触 Linux 的工程师很有指导价值。

    ——金立,河狸家技术 VP


    在工程化领域,已有足够多的开源产品和组件,让我们快速搭建产品应用,然而产品质量、架构和运维的好坏,取决于我们开发人员对更多细节和实现原理的掌握,这又关乎自身的成长和发展。本书每个章节基本上是从问什么、什么是,开始介绍基本概念和实现机制,然后以常见开源产品的场景和案例进行问题分析,既适合于初级开发人员,又适合架构师和多年经验的老鸟。我与本书作者相识多年,他对技术的热情和“知其所以然”的钻研精神一直令我敬佩,本书结合了作者自身多年的实战经验,带着大家进行“知其然”的实践和思考,非常值得一读。

    ——张晓科,顶象科技风控技术负责人,前阿里巴巴风控技术专家


    编程如同写诗,程序员用一种精巧设计的“符号”输送给计算机,从而构建着这个信息世界;计算机是对空间和时间的形式化描述,是对描述性知识的精确表达;更形象地说计算机通过“符号”形式化的表述指令的计算过程。对计算机系统的本质进行挖掘,是我们提高技艺和兴趣所在,本书最大的特点就是以应用层和 Linux 内核的运行机制相结合的方式,站在程序应用的视角深入内核这个奇妙的世界,读来有一种醍醐灌顶的畅快感。

    ——徐兆朋,爱财科技集团技术负责人


    在互联网飞速发展的20年,新兴技术层出不穷,但是大道之间,以不变应万变。作为技术人员,大部分编写的软件都是运行在操作系统之上的,尤其是运行在 Linux 操作系统上。不管你是业务程序员还是底层中间件程序员,掌握好 Linux 内核都大有裨益。本书从实战角度出发,对 Linux 的实现进行剖析,推荐所有有志于成为系统架构师的技术人员阅读。

    ——郭秀军,吉利集团曹操专车 CTO


    Linux 诞生二十多年,已经成为开源运动的代名词,吸收了全世界优秀程序员的精华。我印象中的本书作者陈科是 Linux 的狂热分子,十年前我刚认识陈科,他就在钻研 Linux 源码,在阿里期间经常搞一些内部分享,攒了不少粉丝。本书沉淀了陈科这些年对 Linux 系统的从全局纵览到局部设计的深入理解,不同于市面上常见的 Linux 源码介绍书籍,本书不仅仅是讲解代码实现,更是对一些精妙的设计理念做了剖析,相信一定能让读者受益匪浅。

    ——大少,阿里巴巴集团研究员,天猫首席架构师

    前言

    随着计算机技术的发展,开发人员想要根据业务需求写出相关实现代码还是比较容易的,因为已经有了很多工具、组件、库等可帮助我们实现功能。开发人员很少会自己裸写代码,不会从底层到上层全部由自己来实现。于是,很多开发人员一旦遇到程序出现问题就会茫然失措,不知道该如何处理,甚至故障诊断和分析都成了一门高深的技术难题。

    我们做任何一件事情都应该知其然,并知其所以然。操作系统是计算机的基础,所有的应用程序都是运行在操作系统之上的,所以,不管开发人员使用什么语言,开发什么行业的应用,都应该了解操作系统的原理与实现细节。

    本人因为长期从事系统架构相关的工作,在涉及一些中间件或者基础组件的研发工作过程中,经常会与操作系统打交道,特别是 Linux 内核。我个人认为,所有应用开发人员都应该了解操作系统的实现原理和思路。Linux 是人类工程史上的一个奇迹(那么大的工程,那么多人在网络上维护,能保持那么高的可用性),Linux 内核作为一个开放源码的工程,在很多方面值得我们学习和借鉴。其实在工程领域,很多问题的解题思路是类似的,掌握内核的实现,对于我们更好地编写高性能、高可靠性的程序有很大帮助,也更加利于千里定位故障,秒杀 Bug。

    Linux 体系结构

    操作系统是所有应用程序生长的河床,它帮我们屏蔽各种硬件的细节,并且抽象出各种系统调用供应用开发人员来使用。

    下面来介绍一下本书将要介绍的 Linux 内核的体系结构(图1),以便于后续章节展开分析。

    图1 Linux 内核的体系结构

    整个 Linux 内核可以分为4层:

    • 驱动管理层,驱动并管理外部一些硬件设备,例如磁盘、网卡等。

    • 工具层,内核抽象出一些通用组件便于自己使用,例如并发管理中的一些锁、per-cpu 变量等工具,另外还有中断机制,也给进程管理、信号处理等提供了基础功能。

    • 系统能力层,操作系统的功能包括进程管理、内存管理、文件系统、I/O 管理、网络等,这些功能都是基于工具层和驱动管理层提供的能力来构建的。

    • 系统调用接口层(syscall),给应用程序开发人员提供相关接口。因为系统调用的使用成本较高,参数也比较多,需要对内核有较多了解,所以,又抽象出一些 libc 等库函数来封装系统调用,应用开发人员一般都是通过 libc 等库来与内核打交道的。

    推荐预备知识

    理论上说,只需具备一门编程语言的开发基础就能阅读本书,不过,为了更好地研究操作系统,我推荐大家先阅读下面的书籍:

    • 《80x86汇编语言程序设计》(沈美明等),与 CPU 打交道最好的方式还是汇编语言,另外,了解汇编语言也方便更好地掌握计算机体系结构,进而深入理解系统的工作原理。

    • 《Intel 开发手册卷3》,Intel 公司的开发手册,可以让读者了解 CPU 的工作原理、基本指令集等。CPU 相关的功能也是内核最为重要的部分之一。

    • 《自己动手编写操作系统》(于渊),该书通过编写一个简易系统,让读者更加了解硬件的工作原理。

    • 《Linux 内核完全注释》(v0.11)(赵炯),通过对0.11版本的 Linux 学习,可以了解早期的内核架构,这对学习新版本内核也有很大的帮助。

    • 《软件调试的艺术》(马特洛夫),作为一名程序员,掌握基本的调试技能是必须的。

    • 《程序员的自我修养:链接、装载与库》(潘爱民等),这本书有助于掌握编译、链接的原理,对了解操作系统编译、运行以及应用程序的装载原理有很大帮助。

    当然,掌握 C 语言也是必须的,毕竟 Linux 内核是用 C 语言开发的,如果是 C 语言新手,可以先阅读 Memcached 的源码,因为作者的代码写得比较清晰,易于理解,初学者都可以轻松上手。

    本书章节概述

    由于篇幅有限,本书并没有详细介绍 Linux 内核的所有知识点,比如系统的启动过程,虽然对于一个内核的实现来讲,系统启动是非常重要的,但本书考虑的场景都是围绕系统启动之后提供的功能来展开的,所以本书没有包括这部分内容。

    本书共分为8章,分别介绍 Linux 操作系统的各个模块。对于 Linux 内核来讲,各个模块之间虽然都是紧密结合的,但是从系统领域模型的角度,每一章都可以独立展开,读者既可以从头开始阅读,也可以选择自己感兴趣的章节进行学习。

    第1章介绍进程和线程的概念、历史、实现原理、应用场景等,然后介绍 Linux 对进程和线程的实现,以及调度的机制、进程 CPU 亲和度等,并分析了 Memcached 线程池模型和 Nginx 工作进程池模型的实现,最后介绍了进程调试分析监控等工具的用法,包括 gdb、coredump、strace、SystemTap、DTrace 等调试工具。

    第2章介绍并发的概念及其引发的相关问题,接着介绍操作系会在哪些场景遇到并发,进而分析 Linux 中的并发相关工具,如 atomicspin_lock、semaphore、mutex、读写锁、per-cpu、抢占、内存屏障、RCU 机制,最后介绍常见开源软件中的并发问题分析,如 Nginx 的原子性、Memcached 的互斥锁、Linux 中惊群问题分析、解决 MyCat 中的同步问题、伪共享问题解决方案等。

    第3章首先介绍内存在体系结构中的作用,以及在使用中会遇到什么问题,接着介绍 MMU 的内存管理机制、线性地址、物理地址、虚拟地址等。接下来分析 Linux 是如何进行内存管理的,包括整体架构以及伙伴算法、slab 分配器、kmalloc、vmalloc、mallc 等。Linux 栈内存如何分配,对于内核栈和线程栈 Linux 又是如何区分和管理的。最后介绍了 Memcached 和 Redis 是如何管理内存的。

    第4章首先介绍 x86 系统的中断机制,以及为什么要引入中断机制,接着介绍 Linux 系统如何对中断机制进行封装和实现,并且介绍为加速中断的处理过程,Linux 引入的机制,如软中断、tasklet、工作队列等,最后介绍系统调用、时钟中断、信号处理机制等实现方式。

    第5章阐述了 I/O 在计算机体系结构中的重要性,以及 I/O 产生的全过程,还介绍 I/O 调度器和多队列机制。最后介绍一些开源系统和操作系统中 I/O 相关调用的实现,比如:I/O 多路复用 epoll 调用、Redis 对 epoll 的封装、Nginx 读文件异步 I/O、零拷贝技术,主要围绕 mmap 和 sendfile 的比对以及 Mongodb、Kafka 对零拷贝技术的使用等。

    第6章以 vfs 为切入点,介绍 Linux 文件系统的整体架构以及文件系统的核心概念,并且介绍文件系统的主要功能:如安装、文件查找、读写等,简单介绍 ext4 文件系统,最后介绍 TFS 小文件系统的设计思路。

    第7章介绍 Intel VT 的硬件虚拟化技术,以及 Linux KVM 模块等虚拟化技术,然后介绍 chroot、namespace、cgroup 等容器虚拟化底层技术在 Linux 上的实现,最后,着重分析新版 Docker 容器拆分后,容器化模块 containerd 的实现。

    第8章围绕数据如何在 Linux 网络层流转来介绍 Linux 网络层的控制机制,首先简单介绍 lvs 如何在 netfilter 上进行定制,最后介绍 Nginx 服务器 socket 监听初始化的过程。

    本书精选了大量案例,相关代码可以下载,地址为 https://github.com/lingq1818/analysis_linux,其中包括本书使用的 Linux 内核源代码。

    致谢

    感谢我曾经的同事和领导们:庄涛、胡志强、何崚、吴国庆、刘晓飞、陈洁梅、郭秀军,等等,是你们对我工作的帮助和支持,才让我有机会深入了解 Linux 并有了总结思路。感谢吴怡编辑的辛勤工作和不断督促,让本书的出版成为可能。同时还要感谢许多我不知道名字的幕后工作人员为本书付出的努力。

    最后,感谢我的家人,是你们默默地支持和付出,才能让我在工作上不断前进,你们的爱永远是我前进的动力。

    第1章 进程与线程(上)
    第1章 进程与线程(下)
    第2章 并发(上)
    第2章 并发(下)
    第3章 内存管理(上)
    第3章 内存管理(下)
    第4章 中断机制
    第5章 输入输出(上)
    第5章 输入输出(下)
    第6章 文件系统
    第7章 Linux 的进程隔离技术与 Docker 容器
    第8章 Linux 网络层数据流分析(上)
    第8章 Linux 网络层数据流分析(下)

    阅读全文: http://gitbook.cn/gitchat/geekbook/5bd685c98b3f803a63efa052

    展开全文
  • 在线开放课程的建设与混合式教学模式改革——以《嵌入式Linux应用与开发》课程为例.pdf
  • 基于RT-Linux开放式五轴联动电火花加工数控系统及其在带冠涡轮盘加工中的应用.pdf
  • linux应用

    千次阅读 2021-02-08 16:03:47
    Linux操作系统从第一个内核诞生到现在,其开放、安全、稳定的特性得到了越来越多用户的认可,其自由软件的低成本、安全性,促使各国政府纷纷对Linux采取了强有力的支持。具体而言,目前 Linux应用主要包括以下几...

    Linux操作系统从第一个内核诞生到现在,其开放、安全、稳定的特性得到了越来越多用户的认可,其自由软件的低成本、安全性,促使各国政府纷纷对Linux采取了强有力的支持。具体而言,目前 Linux 的应用主要包括以下几种。

    imgLinux操作系统

    1.服务器系统

    Linux因为价格低廉、灵活性好,现在使用最广泛的领域就是服务器操作系统。现在以 Linux为基础的LAMP(Linux、Apache、MySQL、Perl/PHP/Python的组合)技术,除了已在开发者群体中广泛流行,也是网站服务供应商最常使用的平台。

    2.桌面系统

    新版本的Linux系统特别在桌面应用方面进行了改进,达到相当高的水平,完全可以作为一种集办公应用、多媒体应用、网络应用等多方面功能于一体的图形界面操作系统。更重要的是,这样的桌面系统可以免费使用。

    3.嵌入式系统

    可能很多人没有想到,现在很多移动设备也采用基于 Linux 的嵌入式系统,例如机项盒、移动电话及移动设备等。由于 Linux 的内核是完全公开的,所以基于 Linux 的嵌入式系统研发成本大大降低,而且不受其他非人为因素的干扰。

    4.电子政务

    随着众多IT知名厂商对Linux软件态度的转变,Linux正在成为一股可以与Windows 抗衡的重要力量。而它在安全性方面的独特优势,又使得 Linux 在政府应用领域大行其道。目前一些国家正在将其电子政务系统向 Linux平台迁移。这些重要举措是:成立Linux 软件标准工作组、建立国家Linux 公共服务平台体系和出台软件政府采购管理办法,如红旗Linux已经获得认可。

    通过以上小编对于Linux系统应用领域的介绍,相信大家对于Linux也有很深的了解。

    以上就是良许教程网为各位朋友分享的Linux相关知识。

    展开全文
  • Linux关闭防火墙 / 开放端口

    千次阅读 2020-07-05 13:05:43
    Linux常用的JDK / Tomcat / Nginx软件安装已经安装后无法访问的问题,是由于Linux防火墙开启禁用了端口,那么需要解决的问题就是端口开放或者关闭防火墙。本问题将介绍CentOS 6 以及CentOS 7的解决方案。
  • Wine 是一个令人神往而且目标远大的开放源代码项目,它尝试去解决在 Linux 上运行 Windows 可执行文件的复杂问题。尽管 Wine 不是一个新项目,但是,人们对 Linux 桌面的期望以及对 Linux 应用程序的需求日益增加,...
  • linux查看并设置开放端口

    万次阅读 2018-12-13 16:34:03
    linux 查看并对外开放端口(防火墙拦截处理) 查看端口是否可访问:telnet ip 端口号 (如本机的35465:telnet localhost 35465) 开放的端口位于/etc/sysconfig/iptables中 查看时通过 more /etc/...
  • 这是一份对初学者很有帮助的源代码笔记,大概罗列了整个代码框架的功能示意描述,包括一些作者阅读后的笔记...并没有很系统的对整个程序框架进行梳理,不过对初步接触LinuxCNC的人来说,这个也是一份不错的阅读指引了。
  • linux命令查看开放哪些端口

    千次阅读 2020-12-20 09:21:23
    a 表示所有n 表示不查询dnst 表示tcp协议u 表示udp协议p 表示查询占用的程序l 表示查询正在监听的程序netstat -nupl | grep 3306#这个表示查找处于监听状态的,端口号为3306的进程Linux查看端口使用状态、关闭端口...
  • 我们很多时候在liunx系统上安装了web服务应用后(如tomcat、apache等),需要让其它电脑能访问到该应用,而linux系统(centos、redhat等)的防火墙是默认只对外开放了22端口。  linux系统的端口设置在/etc/...
  • 基于ARM的嵌入式Linux应用程序开发

    千次阅读 2017-02-09 16:36:44
    而嵌入式Linux系统也蓬勃发展,不仅继承了Linux源码开放、内核稳定高效、软件丰富等优势,还具备支持广泛处理器结构和硬件平台、占有空间小、成本低廉、结构紧凑等特点。 1 ARM处理器及开发板  在嵌入式领域,...
  • 1.8 练习题一、填空题1.GUN的含义是。2.Linux一般有3个主要部分:、、。...6.POSIX是的缩写,重点在规范核心与应用程序之间的接口,这是由美国电气与电子工程师学会(IEEE)所发布的一项标准。7.当前的...
  • 《嵌入式Linux应用程序开发标准教程》下载12章

    千次下载 热门讨论 2014-09-23 10:12:25
    华清远见嵌入式培训教材!《嵌入式Linux应用程序开发标准教程》完整版PDF,共12章。
  • Linux的主要应用领域有哪些?

    千次阅读 2021-07-17 22:47:25
    Linux操作系统主要有以下三大应用...由于Linux系统开放源代码,功能强大、可靠、稳定性强、灵活而且具有极大的伸缩性,再加上它广泛支持大量的微处理体系结构、硬件设备、图形支持和通信协议,因此,在嵌入式应用的领
  • linux如何查看某个端口是否开放

    千次阅读 2021-05-14 11:33:29
    1.你可以使用 lsof 命令来查看某一端口是否开放。查看端口可以这样来使用,我就以80端口为例:lsof -i:80或者lsof -i:22如果有显示说明已经开放了,如果没有显示说明没有开放2.netstat -aptn执行看看,是否监听在0.0...
  • 我们很多时候在liunx系统上安装了web服务应用后(如tomcat、apache等),需要让其它电脑能访问到该应用,而linux系统(centos、redhat等)的防火墙是默认只对外开放了22端口。  linux系统的端口设置在/etc/...
  • Linux应用在哪些领域?发展如何?

    万次阅读 2018-04-23 20:18:36
    但与Windows不同的是,Linux是一套开放源代码程序的,并可以自由传播的类UNIX操作系统软件,随着信息技术的更新变化,Linux应用领域已趋于广泛, 1、IT服务器Linux系统应用领域 如今的IT服务器领域是Linux、UNIX、...
  • Linux操作系统应用领域详解

    千次阅读 2018-07-12 18:13:14
    常用的IT服务器有Linux、Unix和Windows...Linux操作系统主要有以下三大应用领域: 1. Linux作为企业级服务器的应用Linux系统可以为企业架构WWW服务器、数据库服务器、负载均衡服务器、邮件服务器、DNS服务器、代理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 173,373
精华内容 69,349
热门标签
关键字:

linux应用开放

linux 订阅