当前位置: 首页 > news >正文

Linux系统编程 -- 操作系统概念

冯诺依曼体系结构

        我们的计算机是由硬件构成的,计算机里的硬件包括显示器、键盘、鼠标、显卡、磁盘以及各种见得到、见不到的硬件设备,但是无论硬件有多少,他们都是按照一定的组织结构有序连接起来的,而我们当前最常见的组织结构被称为冯诺依曼体系结构。

截至目前,我们所认识的计算机,都是由⼀个个的硬件组件组成
1.输入单元:包括键盘、鼠标、扫描仪、写板等
2.中央处理器(CPU):含有运算器和控制器等,其中运算器有算数运算(加减乘除取模等)和逻辑运算(真假、与或、异或等)两种运算方式,而控制器主要用于取指令、分析指令和执行指令等操作。
3.输出单元:显示器,打印机等
4.存储器:内存 (磁盘属于外存)。

        在冯诺依曼体系结构中,我们把输入输出设备统一称为外设,cpu和内存是亲兄弟(可以直接进行数据层交互),和输入输出设备是表兄弟(不能直接进行数据层交互),输入设备的作用是把数据输入的内存里,输出设备的作用是接收内存中的数据并输出,即读文件就是把文件读到内存里,写文件就是把文件写到磁盘上,我们把这种读写动作称之为IO(Input Output)。整个过程都是站在CPU角度上进行的,输入设备给我称为 I ,我给输出设备称为 O。我们知道软件运行必须先加载,那程序运行之前在哪里存放呢?因为我们之前说过我们写的程序都是文件,所以是存放在磁盘的指定路径中的。为什么软件运行必须先加载呢?从上图中我们可以看到可以和CPU双向交互的只有内存,也就是说CPU获取、写入只能从内存中来进行!在数据层面上,CPU只关心内存,而软件运行需要CPU执行我们的代码,访问我们的数据,访问数据需要读取文件,文件在外设中,所以需要先通过输入设备加载到我们的内存中,在和CPU进行交互,因此软件运行必须先加载,这是由体系结构规定的!!!我们所说的加载本质上是输入设备到存储器的过程,即Input。而Input这一类数据流动的过程,其实是数据从一个设备被"拷贝"到另一个设备,所以体系结构的效率由设备的"拷贝"效率决定。我们需要记住的是CPU在数据层面上只和内存打交道,外设也只和内存打交道

        了解了冯诺依曼体系结构后,很多人会有疑问:为什么必须是这样的结构呢?为什么不能将内存和CPU合为一体,让外设直接对接CPU呢?

由于CPU与外设的运行速度存在较大的差距,由于存在木桶短板效应,外设的运行效率会拉满CPU的效率,会拖后腿,而如果要将外设提升到CPU的档次,又会提高很多成本。为了节省计算机的制造成本,冯诺依曼引入了存储器的结构,所以当代的计算机是性价比的产物。题外话,最早期的计算机造价十分昂贵,随着芯片技术发展和摩尔定律的产生,计算机才成为了老百姓也买的起的工具,之后网民也越来越多,最后发展成了现在的互联网,冯诺依曼体系结构的意义在于它是互联网发展的必要条件。
前面说过,体系结构的效率由设备的"拷贝"效率决定。如下图,体系结构采用分级存储的方式,数据传输的方式是拷贝,越靠近CPU,拷贝效率越高。

如何理解数据流动?
我们与家人好友使用聊天软件聊天本质上是使用两个冯诺依曼体系聊天,首先要启动聊天软件,这个过程是将聊天软件加载到内存中,然后我们使用键盘输入内容到聊天软件中是通过输入设备把数据拷贝到内存,通过内存与CPU的交互,把数据拷贝到CPU中,CPU通过运算器的一系列算法计算后,通过控制器将数据写回内存中,最后内存传给输出设备。通过网络,你的家人朋友拿到了数据,在进行与上面类似的操作后,刷新后就显示到了显示屏上。如果是发送文件,那就是将磁盘指定路径下的文件通过输入设备拷贝 -> 内存 -> CPU -> 内存 -> 输出设备,通过网络传输一直到对方的磁盘上。一个是从用户键盘发送到另一个用户显示器的过程,一个是从本地磁盘拷贝到对方磁盘的过程。


操作系统(Operator System)

是什么?

        一个基本的程序集合,称为操作系统,操作系统是一款进行软硬件管理的软件。从狭义上讲,操作系统只是内核部分集合的统称,而在广义上还要包括外壳程序等其他程序。我们国内使用的安卓手机的操作系统是Linux,其实是指内核是Linux,而外部的外壳程序、原生库、预装软件等都是由安卓制作的,所以被称为安卓。

设计OS的目的

        我们知道,在操作系统之中不只有冯诺依曼体系结构这些硬件,还有各种各样的软件。在最底层才是硬件部分(按冯诺依曼结构组织的),每种硬件都有对应个性化的驱动程序,并且硬件必须有其驱动程序才能进行访问。操作系统位于中间层,对下,与硬件交互,要管理所有的软硬件资源。但这不是目的,而是手段。为的是对上,为应用程序提供⼀个良好的执行环境。所以说其目的是给用户提供一个良好稳定的运行环境,便于用户去使用OS

由图我们可知整个软硬件体系结构:层状结构。再此引入新概念,软件层状结构在软件工程层面上体现出的是高内聚低耦合的,所谓的高内聚,是把相同逻辑和功能的代码数据放在同一层内部,比如说操作系统内都是操作系统的代码数据,驱动程序内都是驱动程序的代码数据。所谓的低耦合,是指层与层之间只采用接口的形式进行互相调用,而在数据、逻辑层面没有强耦合。有了这样的逻辑操作,未来我们在改操作系统时,驱动硬件都不用变;我们改硬件时,操作系统不用变。采用高内聚低耦合的目的是为了代码的可维护性,一个模块需要修改就只需改这一个模块,不需要修改其他模块。这也是我们在写代码时,函数进行封装的原因,继承中父类子类本质也是层状关系。这是软件工程层面最伟大的发明。
访问操作系统,必须使用系统调用 -- 其实就是函数,只不过是系统提供的。操作系统本身不允许用户直接访问内存、进程、文件等,要求用户必须通过系统本身提供的C封装的接口来访问操作系统,这个接口称为系统调用。
我们曾经写的程序,只要你判断出它访问了硬件,那么它必须贯穿整个软硬件体系结构,也就是操作系统!!!所以我们平时用到的库,可能在底层封装了底层调用。

综上,我们可以说,在整个计算机软硬件架构中,操作系统的定位是:一款纯正的"搞管理"的软件。

如何理解管理

       学校作为一个有序运转的教育生态系统,始终存在着三种核心角色 —— 活泼的学生、尽责的老师与统筹全局的校长。这三种角色并非孤立存在,而是构成了清晰的管理关系:校长作为学校的顶层管理者,肩负着统筹发展方向、制定核心规章制度的职责;学生则是这个体系中的被管理者,需要遵循教学安排、落实日常行为规范,在有序的框架内成长;而老师,正是连接两者的关键纽带,在管理链条中承担着承上启下的作用。​
在学校的日常运转中,所有事务本质上可归为 “决策” 与 “执行” 两大核心环节。所谓 “决策”,是指确定方向、制定规则的顶层设计行为,比如新学期是否调整课程体系、校园安全管理方案如何优化;而 “执行”,则是将这些决策落地、确保规则生效的具体行动,像是把课程方案拆解成每节课的教学计划,把安全规则落实到班级的日常点名与巡查中。在这套体系里,决策权天然归属于管理者群体,尤其是校长 —— 当校长基于学校发展需求做出决策后,老师便需要以专业的方式执行:比如校长决定推行 “课后服务个性化方案”,老师就要立刻调研学生兴趣、设计服务内容,将抽象的决策转化为可落地的课堂活动。​
若想更清晰地理解这套管理逻辑,我们可以将其类比到软件工程领域:校长就像是操作系统,不仅要统筹 “硬件”(学生)的资源分配,还要制定整个 “系统”(学校)的运行规则,决定着体系的核心逻辑与稳定性;学生则对应着硬件,是整个系统运行的基础载体 —— 就像电脑硬件需要遵循操作系统指令才能工作,学生也需要在校长制定的规则框架下,发挥自身的学习与成长潜力;而老师,恰好是连接两者的驱动程序:既需要精准理解 “操作系统”(校长)的决策指令,又要将这些指令转化为 “硬件”(学生)能理解的语言,比如把校长提出的 “素质教育提升要求”,拆解成每节课的实践任务,确保操作系统的指令能真正在硬件上生效。​
不过这里有个有趣的疑问:在这套管理体系中,管理者(校长)与被管理者(学生)往往无需直接见面,却能实现高效的管理闭环 —— 这背后的核心逻辑是什么?其实答案很简单:“见面” 并非管理的必要条件,管理的本质是对 “被管理者状态数据” 的把控。我们之所以会觉得 “见面才能管理”,是因为见面时能直接获取对方的状态信息(比如学生是否认真听讲、是否有困惑);但只要能通过其他方式精准拿到这些数据,同样能实现有效的管理,甚至比见面更高效。​
那在不见面的情况下,这些关键数据是如何获取的呢?在学校体系中,辅导员就承担了 “数据采集者” 的关键角色:他们会通过日常查寝了解学生的生活状态,通过班会倾听学生的需求反馈,通过学业跟踪表记录学生的成绩波动,再将这些零散的信息汇总成标准化的报表,反馈给校长等管理层 —— 这些数据,正是校长调整管理策略、优化决策的重要依据。而在软件工程的类比中,驱动程序则扮演着和辅导员几乎一样的角色:它能实时读取硬件(如显卡、键盘)的运行状态数据,比如显卡的性能参数、键盘的按键响应速度,再将这些数据转化为操作系统能理解的 “语言”,确保操作系统无需直接 “接触” 硬件,也能及时掌握硬件的情况,随时调整资源分配策略,避免系统出现故障。​
随着学校招生规模扩大,学生数量增至数千甚至上万人,原有的 Excel 数据管理方式逐渐失效。此前学生少时,Excel 可快速筛选信息、计算成绩,操作简单;但人数激增后,Excel 查找特定学生信息需多次筛选,修改数据易出现逻辑错误,且大文件打开卡顿、单表容量有限,拆分合并时还会遇到格式或重复问题,占用管理层大量精力。​
为解决这一困境,“结构体信息管理” 方案应运而生。不同于 Excel 中分散的单元格信息,结构体将学生学号、姓名、班级、成绩等数据 “打包” 成统一模板,每个学生对应一个独立结构体实例,像标准化 “电子档案袋”,避免信息零散混乱。但仅靠结构体仍需逐个遍历查找,因此在结构体中加入 “指针字段”—— 存储下一个结构体的地址,将所有学生信息串联成 “链表”。这种方式恰好弥补 Excel 缺陷:新增学生只需调整前后指针,无需挪动整体数据;后续可通过优化快速定位目标信息,且链表长度能随学生数量动态变化,无需担心容量问题。​
对管理层而言,链表管理优势显著:查询数据几秒内完成,修改信息仅需调整对应结构体字段,统计成绩也可通过遍历高效计算,让海量学生信息管理重回高效清晰的状态。到此,我们就将学生管理工作,转化成了对链表节点的增删查改。整个建模过程为"先描述,再组织"->这种方式可以对任何 "管理" 场景进行建模。在软件工程场景中,链表的价值尤为突出:比如 APP 的用户日志管理,每秒产生大量日志,链表可实时追加节点;再如电商订单队列,新订单加入时无需重构队列,只需调整指针即可高效处理。最终,这种从 “简单存储” 到 “结构体 + 链表” 的演进,让软件能稳定支撑海量动态数据,如同学校实现对大规模学生信息的高效管理。

为什么C++要提供类呢?它们解决的是先描述的问题!为什么C++要提供STL等容器呢?它们解决的是再组织的问题!我们写的任何东西本质都是对数据做管理,对数据做管理就离不开 "先描述,再组织" 的建模方式,因此任何语言都必须提供类和容器!为什么现在都说面对对象的语言已经成为主流了,原因就在此处。一个语言使用面向对象,我们可以说这是语言的特点,但是如果未来新出现的语言都是面向对象的语言,那就是这个世界的特点,整个世界就是"先描述,再组织" 的世界。未来再管理数据,全部都是"先描述,再组织"!为什么我们学习的课程中会存在一门叫数据结构的课程,数据结构是把现实中所有实际遇到的管理模型转化为结构化数据,翻译成数据结构,便于后来人的理解。

系统调用和库函数概念

        操作系统要向上提供对应的服务,但操作系统不相信任何用户或人,例如银行,银行要为我们提供各种资金服务,但又不希望让我们直接进行。
在开发角度,操作系统对外会表现为⼀个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

那在还没有学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来!

http://www.dtcms.com/a/439593.html

相关文章:

  • 做网站网站名字自己设置吗厦门网络推广推荐
  • 微信网站设计做网站的收钱不管了
  • 中国广东网站建设wordpress 互动性
  • 临沂网站制作公司6安阳建设网站哪家好
  • 优秀设计赏析网站微信小程序开发技术栈
  • 韩国网站域名设计师个人作品展示网站
  • 高级网站开发培训价格4s店建设网站的目的
  • 重庆网站设计总部wordpress全屏背景
  • 基于STM32单片机大棚温湿度检测无线蓝牙APP控制设计
  • 团购网站APP怎么做深圳自适应网站建设价格
  • 青海市住房和城乡建设厅网站网站文章快速被收录
  • 网站开发教育类网站建设启示
  • 网站信息系统建设杭州市建设工程招标网
  • 郑州网站建设优化郑州哪家建设网站
  • wordpress企业建站教程兰州微信信息平台网站建设
  • Wordpress 仿站 工具腾讯oss wordpress
  • 浚县网站建设深圳企业网络推广公司
  • 网站联盟名词解释苏州网络推广seo服务
  • 建设行业网站价格广州市城乡住房建设厅网站
  • 海南网站建设推荐怎么样百度搜到自己的网站
  • 福州专门做网站电商设计师岗位职责
  • 佛山网站建设科技有限公司网站界面设计如何实现功能美与形式美的统一?
  • 【开题答辩全过程】以 Danny’s音乐网站为例,包含答辩的问题和答案
  • python不用框架做网站免费logo设计网站推荐
  • 红楼梦注解——心比天高
  • 提供网站建设的理由汽车用品网站规划
  • 搭建网站费用网站开发协议模板
  • 网站添加微信分享代码深圳高端网站建设收费
  • 从DQN到Double DQN:分离动作选择与价值评估,解决强化学习中的Q值过估计问题
  • 门户网站是指提供什么的网站高米店网站开发公司