【Linux】操作系统与进程的概念(一)

简介: 【Linux】操作系统与进程的概念

冯诺依曼体系


🥖冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构

🥖其主要内容点明了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备)。

🥖而现如今的计算机,如笔记本、服务器,大部分都遵守冯诺依曼体系。

image.png

我们认识的计算机都是由这样一个个硬件组成的:

  • 运算器和控制器:中央处理器(CPU) 。
  • 存储器:内存。
  • 输入设备:键盘, 鼠标,扫描仪,网卡等。
  • 输出设备:显示器,打印机等。

注意


  • 这里的存储器指的是内存而不是磁盘。
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)。(CPU只与内存打交道
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。 (在数据层面上,外设只与内存打交道

🥖因此,当外部由输入设备传入数据时会先将数据传到内存之中,之后 CPU 对内存中的数据进行处理之后再将输出的数据加载到内存之中,最后由输出设备进行输出。

为什么CPU不直接访问输入或输出设备?


🥖由于外设的速度较慢,而 CPU 读取数据并处理数据的速度是很快的,若 CPU 直接访问外设,就像拿一个有短板的木桶去打水,那无论其他木板有多长最终打的水的高度都不会超过那块短板,所以总体的速度将会以外设为主,将导致 CPU 性能的浪费。

跨主机间数据的传递


🥖那我们在网络中与他人交互时,数据流是怎样流动的。就拿QQ/微信举例吧,当信息从聊天框发送出去之后,便被加载到了内存之中,经过计算之后通过显示屏输出呈现给我们,并通过网卡将数据传给朋友,朋友的网卡接收了网络上的数据,并将其加载到了内存之中,经CPU计算后在显示屏上输出,如此便完成了信息的传递。

image.png

操作系统


🥖操作系统包括了:内核进程管理,内存管理,文件管理,驱动管理)和 其他程序(例如函数库, shell程序等等)

🥖本质上是一款对软硬件进行资源管理的软件

管理


🥖在学校里,校长是管理者,而我们学生是被管理者,校长只负责决策并不需要尽到执行的义务,假如校长安排你转一个专业或者换一个宿舍,他并不需要见到你,而是对你的数据进行修改便可,之后的辅导员便会协助你调整。即管理者和被管理者是不需要直接沟通的。

🥖并且辅导员将协助校长拿到学生的信息,校长并不需要与学生直接接触,而是管理学生的数据就能够实现对学生的管理。

因此,管理的本质便是对被管理者的数据做管理

🥖那么校长是如何对学生进行管理的?首先需要先对学生这个个体进行描述,如学号、姓名、专业、班级等信息,之后再以数据结构的方式将所有的学生连接在一起集中管理。如此对全校学生的管理就转变成了对数据结构的管理了。如此方法就称作“先描述,后组织 。”

image.png

🥖将这个过程放到操作系统之中也同样适用,操作系统就是校长,硬件驱动就是辅导员、而学生就是被管理的软硬件。即硬件驱动与硬件交互之后拿到了相关的数据转交给操作系统,而操作系统做完决策之后再将新的命令传递驱动进行执行。并通过“先描述,再组织”的方式,以数据结构的形式对硬件进行管理。

🥖由此操作系统对下管理好软硬件资源,对上给用户提供良好(安全稳定高效功能丰富等) 的执行环境。

🥖更重要的一点是:操作系统是不相信任何人的,正如我们是银行的用户,经常去银行存钱,但银行就信任我们吗?为了避免用户中有人恶意破坏,而对操作系统造成伤害, 所

以操作系统并不是暴露自己的全部功能而是以系统调用来访问操作系统。由于系统调用的使用成本可能较高,之后在此基础上便有人进行二次的软件开发而产生了图形化界面和 shell 及工具集。

系统调用与库函数

🥖在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用

系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

进程

🥖基本概念:程序的一个执行实例 正在执行的程序 。在内核观点中便是担当分配系统资源(CPU时间,内存)的实体

🥖所以以前的任何启动并运行程序的行为,都是由系统将程序转化为进程后,再来完成特定的任务

我们打开任务管理器便会发现这些正在运行的可执行文件都是一个个进程。

bd185d8bbb4c4e0c9a401e06f396097d.png

描述进程


🥖进程信息被放在一个叫做进程控制块的数据结构中,是进程属性的集合。通常称之为PCB(process control block),而 Linux 操作系统下的 PCB 是: task_struct。是 Linux 内核的一种数据结构,它会被装载到 RAM (内存)里并且包含着进程的信息。

task_ struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据。
  • I/ O状态信息: 包括显示的I/O请求,分配给进程的I/ O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

🥖从上面我们知道,操作系统在管理对象时进行的都是 “先描述,再组织” 的方式,而 PCB 正是用于描述进程的,且最终对进程的管理转化为对一个个 PCB 连接而成的链表的管理。正如一个学生只有被登记在学校的档案里才能称其为这个学校的学生,而不是在这个学校里的人就叫作这个学校的学生。由此只有一个可执行文件被加载到内存之中,描述出其属性并能够对其做管理。这样才算完成对进程的建模。


由此可得进程 = 内核关于进程的相关数据结构 + 当前进程的代码和数据。

image.png

进程的查看和终止


🥖为了进程可以持续地进行,于是我们写一个无限循环的代码,作为样本进行观察。

image.png

🥖我们将这个代码运行后,再打开一个新的会话窗口, 之后输入指令便可查询该进程的信息。

ps axj | head -1 && ps axj | grep 进程名
  • ps axj :显示所有进程。
  • | :管道,将所有进程的这个信息转移到下一个命令。
  • head -1 :显示第一行。
  • grep : 进程名 :筛选以进程名为关键字进行筛选。
  • && :可以像C语言里面那样理解,即要执行左边的命令又要执行右边的命令。

🥖当这串命令执行之后,你会发现出现了两个进程。 这是由于,当我们查找进程时使用的命令也会在操作系统的处理下变成一个进程,同时也包含了进程名的关键字,所以在输出的时候才出现了两个进程。但第一个才是我们程序运行所产生的进程。

image.png

🥖这里不得不介绍一下 PID 和 PPID 了,每个进程运行之时都会有属于自己的一个 PID ,就相当于这个进程的身份证号码,若一个进程来源于另一个进程就用父子进程来称呼彼此,而 PPID 则是这个进程的父进程的 PID 。


🥖第二种方法则是直接在系统文件夹之下查找,我们事先得到进程的 PID 之后,在 proc 文件夹下找到目标进程的目录,便可以看到该进程的具体属性。

ll /proc/进程的PID

image.png

🥖值得注意的是:

进程信息必须在进程运行之时查看,由于进程结束之后系统便会删除其相关数据,由此在进程停止运行时是无法查询到该进程的数据的。

image.png

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
11天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
33 1
|
13天前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
12天前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
12天前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
13天前
|
搜索推荐 Linux
深入理解Linux操作系统的启动过程
本文旨在揭示Linux操作系统从开机到完全启动的神秘面纱,通过逐步解析BIOS、引导加载程序、内核初始化等关键步骤,帮助读者建立对Linux启动流程的清晰认识。我们将探讨如何自定义和优化这一过程,以实现更高效、更稳定的系统运行。
|
10天前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
11天前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
7月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
111 0
|
7月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战
【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战
148 0
|
7月前
|
Ubuntu Unix Linux
【Linux操作系统】探秘Linux奥秘:Linux 操作系统的解密与实战
【Linux操作系统】探秘Linux奥秘:Linux 操作系统的解密与实战
97 0