Linux 是一种开源的类 UNIX 操作系统。它的内核(kernel)是由 Linus Torvalds 在 1991 年首次发布。内核是操作系统的核心部分,负责管理系统的硬件资源,如 CPU、内存、磁盘 I/O 等。例如,当一个程序需要访问内存时,内核会决定是否允许该程序访问,并分配相应的内存空间。
围绕内核,有各种各样的软件和工具构成了完整的 Linux 操作系统。这些软件包括系统工具(如文件管理工具、进程管理工具)、用户应用程序(如文本编辑器、浏览器等)和各种服务(如网络服务、数据库服务)。
操作系统 = 内核 + 其他程序
内核 = 进程管理 + 内存管理 + 文件管理 + 驱动管理+…
其他程序 = 例如函数库 + shell程序 + …
一个基本的程序集合,称为操作系统——操作系统是一款进行管理软件、硬件的软件
上面我们已经讲清楚了操作系统是什么?
接下来我们将从操作系统为什么?以及操作系统怎么办?进行讲解
先说结论:
对下,与硬件交互,管理所有的软硬件资源 对上,为⽤⼾程序(应⽤程序)提供⼀个良好的执⾏环境
系统软件部分
硬件部分,其实就是冯诺依曼结构,有兴趣的读者可以看看作者的上一篇文章——冯诺依曼体系结构的介绍
在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件
在学校当中,我们知道有校长、辅导员、学生这三个身份,其中校长就是管理者,学生是被管理者,辅导员是什么我们暂且不谈,当校长需要对我们进行管理的时候,需要见到我们吗?答案显而易见,并不需要,他只需要对辅导员下达命令,让辅导员对我们进行管理,而辅导员就是一个承上启下的一个点,他从校长那边接收指令,给学生进行反馈,我们的信息,比如学习成绩、获得的奖项、学费交没有交,等等问题,校长都可以不需要通过自己去搜索,而是通过辅导员——对我们进行管理。
操作系统在硬件管理方面,主要是通过协调和调度计算机硬件资源的使用,确保系统中的硬件资源得到高效、合理的利用。具体包括:
CPU调度:操作系统调度 CPU 时间片,以实现多任务的并发执行。通过调度算法(如先来先服务、时间片轮转、优先级调度等),操作系统保证多个进程能够公平、有效地使用 CPU。它也负责进程间的同步与互斥,避免竞争条件和死锁等问题。
内存管理:操作系统通过硬件支持的机制(如分页、分段等)管理物理内存和虚拟内存的映射,确保内存资源的有效利用。它负责内存的分配与回收,防止内存泄漏和溢出问题。
I/O设备管理:操作系统通过 I/O 子系统(如 I/O 控制器、驱动程序等)管理各种硬件设备,调度硬件设备的输入输出操作。它为设备提供抽象接口,屏蔽设备差异性,使得应用程序能够在不同硬件平台上运行时获得一致的操作体验。
硬件抽象层(HAL):操作系统通过硬件抽象层将硬件的具体实现与操作系统其他部分进行解耦。HAL使得操作系统能够在不同的硬件平台上运行,而无需为每个平台编写专门的代码,从而提高了操作系统的可移植性。
计算机管理硬件
描述起来,⽤struct结构体
组织起来,⽤链表或其他⾼效的数据结构
操作系统在软件管理方面的作用主要体现在对运行在计算机上的各类程序(如应用程序和系统程序)的调度、分配和控制。具体包括:
进程管理:操作系统负责创建、调度和销毁进程。它实现了多任务并发运行,并保证进程之间的合理分配 CPU 时间,以提高系统的响应能力和资源利用率。进程的状态切换(如从就绪到运行、从运行到阻塞)由操作系统控制。
内存管理:操作系统负责将内存空间合理地分配给各个运行中的进程,并确保它们不会互相干扰。通过虚拟内存、分页机制等,操作系统提供了对内存的抽象管理,使得每个进程拥有独立的内存空间。操作系统还负责内存的回收和垃圾回收。
文件系统管理:操作系统通过文件系统提供对文件的管理功能,包括文件的创建、删除、读写和访问控制等。文件系统管理确保文件存储的结构性、有效性和数据的完整性。
设备管理:操作系统通过设备驱动程序来管理硬件设备,提供统一的接口,使得用户程序可以方便地与硬件进行交互。它调度硬件设备(如硬盘、打印机、显示器等)的输入输出操作,确保硬件设备的高效、稳定工作。
在 Linux 系统中,系统调用(System Call)和库函数(Library Function)是两种不同层次的功能调用方式,用于与操作系统交互。
定义:系统调用是操作系统内核为用户程序提供的接口,用于完成需要内核权限的操作,例如文件操作、进程管理、内存管理等。
特性:
调用方式:
示例:
文件操作:open(), read(), write()
进程管理:fork(), execve(), wait()
内存管理:mmap(), brk()
定义:库函数是操作系统或开发环境提供的一组常用功能的实现,属于用户态代码,用于简化开发工作。
特性:
调用方式:
示例:
标准 C 库函数:printf(), fopen(), malloc()
数学库函数:sin(), cos(), sqrt()
字符串处理:strlen(), strcpy(), strcat()