Linux学习笔记-计算机基础(2)
2.操作系统
2.1 操作系统的功能
OS:Operating System 操作系统,通用目的的软件程序
主要功能:
- 硬件驱动
- 进程管理
- 内存管理
- 网络管理
- 安全管理
- 文件管理
OS分类:
- 服务器OS:CentOS,Ubuntu,Windows Server,AIX
- 桌面OS:Windows 10,Mac OS,Fedora
- 移动设备OS:Andriod,IOS,AliOS,HarmonyOS
2.2 操作系统相关概念
接口:interface,软件包对外提供的功能模块的函数接口,操作系统通过接口的方式建立用户和计算机硬件的沟通方式,用户通过调用操作系统的接口来使用计算机的各种计算服务。
操作系统一般提供的重要接口:
- 命令行:通过shell终端提供功能,shell调用操作系统提供的函数
- 窗口界面:通过窗口程序接受操作系统消息队列的键鼠动作,做出响应
ABI:Application Binary Interface,应用程序二进制接口,ABI描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行
运行程序格式:
- Windows: PE(portable executable)格式, .dll(dynamic link library),.lib
- Linux: ELF(Executable and Linking Format)格式, .so(shared object), .a
API:Application Programming Interface,应用程序开发接口,API定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译
POSIX: Portable Operating System Interface 可移植的操作系统接口
- IEEE在操作系统上定义的一系列API标准
- POSIX兼容的程序可在其它POSIX操作系统编译执行
ABI 与 API 的区别
通过上面的介绍,可以知道 ABI 和 API 是两种完全不同的东西。二者的区别可总结概括为如下几点:
- 描述的内容不同:ABI规定了二进制文件的格式、内容、装载/卸载程序的要求、函数调用时的参数传递规则、寄存器、堆栈的使用;API规定操作系统、硬件平台、服务组件、语言函数库等需要提供的功能函数接口;
- 作用的层面不同:ABI描述二进制层面的接口,API描述代码级层面的接口;
- 兼容的难度不同:ABI的兼容程度比API更为严格,即ABI实现兼容更加困难。
用户态和内核态:
为了增加操作系统的稳定性和安全性,将内核程序与用户程序隔离开,在硬件层面上提供了一次机制,将程序执行的状态分为了不同的级别,从0到3,数字越小,访问级别越高。0代表内核态,在该特权级别下,所有内存上的数据都是可见的,可访问的。3代表用户态,在这个特权级下,程序只能访问一部分的内存区域,只能执行一些限定的指令

函数库和系统调用:

对于非一般性使用需求,操作系统提供了一系列的函数调用给软件开发者,由软件开发者来实现一些用户需要的功能。这些函数调用由于是操作系统内核提供的,为了有别于一般的函数调用,被称为系统调用。比如使用C语言进行软件开发时,经常用的printf函数,它的内部实际就是通过write这个系统调用,让操作系统内核把字符打印在屏幕上的。
用户和内核空间:

用户空间:User Space
用户程序运行空间。只能执行简单的运算,不能直接调用系统资源,必须通过系统接口才能想内核发送指令
内核空间:Kernel Space
Linux内核的运行空间,可以执行任意 命令,调用系统的一切资源
范例:
str = "www.magedu.com" // 用户空间
x = x + 100 // 用户空间
file.write(str) // 切换到内核空间
y = x + 200 // 切换回用户空间
说明:第一行和第二行都是简单的赋值运算,在 User space 执行。第三行需要写入文件,就要切换到Kernel space,因为用户不能直接写文件,必须通过内核安排。第四行又是赋值运算,就切换回 User space
编程语言:
- 低级语言:计算机能理解的语言,二进制
机器语言:0和1
汇编语言:和机器语言一一对应,与硬件相关的特有代码,比如驱动程序开发
- 中级语言:C语言,系统应用、驱动程序
- 高级语言:Java,Python,Go,PHP,C#,应用程序开发,人类语言实现
2.3 各种操作系统
操作系统演变:
单用户系统》批处理系统》多道程序系统》分时系统》个人计算机====>分布式计算机
服务器三大操作系统
-
Windows
-
Linux:GNU/Linux
-
Unix:1969年 Ken Thompson
System:Bell Lab
AIX (IBM)
Soliars(SUN)
HP-UX(HP)
-
BSD:(BSRG)Berkeley System Distribution
NetBSD
OpenBSD
FreeBSD
服务器操作系统市场

Unix历史

1964年,贝尔实验室、麻省理工大学和GE美国通用电气公司共同发起了Multics(多路信息)的计划,目的是让大型主机可以同时支持300个以上的终端机连线使用1966年 Ken Thompson加入贝尔实验室,参与Multics系统的研发,他基于Multics开发了“star travel”游戏,,1969年,由于种种原因最后贝尔实验室选择退出。Ken就没有机器再玩这个游戏了,于是他决定自己写一个操作系统来满足需求,Ken找到一台废弃已久的老式PDP-7并在机器上重写了他的游戏。在这个过程中Ken决定开发一个全新的操作系统,利用PDP-7上的汇编语言,在一个月中完成了操作系统的内核、文件系统、编辑器和编译程序的开发。

1969年Unix的雏形UNICS初现
Ken Thompson 汇编语言 B语言
1973 正式命名为 Unix
Dennis Ritchie C语言
1977 BSD
Berkeley Software Distribution 伯克利大学
1979 System V架构 版权声明
HP-UNIX IBM AIX “不对学生提供源码” 收回版权
1984年 Minix操作系统
Andrew S. Tanenbaum 荷兰阿姆斯特丹自由大学计算机科学系
GNU

GNU:GNU is not Unix
1984年由Richard Stallman发起并创建
目标是编写大量兼容于Unix系统的自由软件
GPL:GNU General Public License
自由软件基金会:Free Software Foundation
允许用户任意复制、传递、修改及再发布
基于自由软件修改再次发布的软件,仍需遵守GPL
LGPL:Lesser General Public License,LGPL相对于GPL较为宽松,允许不公开全部源代码
GNU操作系统:
Hurd:Hird(Hurd of Interfaces Representing Depth) of Unix-Replacing Daemons
官网:http://www.gnu.org/software/hurd/hurd.html
2.4 Linux

1991年的10月5日Linus Benedict Torvalds在comp.os.minix 新闻组上发布消息,正式向外宣布他自行编写的完全自由免费的内核诞生(Freeminix-like kernel sources for 386-AT) — FREAX,含义是怪诞的、怪物、异想天开类Unix的内核,在GPL下发布
官网:www.kernel.org
Linux操作系统:
Linux内核+GNU工具=Linux/GNU
Linux的内核版本组成
- 主版本号
- 次版本号
- 末版本号
- 打包版本号
- 厂商版本


Linux发行版本
-
slackware:SUSE Linux Enterprise Server (SLES) , OpenSuse桌面
-
debian: ubuntu,deepin(深度),mint
-
redhat: RHEL: RedHat Enterprise Linux, 每18个月发行一个新版本
CentOS: Community Enterprise Operating System 兼容RHEL的格式
中标麒麟:中标软件
Fedora:每6个月发行一个新版本
-
Alpine: 一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musllibc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,只有5M左右大小
-
ArchLinux:轻量简洁,遵循K.I.S.S.原则( keep it simple and stupid ),Manjaro
-
Gentoo:极致性能,不提供传统意义的安装程序,下载源代码在本机上编译安装软件
-
LFS:Linux From scratch 自制Linux,只是一个说明书
-
Android:kernel+busybox(工具集)+java虚拟机
Linux 分支参考网站:http://futurist.se/gldt/
Linux发行版排名: https://distrowatch.com/dwres.php?resource=popularity
2.5 开源 open source

开源Open Source
- 软件和开源代码提供给所有人,自由分发软件和源代码,free是自由而不是免费的意思
- 能够修改和创建衍生产品
软件分类:
- 商业:收费,源码也不公开
- 共享:免费使用,但源码不公开
- 自由:源代码公开
开源协议
世界上的开源许可证大概有上百种, 不同协议对源码的使用要求也不同

- GPLv2, GPLv3, LGPL(lesser) :通用公共许可 copyleft
- Apache: apache
- BSD: bsd
- Mozilla
- MIT
2.7 LINUX的安装
2.7.1 Linux哲学思想
- 一切皆文件
- 小型、单一用途的程序
- 链接程序,共同完成复杂的任我游
- 避免令人困惑的用户界面
- 在文本中配置数据存储
2.7.2 Linux生产主流版本
Linux 各种版本
Centos 各版本介绍
https://zh.wikipedia.org/wiki/CentOS
RHEL各版本介绍
https://zh.wikipedia.org/wiki/Red_Hat_Enterprise_Linux
Ubuntu 各版本介绍
https://zh.wikipedia.org/wiki/Ubuntu
https://blog.csdn.net/songfulu/article/details/85310273
获取发行版
CentOS
https://wiki.centos.org/Download
https://mirrors.tuna.tsinghua.edu.cn/centos/
Ubuntu
http://cdimage.ubuntu.com/releases/ server版
http://releases.ubuntu.com/ desktop版
2.7.3 安装Linux系统
CentOS7安装流程
https://www.cnblogs.com/dreamfreedom/p/11563236.html
CentOS8安装流程
https://www.cnblogs.com/wzb0228/p/12653104.html
Ubuntu18.04 安装流程

浙公网安备 33010602011771号