2020-01-07 21:48:57 hadues 阅读数 253
  • 面向对象分析与设计

    本课程介绍软件设计理念、方法,帮助学员成长为优秀的软件设计师!当学员完成了Java等语言的学习之后,或者从事 软件开发一段时间之后,面对一个需要开发的新软件系统: 该如何入手呢?定义多少个模块?定义多少个类?定义每个类多少个属性、哪些操作? 如何定义类之间的关系?为什么? 这样的软件系统能够承受今后需求的不断变更吗? 想学的话一起来吧!

    1088 人正在学习 去看看 姜宁康


直到今天为止, Linux 操作系统的发型版本数量已经非常之多,对于刚接触Linux的人来说可能会感到十分的困惑,到底哪一款Linux 发行版本才是我应该使用的呢?
这篇博文我们就试着来回答这个问题。


1.1 介绍

  • 令人困惑的选择和数量不断增加的Linux发行版可能会使那些刚接触Linux的人感到困惑。这就是创建此页面的原因。
  • 它列出了10个Linux发行版(加上对FreeBSD的荣誉称号,到目前为止,它是所有BSD中最流行的),它们被全世界的Linux用户普遍(直接或间接)认为是使用最广泛的。没有数据可以支持,还有很多其他发行版可能更适合您的特定目的,但是作为一般规则,所有发行版都很流行,并且都有非常活跃的论坛或邮件列表,您可以在其中提问是否被卡住。

1.2 选择发行指南

  • Ubuntu,Linux Mint和MX Linux对于想在不掌握所有复杂性的情况下尽快在Linux中提高工作效率的新用户而言,它们被认为是最容易的。
  • 另一方面,Arch Linux,Gentoo和Slackware Linux是更高级的发行版,需要大量学习才能有效使用它们。
  • openSUSE,Fedora,Debian GNU / Linux可以被归类为良好的“中间”发行版,这些发行版通常用作其他发行版的基础。
  • CentOS是一个企业发行版,适合那些喜欢稳定性,可靠性和长期支持而不是尖端功能和软件的用户。

1.2.1 Linux Mint

Linux Mint是基于Ubuntu 的发行版,于2006年由居住在爱尔兰的法国籍IT专家Clement Lefebvre首次推出。作者最初维护的是一个Linux网站,专门为新Linux用户提供帮助,技巧和文档,但他看到了开发Linux发行版的潜力,该发行版可以解决与技术更主流的产品相关的许多可用性缺陷。在从访问者的网站上征求反馈意见之后,他着手构建当今许多人所说的“改进的Ubuntu”或“ Ubuntu做得对”。

  • 但是Linux Mint不仅仅是具有新的应用程序集和更新的桌面主题的Ubuntu。自成立以来,开发人员一直在添加各种图形化“薄荷”工具来增强可用性。
  • 其中包括mintDesktop(用于配置桌面环境的实用程序),miningMenu(用于简化导航的新的优雅菜单结构),miningInstall(易于使用的软件安装程序)和mintUpdate(用于软件更新程序),仅举几例。
  • 其他几种工具以及数百项其他改进。该项目还设计了自己的艺术品。由于包含了专有的和受专利保护的多媒体编解码器,由于潜在的法律威胁,通常由于较大的发行版而缺少这些内容,因此薄荷的易用性声誉得到了进一步提高。
  • 虽然可以免费下载Linux Mint,但该项目从捐赠,广告和专业支持服务中获得收益。它没有固定的发布时间表或计划的功能列表,但是可以在每个Ubuntu长期支持版本发布几周后获得新版本的Linux Mint。
  • Mint系列的另一个变体是基于Debian的Stable分支的“ Debian Edition”。Debian版本的Linux Mint提供了非常稳定的基础,而桌面软件包的更新速度比Mint的“ Main”版本要快。Linux Mint不遵守软件自由的原则,并且不发布安全公告.
  • 优点:内部开发的精巧的“ minty”工具集合,数百个用户友好的增强功能,包括多媒体编解码器,可以接受用户的建议
  • 缺点:该项目没有发布安全公告
  • 软件包管理:高级软件包工具(APT),具有使用DEB软件包的mintInstall(与Ubuntu存储库兼容)
  • 可用版本: “主”版本(与Cinnamon,MATE和Xfce配合使用),Linux Mint“ Debian版”(与Cinnamon配合使用)
  • 可能的替代品Ubuntuelementary OSZorin OSPeppermint OS

Linux Mint

1.2.2 Ubuntu

  • 此次推出的Ubuntu的 2004年9月首次宣布虽然相对较新的Linux发行现场,该项目没有像其他起飞前,与它的邮件列表很快就填满了由热心的用户和开发者的热情讨论。在随后的几年中,Ubuntu逐渐成为最受欢迎的桌面Linux发行版,为开发易于使用和免费的桌面操作系统做出了巨大贡献,该操作系统可以与市场上任何专有的操作系​​统竞争。
  • Ubuntu取得惊人成功的原因是什么?首先,该项目是由富有魅力的南非亿万富翁,前Debian开发人员,世界第二大太空旅行者Mark Shuttleworth创建的,该公司的总部位于马恩岛的Canonical Ltd.目前正在为该项目提供资金。其次,Ubuntu从其他类似项目的错误中吸取了教训,并从一开始就避免了这些错误–它创建了一个出色的基于Web的基础结构,具有Wiki风格的文档,创新的错误报告功能以及针对最终用户的专业方法。第三,由于其富有的创始人,Ubuntu能够向所有感兴趣的用户提供免费的CD,从而促进了发行的迅速传播。
  • 在技​​术方面,Ubuntu基于Debian “Sid”(Debian的Unstable分支),但是具有一些著名的软件包,例如GNOMEFirefoxLibreOffice,已更新为最新版本。
  • 它使用了高度定制的GNOME桌面环境版本。它有一个可预测的6个月发布时间表,偶尔会有长期支持(LTS)版本,并且根据版本的不同,安全更新支持5年(​​非LTS版本支持9个月)。Ubuntu的其他特殊功能包括可安装的实时DVD,创意作品和桌面主题,Windows用户的迁移助手,对最新技术的支持,例如3D桌面效果,易于安装的ATI和NVIDIA图形卡专用设备驱动程序以及无线网络。
  • 优点:固定的发布周期和支持期限;具有五年安全更新的长期支持(LTS)变体;新手友好 大量的文档,包括官方的和用户提供的
  • 缺点:与Debian缺乏兼容性;频繁的重大更改往往会驱使一些用户离开;非LTS版本仅提供9个月的安全支持
  • 软件包管理:使用DEB软件包的高级软件包工具(APT)
  • 可用的变体: UbuntuKubuntuXubuntuLubuntuUbuntu MATEUbuntu BudgieUbuntu Kylin,适用于64位(x86_64)处理器的Ubuntu Studio
  • 建议的基于Ubuntu的替代品: Linux Mint(桌面),elementary OS(桌面),Zorin OS(桌面),Trisquel GNU / Linux(免费软件),Bodhi Linux(带Enlightenment的桌面)
    在这里插入图片描述

1.2.3 MX Linux

MEPIS Linux是基于Debian的桌面Linux发行版,设计用于个人和商业目的。它包括(暂时)最先进的功能,例如实时,安装和恢复CD,自动硬件配置,NTFS分区大小调整,ACPI电源管理,WiFi支持,抗锯齿的TrueType字体和个人防火墙。尽管MEPIS Linux最终停产,但它的社区继续存在,并将MEPIS的技术与基于Debian的非常轻量级的antiX发行版合并。结果是一个名为MX Linux的项目。

MX Linux基于Debian的Stable分支,并具有由MEPIS和antiX社区开发的组件。该发行版具有Xfce桌面,该桌面具有垂直面板布局(而不是更常见的水平面板)。MX Linux被认为是中等重量的发行版,它提供了许多现代应用程序(通过反向移植定期更新),并具有稳定的基础。该发行版力求通过便捷的功能提供良好的性能。

MX Linux以其称为MX-Tools的图形管理实用程序集合而闻名。这些工具使您可以轻松访问管理用户帐户,使用软件包和安装编解码器。
优点:支持图形驱动程序,浏览器插件和媒体编解码器;稳定的核心与更新的桌面应用程序
缺点:安装程序和某些配置工具看起来有所不同,可能需要一些时间才能习惯。
软件包管理:高级软件包工具(APT)
可用版本:在32位或64位x86硬件上运行的Xfce
建议的替代品: antiX

在这里插入图片描述

1.2.4 Arch Linux

Arch Linux 的KISS(保持简单,愚蠢)哲学是在2002年左右由加拿大计算机科学专业毕业生Judd Vinet提出的,他于同年推出了该发行版。几年来,它一直是为中级和高级Linux用户设计的边际项目,只有当它开始推广为“滚动发行”发行版时才引起关注,该发行版只需安装一次,然后就可以进行更新。得益于其功能强大的软件包管理器和始终新鲜的软件资源库,您可以找到最新的日期。结果,Arch Linux的“发行版”仅仅是安装媒体的每月快照。

除了具有广受欢迎的“滚动发行”更新机制外,Arch Linux还以其快速而强大的软件包管理器“ Pacman”而闻名,该软件包管理器能够从源代码安装软件包,并借助其AUR轻松创建二进制软件包。基础架构,以及不断增加的经过测试的软件包的软件存储库。其备受推崇的文档,再加上出色的Arch Linux手册,使经验不足的Linux用户甚至可以安装和定制发行版。用户可以使用的强大工具意味着该发行版可以无限细化到最细微的细节,并且不可能有两个安装相同。

不利的一面是,任何滚动发布更新机制都有其危险:人为错误蔓延,库或依赖项丢失,存储库中已有应用程序的新版本存在尚未报告的严重错误。 …在Pacman升级后,出现无法启动的系统并不是闻所未闻。因此,Arch Linux是一种发行版,需要其用户保持警惕并具有足够的知识来解决任何此类可能的问题。而且,发行版的滚动性质意味着,由于重要的系统更改或旧版Linux内核缺乏硬件支持,有时不再可能使用旧媒体来安装发行版。

  • 优点:出色的软件管理基础架构;无与伦比的自定义和调整选项;一流的在线文档
  • 缺点 : 偶尔不稳定和故障风险
  • 软件包管理: Pacman
  • 可用版本: 适用于64位(x86_64)处理器的最小安装CD和网络安装CD映像
  • 建议的基于Arch和类似Arch的替代方案: Manjaro Linux, Antergos, Artix Linux, Chakra GNU/Linux,Parabola GNU/Linux (free software), KaOS

在这里插入图片描述

1.2.5 Gentoo

Gentoo Gentoo Linux是面向开发人员和网络专业人员的通用,快速,完全免费的Linux元发行版。与其他发行版不同,Gentoo Linux具有一个高级的,基于源的软件包管理系统,称为Portage。Portage是BSD端口传统中的真正端口系统,但是基于Python,具有许多高级功能,包括依赖项,细粒度的程序包管理,“伪造”(OpenBSD风格)安装,安全取消合并,系统配置文件,虚拟软件包,配置文件管理等。

Gentoo由Daniel Robbins于2000年左右开始,他设想创建一个元发行版,而无需预先编译二进制包就可以建立元发行版。Gentoo系统通常使用最少的一组预编译软件包进行设置,然后根据需要编译所需的软件并将其添加到系统中。Gentoo使用编译时调整(称为“使用标志”),可以高度定制系统,添加或删除功能以最适合这种情况。

Gentoo项目以其灵活性而闻名,它允许用户运行各种软件配置,内核和初始化系统,以及通常的桌面环境集合。可以从Gentoo的ports树获得的自定义和性能导致元分发被用作许多其他项目的基础,包括Calculate Linux(面向业务的分发),Container Linux(用于运行的最小分发)容器)和Redcore Linux(轻型桌面发行版)。Gentoo也是Google Chrome OS平台的基础,在撰写本文时,它可能是第五大最受欢迎的基于Linux的网站服务器平台。

  • 优点: 高度灵活,可无限地自定义,能够使用各种编译时配置,初始化系统并在许多体系结构上运行
  • 缺点: 需要更高的知识才能使用,通过源代码升级软件包可能很耗时
  • 软件包管理: 使用源代码端口的集合进行移植(出现)
  • 可用版本: 安装软件包可用于各种硬件体系结构,包括32位和64位x86,ARM,Alpha,IA64,MIPS,PPC,s390和Sparc。
  • 可选的: Linux From Scratch, Calculate Linux, Redcore Linux, Funtoo

1.2.6 Slackware Linux

Slackware Linux由Patrick Volkerding于1992年创建,是现存最古老的Linux发行版。Slackware 1.0来自现已停止使用的SLS项目,它来自24个软盘,并基于Linux内核版本0.99pl11-alpha构建。它迅速成为最受欢迎的Linux发行版,据估计,其市场份额在1995年达到了所有Linux安装的80%。随着Red Hat Linux和其他更加用户友好的发行版的到来,其受欢迎程度急剧下降。在技术性更强的系统管理员和桌面用户中,Slackware Linux仍然是备受赞赏的操作系统。

Slackware Linux是一种技术含量高,干净的发行版,仅包含数量非常有限的定制实用程序。它使用一个简单的基于文本的系统安装程序以及一个比较原始的软件包管理系统,该系统无法解决软件依赖性。因此,Slackware被认为是当今可用的最干净且漏洞最少的发行版之一-缺少Slackware特定的增强功能可减少将新错误引入系统的可能性。所有配置都是通过编辑文本文件完成的。在Linux社区中有一种说法是,如果您学习Red Hat,就会知道Red Hat,但是如果您学习Slackware,就会知道Linux。今天,当许多其他Linux发行版不断开发高度定制的产品以满足技术水平较低的Linux用户的需求时,尤其如此。

尽管这种简单性理念受到了追捧,但事实是,在当今世界,Slackware Linux逐渐成为构建新的自定义解决方案的“核心系统”,而不是带有多种受支持软件的完整发行版。唯一的例外是服务器市场,Slackware仍然很受欢迎,尽管即使在这里,发行版的复杂升级过程以及缺乏官方支持的自动工具来进行安全更新也使其变得越来越没有竞争力。Slackware对系统基本组件的保守态度意味着,在将其调整为现代台式机系统之前,它需要进行大量的手动安装后工作。

  • 优点: 被认为是高度稳定,干净且基本无错误的,严格遵循UNIX原则的
  • 缺点: 官方支持的申请数量有限;在基本包装选择方面比较保守;复杂的升级程序
  • 软件包管理: 使用TXZ软件包的“ pkgtool”
  • 可用版本: 用于32位(i486)和64位(x86_64)处理器的安装CD和DVD
  • 基于Slackware的建议替代方案: Zenwalk Linux(台式机),Salix(台式机,实时CD),Porteus(带有KDE,LXDE,MATE,Razor-qt或Xfce的实时CD),VectorLinux(台式机)
  • 具有类似理念的其他发行版: Arch Linux

在这里插入图片描述

1.2.7 Debian GNU / Linux

Debian GNU / Linux于1993年首次发布。其创始人Ian Murdock设想创建一个完全非商业的项目,该项目由数百名志愿开发人员在业余时间开发。当时怀疑论者远远超过乐观主义者,它注定要瓦解和崩溃,但现实却大不相同。Debian不仅幸存下来,而且还蓬勃发展,在不到十年的时间里,它成为有史以来最大的Linux发行版,并且可能成为最大的协作软件项目!

以下数字可以说明Debian GNU / Linux的成功。它由1,000多名志愿者开发人员开发,其软件存储库包含近50,000个二进制软件包(针对8个处理器体系结构进行了编译),并负责启发120多种基于Debian的发行版和现场CD。这些数字是其他任何基于Linux的操作系统所无法比拟的。Debian的实际发展发生在稳定程度不断提高的三个主要分支(如果包括尖端的“ Experimental”分支则为四个):“不稳定”(也称为“ Sid”),“测试”和“稳定”。 ”。程序包和功能的这种逐步集成和稳定,以及项目完善的质量控制机制,

但是,这种冗长而复杂的开发风格也有一些缺点:Debian的稳定发行版不是特别最新,并且会很快老化,特别是因为新的稳定发行版每2-3年才发布一次。那些喜欢最新软件包和技术的用户被迫使用可能有问题的Debian Testing或Unstable分支。Debian高度民主的结构导致了有争议的决定,并引起了开发商之间的内f。这导致停滞和不愿做出使该项目前进的重大决定。

  • **优点:**非常稳定;卓越的质量控制;包括30,000多个软件包;支持比其他Linux发行版更多的处理器体系结构
  • **缺点:**保守-由于它支持许多处理器体系结构,因此并不总是包括较新的技术。缓慢的释放周期(每2-3年稳定释放一次);关于开发人员邮件列表和博客的讨论有时可能不合时宜
  • **软件包管理:**使用DEB软件包的高级软件包工具(APT)
  • **可用版本:**用于九种处理器体系结构的安装CD / DVD和实时CD映像,包括来自Intel,AMD,Power等公司的所有32位和64位处理器
  • 建议的基于Debian的替代方案: UbuntuSparkyLinuxSolydXK(Xfce或KDE),Devuansiduction

在这里插入图片描述

1.2.8 Fedora

尽管Fedora仅在2004年9月才正式发布,但其起源实际上可以追溯到1995年,当时它是由两名Linux远见者Bob Young和Marc Ewing以Red Hat Linux的名义推出的。该公司的第一款产品Red Hat Linux 1.0“母亲节”于同年发布,并很快进行了一些错误修复更新。1997年,Red Hat引入了具有依赖性解析和其他高级功能的革命性RPM软件包管理系统,这极大地推动了发行版的迅速普及以及超越Slackware Linux成为世界上使用最广泛的Linux发行版。在后来的几年中,Red Hat定期进行为期六个月的标准化发布。

在2003年Red Hat Linux 9发布之后,该公司对其产品系列进行了一些根本性的改变。它为其商业产品(尤其是Red Hat Enterprise Linux)保留了Red Hat商标,并推出了Fedora Core(后来更名为Fedora),这是Red Hat赞助的面向社区的发行版,专门为“ Linux爱好者”设计。在最初对更改进行批评之后,Linux社区接受了“新”发行版,作为Red Hat Linux的逻辑延续。Fedora恢复了以前作为市场上最受欢迎的操作系统之一的地位后,发布了一些高质量的版本。同时,凭借创新的产品阵容,出色的客户支持,红帽,红帽迅速成为全球最大,最赚钱的Linux公司。

尽管Fedora的发展方向仍主要由Red Hat,Inc.控制,并且有时(正确或错误)该产品被视为Red Hat Enterprise Linux的测试平台,但不可否认的是Fedora是现有的最具创新性的发行版之一今天。它对Linux内核,glibc和GCC的贡献是众所周知的,并且它与SELinux功能,虚拟化技术,系统服务管理器,先进的日记文件系统以及其他企业级功能的集成受到了该公司客户的高度赞赏。不利的一面是,Fedora仍然缺乏明确的面向桌面的策略,该策略会使该产品更易于“ Linux爱好者”目标以外的用户使用。

Fedora的最新版本引入了一种新的发行版本,称为Atomic Host。Atomic使用与Fedora Server版本相同的软件包,但是要确保使用OSTree对基本操作系统进行原子更新。

  • 优点: 高度创新;出色的安全功能;大量受支持的软件包;严格遵守自由软件理念;具有许多流行桌面环境的实时旋转的可用性
  • 缺点: Fedora的优先重点倾向于企业功能,而不是桌面可用性。一些先进的功能,例如过早切换到KDE 4和GNOME 3,有时会疏远某些桌面用户
  • 软件包管理: 使用RPM软件包的DNF图形和命令行实用程序
  • 可用版本: 适用于32位(i686)和64位(x86_64)处理器的Fedora;带有GNOME,KDE,LXDE,MATE和Xfce桌面的实时版本
  • 建议的基于Red Hat的替代方案: CentOSScientific Linux

在这里插入图片描述

1.2.9 openSUSE

的开端openSUSE的罗兰DYROFF,托马斯·菲尔,休伯特·曼特尔和伯查德Steinbild - -可追溯到1992年,当时四名德国Linux爱好者推出的SuSE名下的项目(软件和系统发展协会)的Linux。早期,这家年轻的公司出售了包含德文版Slackware Linux的软盘集,但是不久之后,SuSE Linux于1996年5月发布了4.2版,成为独立发行版。开发人员采用了RPM软件包管理格式,并引入了YaST(一种易于使用的图形系统管理工具)。SuSE Linux的频繁发行,出色的印刷文档以及在欧洲和北美洲的商店中易于使用的SuSE Linux使得发行变得越来越受欢迎。

SuSE Linux在2003年底被Novell,Inc.收购,然后在2010年11月交到Attachmate手中。在第一笔收购之后不久,SUSE Linux的开发,许可和可用性发生了重大变化-YaST在公众下发布许可证(GPL),ISO映像可从公共下载服务器免费分发,最重要的是,分发的开发首次向公众开放。自从openSUSE项目启动和2005年10月发布10.0版本以来,该发行版在词义上完全免费,并且不再与Attachmate关联。openSUSE代码已成为商业产品的基础系统,最初被称为Novell Linux,

目前,openSUSE有两个主要版本-Leap,它提供了具有多年支持的稳定平台;和风滚草,提供了滚动发布环境。该发行版通常因其易于配置(通过YaST),Btrfs高级文件系统支持以及自动文件系统快照和引导环境而倍受赞誉。

  • **优点:**全面而直观的配置工具;大型软件包仓库,出色的网站基础结构和印刷文档,默认情况下带有启动环境的Btrfs
  • **缺点:**占用大量资源的桌面设置和图形实用程序有时被视为“缓慢且膨胀”
  • **软件包管理:**使用RPM软件包的YaST图形和Zypper命令行实用程序
  • 可用版本: 适用于32位(i586)和64位(x86_64)的openSUSE Tumbleweed,适用于64位(x86_64)处理器的Leap;适用于i586,IA64,PowerPC,s390,s390x和x86_64体系结构的SUSE Linux Enterprise Desktop / Server

在这里插入图片描述

1.2.10 CentOS

CentOS于2003年末启动,是一个社区项目,目标是将Red Hat Enterprise Linux(RHEL)的源代码重建为可安装的Linux发行版,并为所有随附的软件包提供及时的安全更新。坦率地说,CentOS是一个RHEL克隆。这两个发行版之间唯一的技术差异是品牌-CentOS自行替换了所有Red Hat商标和徽标。不过,红帽与CentOS之间的关系仍然融洽,许多CentOS开发人员都与红帽保持积极联系,甚至直接由其雇用。

CentOS通常被视为可靠的服务器发行版。它带有相同的经过测试和稳定的Linux内核和软件包集,它们构成了其父级Red Hat Enterprise Linux的基础。尽管它是由志愿者运行的社区项目,但它已成为市场上价格昂贵的服务器产品(尤其是经验丰富的Linux系统管理员)中可靠,免费的替代产品,因此赢得了声誉。CentOS也适合作为企业台式机解决方案,特别是在稳定性,可靠性和长期支持优于最新软件和功能的情况下。与RHEL一样,CentOS受到大约7至10年的安全更新的支持。

尽管CentOS有其优点,但它并不是所有部署方案中的最佳解决方案。那些偏爱使用最新Linux技术和最新软件包的发行版的用户应该去其他地方。遵循RHEL版本的主要CentOS版本仅每2-3年发布一次,而“单点”发布(例如5.1版)则往往在9-12个月的间隔内发布。点发布通常不包含任何主要功能(尽管有时它们确实包括对较新硬件的支持),并且只有少数软件包可以更新到较新版本。Linux内核,基本系统和大多数应用程序版本均保持不变,但偶尔可以通过实验方式提供重要软件包的较新版本(例如LibreOffice或Firefox)。作为附带项目,

  • 优点: 经过严格测试,稳定可靠;免费下载和使用;拥有7年以上的免费安全更新;
  • 缺点: 缺乏最新的Linux技术;有时项目无法履行其承诺,无法及时提供安全更新和新的稳定版本
  • 软件包管理: 使用RPM软件包的YUM图形和命令行实用程序
  • 可用版本: 用于x86_64处理器的安装DVD和可安装的实时CD(带有GNOME);较早版本也可用于i686,Alpha,IA64和IBM z系列(s390,s390x)处理器。
  • 其他RHEL克隆和基于CentOS的发行版: Scientific Linux,Springdale Linux,SME ServerRocks Cluster发行版,Oracle Enterprise Linux

在这里插入图片描述

1.2.11 FreeBSD

FreeBSD是AT&T UNIX通过Berkeley软件发行版(BSD)的间接后代,其历史可追溯到1993年,而动荡不安。与Linux发行版不同,Linux发行版被定义为包含Linux内核和数千个软件应用程序的集成软件解决方案, FreeBSD是一个紧密集成的操作系统,由BSD内核和所谓的“用户区”(因此即使没有额外的应用程序也可以使用)构建。一旦安装在普通的计算机系统上,这种区别就会大大丧失-像许多Linux发行版一样,有大量易于安装的(大多数)开源应用程序可用于扩展FreeBSD核心,但是这些通常是由第三方贡献者提供的。并非严格地属于FreeBSD。

FreeBSD以其快速,高性能和极其稳定的操作系统而闻名,特别适合于Web服务和类似任务。许多大型Web搜索引擎和具有关键任务计算基础架构的组织已经在其计算机系统上部署并使用FreeBSD多年。与Linux相比,FreeBSD的发行许可证的限制要少得多,它实际上允许不受限制地出于任何目的重用和修改源代码。众所周知,甚至苹果macOS的某些部分都源自FreeBSD。除了核心操作系统之外,该项目还以二进制和源代码形式提供了超过24,000个软件应用程序(称为端口),以便于在FreeBSD核心之上轻松安装。

FreeBSD对ZFS高级文件系统具有本机支持,并支持快照和引导环境。这使FreeBSD用户可以保护自己的数据并回滚操作系统更改。

尽管FreeBSD当然可以用作桌面操作系统,但与该部门的流行Linux发行版相比并不太好。文本模式系统安装程序在硬件检测或系统配置方面几乎没有提供任何帮助,而在安装后设置中却为用户留下了许多繁琐的工作。在对现代硬件的支持方面,FreeBSD通常落后于Linux,特别是在支持尖端的台式机和笔记本电脑小工具(例如无线网卡或数码相机)方面。那些希望在台式机或工作站上利用FreeBSD的速度和稳定性的用户,应考虑可用的台式机FreeBSD项目之一,而不是FreeBSD本身。

  • **优点:**快速稳定;可供安装的超过24,000个软件应用程序(或“端口”);很好的文档;本机ZFS支持和引导环境
  • **缺点:**在支持新的和奇特的硬件,商业应用程序的可用性方面往往落后于Linux;缺乏图形配置工具
  • **软件包管理:**使用二进制软件包(通过pkg)或基于源的“端口”的完整的命令行软件包管理基础结构
  • 可用版本: AMD64,ARM / ARMEL,i386,IA64,MIPS / MIPSEL,PC98 PowerPC,SPARC64的安装CD
  • 基于FreeBSD的建议替代方案: Project Trident(Desktop),GhostBSD(Desktop),FreeNAS(NAS)
  • 其他BSD替代品: OpenBSDNetBSDDragonFly BSD

在这里插入图片描述

1.3 使用建议

  • 桌面Linux发行版:
    • 如果是普通开发者或Linux 爱好者,推荐 Ubuntu ,或 国产优麒麟Ubuntu Kylin
    • 如果是网络安全爱好者,推荐 Kali Linux
  • 服务器Linux 发行版:
    • Centos
    • Red Hat Enterprise

1.4 参考资料

https://distrowatch.com/dwres.php?resource=major

2019-09-07 19:43:22 Shallwen_Deng 阅读数 1140
  • 面向对象分析与设计

    本课程介绍软件设计理念、方法,帮助学员成长为优秀的软件设计师!当学员完成了Java等语言的学习之后,或者从事 软件开发一段时间之后,面对一个需要开发的新软件系统: 该如何入手呢?定义多少个模块?定义多少个类?定义每个类多少个属性、哪些操作? 如何定义类之间的关系?为什么? 这样的软件系统能够承受今后需求的不断变更吗? 想学的话一起来吧!

    1088 人正在学习 去看看 姜宁康

原文链接:https://www.cnblogs.com/engine1984/category/155390.html

 

目录

目录

>> 操作系统原理1 —— 概念

>> 操作系统原理2 —— OS结构

>> 操作系统原理3 —— 多道程序

>> 操作系统原理4 —— 存储管理

>> 操作系统原理5 —— 文件管理

>> 操作系统原理6 —— 设备管理

>> 操作系统原理7 —— 作业管理

>> 操作系统原理8 —— CPU管理,进程

>> 操作系统原理9 —— 死锁


>> 操作系统原理1 —— 概念

学习操作系统,首先我们应该知道操作系统的概念。本章主要讲述了以下几个问题。

  1. 什么是操作系统
  2. 操作系统的形成
  3. 操作系统的类型
  4. 操作系统的功能

一、什么是操作系统

在回答这个问题之前,我们先来了解一下什么是计算机系统。计算机系统是按用户的要求接收和存储信息、自动进行数据处理并输出结果信息的系统。

计算机系统由硬件系统和软件系统组成。软硬件系统的组成部分就是计算机系统的资源,当不同的用户使用计算机时都要占用系统资源并且有不同的控制需求。

操作系统就是计算机系统的一种系统软件,由它统一管理计算机系统的资源和控制程序的执行。

操作系统的设计目标一是使计算机系统使用方便。二是使得计算机系统能高效地工作。

二、操作系统的形成

早期没有操作系统→原始汇编系统→管理程序→操作系统 可以看到,操作系统是随着计算机硬件的发展和应用需求的推动而形成的。

三、操作系统的类型

按照操作系统提供的服务,大致可以把操作系统分为以下几类:

批处理操作系统、分时操作系统、实时操作系统、网络操作系统和分布式操作系统。其中批处理操作系统分时操作系统实时操作系统是基本的操作系统。

  1. 批处理操作系统按照用户预先规定好的步骤控制作业的执行,实现计算机操作的自动化。又可分为批处理单道系统和批处理多道系统。单道系统每次只有一个作业装入计算机系统的主存储器运行,多个作业可自动、顺序地被装入运行。批处理多道系统则允许多个作业同时装入主存储器,中央处理器轮流地执行各个作业,各个作业可以同时使用各自所需的外围设备,这样可以充分利用计算机系统的资源,缩短作业时间,提高系统的吞吐率。
  2. 分时操作系统,这种系统中,一个计算机系统与许多终端设备连接,分时系统支持多个终端用户,同时以交互方式使用计算机系统,为用户在测试、修改和控制程序执行方面提供了灵活性。分时系统的主要特点是同时性、独立性、及时性和交互性。
  3. 实时操作系统能使计算机系统接收到外部信号后及时进行处理,并在严格的规定时间内完成处理,且给出反馈信号。它是较少有人为干预的监督和控制系统。实时系统对可靠性和安全性要求极高,不强求系统资源的利用率。
  4. 网络操作系统可以把若干计算机联合起来,实现各台计算机之间的通信及网络中各种资源的共享,像我们现在使用的Windows ,UNIX和Linux等操作系统都是网络操作系统。
  5. 分布式操作系统的网络中各台计算机没有主次之分,在任意两台计算机间的可进行信息交换和资源共享。这一点上分布式操作系统和网络操作系统差别不大,他们的本质区别在于:分布式操作系统能使系统中若干计算机相互协作完成一个共同的任务。这使得各台计算机组成一个完整的,功能强大的计算机系统。

四、操作系统的功能

从资源管理的观点出发,操作系统功能可分为五大部分:处理器管理、存储管理、文件管理、设备管理和作业管理。


>> 操作系统原理2 —— OS结构

计算机系统是由硬件系统软件系统两部分组成,操作系统软件系统的一个组成部分,它是直接在硬件系统的基础上工作的,所以在研究操作系统之前,先必须对计算机系统的结构有一个基本的了解,本章就是讲述计算机系统结构的基本知识。

本章的知识要点是:

  1. 计算机系统的层次结构
  2. 硬件环境
  3. 操作系统结构

一、计算机系统的层次结构

现代的通用计算机系统是由硬件和软件组成的一种层次式结构,最内层是硬件系统,最外层是使用计算机系统的人,人与硬件系统之间是软件系统。

二、 硬件环境

(1)CPU和外设的并行工作

(2)I/O中断的作用

(3)存储结构

  • 主存储器CPU能直接访问的唯一的存储空间,任何程序和数据都必须被装入主存储器之后,CPU才能对它进行操作。主存储器以“字节(BYTE)”为单位进行编址,若干字节组成一个“字(WORD)”。中央处理器可以按地址读出主存储器中的一个字节或一个字的内容。
  • 辅助存储器解决了主存储器容量不足,以及主存储器无法保存信息的问题。辅助存储器的优点是容量大且能永久保存信息,缺点是无法被中央处理器直接访问,必须通过主存储器才能访问。
  • 中央处理器存储信息的速度依次为:存取寄存器中的信息速度最快;通过系统总线存取主存储器的速度居中;使用辅助存储器的信息速度最慢。

    寄存器用来存放临时的工作信息和系统必须的控制信息。

    主存储器中存放操作系统的核心部分,以及当前需执行的程序和数据。

    辅助存储器是存放操作下的非核心部分和其他程序和数据。

    磁盘的信息可随机存取,磁带上的信息只能顺序存取。

(4)硬件保护

    在资源共享的计算机系统中,只有有了必要的保护措施,才能使个别的错误不致影响其他程序。

三、操作系统结构

层次结构的最大特点是把整体问题局部化。把一个大型复杂的操作系统分解成若干单向依赖的层次,由各层的正确性来保证整个操作系统的正确性。

采用层次结构,能使结构清晰,便于调试,有利于功能的增、删和修改,正确性容易得到保证,也提高了系统的可维护性和可移植性。

操作系统的一种层次结构如下图所示:

作业管理
文件管理 
设备管理
存储管理
处理器管理
硬件

>> 操作系统原理3 —— 多道程序

通过本章学习应该掌握多道程序设计是如何提高计算机系统效率的;进程与程序有什么区别;进程的基本状态以及状态变化;进程队列及进程调度策略;中断的作用。

一、 进程

  1. 进程的定义:把一个程序在一个数据集上的一次执行称为一个“进程”。
  2. 进程是由程序、数据集和进程控制块三部分组成。我们举一个例子,比如在有一个用户程序notepad.exe(记事本),当它存放在磁盘上时,就是一个程序,在windows操作系统下运行它时,就会在内存中建立一个记事本程序的进程,而我们在记事本中编辑的当前文字就是这个进程的数据集,操作系统会为当前的进程设置一个进程控制块。如果我们再打开一个记事本程序的窗口,就会建立另一个进程,此时运行的是同一个程序,但存在两个进程,第二个窗口中的编辑内容就是第二个进程的数据集
  3. 进程与程序 的区别及关系。程序是静止的,进程是动态的。进程包括程序和程序处理的对象(数据集),进程能得到程序处理的结果。进程和程序并非一一对应的,一个程序运行在不同的数据集上就构成了不同的进程。通常把进程分为“系统进程”和“用户进程”两大类,把完成操作系统功能的进程称为系统进程,而完成用户功能的进程则称为用户进程。

二、 进程状态

通常,根据进程执行过程中不同时刻的状态,可归纳为三种基本状态:

  1.  等待态 :等待某个事件的完成;
  2.  就绪态 :等待系统分配处理器以便运行;
  3.  运行态 :占有处理器正在运行。

进程的状态变化:

进程在执行中状态会不断地改变,每个进程在任何时刻总是处于上述三种基本状态的某一种基本状态,进程状态之间转换关系如下图所示:

运行态→等待态 往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的。

等待态→就绪态 则是等待的条件已满足,只需分配到处理器后就能运行。

运行态→就绪态 不是由于自身原因,而是由外界原因使运行状态的进程让出处理器,这时候就变成就绪态。例如时间片用完,或有更高优先级的进程来抢占处理器等。

就绪态→运行态 系统按某种策略选中就绪队列中的一个进程占用处理器,此时就变成了运行态。

三、 进程队列

       1、 进程队列的链接。

  在多道程序设计的系统中往往会同时创建多个进程。在单处理器的情况下,每次只能让一个进程运行,其他的进程处于就绪状态或等待状态。为了便于管理,经常把处于相同状态的进程链接在一起,称“进程队列”,由于进程控制块能标志进程的存在和动态刻画进程的特性,因此,进程队列可以用进程控制块的连接来形成。链接的方式有两种:单向链接和双向链接。

       2、 进程基本队列

  就绪队列 :由若干就绪进程按一定次序链接起来的队列。

  等待队列 :把等待资源或等待某些事件的进程排列的队列。

       3、进程的入队和出队。

  出队和入队 :当发生的某个事件使一个进程的状态发生变化时,这个进程就要退出所在的某个队列而排入到另一个队列中去。

  出队 :一个进程从所在的队列退出的操作称为出队

  入队 :一个进程排入到一个指定的队列的操作称为入队。

  系统中负责进程入队和出队的工作称为队列管理

       无论单向链接还是双向链接,解决入,出队问题,都是首先找到该队列的队首指针,沿链找出要入队的进程以及它要插入的位置,或找出要出队的进程,然后修改本进程指针(入队情况)和相邻进程的有关指针值即可。

四、 中断优先级和中断屏蔽

       1、 中断优先级是硬件设计时确定的。中断装置按预定的顺序来响应同时出现的中断事件,这个预定的顺序称为“中断优先级”。中断优先级是按中断事件的重要性和紧迫程度来确定的 ,是由硬件设计时固定下来的。一般情况下,优先级的高低顺序依次为: 硬件故障中断自愿中断 程序性中断 外部中断 和 输入输出中断 

       2、中断的嵌套处理

       3、中断屏蔽的作用。中断优先级只是规定了中断装置响应同时出现的中断的次序,当中断装置响应了某个中断后中断处理程序在进行处理时,中断装置也可能去响应另一个中断事件。因此会出现优先级低的中断事件的处理打断优先级高的中断事件的处理,使得中断事件的处理顺序与响应顺序不一致,而且会形成多重嵌套处理,使多现场保护、程序返回等工作变的复杂。

中断屏蔽技术就是为了解决上述问题而提出的在一个中断处理没有结束之前不响应其他中断事件,或者只响应比当前级别高的中断事件。于是,当中断装置检查到有中断事件后,便去查看PSW中中断屏蔽标志,如果没有屏蔽就响应该中断;否则,暂时不响应该中断,待屏蔽标志消除后再响应。自愿中断是不能屏蔽的。


>> 操作系统原理4 —— 存储管理

本章考核知识点:1、重定位 2、固定分区存储管理 3、可变分区存储管理 4、页式存储管理 5、段式存储管理 6、虚拟存储器

操作系统的存储管理如同一个大地主,管着一个大庄园,当有农户需要租用田地时,地主就给分配一块地让他种(用户区分配)。等到地里长出了果实,结果出来后,地主还得来收回这块地(去配)。

为了管好这片田地,地主还要管好庄园的门,凡是要进去种地的,都得由地主根据他的需要让他到位置确定实际的田地上去干活。(把逻辑地址转换成物理地址)

庄园里还有一些大家共同可以使用的地方,比如地主的花园,工具房等,大家可以进去,也可以使用,但是不许改变任何现有的东东,还有,每个农户只能在自己的地里刨食吃,如果有人胆敢到别人地里或地主的花园里摘花偷食,可要当心他们养的狼狗跳出来哦。(共享和保护)

当然,再大的地也是不够多的,地主为了多赚些钱,当所有的地都租出去的时候,他想办法把有些种田人暂时不种的那块地里的东东连地皮一起挖出来放到仓库里先堆着。把地腾出来租给别人种(这一招可够绝的,不过地主说啦,这就是“虚拟存储”。)

一、 页式存储管理

       1、如何分页和分块

  页式存储管理中有两个名词:“ 页 ”和“ 块 ”,其中的“块”是针对硬件来说的,就是把存储器分成若干相等大小的区,每个区就称为一个块。对应的,在程序中,逻辑地址进行“分页”,其大小和每个块相一致。

  事实上,页面的大小是由块的大小自然决定的。对于程序来说,其逻辑地址还是和原来一样采用连续的地址。只是 按照块的位数取其前面数位做为页号 .

  分配空间时,根据作业长度可以确定它的页面数,根据这个页面数在主存中分配相应的块数,只要是空闲块就可以放入,即使不是相邻的。并把分配情况记在“页表”中,根据页表可以找到相对应的页号与块号,就得出绝对地址了。

  2、采用页式管理,使主存空间充分利用,页不必为了得到连续空间而进行移动。 可以提高系统效率。

  3、页表的构造与作用

  每个被装入主存的作业都有一张 页表 ,指出该作业逻辑地址中的页号与所占用的主存块号之间的对应关系。页表的长度由作页拥有的页面数决定,行号对应为页号,行中记录的是主存中的块号。

  页表是硬件进行地址转换的依据,每执行一条指令时按逻辑地址中的页号查找页表并转换成绝对地址。

  在多道程序设计系统中,进入主存的每个作业都有一张页表,由一个硬件“页表控制寄存器”来记录每个作业的页表所在位置和长度以便作业转换时同时转换页表。

  4、快表的构造与作用

  快表 就是页表的一部分克隆,每行中有页号及其对应的块号,整个快表存放在一个小容量的高速缓存中,访问时快表和内存同时进行查找,因为快表速度很快,而常用的页都登记在快表中,因此可以大大加快执行速度。

  5、采用页式管理的地址转换过程

  (为什么不直接用块分配表来记录而要用位示图呢,因为主存块很多,这样可以节省空间,提高效率。位示图就是用一个位(0或1)来表示一个块的使用状态,一个字32位,可以表示32块。按顺序排列,只需一小段内存就可以记录主存中大量的块状态)

  6、利用位示图实现页式存储空间的分配和回收

  页式存储管理把主存空间分成大小固定的许多块,在装业作业时,如何知道主存中哪些块已使用,哪些还未用,可以用位示图来表示。

  块号=字号×字长+位号

  字号=[i/字长](即块号i除以字长取整)

  位号=i mod 字长(即块号i除以字长取余)。


>> 操作系统原理5 —— 文件管理

文件和文件名 :在计算机系统中,把逻辑上具有完整意义的信息集合称为“文件”,每个文件都要用一个名字作标识,称为“文件名”。

用户请求使用文件的操作步骤

  1)读文件:打开文件→读文件→关闭文件

  2)写文件:建立文件→写文件→关闭文件

  3)删除文件:关闭文件→删除文件


>> 操作系统原理6 —— 设备管理

要求了解设备管理与文件管理的合作,文件管理实现文件存取的准备工作,而文件的物理存取由设备管理实现。理解怎样实现独占设备的分配和磁盘的驱动调度;怎样实现虚拟设备。

一、 独占设备和共享设备

独占设备好比是你家的抽水马桶,当你坐上去的时候,大家就是想用也得等你完事了站起来才可以用上。

共享设备呢,就像是我家的水龙头,我在洗手的时候,可以把手移开让我妈来打盆水。然后我又继续洗手。

  1、 独占设备 是指每次只能供一个作业执行期间单独使用的设备。如输入机、磁带机、打印机等。

  2、 共享设备 是指允许几个作业执行期间可同时使用的设备。

  3、共享设备的“同时使用”的含义是指多个作业可以交替启动共享设备,当一个用业正在使用设备时其他作业暂不能使用,即每一时刻仍只有一个作业占用,但当一个作业正在使用设备时其他作业就可使用。


>> 操作系统原理7 —— 作业管理

理解计算机系统中把用户要求处理的一项工作称为一个作业,作业可分为批处理作业和交互式作业两大类;掌握操作系统是如何实现作业调度和控制作业执行的;理解作业高度与进程调度之间的关系以及各自的职责。

一、 作业和作业步

       1、 作业 :我们把用户要求计算机系统处理的一个问题称为一个“作业”

       2、 作业步 :任何一个作业都要经过若干加工步骤才能得到结果,我们把作业的每一个加工步聚称为一个“作业步”。


>> 操作系统原理8 —— CPU管理,进程

本章考核知识点 :1、进程的顺序性与并发性 2、与时间有关的错误 3、相关临界区 4、进程的互斥 5、进程的同步 6、进程通信 7、线程的概念

理解“进程”是操作系统中的基本执行单位,在多道程序设计的系统中往往同时有许多进程存在,它们要轮流占用处理器。这些交叉执行的并发进程相互之间可能是无关,也可能是相关的。当并发进程竞争共享资源时会出现与时间有关的错误,因此,应采用进程同步与互斥手段使其合理使用共享资源,以保证系统安全。当进程间必须通过信息交换进行协作时,可用进程通信的方式达到目的。

一、 进程的顺序性与并发性

有人说,在程序中不是有跳转语句和重复语句,怎么就是顺序执行?注意,这里是指进程在处理器中的执行,因为处理器每次只能执行一个操作,因此每条指令必须按顺序进入CPU执行,假使有一条指令是跳转的,那么执行本指令后,会取出跳转目的地址的指令进入CPU运行,这个顺序是程序规定的。所以对CPU而言,进程总是按顺序执行

进程是一个程序在一个数据集合上的一次执行,同一个程序和同一个数据集的运行结果必然是相同的。这就是可再现性。

同时执行并不是真的同时,因为任一时刻CPU中只能有一个进程运行。

       1、进程的顺序性 :任何进程在顺序的处理器上的执行是严格按照顺序进行的,这就是进程的顺序性。当一个进程独占处理器顺序执行时,具有两个特性: 一、封闭性 ;二、可再现性 。

  2、进程的同时执行 :在多道程序设计系统中,一个进程的工作没有全部完成之前,另一个进程就可以开始工作,它们的执行在时间上重迭的,我们把它们称为是“可同时执行的”。

  3、进程的并发性 :若系统中存在一组可同时执行的进程,则说该组进程具有并发性,并把可同时执行的进程称为“并发进程” 。

  4、并发进程间的关系:并发进程相互之间可能是无关的,也可能是交往的。如果一个进程的执行不影响其他进程的执行,且与其他进程的进展情况无关,即它们是各自独立的,则这些并发进程相互之间是无关的。如果一个进程的执行依赖其他进程的执行,则这些并发进程之间是有交往的。

二、 与时间有关的错误

       1、并发进程的执行速度取决于自身和进程调度策略。一个进程运行时会被中断,且断点是不固定的,一个进程被中断后,哪个进程可以运行,被中断的进程什么时候占用处理器,是与进程调度策略有关的。因此进程的执行速度不能由自己决定。

       2、并发进程交替使用共享资源时会出现与时间有关的错误。 由于共享资源的原因,加上进程并发执行的随机性,一个进程对另一个进程的影响是不可预测的。造成不正确的因素与进程占用处理器的时间、执行的速度以及外界的影响有关。因此被称为与时间有关的错误。

三、 相关临界区

       1、 临界区的定义:并发进程中与共享变量有关的程序段称为“临界区”

  2、什么是相关临界区 : 相关临界区是指并发进程中涉及到相同变量的那些程序段 

  3、对相关临界区的管理要求。

  1) 一次最多让一个 进程在临界区执行,当有进程在临界区时其他想进入临界区执行的进程必须等待。

  2)任何一个进入临界区执行的进程必须在有限的时间内退出临界区,即任何一个进程都不应该无限地逗留在自己的临界区。

  3)不能强迫一个进程无限地等待进入它的临界区,即有进程退出时应让一个等待进入临界区的进程进入它的临界区。

四、 进程的互斥

1) 进程互斥的含义:进程的互斥是指当有若干进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用,其他要使用该资源的进程必须等待,直到占用资源者释放了该资源。

PV操作是两个过程,由他们两个来控制一个信号S,假设S是红灯的个数。

每个进程进入临界区前都要先执行P操作退出临界区执行V操作。用下面的比喻很容易理解:

       临界区门前有棵树(S)

  用来挂红灯

  进程想进CPU的门

  先得上树取盏灯(调用一次P操作)

  取下一个去敲门(S=S-1)

  如果树上没灯取(S≤0)

  树说欠你一盏灯(S为负时)

  没辙只好外边排队等( W ait (S))

  得灯进程续运行

  运行完了要出门(调用一次V操作)

  马上还回一盏灯(S=S+1)

  若有进程在催债(S≤0)

  放个进去事完成( Release (S))

2) 实现进程互斥的工具——PV操作。

PV操作是由两个操作,即P操作和V操作组成。P操作和V操作是两个在信号量上进行操作的过程。假定用S表示信号量则把这两个过程记作P(S)和V(S),它们的定义如下: 

Procedue P(Var S: Semaphore);
begin S:=S-1;
if S<0 
then W(S) 
end;
{P} 

Procedue V(Var S: Semaphore);
begin S:=S+1;
if S<=0 
then R(S) 
end;
{V}

为了确保PV操作自身的正确执行,因此P(S)和V(S)操作中不可中断,这种 不可被中断的过程称为“原语 ”。

3) 用PV操作管理相关临界区的一般形式

一个信号量与一组涉及共享变量的相关临界区联系起来,信号量的初值定为“1”。

任何一个进程要进入临界区前先调用P操作,执行临界区的操作后,退出临界区时调用V操作。

由于信号量的初值为“1”,P操作起到了限制一次只有一个进程进入临界区的作用,其余进程欲进入临界区必须符合对临界区管理的第一个要求,即一次最多让一个进程在临界区执行。进程退出后执行V操作,若有进程在等待则释放一个进程,这样就达到了对临界区管理的第二个和第三个要求(即不能无限逗留也不能无限等待)。


>> 操作系统原理9 —— 死锁

本章考核知识点 :1、死锁的产生 2、死锁的防止 3、死锁的避免4、死锁的检测

一、 死锁的产生

话说狼GG和狼MM面对面走上一根独木桥。

狼GG说:呵呵,小MM,我已经占领了这座桥的一半,你不如退出去让我先过去吧。

狼MM说,哼哼,老兄,我也占了这座桥的一半,你咋不让给我?

狼GG和狼MM互不相让,都在等对方先让步。结果两个都过不了河。等着猎人来处理后事了。

       1、什么叫死锁 : 若系统中存在一组进程(两个或多个进程),它们中的每一个进程都占用了某种资源而又都在等待其中另一个进程所占用的资源,这种等待永远不能结束,则说系统出现了“死锁”。或说这组进程处于“死锁”状态。

  2、引起死锁的因素:死锁的出现除了与资源的分配策略有关外,也与并发进程的执行速度有关,即操作系统对资源管理不得当或没有顾及进程并发执行时可能出现的情况,则就可能形成死锁。

二、 死锁的防止

我们把桥的一半看作一个资源的话,那么,当狼MM占用了其中一个资源后,狼GG就只好等待了。

       狼GG狼MM各自占有了一段资源又在等另外的资源,又不肯放弃自己占有的资源。

  他们又不能把对方踢下河去,把另一段资源抢过来自己用。

  只好互相等待了。

这4个条件是必要条件而不是充分条件,意思是,只要发生死锁,那么这四个条件必然都成立。反之则不然,有时候即使四个条件都满足,那也不一定发生死锁。(从资源分配图中可以分析得到,即使形成循环等待资源,也不一定形成死锁。)

1、系统出现死锁必然同时保持的四个必要条件:

  1)互斥使用资源

  2)占有并等待资源

  3)不可抢夺资源

  4)循环等待资源

2、死锁的防止策略 :要防止死锁形成,只要采用的资源分配策略能使上述4个条件中有一个条件不成立就可以了。

       1)破坏互斥使用资源的条件经常是行不通的。因为资源本身特性就是互斥使用的

  2)要破坏“占有并等待条件”则可以采取两种办法: 静态分配 和 释放已占资源 .

  静态分配 也称为 预分配资源 ,要求每一个进程在开始执行前就申请它所需要的全部资源,仅当系统能满足进程的资源申请要求且把资源分配给进程后,该进程才能开始执行。

  释放已占资源 就是指进程申请资源时必须没有占用资源,如果已经占用了资源就要先归还所占的资源再申请。

  3)实现 可抢夺式分配 :如果一个进程已经占有了某些资源又要申请新资源,而新资源不能满足(已被其它进程占用)必须等待时,系统可以抢夺该进程已占有的资源。

  4)实现 按序分配 :把系统中所有资源排一个顺序,对每一个资源给一个确定的编号,规定任何一个进程申请两个以上的资源时,总是先申请编号小的资源,再申请编号大的资源。

三、 死锁的避免

死锁的避免不同于死锁的防止,死锁的防止是采用某种分配策略后,系统就不会产生死锁,这好比是你打过了某种预防针,再也不会得那种病。而死锁的避免是没有打预防针,但是通过其他办法,避免得病。因此有“安全状态”的说法,对应的,当然也有不安全状态。就像人都有得病的可能,不必任何病都打预防针。只要注意防病,仍然可以安全健康的生活。

       1、 安全状态 :如果操作系统能保证所有的进程在 有限的时间 内得到需要的 全部资源 ,则称系统处于“安全状态”。

  2、区分死锁的 避免 与死锁的 防止 :当采用了防止死锁的资源分配策略后,系统中就不会形成死锁。但是可以防止死锁的资源分配策略中,有的只适用于对某些资源的分配,有的会影响资源的使用效率。这时可用使用死锁的避免。

死锁的避免是解决死锁的另一种方法,它不同于死锁的防止。在系统中不采用防止死锁的资源分配策略,而是估计到可能有死锁发生时避免死锁的发生。

  3、银行算法是怎样避免死锁的:

  银行家算法是这样的

  1)当一个用户对资金的最大的需求量不超过银行家现有的资金时就可以接纳该用户。

  2)用户可以分期贷款,但贷款的总数不能超过最大需求量。

  3)当银行家现有的资金不能满足用户的尚需贷款时,对用户的贷款可推迟支付,但总能使用户在有限的时间里得到贷款。

  4)当用户得到所需的全部资金后,一定能在有限的时间里归还所有资金。

  我们把操作系统看作是银行家,操作系统管理的资源相当于是银行家管理的资金,则银行家算法就是:

  1)当一个进程首次申请资源时,测试该进程对资源的最大的需求量,如果不超过系统现存资源时就可以按他的当前申请量为其分配资源。 否则推迟分配。

  2)进程执行中继续申请资源时,测试该进程占用资源和本次申请资源总数有没有超过最大需求量。超过就不分配,没超过则再测试现存资源是否满足进程还需要的最大资源量,满足则按当前申请量分配,否则也推迟分配。

总之,银行家算法要保证分配资源时系统现存资源一定能满足至少一个进程所需的全部资源。这样就可以保证所有进程都能在有限时间内得到需要的全部资源。这就是安全状态。

四、 死锁的检测

就是既不打预防针,也不去避免得病,而是经常去体检,如果发现有病了就治疗。这是一种事后解决的办法,也算是解决死锁问题的一条途径。但这毕竟要付出较大代价。

  1、什么是 死锁的检测 :对资源的申请和分配不加限制,只要有剩余的资源就可把资源分配给申请者。这样可能会出现死锁,系统定时运行一个“死锁检测程序”,如果检测到死锁发生,则必须先解除死锁再继续工作。

  2、怎样实现死锁的检测:1、每个资源当用中只有一个资源 2、资源类中含有若干个资源。

  3、 死锁的解除 :一般采用两种方式来解除死锁,一种是终止一个或几个进程的执行以破坏循环等待;另一种是从涉及死锁的进程中抢夺资源。

  检测死锁和解除死锁都要付出很大代价。所以用死锁检测的方法解决死锁问题只适用于 不经常发生死锁 的系统中。

2019-03-18 00:00:14 my_share 阅读数 1389
  • 面向对象分析与设计

    本课程介绍软件设计理念、方法,帮助学员成长为优秀的软件设计师!当学员完成了Java等语言的学习之后,或者从事 软件开发一段时间之后,面对一个需要开发的新软件系统: 该如何入手呢?定义多少个模块?定义多少个类?定义每个类多少个属性、哪些操作? 如何定义类之间的关系?为什么? 这样的软件系统能够承受今后需求的不断变更吗? 想学的话一起来吧!

    1088 人正在学习 去看看 姜宁康

            关于华为的操作系统,华为声称不在必要的时候不采用。继续使用安卓系统。当然我感觉是如果你安卓系统敢收费,估计就要必要的时候了。一个操作系统,做起来没有10年8年是不能成型的。看样子华为无论从芯片还是从系统,在很久很久以前就部署了。华为的无人车上道试验了,在深圳有新闻消息的。真不知道华为还有多少科技。当然后面的都是后话,还是说操作系统。有国产操作系统的还有另外一家。阿里巴巴。

            阿里巴巴的飞天操作系统。09年开始的计算操作系统,18年的时候才新闻第一次听说,9年的时间啊。既然是计算机操作系统,计算机操作系统就是电脑操作系统,和微软的windows操作系统是等同的。操作系统除了手机端的安卓系统(ios系统),微软的windows系统(linux系统),基本上没有其他的操作系统了。

          我毛华望微信15889765314,深圳工程师。博客http://blog.csdn.net/my_shar

           有了操作系统,为何不用呢??

           华为的操作系统。余承东给出的说法是:“华为的确拥有备用系统,但仅在必要情况下使用。说实话,我们并不想使用。”对这句话我插一句没用的,我怎么感觉就是出于商业考虑,纯粹是为了说而说。华为的操作系统一定是基本上可以灵活使用的,不是一个残次的备用品。你的备用手机和你手上在用手机是不是有档次差别,这并不是一个备用系统。就目前情况来说,华为的操作系统还不能用,需要其他软件公司的支持才行,才能形成生态。你安卓的软件,是不是不能用在ios上。不兼容的问题是不是很多。华为的操作系统,你安装不了支付宝,安装不了微信,安装不了地图,我看看你怎么使用。这就是生态。

              阿里巴巴的飞天操作系统呢??同样有相同的困境。我并没有特别的去了解这个系统情况。好像飞天系统用的也不多,只是在阿里云上使用。为何只在阿里云上使用呢?因为生态。将来这个软件还会用在什么地方呢??军工,超算等特别的地方。相对来说闭环生态,不需要支持太多的软件。电脑软件同样也有很多不兼容的,PS就要分windows版本,linux版本。

             我的想法也很简单。希望能公开使用。不使用使用,操作系统怎么会进步。还有华为的芯片,阿里巴巴藏着掖着的技术。即使定期小批量试产也是好的。就和导弹一样,不拿出来溜溜,到时候出了情况都不知道怎么紧急应对。

2016-11-14 19:25:05 u011046042 阅读数 2660
  • 面向对象分析与设计

    本课程介绍软件设计理念、方法,帮助学员成长为优秀的软件设计师!当学员完成了Java等语言的学习之后,或者从事 软件开发一段时间之后,面对一个需要开发的新软件系统: 该如何入手呢?定义多少个模块?定义多少个类?定义每个类多少个属性、哪些操作? 如何定义类之间的关系?为什么? 这样的软件系统能够承受今后需求的不断变更吗? 想学的话一起来吧!

    1088 人正在学习 去看看 姜宁康
	常见的嵌入式系统有这么多:Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX 、Rtems 、QNX、INTEGRITY、OSE、C Executive、autosar
	什么是嵌入式操作系统?嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统的重要组成部分。嵌入时操作系统具有通用操作系统的基本特点,能够有效管理复杂的系统资源,并且把硬件虚拟化。 
从应用角度可分为通用型嵌入式操作系统和专用型嵌入式操作系统。常见的通用型嵌入式操作系统有Linux、VxWorks、Windows CE.net等。常用的专用型嵌入式操作系统有Smart Phone、Pocket PC、Symbian等。 
按实时性可分为两类: 
	实时嵌入式操作系统主要面向控制、通信等领域。如WindRiver公司的VxWorks、ISI的pSOS、QNX系统软件公司的QNX、ATI的Nucleus,很多汽车电子行业都是利用实时性很强的操作系统等。 
非实时嵌入式操作系统主要面向消费类电子产品。这类产品包括PDA、移动电话、机顶盒、电子书、WebPhone等。如微软面向手机应用的Smart Phone操作系统。 
	嵌入式系统的设计和实现而言,基本上需要四种不同的工作:系统设计工作,硬件设计工作,驱动程序和操作系统移植工作和应用程序设计开发工作。
 1.系统设计工作                     
	在系统的设计阶段,系统分析师将根据需求确定系统的硬件的基本构成,根据系统的需求选择使用那种处理器,使用哪种操作系统,使用那些软件开发工具。系统分析师往往是较为完整的参与过嵌入式系统设计的全过程,对于系统应用的行业较为了解,对于嵌入式系统本身的开发流程十分清楚的人。
2.硬件设计工作	
	系统硬件设计人员需要根据系统分析师的设计结果,进行硬件原理图的设计。通常需要硬件设计人员熟悉嵌入式系统的硬件构成。硬件设计人员需要了解常用的嵌入式系统处理器,存储器(Flash,SDRAM),以太网MAC芯片,音频/视频编解码芯片,电源管理芯片,总线接口电路 (USB,PCI),液晶显示模块,可编程逻辑器件(FPGA/CPLD),无线网络通信模块(Bluetooth,WLAN,GPRS)等硬件电路构成元素的基本工作原理,连接使用方法,使用注意事项,基本调试方法等内容。在网络上能找到很多公司的评估板的原理图,对于这些原理图要仔细研究,摸清处理器同存储器,网卡,液晶模块等器件的连接方法和原因。通过对这些电路的研究,能够较快地了解整个嵌入式系统的构成,这些电路同实际产品中的电路虽有一定差别的,特别是对于手持设备,但这些差别不影响初学者学习嵌入式系统的硬件设计基本构成。

1)学习 Linux系统安装、 常用命令、应用程序安装。

2) 学习 Linux 下的 C 编程、这本书必学《UNIX 环境高级编程》、《UNIX 网络编程》,Rechard Stevens 写的,C 高手大都学习过 《C 和指针》、《C 缺陷与陷阱》、《高质量C/C++编程指南》、《C 专家编程》、《The C programming Language》
3)程序员大都要学:数据结构,嵌入式程序员数据结构必学!
4)底层开发人员大都要学:微机原理、计算机体系结构,嵌入式开发人员必学!
5)单片机可以让一个从事软件开发的人了解和如何操作硬件,有必要学,因为一开始就从 ARM 入手,不太现实!
6)ARM 体系结构,其中有汇编。
7)数字电路有必要学习,不然你在做底层开发时真的会不知道怎么看原理图,起码也得懂与或门吧。
8)ARM + Linux 应用程序开发。(前提是要有开发板)
9)要做底层开发,就必须知道软硬件之间是如何衔接和配合工作的,那么电子技术应该要好好学习了,很多时候会用到模拟电路知识,这是区别好手与菜鸟的不同之处之一。
10)Linux 下的汇编要学,这样你才能真正了解你写的程序是如何在一个特定的硬件上跑的。这是区别好手与菜鸟的不同之处之二。
11)TCP/IP 协议栈要学,所有的嵌入式高手都得掌握的东西,这是区别好手与菜鸟的不同之处之三。
12)有了这些东西,拿下 Linux 驱动 已经不再话下,需要你去学习 Linux 内核源代码和Linux驱动程序设计,这是一个技术升华。
13)音频、视频的解码译码技术你得学。
14)各种 IC ,各种 bootloader 你能够参与其开发设计。
15)自行设计开发新产品,新技术。
	学到这个地步差不多要花个3年的时间吧。但是后面的路该怎么走呢?嵌入式系统性的东西搞了一个产品之后,基本上一些套路都摸清楚了。不同的行业,对于系统的要求是不一样的,比如汽车行业,航空航天行业等一些高精度,高安全的需要对实时性要求非常之高,对于安全性和可靠性的要求非常严格。而有些行业比如消费类产品,娱乐类的,生活用具方面的对于用户体验是不一样的,数码产品对于一些图像声音的处理,要求更高,需要高清,高品质的。而对于一些通信设备类对于网络的应答数据传输要求就非常严格,等等。这些根据不同的要求,选择符合自己的操作系统,能对开发工作有更大的帮助。

操作系统知识清单

阅读数 253

没有更多推荐了,返回首页