Linux网络程序设计 基于龙芯平台

978-7-115-62897-8
作者: 赵洪 李兆斌 魏占祯
译者:
编辑: 赵祥妮

图书目录:

详情

本书着重阐述基于龙芯平台(龙芯CPU和Loongnix操作系统)的网络程序开发。本书首先介绍龙芯平台下的C语言编译工具链,包括Loongnix操作系统的安装、Loongnix操作系统的基本使用方法、Loongnix操作系统中C语言的编程工具和代码管理工具Git;然后介绍在龙芯平台上基于编译工具链编写网络程序的相关知识,包括网络程序的基本原理,套接字应用程序接口的基本使用方法,多线程、多进程和I/O复用网络程序的编程方法,原始套接字的编程方法;最后通过一个综合性的网络软件项目案例,介绍使用Qt编写图形界面的网络程序的基本方法。   本书适合作为应用型普通高校的电子信息类专业、计算机科学与技术等专业的教材,也可作为高职院校相关专业的扩展教材。自主信息技术领域的相关技术人员也可将本书用作网络程序开发的参考资料。

图书摘要

版权信息

书名:Linux网络程序设计 基于龙芯平台

ISBN:978-7-115-62897-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

编  著 赵 洪  李兆斌  魏占祯

责任编辑 赵祥妮

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

本书着重阐述基于龙芯平台(龙芯CPU和Loongnix操作系统)的网络程序开发。本书首先介绍龙芯平台下的C语言编译工具链,包括Loongnix操作系统的安装、Loongnix操作系统的基本使用方法、Loongnix操作系统中C语言的编程工具和代码管理工具Git;然后介绍在龙芯平台上基于编译工具链编写网络程序的相关知识,包括网络程序的基本原理,套接字应用程序接口的基本使用方法,多线程、多进程和I/O复用网络程序的编程方法,原始套接字的编程方法;最后通过一个综合性的网络软件项目案例,介绍使用Qt编写图形界面的网络程序的基本方法。

本书适合作为应用型普通高校的电子信息类专业、计算机科学与技术等专业的教材,也可作为高职院校相关专业的扩展教材。自主信息技术领域的相关技术人员也可将本书用作网络程序开发的参考资料。

前  言

随着自主信息技术应用规模的不断扩大,培养熟练掌握相关技术的高水平人才成为当务之急,这对各高校信息技术人才的培养提出了新要求。目前,自主信息技术的相关教材还比较缺乏,这不利于相关人才的培养。

龙芯CPU及操作系统是自主信息技术的重要组成部分,已经在服务器、个人计算机、嵌入式系统领域得到广泛应用。本书的核心内容是介绍如何在龙芯操作系统Loongnix中编写网络程序,让读者既能学习TCP/IP网络程序设计的相关知识,又能掌握国产整机和操作系统的相关使用技能。

本书在讲解内容时力求浅显易懂,绝大部分的示例代码都是使用C语言编写的,读者只需具备C语言编程基础就可以学习本书。本书注重以实际项目中使用的方法来编写和管理源代码,比如组织多文件的源代码,以库的方式联合开发、管理代码版本,参与开源项目等。通过本书的学习,读者能够从一个编程语言的初学者,升级成为能够参与公司项目或某个开源项目的开发者。

本书提供了丰富的案例,每个案例都经过精心设计,力求以清晰的代码和详细的讲解来展示网络程序设计的原理和实现方式。通过这些案例,读者可以逐步建立起设计网络程序的信心,掌握解决问题的方法,从而在实际项目中更加自如地应用所学技能。

由衷希望本书能够成为读者学习网络程序设计和自主信息技术的良师益友,能够为读者打开自主创新之门,让读者在学习网络程序设计的旅程中快速成长,为推进我国自主信息技术体系的建设贡献一份力量。

由于编者水平所限,加之自主信息技术发展迅速,书中难免有不足之处,恳请广大读者批评指正。

资源与支持

资源获取

本书提供如下资源:

PPT

教学讲义

要获得以上资源,您可以扫描下方二维码,根据指引领取。本书源代码下载请访问https://gitee.com/zflood/net_code_demo。

提交勘误

虽然作者和编辑已尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,点击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误进行审核,若勘误被确认并接受,那么您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您对图书出版、教学视频录制、图书翻译、技术审校等工作有兴趣,也可以发邮件联系我们。

如果您所在的学校、培训机构或企业需要批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将疑似有侵权行为的链接以邮件的形式发给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

异步社区”(www.epubit.com)是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域30余年的发展与积淀。异步图书面向IT行业以及各行业使用IT技术的用户。

第1章 信创平台概述

1.1 信创CPU简介

中央处理器(Central Processing Unit,CPU)是信息产业中最基础的核心部件之一。指令集是计算机程序执行的基础单元功能集,是CPU产品生态体系的“基石”,可以分为复杂指令集和精简指令集两大类。其中,复杂指令集指令丰富,寻址方式灵活,以微程序控制器为核心,指令长度可变,功能强大,复杂程序执行效率高;精简指令集指令结构简单,易于设计,能够提高CPU的能效比。在现行的主流指令集架构中,x86架构是复杂指令集的代表,而ARM架构、MIPS架构和Alpha架构等是精简指令集的代表。

CPU是支撑数字底座生态架构发展的基础,负责为整个计算机体系提供算力支撑,可通过与上层的操作系统紧密配合,实现软硬件的基础调度、控制与资源支持,是整个信创体系的“大脑”,也是决定信创底层发展逻辑的关键,更是我国软硬件实现自主可控的根本。

目前信创CPU有六大主流厂商:龙芯、飞腾、鲲鹏、海光、申威、兆芯。从指令集的角度看,主要可以分为以下3类。

① IP内核授权:以兆芯为代表,获得的是x86内核层级的授权,可基于指令集系统进行单片系统(System on Chip,SoC)集成设计,具备良好的生态和性能起点。

② 指令集架构授权:以海光为代表,获得的是x86架构授权;以鲲鹏和飞腾为代表,获得的是ARM架构授权,可基于指令集架构进行核心CPU设计,安全可控程度较高。

③ 指令集架构授权+自研:以龙芯和申威为代表,分别获得的是MIPS架构和Alpha架构授权,并进行了自主研发,形成自有的指令集架构,安全可控程度非常高。龙芯中科技术股份有限公司(简称龙芯)已经推出自主指令系统龙架构(LoongArch),成为底层自主化程度非常高的信创CPU厂商。

1.1.1 龙芯CPU

龙芯在指令系统上实现了自主创新。2020年,龙芯推出了自主指令系统LoongArch。2021年7月初,公司信息化业务已经转向基于龙芯自主指令系统LoongArch的3A5000系列处理器,工控业务也开始转向基于LoongArch的系列处理器的研发。2023年,高性能CPU龙芯3A6000开始交付流片并发布。作为数字经济产业底层技术生态首个完全自主的芯片产品,龙芯3A6000对我国自主设计CPU具有重要意义。

龙芯研制的芯片包括龙芯一号、龙芯二号、龙芯三号三大系列处理器芯片及桥片等配套芯片。

① 龙芯一号系列:低功耗、低成本的专用嵌入式SoC或微控制单元(Microcontroller Unit,MCU),通常集成1个32位低功耗处理器核心,用于物联网终端、仪器设备、数据采集等嵌入式专用领域。

② 龙芯二号系列:低功耗通用处理器芯片,采用单芯片SoC设计,通常集成1~4个64位低功耗处理器核心,用于工业控制领域和终端等设备,如网络设备、行业终端、智能制造等。

③ 龙芯三号系列:高性能通用处理器芯片,通常集成4个及以上64位高性能处理器核心,与桥片配套使用,用于桌面和服务器等信息化领域。

④ 配套芯片:包括桥片及正在研发、尚未实现销售的电源芯片、时钟芯片等,其中桥片主要与龙芯三号系列处理器芯片配套使用和销售,电源芯片和时钟芯片主要与龙芯二号、龙芯三号系列处理器配套使用。龙芯一号、龙芯二号、龙芯三号系列处理器芯片及配套芯片的主要客户是板卡厂商、整机厂商。

1.1.2 其他信创CPU

鲲鹏CPU是华为自主研发的一款处理器,基于Armv8架构。它获得指令集架构授权,并且处理器核心、微架构和芯片均由华为自主设计,具有较高的自主化程度。鲲鹏CPU在兼容性方面没有指令翻译环节,可以直接运行ARM架构的应用软件,无须进行指令转换。这意味着它在运行过程中没有性能损失,可以充分发挥ARM架构的性能优势。

海光CPU主要通过超威半导体公司(Advanced Micro Devices,AMD)获得了Zen1架构和x86架构的永久使用权,兼容x86架构,性能与国际同类型主流处理器产品相当,支持国内外主流操作系统、数据库、虚拟化平台或云计算平台,能够有效兼容目前存在的数百万款基于x86架构的系统软件和应用软件,具有生态系统优势。此外,海光CPU支持国密算法,扩充了安全算法指令,集成了安全算法专用加速电路,支持可信计算,提升了安全性。

飞腾CPU基于Armv8架构,获得指令集架构授权,芯片产品主要分为高性能服务器芯片、桌面芯片和高端嵌入式芯片。飞腾桌面芯片采用自主研发的高能效处理器核心,芯片性能卓越、功耗适度,最新产品内置硬件级安全机制,能够同时满足信息化领域对性能、能耗比和安全性的应用需求。

兆芯CPU是一种基于x86架构的处理器,具备x86架构授权。兆芯通过合资公司获得了x86架构授权。这使得兆芯在x86生态方面具有一定的优势。

申威CPU是由国家高性能集成电路(上海)设计中心(简称上海高集中心)研制的处理器,其设计基于美国数字设备公司(Digital Equipment Corporation,DEC)的Alpha架构。申威CPU在Alpha架构的基础上进行了指令集扩展和微结构的自主创新,以满足特定需求和提高性能。申威CPU成功应用在国产超级计算机中,标志着中国在高性能计算领域的自主研发和创新能力的提升。

1.2 Linux及信创操作系统

1.2.1 Linux操作系统简介

Linux是一个自由开放源代码的类UNIX操作系统,最初由林纳斯·托瓦尔兹(Linus Torvalds)和众多爱好者共同开发完成。它的内核(Linux内核)是其核心组成部分,完整的Linux操作系统是由Linux内核及各种软件、工具和数据库(如GNU工具链)组成的。

虽然严格来说,Linux操作系统只指代Linux内核,但习惯上人们将基于Linux内核的整个操作系统统称为Linux。

Linux操作系统基于可移植操作系统接口(Portable Operating System Interface,POSIX)和UNIX标准,并具有支持多用户、多任务、多线程和多CPU的特性。它能够支持主要的UNIX工具软件、应用程序和网络协议,并且支持32位和64位硬件。Linux的设计思想是以网络为核心,具有稳定性和性能优势,适用于各种设备和系统。

虽然存在许多不同的Linux发行版,但它们都使用了Linux内核,并在此基础上添加了各自的软件包和配置。Linux可以安装在各种硬件设备上,包括手机、平板计算机、路由器、游戏控制台、台式计算机、大型机和超级计算机。

1.2.2 Linux与Windows的差异

Linux和Windows是两种不同的操作系统,它们在许多方面存在差异,其中主要体现在开源性、成本、软件兼容性、用户界面和稳定性等方面。

第一,开源性是Linux和Windows之间的一大差异。Linux是一种开源的操作系统,源代码可以被任何人访问、修改和共享。这使得Linux具有更高的自由度和可定制性,用户可以根据需求来定制和优化Linux操作系统。而Windows则是一种源代码封闭的操作系统,只有微软公司能够访问和修改其源代码,用户不具有修改和定制的自由度。

第二,Linux和Windows之间存在成本差异。Linux是开源的,可以免费下载、使用和分发,这使得它在成本方面具有优势。而使用Windows时用户需要购买授权,需要支付一定的费用才能合法使用。相比之下Linux在个人用户和小型企业中更具优势。

第三,软件兼容性是Linux和Windows之间的一大差异。大多数软件开发商会将它们的应用程序优先开发为Windows版本,因为Windows在桌面市场上占据主导地位。而Linux上的应用程序则需要针对不同的Linux发行版进行优化,应用程序的迭代、更新较慢。尽管如此,Linux上也有许多流行的应用程序,并且随着Linux用户群的增长,越来越多的软件开发商开始为Linux开发应用程序。

第四,用户界面也是Linux和Windows之间的一大差异。Windows通常使用图形用户界面(Graphical User Interface,GUI),而Linux通常提供多种用户界面供用户选择,包括命令行界面(Command-Line Interface,CLI)和GUI。这使得Linux更加灵活,可以适应不同类型的用户需求。

第五,稳定性也是Linux和Windows之间的重要差异。Linux通常被认为比Windows更加稳定,不容易出现系统崩溃和受到恶意软件攻击。这是因为Linux内核的设计和管理方式使它更加健壮和安全。而Windows则存在一些安全漏洞和稳定性问题,需要定期更新以确保系统的安全和稳定。

总之,虽然Linux和Windows之间存在一些差异,但它们各自都有自己的优点和适用场景。用户可以根据自己的需求和偏好来选择适合自己的操作系统。

1.2.3 常见的Linux发行版

Linux发行版是指将Linux内核与各种软件组合打包成的可供用户安装和使用的操作系统。Linux内核是开源的,因此任何人都可以基于它构建自己的操作系统,这就导致了众多的Linux发行版的产生。Linux 发行版为用户提供整合了内核和必要软件的打包版本,使得用户可以更加便捷地使用Linux操作系统。具体来说,Linux发行版的作用包括以下几点。

① 提供方便的安装程序和管理工具。Linux发行版通常包含方便的安装程序和管理工具,可以帮助用户轻松地安装和升级软件包、管理系统配置等。

② 提供软件包管理系统。Linux发行版通常会提供软件包管理系统,用户可以方便地从中心仓库下载并安装软件包。用户无须手动下载和编译软件包,同时也可以避免软件之间的兼容性问题。

③ 提供统一的用户界面。Linux发行版通常会提供统一的用户界面,用户可以更加轻松地使用Linux操作系统。

④ 提供社区和技术支持。许多Linux发行版都有强大的社区和技术支持,使得用户可以提出问题并获得帮助。这些社区通常由开发者和用户组成,提供文档、教程和论坛等资源,帮助用户共同学习和解决问题。

总之,Linux发行版的作用在于为用户提供方便、稳定、易用的Linux操作系统。但是Linux操作系统的种类很多,对应的具体发行版种类也很多。我们该如何区分不同的Linux发行版呢?包管理器是区分不同Linux发行版种类的关键,它是一种软件包管理工具,可以自动安装、升级、卸载软件包,以及处理依赖关系。不同的Linux发行版使用不同的包管理器。

这里简单介绍4个主要的Linux发行版“家族成员”:Debian、Red Hat、SUSE、Arch。

① Debian是一个非常受欢迎的、自由和开源的Linux发行版,由一个志愿者社区维护并提供技术支持。Debian的主要目标是为用户提供功能齐全、自由和高质量的操作系统。它秉承自由软件的理念,鼓励用户自由使用、修改和分发软件。Debian的软件仓库包含数以万计的软件包,涵盖几乎所有常见的应用程序和工具。Debian的包管理器是dpkg和高级包装工具(Advanced Package Tool,APT)。这个组合使得用户可以方便地安装、升级和管理软件包,同时处理依赖关系,确保系统的稳定性和一致性。Debian还提供多种桌面环境选择,包括GNOME、KDE Plasma、Xfce和LXQt等。这些桌面环境为用户提供了友好的图形界面,使得用户可以轻松地完成日常任务和定制。Debian社区提供了广泛的文档和技术支持,包括官方手册、邮件列表、互联网中继交谈(Internet Relay Chat,IRC)和论坛等。这些资源确保用户可以分享经验、获得帮助并解决问题。Debian以其长期支持(Long Term Support,LTS)计划和稳定版本的发布模式而闻名,其稳定版本经过了严格的测试和验证,以确保高度的稳定性和安全性。这使得Debian在服务器和桌面应用程序中都有广泛的应用。

② Red Hat是一种商业化的Linux发行版,以稳定、可靠和安全的特性而闻名。它可提供商业支持和服务,为企业提供广泛的解决方案。Red Hat的包管理器YUM(Yellowdog Updater Modified)和RPM(Red Hat Package Manager)是其常用的软件包管理工具。它们使用户能够方便地安装、升级和删除软件包,并管理系统的依赖关系。Red Hat Enterprise Linux(RHEL)是Red Hat的主要产品,专为企业级应用程序而设计。RHEL提供了广泛的功能和工具,以满足企业对高性能、高可靠性和安全性的需求。RHEL还受到许多行业标准和规范的认可,成为许多企业首选的操作系统。

③ SUSE是一种商业化的Linux发行版,以稳定、可靠和安全的特性受到许多企业用户的青睐。SUSE提供了广泛的企业级解决方案,涵盖多个领域,包括服务器、云计算、高性能计算、虚拟化和存储等。SUSE的产品组合包括SLES(SUSE Linux Enterprise Server)、SLED(SUSE Linux Enterprise Desktop)和SLERT(SUSE Linux Enterprise Real Time)等。SLES是SUSE的主要产品,被广泛用于企业级应用程序中,例如数据库服务器、文件服务器、Web服务器和应用程序服务器等。SLES注重稳定性、可靠性和安全性,并可提供LTS版本,因此企业能够在生产环境中使用SLES并获得持续的支持和更新。SUSE使用RPM作为其主要的包管理器,并提供了名为Zypper的命令行工具和图形界面工具来管理软件包。RPM包管理器是一种常见的、被广泛使用的包管理器。

④ Arch是一种流行的基于滚动更新的Linux发行版,以简洁、灵活和定制的特性受到许多Linux用户的喜爱。Arch的设计目标是提供简单、现代、轻量级和用户定制的Linux发行版。与其他Linux发行版不同,Arch没有预装默认的桌面环境或窗口管理器,这意味着用户可以自由选择他们喜欢的桌面环境、窗口管理器或其他组件来构建理想的工作环境。Arch的包管理器被称为Pacman(Package Manager),它是一个强大而简单的工具,用于安装、升级和管理软件包,使得用户可以轻松地从官方软件仓库或第三方软件仓库中获取所需的软件包,并自动处理依赖关系。

总之,Debian、Red Hat、SUSE和Arch都是流行的Linux发行版,都有自己独特的特点和用途。Debian以自由和开源的特性、LTS计划和稳定版本的发布模式而闻名。Red Hat和SUSE以商业支持和服务、稳定性和安全性而闻名,并被广泛用于企业级应用程序中。Arch则以灵活、定制和滚动更新的特性而闻名,适合那些希望构建自己应用程序的定制化用户。Linux发行版为用户提供了不同的选择,使得用户可以根据自己的需求和习惯选择适合自己的Linux操作系统。同时,Linux发行版也为开发者提供了广阔的平台,使其可以在不同的Linux发行版上开发和测试应用程序。

1.2.4 信创操作系统

2020年,龙芯基于近20年的CPU研发和生态建设经验推出了LoongArch架构,包括基础架构部分和向量指令、虚拟化、二进制翻译等扩展部分,涉及近2000条指令。LoongArch架构具有较好的自主性、先进性与兼容性。从整个架构的顶层规划,到各部分的功能定义,再到每条指令的编码、名称、含义,都进行了自主设计。LoongArch架构摒弃了传统指令系统中部分不适应当前软硬件设计技术发展趋势的陈旧内容,吸纳了近年来指令系统设计领域中诸多先进的技术发展成果。同原有兼容指令系统相比,LoongArch构架不仅在硬件方面更易于实现高性能、低功耗设计,而且在软件方面更易于实现编译优化和操作系统、虚拟机的开发。LoongArch架构在设计时充分考虑了兼容生态需求,融合了国际主流指令系统的主要功能特性,同时依托龙芯团队在二进制翻译方面10余年的技术积累、创新经验,能够实现多种国际主流指令系统的高效二进制翻译。龙芯从2020年起研发的CPU均支持LoongArch架构。

如今,LoongArch架构已得到国际开源软件界的广泛认可与支持,成为与x86、ARM并列的顶层开源生态系统,获得大量开源社区的支持。指令系统是软件生态的起点,只有从指令系统的根源上实现自主,才能打破软件生态发展受制于人的瓶颈。LoongArch架构的推出,是龙芯长期坚持自主研发理念的重要成果体现,是全面转向生态建设历史关头的重大技术跨越。

Loongnix操作系统是龙芯开源社区推出的一款基于Linux内核,并针对LoongArch架构进行优化和定制的操作系统。其作为龙芯软件生态建设的成果验证和展示环境,集成了内核、工具链、龙芯浏览器、Java虚拟机、音视频库、图形库、云计算、打印机驱动等操作系统基础设施方面的最新研发成果,可直接应用于日常办公、生产、生活等应用环境。编者编写此书时Loongnix最新的桌面版本为Loongnix-20.3.loongarch64,该版本支持的GNU编译器套件(GNU Compiler Collection,GCC)的最高版本为8.3.0。此版本的GCC已经可以比较完整地支持C++17的特性。Loongnix支持的GNU调试器(The GNU Project Debugger,GDB)的最高版本为8.1.50。目前支持的GCC和GDB版本都不是最新的,但完全可满足C语言开发需求。

Loongnix实行“以开源社区版为基础支持商业版和定制版发展”的生态模式,即龙芯发布开源的社区版操作系统Loongnix,以此作为技术和产品源头,一方面支持品牌操作系统厂商研发其商业版产品,另一方面支持云厂商、原始设备制造商(Original Equipment Manufacturer,OEM)等企业根据需求研发其定制版产品。

Loongnix包括Loongnix-Server、Loongnix-Client和Loongnix-Cloud这3个产品系列,分别面向服务器、个人计算机和云计算领域。

Loongnix的发展采用了“遵循统一系统架构和规范API”的技术路线。其中“系统架构”是操作系统和整机硬件间的界面,“API”是操作系统与应用软件间的界面。基于《龙芯CPU统一系统架构规范》,龙芯发布支持高级配置和电源管理接口(Advanced Configuration and Power Management Interface,ACPI)标准的统一可扩展固体接口(Unified Extensible Firmware Interface,UEFI)固件和系统,实现操作系统跨主板整机兼容和CPU代际兼容,达到“任意一套龙芯操作系统都可以安装在不同厂商、不同时期的龙芯整机”的目标。龙芯为此建立了专业团队,研发和维护Java虚拟机、浏览器、图形库等重要应用程序接口(Application Program Interface,API),通过规范API建立操作系统平台对API环境支持的版本识别度,在技术创新的同时保持API兼容。

在云计算方面,龙芯平台完全支持OpenStack/KVM、Docker/Kubernetes等典型云计算方案,已经发布了Loongnix和Alpine等龙芯平台操作系统容器镜像,用户可以直接下载使用。

相关图书

相关文章

相关课程