当前位置:   article > 正文

【Linux】解锁操作系统潜能,高效进程管理的实战技巧

【Linux】解锁操作系统潜能,高效进程管理的实战技巧

1. 冯诺伊曼体系结构

1.1. 概念

  1. 冯诺伊曼体系结构由五大部分组成,分别为输入设备、输出设备、存储器、运算器和控制器。其内包含的设备既是独立的,又是连接的。运算器和存储器统称为CPU,中央处理器,存储器是内存。

  2. 设备是独立的: 输入设备:键盘、鼠标、话筒、网卡、磁盘、摄像头等;输出设备:显示器、声卡、显卡、网卡、磁盘、打印机等。

体系结构内的有些设备只能做输入 / 只能做输出 / 既可以做输入,又可以做输出。

  1. 设备是连接的:通过总线连接,集成在主板上。

连接是手段,目的是进行设备之间数据流动。数据流动的本质是数据会在设备之间进行来回拷贝。数据拷贝的整体效率,是决定着计算机效率的重大指标。

一般会被普遍流行的计算机具有的特性:稳定性和效率都还不错,价格便宜。

image.png

1.2. 数据信息流动过程

  1. 计算机的存储金字塔
  • 距离CPU越近的存储单元,访问效率越高,单体容量小,造价贵
  • 距离CPU越远的存储单元,访问效率越高,单体容量大,造价便宜。

image.png

  1. 为什么体系结构中要存在内存?

如果体系结构中没有内存,根据"木桶原理"(“短板效应”),计算机整体的效率就变成了以外设的访问效率为主。

相较于从外部存储设备中读取数据,从内存中读取数据要快得多,即:内存的访问速度远高于外部存储设备。

体系结构存在内存,计算机整体的效率就变成了以内存的访问效率为主。

内存的引入把效率问题,转化为了软件问题,它可以让我们的计算机效率还不错,且较便宜,我们才能买的起电脑。image.png注意:所有设备只能直接和内存打交道 -》 在数据层面上,CPU只能对内存进行读写,不能访问外设(输入、输出设备)、外设也只能将数据写入内存中 或者 从内存中读取数据。

3.数据信息流动的应用场景

a. 程序在运行中,必须将程序加载到内存中。
答 : 因为冯诺依曼体系规定的。程序 ->是个二进制文件 -> 存储在磁盘外设中 -> 只能直接访问内存 -> 最终需要通过CPU来执行 <- 它的指令和数据 <- 程序。

b. 登录上qq开始和某位朋友聊天,数据的流动过程
答:我 : 键盘 -> 内存 -> cpu -> 内存 -> 网卡。网友:网卡 -> 内存 -> cpu -> 内存 -> 显示器。

c. 在qq上发送文件, 数据的流动过程
答:磁盘 -> 内存 -> cpu -> 内存 -> 网卡。

2. 操作系统

2.1. 概念

操作系统概念:操作系统是一个进行软硬件资源管理的软件。它是第一个被加载到计算机的软件。为用户提供数据方面、技术方面的支持。

2.2. 管理

一、例子1:以校园生活为背景,引出计算机中"管理"的概念:

人们在生活和工作中的角色,大致可以被划分以下三类:只做决策的人,等同于管理者,在校园中相当于校长;只做执行的人,等同于被管理者,在校园中相当于学生;既做执行又做决策,在校园中相当于辅导员,保证管理决策落地。

  1. 管理的本质不是对人做管理,而是对人的属性信息(数据)做管理。

管理者和被管理者无需见面,说明管理一个人的本质不在于见面。eg : 开学到毕业你或许都没和校长见过一面,但你大学四年学业课程,却被他安排的"明明白白"。

  1. 管理者的核心工作是做决策,根据被管理者的数据来做决策。

管理者和被管理者面都没有见到,那么管理者是如何拿到被管理者的信息的呢? 辅导员 -> 保证管理决策落地。

  1. 当被管理者非常多时,即:数据量非常大时,管理者如何管理呢?
  • 结构体、类用来封装一组类型不同但又相关的若干数据,以及操作这些数据的方法。

因为所有学生在特定场景具有相同的属性信息,如:姓名、年龄、学号、年纪等,所以我们可以定义一个结构体struct student来描述学生的属性信息,创建多个结构体变量,通过将变量放入特定的数据结构(链表)中 ——》 把对学生的管理工作,转为了对链表的增删查改。

eg:找到年龄最小的学生,并把它删除:以学生的年龄作为基值,遍历链表,若查找到了,就在链表中删除这个节点。image.png注意:对管理的一个计算机建模的过程 :先描述、再组织。

  • 计算机级别的建模:主要是指将具体问题或现象,转化为计算机能够认识和处理的形式。

二、例子2:面向对象语言

  1. 描述下历史:先描述的过程:就是面向对象的过程 —— class 、struct ;再组织的过程:数据结构 —— STL,如vector、list、stack、map等。

类中有对象的方法和数据,再把用该类创建的对象放入到容器中。eg:C语言小项目:三子棋、扫雷、通讯录. 定义通讯录,struct Person { string name; int number;} (描述)、struct Contact { int num; struct Person p[1000];} (组织)。

  1. 预测下未来:以后只要是进行管理,都要做以下两件事:先描述(class、struct)、再组织(STL容器,数据结构) -》将具体问题,进行计算机级别的建模过程,转换为计算机能够认识的问题。
  • 数据结构的本质是对数据进行管理。

注意:综上所述:把对数据的管理场景转化为对特定数据结构的增删查改。

2.3. 设计操作系统的目的

  1. 为什么要有操作系统(为什么要有操作系统的管理)?

答:对下进行软硬件资源管理(手段),对上提供一个良好的运行环境(目的)。

  1. 为什么要存在系统调用接口?
  • a. 安全保护和资源管理。

通过系统调用,操作系统可以确保用户程序不会直接访问或修改内核数据,防止潜在的安全风险。
系统调用接口是用户和内核进行交互的唯一途径,有助于操作系统有效的管理其资源,确保用户程序在受控和安全的环境下访问和使用系统资源。

  • b.简化操作。

系统调用为用户程序提供了高级的、易于使用的接口,以访问操作系统提供的各种服务和功能。这使得程序员无需深入了解底层硬件和操作系统的细节,就可以编写出高效且可靠的应用程序。

2.4. 系统调用和库函数概念

一、系统调用

系统调用接口概念:也称为系统调用函数system call,是操作系统提供给用户和内核进行交互的一组接口。因为Linux大部分代码是用C语言写的,system call是用C语言设计出的函数。

eg:当你去银行取钱时,银行会有一个窗口,将你"挡在外面", 你只能通过银行内部人员进行取钱。银行窗口相当于操作系统中系统调用接口。

  1. 用户不能绕过操作系统直接访问硬件资源,会出现数据损害、资源冲突、系统崩溃等安全隐患。

  2. 任何人不能直接访问操作系统,必须通过系统调用接口才能访问。例外:在嵌入系统中用户可以直接与内核进行交互。

  3. 系统调用接口在确保操作系统安全性的情况下,为用户程序提供了对底层硬件访问、系统级别任务的方法。

二、库函数

库函数概念:由编译器或者操作系统预先写好的函数,被存放在"库"中,由用户提供。eg:printf、scanf库函数存放在C标准库中。

  1. 用户操作接口有库、Shell外壳、部分指令。系统调用接口是系统级别的接口,要求使用者需要对操作系统有一定的了解,然而大多数用户并不了解操作系统 , 所以用户提供了类似于printf和scanf级别的库函数 , 两者都可以让用户完成对硬件资源的使用。

eg:对于不识字的老人家来说,直接使用银行的自助服务系统可能会非常困难,因为他们可能无法理解和操作复杂的界面和流程。在这种情况下,银行会提供一个服务人员来帮助他们完成任务,这个服务人员就相当于用户操作接口。

  1. printf、scanf的重新理解:printf是向显示器进行打印,scanf是从键盘中读取数据,说明都需要访问硬件设备。因为对硬件设备的访问,必须通过操作系统、而对操作系统的访问,必须通过系统调用接口,所以printf、scanf底层封装了系统调用。

  2. C标准库具有跨平台性、可移植性。原因之一:C的库函数中调用的system call是由当前操作系统所决定的。eg: Windows下printf函数封装的system call是代码A,,Linux下printf函数封装的system call是代码B,但是C的库函数printf实现时并没有指定是使用代码A还是代码B,具体情况取决于当前操作系统。

屏幕截图 2024-05-25 001720.png

  • 库函数 vs 系统调用,两者是上下层的关系,库函数在上,由用户(设计者)提供;系统调用在下,由操作系统提供。

3. 进程

3.1. 引言

可执行程序 -> 是二进制文件 -> 存放在磁盘中 -> 外设 -> 需要被加载到内存中。

  1. 我们可以同时启动多个程序? 可以,但我们一定要将多个可执行程序加载到内存中。

  2. 操作系统需要管理多个被加载到内存的程序吗? 需要。

  3. 操作系统如何管理多个被加载到内存的程序呢? 先描述、再组织。

image.png

3.2. 概念

进程 = 内核PCB对象 + 可执行程序 = 内核数据结构 + 可执行程序

  1. 教材概念:进程是正在运行的程序、被加载到内存的程序、进程可以排队。

  2. 为什么程序加载到内存,变成进程,我们要给每个进程形成一个PCB对象呢?

  3. 因为操作系统要对进程进行管理,先描述、再组织,PCB是描述进程所有属性信息。

  4. 管理的本质:对数据结构的对象进行管理。

对于之前所学习的所有数据结构以及方法,都是对节点的管理工作,而每个节点里面包含数据,都是在模拟操作系统目前的管理工作 ——> 操作系统和数据结构的关联度很大。

注意:未来所有对进程的操作和控制,都只和进程的PCB有关,与进程的可执行程序无关。即:进程的PCB(Node)可以被放入到任何(多个)数据结构中。

eg:CPU的资源是有限的,所以多个进程在运行时需要竞争这些资源,进程的PCB才会被放入到一个队列中准备被CPU调度,这个队列称为"运行队列"。
image.png

推荐阅读
相关标签