Linux系统篇,进程概念(一):计算机体系、操作系统的认识、程序的加载过程

系列文章目录

第三章 进程概念


文章目录

  • 系列文章目录
  • 前言
  • 一、计算机的硬件结构
  • 二、运行过程
    • [2.1 程序文件存储](#2.1 程序文件存储)
    • [2.2 程序的加载与本质](#2.2 程序的加载与本质)
      • [2.2.1 程序加载过程](#2.2.1 程序加载过程)
      • [2.2.2 程序加载的本质](#2.2.2 程序加载的本质)
    • [2.3 内存的意义](#2.3 内存的意义)
    • [2.4 数据的流动](#2.4 数据的流动)
  • 三、操作系统
    • [3.1 认识操作系统](#3.1 认识操作系统)
    • [3.2 操作系统的作用](#3.2 操作系统的作用)
    • [3.3 操作系统的管理](#3.3 操作系统的管理)
    • [3.3 系统调用](#3.3 系统调用)
  • 总结

前言

  我们学习完如何使用应用软件后,让我们来了解一下应用使用的底层,本节我们将开始接触进程,将注意到更加深刻的变化,理解计算机的运行原理。


一、计算机的硬件结构

  我们的计算机并不是由硬件随意堆叠形成的,它有具体的构造布局,具有分工明确的执行过程,这是我们在计算机学习中必须要了解的知识。

  硬件结构多种多样,不同的结构有着不同的应用情况和特性,而我们主料的硬件结构为:冯・诺依曼结构

  想要理解该体系结构的运行过程,就得先了解各个部件的组成与功能:

  • 输入设备: 向计算机传递数据、指令、信号的硬件。常见的有:网卡、键盘、鼠标、磁盘
  • 输出设备: 计算机处理后的数字数据,转换为人类可感知形式的硬件。常见的有显示器、磁盘、网卡、打印机
  • 中央处理器: 即CPU = 运算器 + 控制器,前者负责数据运算,后者负责解析命令、调动硬件
  • 存储器: 即内存,计算机用于存放数据、程序、指令的部件。

说到内存:就会有外存。外村就是磁盘中的存储空间。

  在计算机中,输入和输出设备被统称为外设 ,其中的网卡与磁盘特殊,它们具有双重身份。磁盘的双重体现在:对文件的读写(Input / Output ,这是一内存的角度看的)

二、运行过程

2.1 程序文件存储

  我们可知:程序运行,必须先加载。那么程序运行之前存储在哪?从我们之前的Linux上翻译过程可知,可执行程序是由源文件处理而来,因此程序运行就存储在磁盘当中。

2.2 程序的加载与本质

2.2.1 程序加载过程

  软件运行,必须要加载。那么为什么要加载呢?我们回到计算机的硬件体系:

  我们从体系中数据流动 可以发现:CPU的获取与写入只能从内存中进行,而我们知道程序是由CPU执行,访问数据并处理 。所以,程序就必须从磁盘加载到内存当中,可以说:软件运行先加载是由体系结构决定的。

2.2.2 程序加载的本质

  其实,数据加载的过程本质是IO操作,将磁盘中的数据Input到内存当中,

同理我们的printf也是先输入到缓冲区从而再加载到显示器的。以上的过程其实就是:数据的流动,实际上是从一个设备"拷贝"到另一个设备。

  从上可以得出,体系结构的运行效率是由设备"拷贝"的效率决定的,并且数据层面上CPU之和内存交互、外设和内存交互。

2.3 内存的意义

  那我们发现其实不需要内存,这个结构其实也可以运行即:

  你的直觉是对的,但是这就涉及到另一个概念------存储分级

存储分级:按读写速度、容量、成本、与 CPU 距离划分层级,形成存储层次结构,逐级衔接,解决 CPU 高速运算和低速存储的速度矛盾。

  这个概念说明了:离CPU越远的存储空间越来越大、越来越便宜、效率降低,越近则相反。就如磁盘与CPU的交互来说,磁盘如果读写速度为毫秒,那么CPU读写速度就是纳秒,这就是我们常知的木桶效应了,最拉的决定了上限。

  如果你用CPU级别存储的当磁盘,就可以忽略这个问题。但别忘了,现在市面上的内存条的价格。

  而内存的存在,就可以减小这之间的速度差距,很好地平均了效率与价格的反比关系,实现较低的成本实现计算机的产生。

  冯诺依曼体系的出现实现了计算机的普及,构成了现在互联网万花齐放的环境,这是跨时代的一步。

2.4 数据的流动

  通过QQ实现两人的异地聊天过程:本质是冯诺依曼结构的电脑进行数据传输,登录QQ将其加载内存,然后通过这里重复的步骤。

  这样也是体现了数据流动的本质:数据的拷贝

三、操作系统

3.1 认识操作系统

操作系统定义:管理计算机硬件、软件资源,为应用程序提供运行环境的系统软件,是硬件与用户 / 应用软件之间的桥梁。

  操作系统是个基本程序的集合,进行软硬件管理的软件,由内核、其他程序等组件组成。

  • 内核: 内核常有进程管理、内存管理、文件管理、驱动管理等功能
  • 其他程序: 如函数库、shell程序。

  另外,操作系统还分为:广义和狭义。

  狭义 的操作系统指的是内核,通常被指向处理底层的工作方式,而广义 的操作系统指的是内核+软件,当然这些软件是系统级别的,是为应用市场上的软件提供基本环境的。

  市场上便捷设备的操作系统安卓,就是在LInux内核的基础上重设外壳程序形成的,实现安卓上的程序开发。

3.2 操作系统的作用

  让我们注意到日常:我们的键盘、U盘、鼠标连接电脑时,连接上后几秒,才能够进行操作。这是因为不同的硬件设备具有不同的管理方式即驱动方式 ,而驱动系统的上层就是操作系统

  而操作系统为什么要管理这些硬件呢?让我们想一想没有os管理的情况:你想使用鼠标,需要自己先打开该设备的驱动,同理其他的设备也是这样。所以,我们就能理解到:操作系统是通过管理这些硬件的手段,为我们用户提高方便的操作环境

  这样的操作系统能够做到:

  • 对上: 为⽤⼾程序(应⽤程序)提供⼀个良好的执⾏环境
  • 对下: 与硬件交互,管理所有的软硬件资源

软硬件体系

  上面的体系,从用户到硬件体现了一种层状结构,体现出一种:高内聚、低耦合的表现方式。

高内聚:相同功能、逻辑的代码放在一个内部

低耦合:层层之间只有接口调用的关系,层内的改变不影响其他的层

  我们学过语言层面的C++中的封装、继承、多态就是这样的体现,当然硬件层面的电脑DIY也是如此,可以说计算机世界就是这样的。

  这样的设计还有这样的特点:访问操作系统,必须使用系统调用。如在屏幕上打印,使用printf是属于用户操作接口的,其中的printf是封装了系统调用的,它会一层层访问到硬件,最后表现出来。

3.3 操作系统的管理

  从上面我们可以知道:操作系统是⼀款纯正的"搞管理"的软件

  让我们使用类比来理解这个管理的作用。一个学校有三大组成部分:校长、辅导员、学生,三者分别为管理者、执行者、被管理者。而在这样的学校当中决策和执行是分离的 ,校长只负责决策,将执行工作分给辅导员。这样的学校结构恰好符合了操作系统的作用,校长作为os,辅导员是驱动程序,学生是底层硬件。

  在上方的关系情况中,管理者与被管理者是没有交集的,校长不需要见学生就可以管理,通过数据进行管理:如处理挂科情况时,不需要一个个面谈理解,直接通过教务系统查看成绩就可以。

  那管理者如何得到被管理者的数据呢? 这就需要执行者去处理了,就是辅导员这一身份,录入各个数据 。当然校长也不能随便需求数据,于是校长做了个表格记录信息:姓名、性别、年龄等,于是校长就可以将对学生的管理转为对数据(表格)的管理。

  当学生人数过多后,校长浏览数据的工作量就过多了,于是校长通过C语言中的结构体来直接管理,但这样的结构体无法贯穿,只能一个个查看,于是在结构体中新增了 * next,就形成了一个学生链表,成功地实现了管理工作变为链表的增删查改

  上面的管理过程,体现了一个本质表现:先描述,在组织。

  这样的表现就是面向对象的本质,如C++中的类和STL,前者解决描述的问题,后者解决的是组织的问题。

3.3 系统调用

  操作系统为用户提供服务,但不相信、不允许用户自己去跃层访问服务层一下的功能。 这样的例子体现在银行的服务当中,因此os为我们提供的系统调用 就是这些服务。

  现在的主流操作系统都是由C语言编辑的,因此服务本质其实就是C函数,用户通过参数输入数据,系统通过返回值返回结果,从而实现调用。

  我们在使用时不了解os的具体操作,那我们是如何使用的呢?其实设计者已经通过封装提供接口为我们简化了使用流程,常见的就是函数库。系统调用和库函数就是上下层的关系,只要涉及到硬件那么一定会使用到系统调用。


总结

  本节我们初步了解了计算机的体系和在计算机中的重要操作者------操作系统,并大体地了解了它们的原理和操作,下一节我们将学习操作系统是通过操作什么进行管理软硬件的。

相关推荐
似水এ᭄往昔2 小时前
【Linux网络编程】--Socket编程预备
linux·服务器·网络
笨蛋不要掉眼泪2 小时前
Java并发编程 :深入剖析LinkedBlockingQueue
java·开发语言·网络·并发
杨浦老苏2 小时前
网络连接实时可视化利器TapMap
网络·docker·可视化·监控·群晖
皮卡狮2 小时前
环境变量详解
linux
Lv_沐曦2 小时前
Windows磁盘驱动器取消黄色感叹号的方法
运维·windows·bitlocker·黄色感叹号
致Great2 小时前
Claude Code 上线 Dynamic Workflows:一句话调度 1000 个子智能体并行干活
java·linux·服务器
m0_738120722 小时前
渗透测试基础——黑盒测试下的Web漏洞挖掘与利用解析(一)
服务器·前端·网络·安全·php
网络与设备以及操作系统学习使用者3 小时前
零信任架构落地实践详解
运维·网络·学习·架构
满天星83035773 小时前
【Git】原理及使用(三)(分支管理)
linux·git