Linux发展史、操作系统-10.9
引言:Linux操作系统发展史
- 贝尔实验室(Multics) => UNIX => GNU => GPL => Linux
一、Linux操作系统
1.CPU构架类型
X86
- 分为32位和64位,目前64位为主流
ARM
- 通常应用在移动端设备上,如平板、手机等
M68000
- 摩托罗拉系CPU
Alpha
- 惠普系CPU
2.CPU指令
为了避免普通用户操作硬件可能引发的风险,操作系统采用了不同的CPU级别进行权限管理。其中,ring0为内核态,权限最高;ring1和ring2一般不使用;而ring3为用户态,供普通程序执行,权限相对较低。

特权指令
- 由操作系统运行的指令
普通指令
- 由应用程序运行的指令,如果应用程序想要完成特权操作,则需向内核申请,操作系统代理完成
- 应用程序发出的调用请求被称为系统调用(System call)
3.计算机程序设计和执行的过程

低级语言
机器语言
- 由二进制语言0和1组成,计算机通过此语言执行相应操作
汇编语言
- 汇编语言是特定于特定计算机体系结构的计算机或其他可编程设备的低级编程语言,汇编语言构成的部分叫源程序,需要翻译成机器语言才能被执行,翻译的过程叫做汇编,这一过程用到的应用程序叫做汇编程序,属于系统软件中的一种源处理类型
高级语言
解释语言(python、php、shell)
- 将源程序解释成机器语言。解释的过程是逐步进行的,用到的是解释程序,不产生目标程序
编译语言(C、C++、java、go)
- 将源程序编译成机器语言。编译的过程是一次进行的,用到的是编译程序,产生目标程序

4.操作系统内核核心功能
-
进程管理
- 进程管理涉及对CPU执行时间的管理,其核心任务是合理分配CPU的时间片给等待运行的进程。简而言之,进程管理的目的就是确保CPU资源被有效地分配给每一个进程,以优化系统性能和响应时间。
-
内存管理
- 内存管理涉及主存储器空间的管理,包括内存的分配与回收,以确保高效利用内存资源。
-
文件系统
- 文件系统是操作系统用于组织存储设备上数据的方法,将所有内容抽象为文件进行存储和读取。不同操作系统支持不同的文件系统格式,例如Windows支持NTFS和FAT,而Linux支持ext2/3/4和XFS。
-
硬件驱动
- 负责管理与计算机连接的外部设备,如鼠标、键盘、U盘等。这些驱动程序虽然与计算机的主硬件无直接关系,但它们是操作系统与这些外部设备通信的桥梁。为了使这些设备正常工作,需要安装相应的驱动程序,这属于操作系统内核的特定功能之一。
-
网络管理
- 网络管理涉及操作系统为设备分配IP地址,配置路由信息,网络适配器则遵循如TCP/IP协议栈来封装数据帧,确保数据在网络中正确传输。
-
安全管理
- 安全管理确保了程序员与底层硬件之间的隔离,防止因误操作导致硬件损坏,操作系统充当了保护屏障的角色。
5.编程层次
硬件规格
- 这是最底层的编程,直接面向硬件进行编程,通常由嵌入式工程师完成。他们需要了解硬件的具体规格和指令集,直接操作硬件寄存器来控制硬件行为。
系统调用
- 这一层次将底层的硬件功能抽象成有限的接口供上层使用。在Linux系统中,大约有400个左右的系统调用。这些系统调用为程序员提供了一种方式来请求内核提供服务,如文件操作、进程管理等,而不需要直接与硬件交互。
库调用
- 库调用是在系统调用之上的一层抽象,操作系统或第三方提供了一系列的库函数,通常是C或C++程序库,这些库函数封装了系统调用,提供了更简单易用的接口。
6.程序的内部运行接口
API
- API是一套预先定义的规则和协议,用于构建和交互软件应用程序。它详细描述了软件组件之间如何交互,包括可以调用的函数、方法、类以及它们的使用方式。API充当抽象层,隐藏了底层服务的实现细节,允许开发者通过简单的编程接口访问复杂系统的功能。简而言之,API定义了请求的制作方法和格式,以及预期的响应。
- PS:想象一下,你去一家餐厅吃饭。餐厅提供了菜单(API),上面列出了你可以点的所有菜(功能)。你不需要知道这些菜是如何制作的,你只需要告诉服务员你想要什么(调用API),然后服务员就会帮你把菜做好并端上来。API就像是餐厅的菜单,它告诉你有哪些功能可以用,以及如何使用它们,而不需要你知道背后的具体实现细节。
ABI
- ABI是一套规范,它定义了不同二进制程序模块之间的接口,这些模块可能是编译后的程序代码、库或者操作系统本身。它涵盖了如何在不同程序模块间传递数据、调用函数的细节,包括寄存器的使用、栈的组织、数据类型的大小和对齐方式等。ABI确保了编译后的代码能够在不同编译器版本或者不同语言编写的模块之间正确地交互。简而言之,ABI定义了二进制层面的接口标准,确保了编译后的程序能够在特定的硬件和操作系统平台上无缝运行。
- PS:再想象一下,你点了一道菜,服务员需要将这个信息传达给厨房的厨师。这时候,服务员和厨师之间有一个约定(ABI),比如用什么样的手势表示某个菜,或者用特定的语言来描述菜的做法。ABI就是这些底层的约定,确保了服务员(你的程序)和厨师(操作系统或库)能够正确地理解对方的意思,并做出正确的响应。ABI确保了不同部分的程序能够像齿轮一样紧密配合工作,即使它们是由不同的团队或公司开发的。
7.UI程序接口(人机交互接口)
GUI图形用户接口
- GUI图形用户接口是UI程序接口的一种形式,它通过图形界面来展示信息,允许用户使用鼠标、触摸屏或其他输入设备进行交互。这种接口以其直观性和易用性而著称,用户可以通过点击图标、菜单和窗口等图形元素来执行命令,无需记忆复杂的命令语法,从而提高了操作的便捷性和用户的整体体验。
CLI命令行接口
- CLI命令行接口作为UI程序接口的另一种形式,依赖于文本输入和输出进行人机交互。用户通过在命令行中输入特定的命令来操作计算机,这种接口的优势在于其高效性和精确性,特别适合进行自动化任务、脚本编写和远程管理。CLI要求用户对系统命令有一定的熟悉度,但能够提供比图形界面更快的操作路径和更细粒度的控制。
8.程序的运行模式
用户空间
- 用户空间是操作系统为应用程序提供的一个执行环境,它是一个受保护的内存区域,应用程序在其中运行并执行用户级别的任务。在这个空间中,程序不能直接访问硬件资源,而是通过系统调用请求内核提供的服务,这样可以防止恶意或错误的应用程序破坏系统稳定性。
内核空间
- 内核空间直接管理硬件资源并运行系统的核心功能。在这个空间中,操作系统内核执行诸如内存管理、进程调度、设备驱动程序和系统调用处理等任务。内核空间具有最高的权限,可以直接访问所有的硬件资源,因此需要非常稳定和高效。
9.POSIX:可移植操作系统规范
- POSIX是一种标准,确保使用其API编写的程序源代码可以在不同操作系统间移植。尽管API通用,但ABI不同,导致编译后的二进制文件不能跨操作系统直接运行。在Windows中,程序格式为EXE和DLL,而在Linux中为ELF格式的可执行文件和SO格式的共享对象。
二、开源技术领域
1.GNU、GPL协定
- GNU项目旨在开发一个完全自由的类Unix操作系统,而GPL(GNU通用公共许可证)是一种广泛使用的开源许可协议,要求软件的衍生作品必须保持开源,允许用户运行、研究、修改和分发软件,旨在保障软件自由和促进软件共享。
- GNU组织由理查德·斯托曼创立,旨在开发一个完全自由的操作系统。GPL(通用公共许可证)是GNU使用的一种开源协议,包括GPLv2和GPLv3等版本,其中GPLv3因过度开源可能影响程序员积极性。LGPL是GPL的宽松版本,允许软件部分开源且可作为商业软件。
- 开源是一种开发模式,非商业模式。
- 程序通常由二进制指令、配置文件、库文件和帮助文档组成,通过修改配置文件可实现功能差异化,库文件提供功能调用,帮助文档指导用户如何使用这些功能。
2.Linux发行版
RPM系
- Red Hat Enterprise Linux (RHEL):一个商业发行版,面向企业用户,提供长期支持和服务。
- Fedora:由Red Hat赞助的社区项目,注重最新软件和技术,适用于桌面和服务器。
- CentOS:基于RHEL构建,免费且开源,成熟版本,但是目前已停服淘汰。
- Rocky Linux:由社区驱动,目标是提供稳定、可靠和长期支持的企业级 Linux 发行版,适用于服务器和桌面环境。
Debian系
- Debian:一个完全由社区驱动的项目,以其稳定性和安全性著称,是许多其他发行版的基础。
- Ubuntu:基于Debian,以用户友好和易于使用而闻名,广泛用于桌面、服务器和云计算。
其他系
- Arch Linux:一个滚动更新的发行版,以简洁和“Do It Yourself”哲学著称,允许用户从头开始构建系统。
- Gentoo:以其极端的可定制性而闻名,用户可以从源代码编译整个系统以满足特定需求。
- Slackware:一个非常古老的发行版,注重简洁和“Keep It Simple, Stupid”原则。
- Alpine Linux:一个轻量级发行版,专注于安全性和资源效率,特别适合容器和云环境。
- Void Linux:使用runit初始化系统而不是systemd,提供滚动更新,支持XBPS包管理系统。

浙公网安备 33010602011771号