操作系统的初步了解

 

目录

引言:什么是操作系统?

一、设计操作系统的目的

二、操作系统是做什么的:

操作系统主要有四大核心任务:

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. 真实例子:你按下键盘时发生了什么?

  1. 你按下"A"键(学生举手)

  2. 键盘说:"OS大人,有人按我!"(登记事件)

  3. OS把这个按键事件放进待办清单(记在小本本上)

  4. OS看清单后说:"这是输入问题,交给输入法处理"

  5. 输入法收到"A",显示在屏幕上(老师解答了问题)

4. 为什么要这样设计?

优点学校类比操作系统
不混乱不会所有学生同时围着老师硬件/软件不会互相干扰
高效率教务处用名单快速处理OS用队列快速响应
好维护新老师来只需看名单新硬件只需加驱动

 


 

如果同时按下100个键会怎样呢?

想象课间休息时,100个学生同时冲向老师办公室问问题:

  • 老师办公室只有一个门 → 相当于计算机的中断控制器

  • 老师一次只能处理一个学生 → 相当于CPU的单核处理能力

那我们的操作系统会如何处理呢?

  1. 硬件层面

    • 键盘控制器会把这些按键转换成扫描码,暂时存在自己的小仓库(缓冲区)

    • 就像学生们先在办公室外排队领号码牌

  2. 操作系统层面

    // 操作系统维护的键盘缓冲区
    #define KEY_BUFFER_SIZE 128
    char key_buffer[KEY_BUFFER_SIZE];
    int buffer_index = 0;
    • 当缓冲区快满时(比如已经存了120个键):

      • 键盘会亮起指示灯警告(就像办公室挂出"排队已满"的牌子)

      • 新按的键可能被丢弃(就像后来的学生被劝退)

  3. 用户感知

    • 你会看到字符一个接一个出现,可能有轻微延迟

    • 高端键盘(如机械键盘)的"防鬼键"技术就像增加了更多老师助理

例如

  • 键盘轮询速率:普通键盘100-1000Hz,相当于老师每分钟能接待100-1000个学生

  • N-key Rollover:游戏键盘的"全键无冲"就像办公室开了10个接待窗口


 

总结的来说,任何计算机对象,在进行管理的时候都需要遵守“先描述,再组织”这一原则。这也是现在主流的面向对象的语言,都要提供1、面向对象。2、标准库的原因。

计算机管理硬件
1、描述起来,用struct结构体。
2、组织起来,用链表或者其他的高效的数据结构

三、系统调用与库函数概念:

我们以买外卖的两种方式来进行比较:

场景系统调用库函数
点外卖方式直接打电话给餐厅老板(内核)使用外卖APP(如美团)
操作复杂度需要说清楚所有细节一键下单,自动填充常用信息
安全性餐厅老板可能拒绝奇怪要求APP会过滤危险请求
效率慢(每次都要详细沟通)快(自动记忆历史订单)
灵活性可以提特殊要求(多加辣)只能选APP提供的选项

实质上

对比维度系统调用库函数
定义操作系统内核提供的底层服务接口开发者封装的函数集合
执行权限需要切换到内核态(高权限)在用户态运行(普通权限)
性能开销高(需上下文切换)低(无模式切换)
功能范围基础硬件操作(如读写磁盘)复杂功能组合(如格式化输出)
稳定性长期不变(接口稳定)可能随版本变化
示例open()fork()write()printf()fopen()malloc()

库函数就是对系统调用接口的封装,方便我们安全的,高效的处理任务。 

就好比政府的基础服务一样

  • 就像你去政务大厅办理身份证(必须本人亲自到场)

  • 每次都要安检切换(用户态→内核态)(用户态和内核态是操作系统最核心的安全机制,它们就像计算机世界的"平民区"和"特权区",其实就是权限的不同)

  • 只能办理基础业务(不能一站式解决所有问题)

库函数就是一个便民APP

  • 就像使用政务APP在线办事

  • 无需亲自到场(全程用户态完成)

  • 整合多个服务(如同时预约医保+社保)

 

 

  •  在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,就叫做系统调用
  • 系统调用在使用上,功能比较基础,对用户的要求也相对较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成了库。有了库,就更有利于上层用户或者开发者进行二次开发

结语

操作系统作为计算机系统的核心,不仅是硬件与软件之间的桥梁,更是现代数字世界的基石。它通过高效、安全地管理资源,让复杂的计算机操作变得简单易用,使开发者能专注于创新,而无需深陷底层细节。

从按下电源键的那一刻起,操作系统便开始无声地协调一切——它像一位无形的指挥家,确保每个组件和谐运作;又像一位智慧的管家,让技术服务于人,而非成为负担。

理解操作系统,不仅是学习计算机科学的关键,更是洞察数字时代运行逻辑的窗口。无论是开发者、研究者还是普通用户,认识其背后的管理哲学,都能让我们更高效地驾驭技术,探索更广阔的可能性。

正如计算机先驱艾伦·凯所言:“真正优秀的软件不是让人惊叹它能做什么,而是让人忘记它需要存在。”

操作系统,正是这样的存在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mkdocs页面如何嵌入PDF

嵌入PDF 嵌入PDF代码 &#xff0c;注意PDF的相对地址 <iframe src"../个人简历.pdf (相对地址)" width"100%" height"800px" style"border: 1px solid #ccc; overflow: auto;"></iframe>我的完整代码&#xff1a; <d…

链表结构深度解析:从单向无头到双向循环的实现全指南

上篇博客实现动态顺序表时&#xff0c;我们会发现它存在许多弊端&#xff0c;如&#xff1a; • 中间/头部的插⼊删除&#xff0c;时间复杂度为O(N) • 增容需要申请新空间&#xff0c;拷⻉数据&#xff0c;释放旧空间。会有不⼩的消耗。 • 增容⼀般是呈2倍的增⻓&#xff0c;…

@PostConstruct @PreDestroy

PostConstruct 是 Java EE&#xff08;现 Jakarta EE&#xff09;中的一个注解&#xff0c;用于标记一个方法在对象初始化完成后立即执行。它在 Spring 框架、Java Web 应用等场景中广泛使用&#xff0c;主要用于资源初始化、依赖注入完成后的配置等操作。 1. 基本作用 执行时…

【ArcGIS微课1000例】0146:将多个文件夹下的影像移动到一个目标文件夹(以Landscan数据为例)

本文讲述将多个文件夹下的影像移动到一个目标文件夹,便于投影变换、裁剪等操作。 文章目录 一、数据准备二、解压操作三、批量移动四、查看效果五、ArcGIS操作一、数据准备 全球人口数据集Landscan2000-2023如下所示,每年数据位一个压缩包: 二、解压操作 首先将其解压,方…

专业级 GIF 制作工具深度解析:Gifski 与 GIPHY CAPTURE 的技术对比与实战指南

《Gifski 与 GIPHY CAPTURE&#xff1a;GIF 制作工具的深度对比与实战应用》 最近在尝试做一些培训文档&#xff0c;需要使用GIF图做动态效果&#xff0c;把工具选型过程给大家做一下分享。 先看一张对比表&#xff0c;具体如下&#xff1a; 场景 Windows macOS Linux 移…

selenium替代----playwright

安装 好处特点&#xff1a;这个东西不像selenium需要固定版本的驱动 pip config set global.index-url https://mirrors.aliyun.com/pypi/simplepip install --upgrade pippip install playwright playwright installplaywright install ffmpeg (处理音视频的)验证&#x…

Python代码编程基础

字符串 str.[]实现根据下标定位实现对元素的截取 for 循环可以实现遍历 while 循环可以在实现遍历的同时实现对某一下标数值的修改 字符串前加 r 可以实现对字符串的完整内容输出 字符串前加 f 可以实现对字符串内{}中包裹内容的格式化输出&#xff0c;仅在 v3.6 之后可用…

5月9号.

v-for: v-bind: v-if&v-show: v-model: v-on: Ajax: Axios: async&await: Vue生命周期: Maven: Maven坐标:

Spring 必会之微服务篇(1)

目录 引入 单体架构 集群和分布式架构 微服务架构 挑战 Spring Cloud 介绍 实现方案 Spring Cloud Alibaba 引入 单体架构 当我们刚开始学开发的时候&#xff0c;基本都是单体架构&#xff0c;就是把一个项目的所有业务的实现功能都打包在一个 war 包或者 Jar 包中。…

计算机的基本组成

#灵感# 记录下基础知识&#xff0c;此处专指计算机硬件方面&#xff0c;捎带记下芯片知识。 综述&#xff1a; 计算机硬件的基本组成包括运算器、控制器、存储器、输入设备和输出设备五大部分。其中&#xff0c;集成在一起的运算器和控制器称为 CPU&#xff08;处理器&#x…

【Python 列表(List)】

Python 中的列表&#xff08;List&#xff09;是最常用、最灵活的有序数据集合&#xff0c;支持动态增删改查操作。以下是列表的核心知识点&#xff1a; 一、基础特性 有序性&#xff1a;元素按插入顺序存储可变性&#xff1a;支持增删改操作允许重复&#xff1a;可存储重复元…

Qt 的原理及使用(1)——qt的背景及安装

1. Qt 背景介绍 1.1 什么是 Qt Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形 界⾯所需的所有功能。它是完全⾯向对象的&#xff0c;很容易扩展。Qt 为开发者提供了⼀种基于组件的开发模 式&#xff0c;开发者可以通过简单的拖拽…

多分类问题softmax传递函数+交叉熵损失

在多分类问题中&#xff0c;Softmax 函数通常与交叉熵损失函数结合使用。 Softmax 函数 Softmax 函数是一种常用的激活函数&#xff0c;主要用于多分类问题中。它将一个实数向量转换为概率分布&#xff0c;使得每个元素的值在 0 到 1 之间&#xff0c;且所有元素的和为 1。 …

数智读书笔记系列032《统一星型模型--一种敏捷灵活的数据仓库和分析设计方法》

引言 在当今数字化时代,数据仓库作为企业数据管理的核心基础设施,承担着整合、存储和提供企业数据的关键角色。随着商业环境的快速变化和业务需求的日益复杂,数据仓库的设计方法也在不断演进,以适应新的挑战和要求。 背景与意义 数据仓库领域长期存在着两种主流方法论之…

RT-Thread 深入系列 Part 1:RT-Thread 全景总览

摘要&#xff1a; 本文将从 RTOS 演进、RT-Thread 的版本分支、内核架构、核心特性、社区与生态、以及典型产品应用等多维度&#xff0c;全面呈现 RT-Thread 的全景图。 关键词&#xff1a;RT-Thread、RTOS、微内核、组件化、软件包管理、SMP 1. RTOS 演进与 RT-Thread 定位 2…

[docker基础一]docker简介

目录 一 消除恐惧 1) 什么是虚拟化&#xff0c;容器化 2)案例 3)为什么需要虚拟化&#xff0c;容器化 二 虚拟化实现方式 1)应用程序执行环境分层 2)虚拟化常见类别 3)常见虚拟化实现 一&#xff09;主机虚拟化(虚拟机)实现 二&#xff09;容器虚拟化实现 一 消除恐…

PostgreSQL 的 pg_advisory_lock 函数

PostgreSQL 的 pg_advisory_lock 函数 pg_advisory_lock 是 PostgreSQL 提供的一种应用级锁机制&#xff0c;它不锁定具体的数据库对象&#xff08;如表或行&#xff09;&#xff0c;而是通过数字键值来协调应用间的并发控制。 锁的基本概念 PostgreSQL 提供两种咨询锁(advi…

SGLang 实战介绍 (张量并行 / Qwen3 30B MoE 架构部署)

一、技术背景 随着大语言模型&#xff08;LLM&#xff09;的飞速发展&#xff0c;如何更高效、更灵活地驾驭这些强大的模型生成我们期望的内容&#xff0c;成为了开发者们面临的重要课题。传统的通过拼接字符串、管理复杂的状态和调用 API 的方式&#xff0c;在处理复杂任务时…

微服务中 本地启动 springboot 无法找到nacos配置 启动报错

1. 此处的环境变量需要匹配nacos中yml配置文件名的后缀 对于粗心的小伙伴在切换【测试】【开发】环境的nacos使用时会因为这里导致项目总是无法启动成功

Lua从字符串动态构建函数

在 Lua 中&#xff0c;你可以通过 load 或 loadstring&#xff08;Lua 5.1&#xff09;函数从字符串动态构建函数。以下是一个示例&#xff1a; 示例 1&#xff1a;基本动态函数构建 -- 动态构建一个函数 local funcStr "return function(a, b) return a b end"-…