操作系统初识:从硬件架构到核心原理

在日常使用计算机、手机等设备时,我们每天都在与操作系统打交道 ------ 打开 APP、浏览网页、传输文件,这些操作的背后都离不开操作系统的调度与管理。但操作系统究竟是什么?它如何协调硬件与软件?进程、地址空间这些核心概念又该如何理解?本文将结合冯诺依曼体系结构、操作系统核心功能、进程管理等关键知识点,带大家走进操作系统的世界。

1. 冯诺依曼体系结构

要理解操作系统,首先要搞懂计算机的硬件架构 ------ 几乎所有现代计算机都遵循冯诺依曼体系结构。这个结构就像计算机的 "骨架",决定了硬件组件的协作方式。

冯诺依曼体系将计算机划分为四大核心部分:

输入设备: 键盘、鼠标、摄像头、网卡等,负责将外部数据传入计算机;
存储器:内存 ,是数据流转的 "交通枢纽";
中央处理器(CPU): 包含运算器控制器 ,是数据处理的核心;
**输出设备:**显示器、打印机、网卡、音响等,负责将处理结果反馈给外部。

关键原则:所有设备只与内存交互

一个极易混淆的点是:CPU不能直接访问输入 / 输出设备,只能对内存进行读写;而外设(输入/输出设备)要输入或输出数据,也必须通过内存中转。

这样设计的原因很简单 ------CPU 的运行速度远超外设,如果让外设跟CPU直接"打交道",就会让整个操作流程被拖慢,产生短板效应,整体速率取决于外设的数据读取速率,内存的加入能缓解 "短板效应",让系统效率大幅提升。

短板效应,又称木桶效应,简单解释为一个木桶能承多少水取决于它最短的那块板:

数据流动实例:QQ 聊天背后的逻辑

以 QQ 发送消息为例,数据的流转过程清晰体现了冯诺依曼体系的工作原理:

  1. 你通过键盘输入消息(输入设备),数据被写入内存;

  2. CPU 从内存读取该消息,进行必要的处理(如编码)后,再写回内存;

  3. 网卡(输出设备)从内存读取处理后的消息,通过网络传输给对方设备;

  4. 对方设备的网卡接收消息后写入内存,CPU 处理后再通过显示器(输出设备)展示给对方。

如果是发送文件,流程本质相同:文件数据先从本地磁盘(输入设备)读入内存,经 CPU 调度和网络传输,最终写入对方设备的内存和磁盘(输出设备)。

2. 操作系统

有了硬件架构,还需要一个 "大管家" 来协调资源,这就是操作系统(OS)的核心作用。

2.1 操作系统的定义与范围

操作系统是计算机系统中最基础的程序集合,分为广义和狭义两种:

狭义 OS: 即内核(Kernel),负责核心资源管理,包括进程管理、内存管理、文件管理、驱动管理;
**广义 OS:**除内核外,还包含外壳程序(Shell)、函数库(如 glibc)、系统级软件等。

2.2 核心目的

操作系统的核心价值体现在两个层面:

对下: 与硬件交互,管理所有软硬件资源(如 CPU 时间、内存空间、外设权限);
**对上:**为应用程序提供稳定、安全的执行环境,让开发者无需关注底层硬件细节。

操作系统的目的:为用户程序(应用程序)提供⼀个良好的执行环境。实现的手段:与硬件交互,管理所有的软硬件资源。

上层想要访问操作系统必须使用系统调用(即系统提供给我们的接口)。

2.3 对"管理"的理解

操作系统的 "管理" 本质是对数据的处理,而非直接操作硬件,可总结为:"先描述,再组织":

描述: 用数据结构记录被管理对象的属性。例如用结构体(struct)描述进程的 ID、状态、优先级等信息;
**组织:**用链表、红黑树等高效数据结构将这些描述信息组织起来,方便查询和调度。

这就像校长管理学生:无需直接接触每个学生,只需通过学生信息表(描述)和班级、年级的组织形式(组织),就能实现奖惩、调度等管理操作。所以校长实际上是对数据进行管理,校长对数据的某个操作进而映射到导员去执行对应的行为。其中,操作系统对应校长,驱动程序对应执行具体操作的辅导员,底层硬件对应被管理的学生。

2.4 系统调用与库函数

根据上文我们知道操作系统是用于服务用户的,但其实操作系统并不相信用户,但又不得不服务用户。这点类似于银行,银行不相信客户,客服取钱不会让他直接进去取,但又不得不服务客户,所以银行就提供了一个个窗口对客户进行服务,保证了服务客户的同时不让客户进入银行内部。

从开发视角来看,操作系统对外呈现为一个功能整体,操作系统不会直接暴露底层资源给用户,但会开放部分接口供上层开发使用。这部分由操作系统提供的接口,被称为系统调用。这是用户程序与内核交互的唯一合法途径。

但系统调用功能基础、使用复杂,开发者会将常用的系统调用封装成函数库(如 C 语言的 stdio 库),形成库函数。两者的关系可以用银行服务类比:

系统调用: 银行的业务窗口,直接处理核心需求(如转账、存款);
**库函数:**银行的大堂经理,将复杂的窗口操作简化,为用户提供更便捷的服务。

系统调用就类似于一个函数,让我们能够与系统底层进行交互,只不过这个函数是系统提供的,而库函数其实就是对系统调用的再一层封装,让我们能够更加简便、易懂的去使用系统调用。

结语

好好学习,天天向上!有任何问题请指正,谢谢观看!

相关推荐
威迪斯特1 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.1 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
独自归家的兔1 小时前
ubuntu系统安装dbswitch教程 - 备份本地数据到远程服务器
linux·运维·ubuntu
m0_694845571 小时前
tinylisp 是什么?超轻量 Lisp 解释器编译与运行教程
服务器·开发语言·云计算·github·lisp
ONE_SIX_MIX1 小时前
ubuntu 24.04 用rdp连接,桌面黑屏问题,解决
linux·运维·ubuntu
龙飞051 小时前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
*小海豚*1 小时前
在linux服务器上DNS正常,但是java应用调用第三方解析域名报错
java·linux·服务器
春日见1 小时前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
DARLING Zero two♡1 小时前
告别 Docker 命令行!Portainer+cpolar 让容器管理从局域网走向公网
运维·docker·容器
消失的旧时光-19431 小时前
Linux 编辑器入门:nano 与 vim 的区别与选择指南
linux·运维·服务器