操作系统的初步了解
目录
引言:什么是操作系统?
一、设计操作系统的目的
二、操作系统是做什么的:
操作系统主要有四大核心任务:
1. 管理硬件
2. 运行软件
3. 存储数据
4. 提供用户界面
如何理解操作系统的管理呢?
1. 什么是操作系统中的"事件"?
2. 事件管理的四个步
步骤1:事件发生 - 学生举手
步骤2:登记事件 - 老师记名字
步骤3:排队处理 - 教务处整理申请
步骤4:分配处理 - 老师找对应的负责人
3. 真实例子:你按下键盘时发生了什么?
4. 为什么要这样设计?
三、系统调用与库函数概念:
结语
引言:什么是操作系统?
你有没有想过,当你按下电脑电源键后,它是如何从一块“冰冷的铁盒子”变成可以玩游戏、写文档、上网冲浪的智能工具的?
背后的关键就是——操作系统(Operating System, OS)。
它就像电脑的“大管家”,负责管理硬件、协调软件,让你能轻松地和电脑“对话”。
操作系统的本质,其实就是一个进行软硬件资源管理的软件!
他是我们买来的电脑这个豪宅的一个管家,所做的最重要的工作,就是做管理。
一、设计操作系统的目的
1、对下,与硬件交互,管理所有的软硬件资源,使其稳定的,高效的,安全的进行良好的工作(手段)
2、对上,为用户程序(应用程序)提供一个良好的执行,运行环境。(目的)

二、操作系统是做什么的:
操作系统主要有四大核心任务:
1. 管理硬件
-
键盘、鼠标、显示器、打印机……这些硬件设备千差万别,但操作系统让它们能协同工作。
-
举例:当你打字时,操作系统把键盘信号转换成屏幕上显示的字符。
2. 运行软件
-
电脑可以同时运行微信、浏览器、游戏,而不会混乱,全靠操作系统分配资源。
-
举例:你在听音乐的同时写文档,操作系统确保两者不会互相干扰。
3. 存储数据
-
文件存到哪里?怎么快速找到?操作系统帮你管理硬盘、U盘甚至云存储。
-
举例:你保存的“作业.docx”其实是被操作系统安排到硬盘的某个位置。
4. 提供用户界面
-
图形界面(如Windows的桌面)或命令行(如Linux的终端),都是操作系统提供的“交互方式”。
-
举例:你点击图标打开软件,其实是操作系统在背后执行程序。
如何理解操作系统的管理呢?
我们把学校简化为校长-辅导员-学生这三个层次,那么校长就是管理的人,也就是操作系统,学生就是被管理的人。那么学生和校长之间会经常见面吗?答案是否定的,所以操作系统管理软硬件也不需要经常“见面”。
校长在进行管理的时候,会借助“辅导员“这个中间角色,这个中间角色,承担的就是对上(校长)获取数据,对下(学生)进行执行决策工作。
我们可以将操作系统的事件管理类比为学校对学生的管理方式,并借助数据结构(如链表)来理解其核心逻辑。
1. 什么是操作系统中的"事件"?
想象一下,你在用电脑时:
-
按下键盘("老师,我有问题!")
-
点击鼠标("老师,这个我不懂!")
-
程序请求打开文件("老师,我要借书!")
这些就是操作系统要处理的"事件"。就像教务处要处理学生的各种申请一样。
操作系统的事件(如硬件中断、用户输入、程序请求)需要被高效处理,其管理逻辑可总结为:
“先描述,再组织”
-
描述:用数据结构(如
struct
)定义事件的属性(类似“学生档案”)。 -
组织:通过链表、队列等结构管理多个事件(类似“班级花名册”)。
2. 事件管理的四个步
步骤1:事件发生 - 学生举手
-
硬件事件:键盘被按下(就像学生突然举手)
-
软件事件:程序请求资源(就像学生提交请假条)
步骤2:登记事件 - 老师记名字
操作系统会把每个事件记录下来,就像老师在小本本上记下学生的问题:
struct 事件记录
{int 事件类型; // 是键盘问题?还是鼠标问题?void *具体内容; // 比如按下了"A"键struct 事件记录 *下一个; // 下一条记录
};
步骤3:排队处理 - 教务处整理申请
所有事件会被放进一个待办清单(队列):
struct 事件记录 *待办清单; // 所有等待处理的事件
操作系统不会一下子处理所有事,而是:
-
紧急事件优先(就像受伤学生可以插队看校医)
-
普通事件按顺序(就像交作业要排队)
步骤4:分配处理 - 老师找对应的负责人
-
键盘问题 → 交给输入法老师
-
文件请求 → 交给文件系统老师
-
网络请求 → 交给网络老师
就像教务处会把请假申请转交给班主任,把食堂问题转交给后勤处。
3. 真实例子:你按下键盘时发生了什么?
-
你按下"A"键(学生举手)
-
键盘说:"OS大人,有人按我!"(登记事件)
-
OS把这个按键事件放进待办清单(记在小本本上)
-
OS看清单后说:"这是输入问题,交给输入法处理"
-
输入法收到"A",显示在屏幕上(老师解答了问题)
4. 为什么要这样设计?
优点 | 学校类比 | 操作系统 |
---|---|---|
不混乱 | 不会所有学生同时围着老师 | 硬件/软件不会互相干扰 |
高效率 | 教务处用名单快速处理 | OS用队列快速响应 |
好维护 | 新老师来只需看名单 | 新硬件只需加驱动 |
如果同时按下100个键会怎样呢?
想象课间休息时,100个学生同时冲向老师办公室问问题:
-
老师办公室只有一个门 → 相当于计算机的中断控制器
-
老师一次只能处理一个学生 → 相当于CPU的单核处理能力
那我们的操作系统会如何处理呢?
-
硬件层面:
-
键盘控制器会把这些按键转换成扫描码,暂时存在自己的小仓库(缓冲区)
-
就像学生们先在办公室外排队领号码牌
-
-
操作系统层面:
// 操作系统维护的键盘缓冲区 #define KEY_BUFFER_SIZE 128 char key_buffer[KEY_BUFFER_SIZE]; int buffer_index = 0;
-
当缓冲区快满时(比如已经存了120个键):
-
键盘会亮起指示灯警告(就像办公室挂出"排队已满"的牌子)
-
新按的键可能被丢弃(就像后来的学生被劝退)
-
-
-
用户感知:
-
你会看到字符一个接一个出现,可能有轻微延迟
-
高端键盘(如机械键盘)的"防鬼键"技术就像增加了更多老师助理
-
例如
-
键盘轮询速率:普通键盘100-1000Hz,相当于老师每分钟能接待100-1000个学生
-
N-key Rollover:游戏键盘的"全键无冲"就像办公室开了10个接待窗口
总结的来说,任何计算机对象,在进行管理的时候都需要遵守“先描述,再组织”这一原则。这也是现在主流的面向对象的语言,都要提供1、面向对象。2、标准库的原因。
三、系统调用与库函数概念:
我们以买外卖的两种方式来进行比较:
场景 | 系统调用 | 库函数 |
---|---|---|
点外卖方式 | 直接打电话给餐厅老板(内核) | 使用外卖APP(如美团) |
操作复杂度 | 需要说清楚所有细节 | 一键下单,自动填充常用信息 |
安全性 | 餐厅老板可能拒绝奇怪要求 | APP会过滤危险请求 |
效率 | 慢(每次都要详细沟通) | 快(自动记忆历史订单) |
灵活性 | 可以提特殊要求(多加辣) | 只能选APP提供的选项 |
实质上
对比维度 | 系统调用 | 库函数 |
---|---|---|
定义 | 操作系统内核提供的底层服务接口 | 开发者封装的函数集合 |
执行权限 | 需要切换到内核态(高权限) | 在用户态运行(普通权限) |
性能开销 | 高(需上下文切换) | 低(无模式切换) |
功能范围 | 基础硬件操作(如读写磁盘) | 复杂功能组合(如格式化输出) |
稳定性 | 长期不变(接口稳定) | 可能随版本变化 |
示例 | open() , fork() , write() | printf() , fopen() , malloc() |
库函数就是对系统调用接口的封装,方便我们安全的,高效的处理任务。
就好比政府的基础服务一样
-
就像你去政务大厅办理身份证(必须本人亲自到场)
-
每次都要安检切换(用户态→内核态)(用户态和内核态是操作系统最核心的安全机制,它们就像计算机世界的"平民区"和"特权区",其实就是权限的不同)
-
只能办理基础业务(不能一站式解决所有问题)
库函数就是一个便民APP
-
就像使用政务APP在线办事
-
无需亲自到场(全程用户态完成)
-
整合多个服务(如同时预约医保+社保)
- 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,就叫做系统调用
- 系统调用在使用上,功能比较基础,对用户的要求也相对较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成了库。有了库,就更有利于上层用户或者开发者进行二次开发
结语
操作系统作为计算机系统的核心,不仅是硬件与软件之间的桥梁,更是现代数字世界的基石。它通过高效、安全地管理资源,让复杂的计算机操作变得简单易用,使开发者能专注于创新,而无需深陷底层细节。
从按下电源键的那一刻起,操作系统便开始无声地协调一切——它像一位无形的指挥家,确保每个组件和谐运作;又像一位智慧的管家,让技术服务于人,而非成为负担。
理解操作系统,不仅是学习计算机科学的关键,更是洞察数字时代运行逻辑的窗口。无论是开发者、研究者还是普通用户,认识其背后的管理哲学,都能让我们更高效地驾驭技术,探索更广阔的可能性。
正如计算机先驱艾伦·凯所言:“真正优秀的软件不是让人惊叹它能做什么,而是让人忘记它需要存在。”
操作系统,正是这样的存在。
相关文章:

操作系统的初步了解
目录 引言:什么是操作系统? 一、设计操作系统的目的 二、操作系统是做什么的: 操作系统主要有四大核心任务: 1. 管理硬件 2. 运行软件 3. 存储数据 4. 提供用户界面 如何理解操作系统的管理呢? 1. 什么是操作…...
拆分sql数据,(shop_backup)sql文档过大(>5G)
执行表结构 sed -n /^-- Table structure/,/^-- Dumping data/p shop_backup.sql > structure.sql mysql -u root -p shop < structure.sql 执行数据 awk /^INSERT INTO/{if(count%1000001) {file"data_part_"i".sql"}; print > file} shop_bac…...

软件工程之软件项目管理深度解析
前文基础: 1.软件工程学概述:软件工程学概述-CSDN博客 2.软件过程深度解析:软件过程深度解析-CSDN博客 3.软件工程之需求分析涉及的图与工具:软件工程之需求分析涉及的图与工具-CSDN博客 4.软件工程之形式化说明技术深度解…...

基于Boost库、Jsoncpp、cppjieba、cpp-httplib等构建Boost搜索引擎
⭐️个人主页:小羊 ⭐️所属专栏:项目 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 项目背景技术栈和项目环境正排索引和倒排索引数据去标签与清洗下载数据源去标签 建立索引构建正排索引构建倒排索引 建立搜索引擎h…...

Qt 通过控件按钮实现hello world + 命名规范(7)
文章目录 使用编辑框来完成 hello world通过编辑图形化界面方式通过纯代码方式 通过按钮的方式来创建 hello world通过编辑图形化界面方式通过纯代码方式 总结Qt Creator中的快捷键如何使用文档命名规范 简介:这篇文章着重点并不在于创建hello world程序,…...
JAVA继承中变量和方法的存储和方法中访问变量的顺序
一、变量归属与内存位置 static 变量:属于类,只存在一份,保存在方法区(或元空间)。 实例变量(非static):属于对象,每个对象单独一份,保存在堆内存中。 二、…...

关于大数据的基础知识(二)——国内大数据产业链分布结构
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于大数据的基础知识(二&a…...
【Python 字典(Dictionary)】
Python 中的字典(Dictionary)是最强大的键值对(key-value)数据结构,用于高效存储和访问数据。以下是字典的核心知识点: 一、基础特性 键值对存储:通过唯一键(Key)快速访…...
Linux 内核中的 security_sk_free:安全模块与 Socket 释放机制解析
引言 在 Linux 内核中,网络通信和进程间交互(IPC)的核心数据结构之一是 struct sock(即 socket)。其生命周期管理涉及复杂的资源分配与释放逻辑。本文聚焦于 security_sk_free 这一函数,探讨其作用、调用场景以及与安全模块的交互机制,并解答一个常见疑问:在单机间 TC…...
VBA -- 学习Day4
数组 创建数组: Dim 数组名(数组元素上下角标)[As 元素类型] eg. Dim MyArray (1 To 3) As Integer 注意:1.如果不指定元素类型,则是Variant类型 向数组赋值: eg. MyArray(1) 100 MyArray(2) 200…...

Winform(11.案例讲解1)
今天写两个案例,用于更好的理解控件的使用 在写之前先写一个类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _1.案例讲解 { internal class Student { public string …...

电机密集型工厂环境下的无线通信技术选型与优化策略
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 在电机、变频器、电焊机等强电磁干扰源遍布的工业环境中,无线通信系统的可靠性面临严峻挑战。本文从抗干扰能力、传输稳定性、实时性需求三大核心维度出发,结合工…...
Web 自动化之 HTML JavaScript 详解
文章目录 一、HTML 常用标签二、javascript 脚本1、什么是 javascript(js)2、 js变量和函数3、js 弹窗处理4、js 流程控制语句和 switch 结构语句应用 一、HTML 常用标签 HTML:超文本标记语言 超文本:不仅只包含文字,还有超链接、视频…这些…...

一文了解氨基酸的分类、代谢和应用
氨基酸(Amino acids)是在分子中含有氨基和羧基的一类化合物。氨基酸是生命的基石,人类所有的疾病与健康状况都与氨基酸有直接或间接的关系。氨基酸失衡可引起肝硬化、神经系统感染性疾病、糖尿病、免疫性疾病、心血管疾病、肾病、肿瘤等各类疾…...

系统学习算法:动态规划(斐波那契+路径问题)
题目一: 思路: 作为动态规划的第一道题,这个题很有代表性且很简单,适合入门 先理解题意,很简单,就是斐波那契数列的加强版,从前两个数变为前三个数 算法原理: 这五步可以说是所有…...
jquery实现文字点选验证码
文字点选验证码是一种有效的防止自动化攻击的手段。用户需要按照提示顺序点击特定的文字,验证通过后才能进行下一步操作。本文将详细介绍如何使用jQuery实现这种验证码。 一、实现思路 生成验证码:随机生成一组文字,并随机排列在验证码区域…...
VTK|加载ply文件数据进行平移+高程渲染
文章目录 将 .ply 点云或模型数据进行 Elevation 着色并可视化渲染的完整流程🟦 1. **使用 ElevationFilter 给模型上色(根据 Z 值)**🟩 2. **构造 Jet 风格的 Lookup Table(颜色映射表)**🔷 3.…...

JAVA房屋租售管理系统房屋出租出售平台房屋销售房屋租赁房屋交易信息管理源码
一、源码描述 这是一套房屋租售管理源码,基于SpringBootVue框架,后端采用JAVA开发,源码功能完善,涵盖了房屋租赁、房屋销售、房屋交易等业务。 二、源码截图...

掌握Multi-Agent实践(三):ReAct Agent集成Bing和Google搜索功能,采用推理与执行交替策略,增强处理复杂任务能力
一个普遍的现象是,大模型通常会根据给定的提示直接生成回复。对于一些简单的任务,大模型或许能够较好地应对。然而,当我们面对更加复杂的任务时,往往希望大模型能够表现得更加“智能”,具备适应多样场景和解决复杂问题的能力。为此,AgentScope 提供了内置的 ReAct 智能体…...
AOP实现原理
AOP实现原理 背景实现常用注解 背景 感觉需要掌握, 对理解其他知识点有好处. 实现 动态代理实现. JDK 实现 InvacationHander CGLib Enhancer 轻量级的基于ASM字节码框架. 常用注解 Before After AfterRetruning AfterThrowing Around...

Bearer Token的神秘面纱:深入解析HTTP认证头的设计哲学
为何有些Token会带Bearer? 在接口测试与开发中,我们经常会遇到这样的请求头: Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... 这个神秘的"Bearer"前缀从何而来?为何不直接使用Authorization: Token..…...

【国产化】在银河麒麟ARM环境下离线安装docker
1、前言 采用离线安装的方式。 关于离线安装的方式官网有介绍,但是说的很简单,网址:Binaries | Docker Docs 官网介绍的有几种主流linux系统的安装方式,但是没有kylin的,所以在此记录一下。 在安装过程中也遇到了些…...
K8S - Harbor 镜像仓库部署与 GitLab CI 集成实战
引言 在 Kubernetes 环境中,容器镜像的存储与管理至关重要。企业级镜像仓库(如 Harbor)为团队提供了安全、稳定、可扩展的镜像管理解决方案。 一、Harbor 安装与配置 Harbor 是由 VMware 开源的企业级云原生镜像仓库,它不仅支持…...
ASCII码的快速记忆方法
当然!记住ASCII码的关键是找到规律和分组记忆。以下是一些快速记忆的方法: 1. 记住关键分界点 0~31:控制字符(不可打印,如换行、制表符等),不需要全记,知道0是NULL,10是…...

java volatile关键字
volatile 是 Java 中用于保证多线程环境下变量可见性和禁止指令重排序的关键字。 普通变量不加volatile修饰有可见性问题,即有线程修改该变量值,其他线程无法立即感知该变量值修改了。代码: private static int intVal 0; // 普通变量未加 …...
解决SQL Server SQL语句性能问题(9)——正确使用索引
前述章节中,我们介绍和讲解了SQL调优所需要的基本知识和分析方法,那么,通过前述这些知识和方法定位到问题后,接下来,我们该怎么做呢?那就是本章的内容,给出解决SQL语句性能问题的、科学而合理的方案和方法。 本章主要对解决SQL语句性能问题的几种常用方法进行说明和讲解…...

Vibe Coding: 优点与缺点
如果你最近在开发圈子里,你很可能听说过这个新趋势"vibe coding"(氛围编程)。 我只能说我对此感受复杂。以下是原因。 优势 在构建新项目时,靠着氛围编程达到成功感觉很自由!但对于遗留代码来说情况就不同了,尽管也不是不可能。 实时反馈和快速迭代 Cursor(…...

技术分享 | 如何在2k0300(LoongArch架构)处理器上跑通qt开发流程
近期迅为售后团队反馈,许多用户咨询:2K0300处理器采用了LA264处理器核,若要在该处理器上运行Qt程序,由于架构发生了变化,其使用方法是否仍与ARM平台保持一致? 单纯回答‘一致’或‘不一致’缺乏说服力&…...
产品经理如何借助 DeepSeek 提升工作效能
在数字化时代的浪潮中,产品经理肩负着推动产品从概念到成功落地的重任,面临着复杂多变的市场环境、层出不穷的用户需求以及紧锣密鼓的项目周期。而 DeepSeek 这一先进的人工智能工具,宛如一把 “瑞士军刀”,为产品经理在各个工作环…...

基于卷积神经网络和Pyqt5的猫狗识别小程序
任务描述 猫狗分类任务(Dogs vs Cats)是Kaggle平台在2013年举办的一个经典计算机视觉竞赛。官方给出的Kaggle Dogs vs Cats 数据集中包括由12500张猫咪图片和12500张狗狗图片组成的训练集,12500张未标记照片组成的测试集。选手需要在规定时间…...