【Linux】操作系统的认识

在这里插入图片描述

✨ 坚持用 清晰易懂的图解 + 代码语言, 让每个知识点都 简单直观
🚀 个人主页不呆头 · CSDN
🌱 代码仓库不呆头 · Gitee
📌 专栏系列

💬 座右铭“不患无位,患所以立。”



摘要

操作系统是计算机系统中最核心的软件,用于对底层硬件进行统一管理,并为上层用户提供安全、稳定和高效的运行环境。它通过内核实现内存管理、进程调度、文件管理和驱动控制等核心功能;同时借助驱动程序完成与底层硬件的解耦;再向上提供用户操作接口(命令行、图形界面、库函数等),让用户能够以简洁、直观的方式使用复杂的系统资源。理解操作系统的管理本质,就是理解其如何通过“抽象”和“组织”来屏蔽底层复杂性,实现对硬件和软件的统一调度与管理。


目录

一、概念

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核和其他程序

  • 内核:进程/任务/线程管理,文件系统,内存管理,驱动管理。
  • 其他程序:例如函数库,shell程序等等。
    在这里插入图片描述

二、设计OS的目的

  • 对下,与硬件交互,管理所有的硬件资源。
  • 对上,为用户提供良好(稳定,高效,安全)的执行环境。

但是这里的用户是指程序员,而不是普通人、用户,因为普通用户使用的app软件和客户端是由程序员开发的,并不会接触到操作系统;而程序员开发软件等,必然会接触到操作系统。所以此处的用户指的是程序员。

在这里插入图片描述


三、对上,对下解析

1. 底层硬件

我们肉眼可见的计算机就相当于计算机的底层硬件,如CPU,RAM,显示屏等等,如下的表格,看似他们很多,很乱,但是他们是遵守冯·诺依曼体系结构的:输入设备到内存,然后通过中央处理器(CPU)处理后返回到内存,然后到输出设备。

在这里插入图片描述

分类具体硬件操作系统管理方式/作用
处理器(CPU相关)CPU、寄存器、时钟/定时器、ALU、FPU任务调度、上下文切换、时间片管理、运算执行
存储与管理主存(RAM)、Cache(L1/L2/L3)、ROM/BIOS/UEFI、MMU内存分配、虚拟内存、内存保护、地址转换
输入输出设备磁盘/SSD、键盘、鼠标、显示器、打印机、USB设备等通过设备驱动与 OS 交互,抽象为文件/事件/图形输出
总线与控制器系统总线(PCIe、AMBA 等)、I/O 控制器、DMA 控制器提供数据传输通道、管理外设通信、实现高效 I/O
特殊硬件中断控制器(PIC/APIC)、GPU、网卡(NIC)、TPM安全模块中断管理、图形处理、网络收发、安全加密支持

2. 操作系统

但是单单只有硬件是不够的,我们还需要有一个软件来对这些硬件进行管理。例如,内存何时从输入设备读取数据?读取多少数据?内存何时刷新缓冲区到输出设备?是按行刷新还是全刷新?这些都是由软件进行管理的,而这个软件就是操作系统(Operator System)。

在这里插入图片描述
而操作系统又主要进行着四项管理:分别是内存管理,进程管理,文件管理和驱动管理。

  • 内存管理:内存分配、内存共享、内存保护以及内存扩张等等。
  • 进程管理:其工作主要是进程的调度。
  • 文件管理:文件存储空间的管理、目录管理、文件操作管理以及文件保护等等。
  • 驱动管理:对计算机设备驱动程序的分类、更新、删除等操作。

3. 驱动

但是我们直接让操作系统和底层硬件打交道吗?如果我们使用操作系统来对输入内容进行读取操作,那么当我们改变键盘的输入模式,会导致读取的方式改变,我们操作系统内核的源代码就需要重新进行编译,这样对操作系统的维护成本太高了,所以我们需要一个驱动层。

在这里插入图片描述
而驱动层的主要工作就是单独去控制底层硬件的。例如,键盘有键盘驱动,网卡有网卡驱动,硬盘有硬盘驱动,磁盘有磁盘驱动。驱动简单来说就是对应去访问某个硬件,访问这个硬件的读、写以及硬件当前的状态等等,驱动层就是直接和硬件打交道的。而驱动一般是由硬件制造厂商提供的,或是由操作系统相关的模块进行开发的(例如网卡)。此时操作系统就只需关心何时读取数据,而不用关心数据是如何读取的了,也就是完成了操作系统与硬件之间的解耦。


4. 用户层

而操作系统往上就是面向普通用户的用户层,用户可以通过命令行和图形用户界面与操作系统进行交互。而背后所有的硬件管理与资源分配都由操作系统的内核层来完成。

在这里插入图片描述


5. 系统调用接口

如果用户直接访问操作系统的话(尤其是内核),会破坏其安全性,稳定性和隔离性,可能导致系统崩溃、数据丢失甚至安全漏洞。因此现代操作系统都采用 用户态 / 内核态隔离,只允许通过受控的 系统调用接口 来访问内核。

在这里插入图片描述


6. 用户操作接口

操作系统提供的底层硬件接口通常非常复杂且具体,直接操作这些底层资源对于普通用户和开发者来说不现实。用户操作接口(如系统调用、库函数、命令行和图形界面)提供了一种 抽象层,使得开发者和用户不需要关心复杂的硬件细节,而可以通过简单的指令或函数调用来实现目标。

例如:通过 printf 输出文本,而不需要了解字符如何通过硬件发送到显示器。

在这里插入图片描述


四、理解操作系统的“管理”

精髓:先描述,再组织!

这里我们举一个例子来了解管理,我们有学生、辅导员和校长三个角色。显然,校长在这三个人当中是管理者,学生是被管理者,那么辅导员充当什么角色?

  1. 其实我们完成任何一件事情都需要经过两个过程,第一个是决定要不要做这件事或者如何做这件事(相当于做决策);第二是付出行动的做这件事(相当于执行)。如上述例子,校长是管理者,管理学校的学生,校长就是那个做决策的人,但是他做决策后并不需要自己去执行(因为他是校长,哈哈哈),所以我们辅导员的作用就是去充当做执行的校色。所以辅导员的主要任务就是执行管理者的决策,称之为执行者。
  2. 虽然校长是管理者,但是我们学生身为被管理者在学校一般能看到校长人吗?所以校长是如何做到在我们看不到的情况下对我们进行管理的呢?

举个例子,现在校长要求辅导员将电子信息工程02班成绩排名前十的学生的各科资料以及平时表现记录拿过来,他将从这十名同学之中选出三名学生参加本次的全国电子设计大赛,当辅导员将资料拿来后校长选出三名学生说:“就这三个了,你找个老师对这三名学生进行一下强化训练,然后参加本次的大赛。”然后校长就什么也不管了。

  1. 在这个过程中,校长根本没有见过这三名同学,就对其进行了管理,他根据的是什么?没错,他根据的是数据。
  2. 实际上,学校将我们每个学生的各种信息都进行了管理,基本信息、成绩信息以及健康信息等等。
  3. 每一套信息就描述了一名学生,校长通过对这些信息的管理就能做到对学生的管理。这么一套信息在C语言当中我们称之为抽象结构体,而在C++当中又叫做面向对象。
  4. 当学生的数量多起来了,校长就可以将全部学生的信息组织起来,当然组织的方式有很多种(链表、顺序表、树),而每种组织方式都有其自己的优势,于是就有了一门课程专门教我们管理数据的方式,那就是数据结构。这里我们假设校长以双链表的形式将学生的信息组织起来。
  5. 此时校长对各个学生的管理,实际上就变成了对双链表的增删查改。当有新生时直接向该双链表加入一个结点,当学生毕业后直接将学生信息从该双链表当中移除即可。

总结

操作系统的核心价值在于 对下管理硬件、对上提供接口。通过内核、驱动和用户接口三层递进,操作系统既保证了硬件的高效利用,又为用户和开发者提供了友好、简洁的交互方式。同时,操作系统的管理精髓在于对复杂资源的 抽象与组织,这与我们在数据结构中学习到的思想相一致。掌握操作系统,不仅是理解计算机如何工作的关键,也是进一步深入编程、系统开发和计算机科学的必经之路。


不是呆头将一直坚持用清晰易懂的图解 + 代码语言,让每个知识点变得简单!
👁️ 【关注】 看一个非典型程序员如何用野路子解决正经问题
👍 【点赞】 给“不写八股文”的技术分享一点鼓励
🔖 【收藏】 把这些“奇怪但有用”的代码技巧打包带走
💬 【评论】 来聊聊——你遇到过最“呆头”的 Bug 是啥?
🗳️ 【投票】 您的投票是支持我前行的动力
技术没有标准答案,让我们一起用最有趣的方式,写出最靠谱的代码! 🎮💻

Linux操作系统是一种开源、多用户、多任务的操作系统,广泛应用于服务器、嵌件式设备、超级计算机和个人计算机等领域。其设计哲学强调模块化、灵活性和可移植性,使得Linux在多种硬件平台上都能高效运行[^1]。 ### Linux的基本概念 1. **内核与用户空间** Linux系统通过区分内核空间(Kernel Space)和用户空间(User Space)来增强系统的稳定性和安全性。内核空间负责处理核心功能,如进程调度、内存管理、文件系统和网络协议栈等;而用户空间则运行应用程序,如文本编辑器、浏览器和数据库等。这种设计确保了即使应用程序出现错误,也不会直接影响操作系统的稳定性[^2]。 2. **模块化设计** Linux内核采用模块化架构,允许动态加载和卸载设备驱动程序和其他核心功能,而无需重新编译整个内核。这种灵活性使得Linux能够适应不断变化的硬件环境和功能需求。 3. **文件系统** Linux支持多种文件系统格式,如ext4、XFS、Btrfs等,提供强大的文件管理能力。文件系统不仅用于存储普通文件,还用于表示设备、进程和网络连接等系统资源。 4. **Shell与命令行** Linux提供了强大的命令行接口(CLI),如Bash、Zsh等,用户可以通过Shell执行命令、编写脚本以实现自动化任务。Shell是用户与内核之间的重要交互界面。 ### Linux的核心特性 1. **开源与自由软件** Linux是基于GNU通用公共许可证(GPL)发布的开源操作系统,用户可以自由获取、修改和分发源代码。这种开放性促进了全球开发者社区的协作与创新。 2. **多用户与多任务** Linux天生支持多用户环境,每个用户都有独立的账户和权限设置。同时,它具备强大的多任务处理能力,能够同时运行多个应用程序并高效调度系统资源。 3. **安全性与权限管理** Linux提供了细粒度的权限控制系统,通过用户、组和其他三类权限模型(读、写、执行)来保护系统资源。此外,Linux还支持SELinux、AppArmor等安全模块,进一步增强系统安全性。 4. **网络功能强大** Linux内置了丰富的网络协议栈支持,包括TCP/IP、IPv6、NFS、Samba等,能够轻松构建各种网络服务和通信应用。 5. **可移植性与跨平台支持** Linux内核被设计为高度可移植,支持从嵌入式设备到超级计算机的多种硬件架构,如x86、ARM、MIPS等。这种跨平台能力使Linux成为开发通用操作系统和定制化系统的理想选择。 ### 示例:查看当前系统信息 ```bash uname -a ``` 该命令将输出当前Linux系统的内核版本、主机名、操作系统类型等基本信息。 ---
评论 67
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值