- A+
镜像下载、域名解析、时间同步请点击 阿里云开源镜像站
一、操作系统
OS(Operating System)既操作系统,是一个包含通用目的或者功能的软件程序,这些通用目的包含了以下几项:
- 硬件驱动
- 内存管理
- 进程管理
- 网络管理
- 安全管理
- 文件管理
OS主要有三大分类,既服务器OS、桌面OS以及移动设备OS,常用的如CentOS和Windows Server等都属于服务器OS;Windows10、Mac OS和Fedora都是属于桌面OS;移动设备上最常使用的Android 和 IOS则属于移动设备OS
操作系统与硬件、应用软件与操作系统以及用户与应用软件的交互是通过接口来进行的,而关于开发接口有两个标准既ABI、API以及POSIX
- ABI:Application Binary Interface,ABI描述了应用程序与OS之间的底层接口,允许编译好的代码在使用了兼容ABI系统中运行
- API:Application Programming Interface,API定义了源代码与库之间的接口,同样的源代码可以在支持API的任何系统中编译和运行
- POSIX:Portable Operating System Interface,可移植操作系统接口,IEEE(电气与电子工程师协会)在操作系统上定义的一些类API标准,POSIX兼容的程序可以在其他POSIX操作系统编译执行
Windows中的程序的运行格式一般是exe,其中.dll结尾的是程序依赖的一些动态库,.lib结尾的则是静态库。Linux中的程序是ELF,.so是指动态编译,.a是指静态编译
User Space:用户空间既用户程序的运行空间,用户空间是隔离的,既用户程序的崩溃不会对操作系统和内核有任何影响,用户空间运行的程序只能进行简单的运算,无法直接调用系统资源,必须通过接口(System Call)向内核发出指令,如文件打开关闭以及写入等操作
Kernel Space:内核空间既Linux内核的运行空间,可以执行任意命令,调用一切系统资源
Context Change:上下文切换,指的是单核CPU情况下,CPU有时在执行用户空间的任务有时在执行内核空间的任务,这种任务或者是工作区域的切换就是上下文切换,切换时必须要保存当前任务状态之后,才能切换到下一个任务,上下文切换是不可避免的,但是减少上下文切换的次数可以提供性能
操作系统上运行的编程语言的分类如下:
- 低级语言:机器语言0和1,汇编语言和机器语言一一对应,与硬件相关的特有代码和驱动程序开发
- 中级语言:如C语言,偏向于系统级应用和驱动程序的开发
- 高级语言:Python、Java、Go、PHP等,偏向于应用程序开发
二、Linux
操作系统主要有三类既服务器OS、桌面OS和移动OS,其中服务器OS有三大操作系统级Windows、Linux和Unix,其中Linux是占有率最高的服务器OS
Unix的历史
- 1965年前后,起源于Multics,Multics是由贝尔实验室、MIT以及通用电气公司GE共同发起的多路信息计算系统(Multics)计划,旨在让主机的资源可以提供更多的使用者来使用。后来贝尔实验室退出了该计划
- 1969年Unix的雏形UNICS出现
- 1973年正式命名为Unix
- 1977年发布了Berkeley Software Distribution,是Unix的衍生系统,由加州大学伯克利分校发布
- 1979年发布了System V架构版权声明,HP-UNIX IBM AIX 收回版权,不对学生提供源码
- 1984年Minix操作系统,由阿姆斯特丹自由大学计算机教授Andrew S.Tanenbaum发布
由于Unix版权收回,1984年Richard Stallman发起并创建了GNU,目标是变了大量基于Unix的自由软件,后发布了为GPL许可证,允许用户任意复制、传递、修改以及在发布,再后来发布了LGPL协议,LGPL协议更为宽松,允许不公开全部源代码
Linux发布
1991年10月5日,Torvalds发布了自行编写的完全自由免费的内核FREAX,基于GPL协议,一个完成的类Unix系统如CentOS、Ubuntu等就是Linux内核+GNU自由软件组成
Linux的内核版本由以下几部分组成:
- 主版本号
- 次版本号
- 末版本号
- 编译版本号
- 厂商版本号
当前Linux内核的最新稳定版是5.18
Linux有众多发行版,如REDHAT、Debian、Android等,Linux发行版的名称和版本号由发行版的维护者决定
Linux的哲学思想
- 一切皆文件(包括硬件)
- 小型、单一用途的程序
- 链接程序,既共同完成复杂的任务
- 避免令人困惑的用户界面
- 配置数据存储在文本中
开源协议
开源既OpenSource,将软件和源代码提供给所有人,可以修改和创建衍生软件
开源许可协议大概共有上百种,其中MIT是最宽松的开源协议
Linux的目录
目录名 | 作用 |
---|---|
/bin | 存放常用的命令的目录 |
/boot | Linux 启动时的一些核心文件、连接文件以及镜像文件 |
/dev | 存放 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的 |
/etc | 存放所有的系统管理所需要的配置文件和子目录 |
/home | 用户主目录,Linux 中每个用户都有一个自己的目录,目录名是以用户的账号命名的 |
/lib | 存放系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库 |
/lost+found | 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件 |
/media | Linux 系统会自动识别一些设备,如U盘、光驱等等,识别后 Linux 会把识别的设备挂载到这个目录下 |
/mnt | 该目录是为了让用户临时挂载别的文件系统的,可以将光驱挂载在 /mnt/ 上,进入该目录后就可以查看光驱里的内容 |
/opt | 主机额外安装软件所摆放的目录,默认为空 |
/proc | /proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息 |
/root | 该目录为系统管理员,也称作超级权限者的用户主目录 |
/sbin | 存放系统管理员使用的系统管理程序 |
/selinux | Redhat/CentOS 特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,这个目录就是存放selinux相关的文件的 |
/srv | 存放一些服务启动之后需要提取的数据 |
/sys | 该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs |
/tmp | 存放一些临时文件 |
/usr | 用户很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录 |
/var | var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件 |
/run | 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run |
/usr/bin | 系统用户使用的应用程序 |
/usr/sbin | 超级用户使用的比较高级的管理程序和系统守护程序 |
/usr/src | 内核源代码默认的放置目录 |
sys 目录下安装的 sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统,该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。