Linux进程

Linux进程

对于进程的理解,我们要从计算机的重要的冯诺依曼体系结构讲起,只有知道我们的程序/文件是如何在计算机中被操作运行并输出到显示器中,通过对于操作系统的理解,才能对于进程进行一定的理解。

文章目录

  • Linux进程
    • 冯诺依曼体系结构
  • 操作系统
    • 操作系统是什么?
    • 为什么要有操作系统?
    • 操作系统怎么办?
    • 操作系统如何管理程序?
  • 进程
    • 如何查看进程?


冯诺依曼体系结构

img

如上图所示这就是冯诺依曼体系结构图,在计算机中都要遵循这一体系,才能有效且高效的进行数据处理运算和输出

认识计算机组件

  • 外设

    • 输入设备:包括硬盘,鼠标,摄像头,话筒,磁盘,网卡….
    • 输出设备:显示器,播放器,磁盘,网卡…
  • CPU

    • 运算器:对于我们输入的数据进行计算(算术运算,逻辑运算)
    • 控制器:对于我们的计算硬件流程进行一定的控制
  • 存储器:内存

关于冯诺依曼体系强调:

  • 不管是外设还是存储器还是CPU都是独立的个体!
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

总之,所有设备都只能直接和内存打交道,进行交互,这样可以方便理解该体系

上述一些设备既是输入设备又是输出设备,各个硬件单元是可以独立的,但是必须由总线连接起来:1.系统总线,2.IO总线

上述系统总线有很多种标准,IO总线可以理解为,输入设备—>存储器—>输出设备

如下是程序运行流程:

在这里插入图片描述

问题如下:

1.为什么一个程序要运行,必须要先加载到内存中运行?

答:因为冯诺依曼体系结构的规定

这里的存储器指的是内存,前文我们学到了缓冲区,那么我们缓存的数据应该在哪里呢?实际上是在存储器中,编译器在运行程序中,占据一部分内存作为缓冲区。

2.为什么不直接将数据从输入设备直传递给中央处理器,然后处理数据之后直接由输出设备输出?

我们先理解一个概念:输入设备输入数据的速度比价慢,存储器读取数据较快,中央处理读取数据很快,两两之间速度的差别为103级别

在这里插入图片描述

解释:

当输入设备在输入完毕数据的时候,CPU早已经等了几百年了,然后瞬间处理完毕,交给输出设备,输出设备仍然慢慢悠悠地输出,且此时输入设备在慢慢地输入数据,CPU的快速处理数据的功能无法体现。整体这个体系受到了输入设备的限制。

3.那么为什么冯诺依曼体系结构满足了数据处理的需求?根据木桶原理,读取数据的速度决定于输入设备?

解释:

我们知道输入设备和存储器以及CPU之间读取数据的速度差别为103,当我们将输入设备读取的数据提前加载到内存中,在CPU处理完其他数据的时候,存储器将下一部分数据导入CPU,进行运算,因为速度级别相差不大,总体来看,整个过程就是输入设备一直输入数据加载到存储器中,存储器和CPU进行交互,处理完毕的数据返回给存储器,总体流程都是和存储器有关。

总结:当使用冯诺依曼体系结构的时候,读取数据的速度取决于存储器,存储器和其他设备进行交互,且存储器的读取速度适中,可以满足用户的需求。

4.关于各种设备存储分级金字塔

在这里插入图片描述

总结:

  • 寄存器:在CPU中,读取数据最快,价格贵,容量小
  • 三级缓存:位于CPU中,可以提高CPU运行效率
  • 内存:即存储器
  • 硬盘:输入输出设备

5.当我们在QQ上跟好友发一条信息,好友接收信息的过程是什么?不考虑网络,根据冯诺依曼体系回答。
在这里插入图片描述

操作系统

我们认识了计算机中数据运算的冯诺依曼体系结构,那么对于文件/数据的处理已经有了大概的认识,我们要知道的是,在电脑中我们不只是对于一个文件或者一个程序来进行处理,同时多个文件进行数据处理的时候,如何合理的管理好处理文件的先后呢?

操作系统的简介

任何计算机系统都包含那一个基本的程序集合,称为操作系统。

操作系统是什么?

操作系统是一款进行管理软硬件的软件

简略的理解为:通过驱动程序来对于计算机的底层硬件(网卡、硬盘等进行管理),最后实现内存管理、进程管理、文件管理、驱动管理。

为什么要有操作系统?

1.操作系统是用来帮助用户,管理好下面的软硬件资源

2.为了给用户提供一个良好(稳定、高效、安全)的运行环境

总结

手段:操作系统通过管理好底层的软硬件资源

目的:为用户提供一个良好的执行环境

为了给用户?给那些用户?

操作系统存在的意义就是为了给用户提供良好的执行环境,让用户更加方便简洁的来操作计算机,来为用户提供更好的体验

用户主要分为普通用户(大众),程序员(开发)。普通用户使用的是程序员开发的软件,所以普通用户是不会会直接跟操作系统打交道,主要是程序员来与操作系统进行交互。

操作系统怎么办?

操作系统怎么来向用户提供良好的运行环境,供其使用,怎么使得各种软件能在操作系统的管理下进行运行,接下来我们需要理解的是操作系统如何向上对接用户的使用

操作系统里面,有各种数据,但是操作系统并不相信任何用户。

解释:

操作系统是为了用户而服务的,但是我们并不知道,也并不能将操作系统任意的暴露给用户,让用户去直接去操作,去修改操作系统。

以银行系统举例:

  • 在银行中,其并不相信所有的人,所以才会设置防弹板隔离人与银行柜台,为了相互保护
  • 但是银行也要运行其功能,提供一个小窗口可以令用户来存取钱财,这是为了实现功能

所以,操作系统为了保证自己的数据安全,也为了保证给用户能提供服务,操作系统以接口的方式给用户提供调用的入口,来获取操作系统的内部的数据。

操作系统向上提供系统调用接口(system call)

这个接口是操作系统用C语言来实现的(因为操作系统是以C语言为基础来实现的),该接口供自己的内部函数调用,也就是所谓的系统调用。

所有访问操作系统的的行为,都只能通过系统调用来实现。

总结:

  • 操作系统向上是为了用户的使用,同时为了自己的数据安全,提供了系统调用接口(system call)
  • 向下可以合理的通过驱动程序来对于由硬件依照冯诺依曼体系结构形成的底层硬件进行管理和处理数据。
  • 通过上述功能,奠定了操作系统在计算机系统中的重要地位,以操作系统、驱动程序、底层硬件共同构成了计算机的基本运行载体,至少计算机要依靠这一载体来运行。

在这里插入图片描述

底层硬件:各个硬件通过冯诺依曼体系结构组成底层硬件

驱动程序:将对应的各个硬件通过驱动程序连接起来,向上提供操作接口,供操作系统使用和管理。

操作系统:是对于各种驱动提供的接口进行管理操作,来向下管理好软硬件的软件。

底层硬件、驱动程序、操作系统共同构成了计算机的基本运行载体,至少计算机要依靠这一载体来运行。

用户操作接口:包含shell外壳、lib、部分指令,shell是命令语言、命令解释程序以及程序设计语言的统称,实际上是一个命令解释器,通过解释用户输入的命令并把它传递给系统内核中去执行,为用户提供使用操作系统的接口,是用户和系统内核的桥梁。lib是指库文件,各种语言的库文件。

用户:通过指令操作、开发操作、管理操作向下通过用户操作接口的shell外壳、lib、部分指令等,调用系统调用,实现与操作系统的交互。

库函数与系统调用之间是上下层的调用和被调用关系。

操作系统如何管理程序?

操作系统的管理无非是对于驱动程序以及软硬件资源的管理。

明确管理与被管理者之间的关系:

  • 管理者与被管理者之间是不需要见面的
  • 管理者没有见到被管理者的情况下,只要能获得对应人员的管理信息即可,就可以在以后进行管理,管理的本质是:通过对于数据的管理,来实现对于人的管理
  • 管理者与被管理者之间的数据是通过执行者传递数据的

在这里插入图片描述

上述中,我们对于整个管理流程,先对于我们所需要的数据进行描述(需要学生的基本信息),描述后,建立起对应的结构体来存储信息(C语言的方式),由执行者讲所有学生数据放在一个链表中连接起来,由此这一数据结构使得,数据变得有序起来(这是组织),最后交给老师(操作系统)等待老师进行下一步的指令

总结:操作系统如何管理软硬件呢? 先描述,后组织

在操作系统中,管理任何对象,最终都可以化为对于某种数据结构的增删查改。

进程

一个已经加载到内存中的程序叫做进程。

通俗来讲:正在运行的程序,叫做进程。

解释:

操作系统是一个管理软硬件关系的软件,所以操作系统也需要在内存中加载。

什么时候操作系统被加载到内存中的呢?

答:在计算机开启的时候,加载操作系统到内存中去,然后才能正常的运行和管理其他软硬件。

所以,加载进程到内存中去,实际上是将进程放在了操作系统所占的内存中。

描述进程-PCB:进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合

在这里插入图片描述

总结:

真正的进程=内核PCB数据结构对象+data和code

  1. 任何一个进程,加载到内存中的时候,形成真正的进程时,都先形成描述该进程属性的PCB内核结构体对象,多个进程通过数据结构的方式连接起来,统一由操作系统来管理(增删查改)
  2. data和code可以得到可执行程序.exe
  3. 操作系统真正管理的不是data和code,而是PCB内核结构体对象
  4. 当操作系统需要执行某一进程的时候,只需要由描述该进程属性的PCB通过其中的相应的指针信息来找到对应的data和code,从而执行该程序

Linux操作系统下的PCB是: task_struct

task_struct是PCB的一种:

  • 在Linux中描述进程的结构体叫做task_struct。
  • task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

如何查看进程?

在window中,启动任务管理器,找到进程,即可图形化显示当前计算机上的所有进程信息

在这里插入图片描述

在Linux系统下,我们可以通过proc目录查看

在这里插入图片描述

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

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

相关文章

c#示例-json序列化和json树

序列化 由于指针和引用类型的存在,在运行中的程序中,数据不一定是整块的。 可能东一块西一块散落在内存的各个地方。 序列,是指连续且有序的一个整体。序列化就是把数据变为连续有序整体的过程。 经过这样处理后的数据就可以方便的进行传输…

数据结构--时间复杂度与空间复杂度

数据结构–时间复杂度与空间复杂度 文章目录 数据结构--时间复杂度与空间复杂度时间复杂度一、什么是时间复杂度二、具体实例1.大O的渐进表示法2.二分查找的时间复杂度 空间复杂度一、什么是空间复杂度二、具体实例总结 时间复杂度 一、什么是时间复杂度 在计算机科学中&…

云原生微服务应用的平台工程实践

作者:纳海 01 微服务应用云原生化 微服务是一个广泛使用的应用架构,而如何使得微服务应用云原生化却是近些年一直在演进的课题。国内外云厂商对云原生概念的诠释大同小异,基本都会遵循 CNCF 基金会的定义: 云原生技术有利于各组…

【后端面经-Java】JVM垃圾回收机制

【后端面经-Java】JVM垃圾回收机制 1. Where:回收哪里的东西?——JVM内存分配2. Which:内存对象中谁会被回收?——GC分代思想2.1 年轻代/老年代/永久代2.2 内存细分 3. When:什么时候回收垃圾?——GC触发条…

【MySQL】根据MVCC和Read View分析事务的四种隔离级别在读写场景分别是如何体现其隔离性的

目录 一、数据库并发的三种场景 二、读写场景的MVCC 1、3个(4个)记录隐藏列字段 2、undo log(撤销日志) 3、模拟MVCC场景 3.1update场景 3.2delete场景 3.3insert 3.4select场景 4、Read View 5、RR和RC的区别 5.1当…

Windows安装激活注意事项

选择语言、版本(Windows 10指的是专业版本)和体系结构(32位/64位),这里自行根据情况选择(如果机器预装的是Windows 10家庭中文版则选择家庭中文版,如果预装的是专业版则选择Windows 10。这样原先…

Revit 导出明细表的两种方法!

方法一、Revit中怎么灵活运用明细表格式的导出与导入 在做项目的时候,遇到一些项目需要进行工程量统计的时候,经常需要设置明细表里面的格式,例如字体、表格排布样式等,但是项目一旦多起来,这些工作重复性又太高&#…

适合小公司的自动化部署脚本

背景(偷懒) 在小小的公司里面,挖呀挖呀挖。快挖不动了,一件事重复个5次,还在人肉手工,身体和心理就开始不舒服了,并且违背了个人的座右铭:“偷懒”是人类进步的第一推动力。 每次想…

解决MAC IDEA终端每次都要source ~/.zshrc

安装nvm之后,发现每隔一段时间(不清楚是新打开一个终端还是会定时刷新)就要重新执行source ~/zshrc,才能执行nvm命令。找了一圈发现idea默认使用的shell是bash,将默认的shell改成zsh就可以,更改位置&#x…

【运维】shell监控脚本结合钉钉机器人实现服务及服务器监控告警

文章目录 前言一、监控shell脚本和钉钉机器人二、创建钉钉机器人:1.在钉钉群聊里点击设置2.在设置里点击机器人选项3.再点击添加机器人4.再点击选择自定义机器人5.设置机器人名称、是否加密、是否限制ip、以及触发关键字6.获取机器人的Webhook地址 三、编写监控脚本…

[爬虫]解决机票网站文本混淆问题-实战讲解

前言 最近有遇到很多小伙伴私信向我求助,遇到的问题基本上都是关于文本混淆或者是字体反爬的问题。今天给大家带来其中一个小伙伴的实际案例给大家讲讲解决方法 📝个人主页→数据挖掘博主ZTLJQ的主页 ​​ 个人推荐python学习系列: ☄️爬虫J…

架构训练营3:架构设计流程和架构师职责

架构师相关职责: 架构师是业务和技术之间的桥梁,架构师不能只顾技术,不懂业务,架构师很容易两头不讨好 三个核心能力: 判断:1业务理解力2.技术能力3.沟通能力 拆解:1技术深度2.技术宽度3.技术…

基于单片机指纹考勤系统的设计与实现

功能介绍 以51单片机作为主控系统;利用指纹采集模块存储打卡信息;12864显示当前考勤信息,时间 ;如果迟到 语音播报 您已迟到;按键进行注册指纹、删除指纹、设置当前时间和签到时间、查询打卡等;具有掉电保存…

利用Python和Selenium编程,实现定时自动检索特定网页,发现特定网页内容发生变化后,向管理员发送提醒邮件(一)

一、项目需求 要求爬取某单位网站,登录后台查看是否有新增“网友提问”,如果有新的提问,向特定邮箱发出提醒邮件。 二、项目分析 (一)判断是否可用爬虫爬取相关内容 首先查看该网站的robots.txt文件,发现…

JAVA开发(记一次504 gateway timeout错误排查过程)

一、问题与背景: 最近在发布一个web项目,在测试环境都是可以的,发布到生产环境通过IP访问也是可以的,但是通过域名访问就出现504 gateway timeout。通过postman去测试接口也是一样。ip和端口都可以通,域名却不行&…

JVM面试题总结

一.请简述对象的创建过程 对象的new字节码执行指令如下图 首先0指令new出一片内存空间,然后进行对象的初始化,初始化完成前变量都是初始值如m0 然后创建连接,t指向对象。 二.DCL单例要不要加volatile? DCL单例就是要懒汉式从创建…

SignalTap II 软件使用步骤

文章目录 前言一、SignalTap II是什么?二、使用步骤三、总结四、参考资料 前言 环境: 1、Quartus18.1 2、板子型号:原子哥开拓者2(EP4CE10F17C8) 要求: 能够使用SignalTap II进行片上调试。 一、SignalTap II是什么? S…

Docker部署Mysql数据库详解

目录 1. Docker部署Mysql 1.1 Mysql容器 1.1.1 创建Mysql容器 1.1.2 进入Mysql容器并登录Mysql 1.1.3 持久化数据 1.2 远程登录Mysql 1.2.1 修改root加密方式 1.2.2 在容器启动时配置加密方式为mysql_native_password 1.3 Mysql编码 1.3.1 Mysql编码问题 1.3.2 Mysql编码…

大模型开发(六):OpenAI Completions模型详解并实现多轮对话机器人

全文共8500余字,预计阅读时间约17~30分钟 | 满满干货(附代码),建议收藏! 代码下载点这里 一、 Completions与Chat Completions基本概念 经过海量文本数据训练的大模型会在全量语义空间内学习语法关系和表达风格,并通过某些微调过…

java学习路程之篇十、知识点、数组介绍、二维数组介绍、静态初始化、访问元素、遍历元素、动态初始化、内存图、数组常见问题

文章目录 01、数组介绍02、数组静态初始化03、数组元素访问04、数组遍历操作05、数组动态初始化06、数组内存图07、数组常见问题08、二维数组介绍09、二维数组静态初始化10、二维数组遍历11、二维数组动态初始化12、二维数组内存图 01、数组介绍 02、数组静态初始化 03、数组元…