Linux进程(一) -- 介绍进程

计算机的系统架构

用户部分

这是用户直接与计算机交互的部分,包括以下三种操作:

  • 指令操作:用户通过命令行界面(CLI)输入指令来操作计算机。
  • 开发操作:开发人员编写和调试程序代码,与计算机系统进行更高级别的交互。
  • 管理操作:系统管理员进行系统配置、维护和管理。

用户操作接口

这是用户与操作系统交互的接口层,包括:

  • Shell外壳:提供命令行界面,允许用户输入命令以与系统交互。
  • 库(Lib):程序库提供系统调用的接口,程序员可以使用这些库函数来实现系统级操作。
  • 图形指令:通过图形用户界面(GUI)进行操作,用户可以通过点击、拖动等方式与系统进行交互。

系统调用接口(System Call Interface)

系统调用接口是用户程序请求操作系统服务的接口。用户操作接口通过系统调用与操作系统内核进行交互。系统调用包括文件操作、进程控制、内存管理等功能。

操作系统

操作系统是计算机系统的核心软件部分,负责管理硬件资源和提供基础服务,包括:

  • 内存管理:管理内存的分配和回收,确保各个进程能够有效使用内存。
  • 进程管理:负责进程的创建、调度和终止,确保系统能够高效地运行多个任务。
  • 文件管理:提供文件系统接口,负责文件的存储、读取和写入操作。
  • 驱动管理:管理硬件驱动程序,确保硬件设备能够正常工作。

驱动程序

驱动程序是操作系统与硬件设备之间的中间层,提供统一的接口,使操作系统能够控制硬件设备。包括:

  • 网卡驱动:管理网络接口卡(NIC),负责网络通信。
  • 硬盘驱动:管理硬盘,负责数据的存储和读取。
  • 其他驱动:管理其他硬件设备,如显示器、键盘、鼠标等。

底层硬件

底层硬件是计算机系统的物理部分,包括:

  • 网卡:负责网络通信。
  • 硬盘:用于数据存储。
  • 其他硬件:包括中央处理器(CPU)、内存(RAM)、输入输出设备(如键盘、显示器、打印机等)。

为什么要有操作系统

操作系统(Operating System,OS)是计算机系统中必不可少的核心软件,主要功能是管理硬件资源和提供用户与计算机之间的接口。以下是操作系统存在的几个关键原因:

硬件抽象

  • 统一接口:操作系统为不同硬件设备提供了统一的接口,使得应用程序不必关心底层硬件的具体实现细节。
  • 硬件管理:操作系统管理硬件资源,如CPU、内存、硬盘、网络接口等,确保资源的高效利用。

资源管理

  • 内存管理:操作系统负责内存的分配和回收,确保各个进程能高效使用内存,避免内存冲突和泄漏。
  • 进程管理:操作系统管理进程的创建、调度和终止,确保系统能平稳运行多个任务,提高系统的响应速度和吞吐量。
  • 文件系统管理:操作系统提供文件系统接口,管理文件的存储、读取和写入,确保数据的持久性和安全性。

提高用户体验

  • 用户界面:操作系统提供图形用户界面(GUI)和命令行界面(CLI),方便用户与计算机进行交互。
  • 多任务处理:操作系统允许多个程序同时运行,提高用户的工作效率和系统的利用率。

提供平台

  • 应用程序支持:操作系统为应用程序提供运行环境和基础服务,使得开发者可以专注于应用逻辑,而不必关心底层硬件细节。
  • 驱动程序支持:操作系统管理和加载设备驱动程序,使得新硬件可以快速被系统识别和使用。

安全性

  • 用户权限管理:操作系统通过用户账户和权限管理,确保只有授权用户可以访问和操作系统资源,提高系统的安全性。
  • 安全防护:操作系统提供防火墙、病毒扫描等安全功能,保护系统免受恶意软件和网络攻击的侵害。

稳定性和容错

  • 错误处理:操作系统提供错误检测和处理机制,确保系统在遇到错误时能够平稳恢复,减少系统崩溃的可能性。
  • 资源隔离:通过进程和内存管理,操作系统可以隔离不同应用程序的运行环境,防止一个程序的错误影响到其他程序的正常运行。

为什么要有操作系统的管理

操作系统的管理是计算机系统正常、高效、稳定运行的关键,下面详细说明为什么需要操作系统的管理及其主要功能:

资源管理

操作系统负责管理计算机的所有硬件资源,包括CPU、内存、存储设备和输入输出设备。其主要目的是确保资源的高效利用和公平分配:

  • CPU管理:操作系统调度不同的进程,确保每个进程都能公平地使用CPU资源,提高系统响应速度和吞吐量。
  • 内存管理:操作系统负责内存的分配与回收,防止内存泄漏和冲突,并提供虚拟内存技术,扩展物理内存的使用范围。
  • 存储管理:操作系统管理硬盘和其他存储设备的使用,包括文件系统的维护,确保数据的有序存储和快速访问。
  • 设备管理:操作系统通过设备驱动程序控制各种外围设备,如打印机、显示器和网络接口,提供统一的接口和控制方法。

多任务处理

操作系统允许多个任务同时运行,提高计算机的利用效率和用户的工作效率:

  • 进程管理:操作系统创建、调度和终止进程,确保系统能够高效地运行多个任务。
  • 线程管理:操作系统支持线程的并发执行,提高程序的运行效率和响应速度。

文件系统管理

操作系统提供文件系统,管理数据的存储、组织和检索:

  • 文件管理:操作系统负责文件的创建、删除、读取、写入和权限管理,确保数据的安全性和持久性。
  • 目录管理:操作系统提供目录结构,组织文件,方便用户和程序查找和管理文件。

用户界面

操作系统为用户提供交互界面,使用户能够方便地操作计算机:

  • 命令行界面(CLI):允许用户通过输入命令来操作系统。
  • 图形用户界面(GUI):通过图形界面,使用户可以通过点击、拖动等方式与系统交互,更加直观和易用。

安全性

操作系统通过多种机制保障系统的安全:

  • 用户认证和权限管理:操作系统通过用户账户和权限管理,确保只有授权用户可以访问和操作系统资源。
  • 安全防护:操作系统提供防火墙、病毒防护和入侵检测等安全功能,保护系统免受恶意软件和网络攻击的侵害。
  • 数据加密和备份:操作系统支持数据加密和备份,确保数据的保密性和可靠性。

错误检测与处理

操作系统提供错误检测和处理机制,确保系统在遇到错误时能够平稳恢复:

  • 故障隔离:操作系统通过进程隔离技术,防止一个进程的故障影响到其他进程的运行。
  • 日志记录与诊断:操作系统记录系统日志,帮助系统管理员诊断和解决问题。

提供平台支持

操作系统为应用程序提供运行环境和基础服务,使开发者可以专注于应用逻辑,而不必关心底层硬件细节:

  • API和库支持:操作系统提供丰富的应用编程接口(API)和库函数,简化应用程序的开发。
  • 兼容性和移植性:操作系统提供兼容性支持,使得应用程序可以在不同硬件平台和操作系统版本上运行。

系统调用vs库函数

调用上下文
  • 系统调用:涉及从用户模式到内核模式的切换。由于需要与操作系统内核交互,系统调用会导致上下文切换,开销较大。
  • 库函数:在用户模式下执行,不涉及内核模式的切换,调用开销较小。
功能权限
  • 系统调用:具有访问和操作硬件资源的权限。例如,直接进行文件操作、内存管理、进程控制等。
  • 库函数:通常不直接操作硬件资源,而是在用户模式下执行常见的编程任务,如字符串操作、数学计算等。
性能开销
  • 系统调用:开销较高,因为涉及到用户模式和内核模式的切换,以及可能的内核安全检查。
  • 库函数:开销较低,因为它们是在用户模式下直接执行的函数调用。
实现与来源
  • 系统调用:由操作系统内核实现,提供底层操作功能。
  • 库函数:由标准库或第三方库实现,提供高层次的编程接口。

联系

封装关系
  • 库函数封装系统调用:许多库函数会封装系统调用,为程序员提供更简单的接口。例如,printf库函数在底层会使用write系统调用来输出数据。
互补作用
  • 协同工作:库函数和系统调用协同工作,共同完成任务。库函数提供便捷的高层次接口,系统调用执行具体的底层操作。

示例

  • printf库函数printf是一个标准库函数,它通过格式化输出功能向标准输出打印字符串。在内部,printf最终会调用write系统调用来完成实际的输出操作。
  • write系统调用write直接与操作系统内核交互,将数据写入指定文件描述符(在此例中是标准输出)。

Linux是怎么描述进程的

在Linux操作系统中,进程的描述是通过数据结构task_struct来完成的。这个结构体包含了一个进程的所有必要信息。

task_struct 数据结构

task_struct是内核中用于描述进程的主要数据结构,定义在内核源码的include/linux/sched.h文件中。它包含了大量关于进程的信息,包括但不限于以下内容:

  • 进程状态state字段描述了进程的当前状态,如运行、等待、停止等。
  • 进程号pid字段表示进程的唯一标识符。
  • 父进程和子进程parent字段指向父进程,children字段是一个链表,包含所有子进程。
  • 进程的优先级prio字段表示进程的优先级,用于调度。
  • 进程内存信息mm字段指向进程的内存描述符mm_struct,包含进程的虚拟内存信息。
  • 进程的调度信息sched_class字段和相关的调度实体描述了进程在调度器中的信息。
  • 文件系统信息fs字段指向进程的文件系统信息,如当前工作目录和根目录。
  • 文件描述符表files字段指向进程的文件描述符表files_struct
  • 信号处理signal字段指向进程的信号处理信息signal_struct
  • CPU时间utimestime字段记录了进程的用户态和内核态的CPU时间。

进程控制块(PCB)

task_struct即是进程控制块(Process Control Block,PCB),它是操作系统用来管理进程的核心数据结构。每个进程在内存中都有一个对应的task_struct实例。、

为什么我们需要对每个进程形成一个PCB对象

在操作系统中,为每个进程创建一个进程控制块(Process Control Block,PCB)对象是非常必要的。以下是具体原因和好处:

集中管理进程信息

PCB集中存储了与进程相关的所有信息,包括进程状态、进程号、程序计数器、寄存器内容、内存管理信息、I/O状态信息等。通过PCB,操作系统可以快速访问和管理每个进程的所有相关信息。

实现多任务调度

操作系统需要在多个进程之间进行切换(上下文切换),以实现多任务处理。PCB保存了进程的上下文信息(如CPU寄存器状态、程序计数器等),使操作系统能够在切换进程时保存当前进程的状态并恢复另一个进程的状态,从而实现进程的无缝切换。

资源分配和保护

PCB包含了进程使用的资源信息(如打开的文件、使用的内存段等)。操作系统通过PCB确保每个进程只能访问其合法分配的资源,从而实现资源的安全和公平分配。PCB的存在有助于实现资源保护和进程间的隔离,防止一个进程的错误或恶意行为影响其他进程。

进程控制和管理

PCB支持进程的创建、执行、挂起、唤醒和终止等控制操作。操作系统通过操作PCB来实现对进程的各种控制和管理功能,如:

  • 创建进程:初始化一个新的PCB,并将其加入进程调度队列。
  • 挂起进程:保存当前进程的上下文信息到PCB,并将进程状态设为挂起。
  • 唤醒进程:从PCB中恢复进程的上下文信息,并将进程状态设为可运行。
  • 终止进程:释放进程占用的资源,并移除相应的PCB。

进程间通信和同步

PCB可以包含进程间通信和同步所需的信息,如消息队列、信号、信号量等。通过PCB,操作系统可以实现进程间的有效通信和同步,确保多进程环境下的协调运行。

错误检测和调试

PCB提供了进程运行状态和资源使用情况的详细记录,有助于错误检测和系统调试。操作系统可以通过检查PCB中的信息来发现进程运行中的异常情况,并采取相应的纠正措施

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

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

相关文章

ARM架构安全特性之标准安全 API

安全之安全(security)博客目录导读 目录 一、机密计算软件 二、Arm机密计算固件架构 三、认证校验 四、Veraison项目 五、独立于语言的安全API 六、平台抽象安全项目(Platform AbstRaction for SECurity project) 七、可移植平台安全API 八、…

嵌入式中STM32上模拟启动Linux自动初始化

Linux中有很多编程思想可以学习,很多大佬把这些思想、机制运用到单片机的编程上。 下文,在STM32上模拟Linux kernel自动初始化流程。 通常我们写程序都是按照这个套路,一个函数一个函数按照顺序逻辑一个一个的执行下去。 如果逻辑非常复杂,涉及的模块比较多,那么这种顺…

大模型崛起与就业危机

大模型,特别是像我这样的人工智能,最有可能首先替代那些重复性高、标准化程度高、不需要太多人类直觉和情感判断的工作。这些工作通常包括数据输入、初级数据分析和处理、简单的客户服务任务等。例如,可以自动化的一些岗位包括: 1…

【STM32 |程序实例】按键控制、光敏传感器控制蜂鸣器

目录 前言 按键控制LED 光敏传感器控制蜂鸣器 前言 上拉输入:若GPIO引脚配置为上拉输入模式,在默认情况下(GPIO引脚无输入),读取的GPIO引脚数据为1,即高电平。 下拉输入:若GPIO引脚配置为下…

AI 情感聊天机器人工作之旅 —— 与复读机问题的相遇与别离

前言:先前在杭州的一家大模型公司从事海外闲聊机器人产品,目前已经离职,文章主要讨论在闲聊场景下遇到的“复读机”问题以及一些我个人的思考和解决方案。文章内部已经对相关公司和人员信息做了去敏,如仍涉及到机密等情况&#xf…

【Java的抽象类和接口】

1. 抽象类 1.1 抽象类概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果 一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 以上代码中…

AI图书推荐:ChatGPT等生成式AI在高等教育中的应用

自2022年11月以来,ChatGPT及其在高等教育各个层面的影响已成为所有教育对话的核心内容。Chan和Colloton所著的书籍是首批全面探讨ChatGPT与生成式人工智能(GenAI)在高等教育中应用及影响的作品之一。 该书深入研究了针对专业环境定制的AI素养…

sipeed 的 MaixCam显示图片

WiFi联网后,把固件升级到最新 一根tpyc-c连接线为MaixCam供电,点击液晶屏settings 在WiFi中设置确保联网,在更新MaixPy中升级固件 可以选择国内源加速,将固件升级到最新版 MaixVision的操作 1,在MaixVision左下角…

栈队列经典OJ题(详细过程)

1. 有效的括号 - 力扣(LeetCode) 第一题判断有效的括号,这道题我们会用到栈的知识,栈是后进先出的,可以根据这个来解这道题,先看一下题目和示例。 1.1整体思路 我们通过示例可以看出括号匹配就返回true&am…

Linux信息显示相关指令

1、查看cpu 查看cpu信息:cat /proc/cpuinfo 查看cpu个数:nproc cat /proc/cpuinfo | grep "physical id" | uniq | wc -l uniq命令:删除重复行;wc –l命令:统计行数 查看CPU核数 cat /proc/cpuinfo | grep "cpu cores" | uniq 2、查看内存 cat /pr…

政安晨:【Keras机器学习示例演绎】(四十四)—— 使用序列到序列转换器实现英语到西班牙语的翻译

目录 简介 设置 下载数据 解析数据 文本数据矢量化 建立模型 训练我们的模型 解码测试句子 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之…

【数据结构】数组循环队列的实现

队列(Queue)是一种特殊的线性数据结构,它遵循FIFO(First In First Out,先入先出)的原则。队列只允许在表的前端(front)进行删除操作,而在表的后端(rear&#…