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

在日常使用计算机、手机等设备时,我们每天都在与操作系统打交道 ------ 打开 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 库),形成库函数。两者的关系可以用银行服务类比:

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

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

结语

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

相关推荐
TangGeeA26 分钟前
Linux CFS(完全公平调度器)全面总结
java·linux·服务器
灵魂学者26 分钟前
Vue3.x —— router 路由配置
服务器·前端·vue.js·路由
1***357731 分钟前
Nginx搭建负载均衡
运维·nginx·负载均衡
gavin_gxh36 分钟前
SAP CO CK 465 用于物料/批 工厂 不能确定价格
运维·经验分享·其他
Splashtop高性能远程控制软件37 分钟前
远程办公防线不 “失守”,终端防护策略全解析
大数据·运维·网络·网络安全·远程工作·远程控制·splashtop
xixixi7777738 分钟前
解析常见的通信流量和流量分析
运维·开发语言·网络·安全·php·通信·流量
shan&cen40 分钟前
内网穿透(FRP)部署小结,服务器上xxl-job 调度本机任务
java·服务器
爱吃山竹的大肚肚1 小时前
根据每个键对应的列表里所有实体的 count 最大值,将整个字典从大到小重新排列
linux·运维·windows
7澄11 小时前
Servlet 前后端交互实战(登录/注册案例)
运维·服务器·ajax·servlet·jquery·form·前后端交互