内容来自:Linux介绍
视频推荐:Linux基础入门教程-linux命令-vim-gcc/g++ -动态库/静态库 -makefile-gdb调试
day01
基础概念
Linux 是 UNIX 操作系统的一个克隆系统, 但是Linux是开源的。
Linux是一个基于文件的操作系统。操作系统需要和硬件进行交互, 对应Linux来说这些硬件都是文件,比如: 操作系统会将 硬盘, 鼠标, 键盘, 显示屏等抽象成一个设备文件来进行管理。
一些名词
GNU:Gnu's Not Unix. 可以理解成一种口号,号召软件自由。
POSIX:(Portable Operating System Interface for Computing Systems)是由 IEEE 和 ISO/IEC 开发的一套标准。POSIX 标准是对 UNIX 操作系统的经验和实践的总结,对操作系统调用的服务接口进行了标准化,保证所编制的应用程序在源代码一级可以在多种操作系统上进行移植。
BSD开源协议: BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以"为所欲为"。
GPL:General Public License. GNU通用公共许可证,GPL 授予程序的接受方下述的权利,即 GPL 所倡导的"自由":
- 可以以任何目的运行所购买的程序;
- 在得到程序代码的前提下,可以以学习为目的,对源程序进行修改;
- 可以对复制件进行再发行;
- 对所购买的程序进行改进,并进行公开发布。
自由软件:GNU项目下的所有软件都基于GPL许可证(非GNU项目也可使用GPL),都是自由软件。
版本号选择
官方每年会发布两个版本, 每个版本的版本号由两部分组成: 主版本号 + 副版本号
- 主版本号为当年年份, 长期支持版的年份为偶数, 测试版年份为奇数
- 副版本号为月份,在4月份发布的为相对稳定版, 在10月份发布的为测试版
因此应当选择主版本号为偶数,副版本号为 04的版本,进行安装使用。
Linux 内核
Linux 的内核主要由 5 个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。
-
进程调度 SCHED:
-
进程调度指的是系统对进程的多种状态之间转换的策略。
-
每启动一个可执行程序都会得到一个进程,进程的运行需要CPU的加持,而CPU的资源有限,如果要同时执行多个可执行程序(即,同时处理多个进程),需要分时复用CPU的时间片,时间的长短由内核决定。
-
进程调度有3种策略:
-
SCHED_OTHER:分时调度策略(默认),是用于针对普通进程的时间片轮转调度策略。
-
SCHED_FIFO:实时调度策略,是针对运行的实时性要求比较高、运行时间短的进程调度策略。
-
SCHED_RR:实时调度策略,是针对实时性要求比较高、运行时间比较长的进程调度策略。
-
FIFO和RR需要人为指定。
-
-
内存管理 MMU:
-
内存管理是多个进程间的内存共享策略。在Linux中,内存管理主要说的是虚拟内存。
-
每启动一个磁盘上的可执行程序,都会得到一个虚拟地址空间。虚拟地址空间又分为内核区和用户区。只可以操作修改用户区。
-
将虚拟地址空间里面的数据先映射到物理内存,再通过CPU对物理内存里面的数据进行处理
-
-
虚拟文件系统 VFS:
- 用程序(纯软件)将数据写入到磁盘(硬件),中间需要一个缓冲层,即操作系统提供的文件管理。
-
网络接口:
- 网络接口分为网络协议和驱动程序,网络协议是一种网络传输的通信标准,而网络驱动则是对硬件设备的驱动程序。Linux 支持的网络设备多种多样,几乎目前所有网络设备都有驱动程序。
-
进程间通信:
进程之间需要进行数据的交流才能完成控制、协同工作等功能,Linux 的进程间通信是从 UNIX 系统继承过来的。
- 启动的多个程序若需要进行数据交互,必须要使用进程间通信。
- Linux 下的进程间的通信方式主要有管道、信号、消息队列、共享内存和套接字等方法。