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目录查看

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】udp服务器实现大型网络聊天室

udp终结篇~ 文章目录 前言一、udp服务器实现大型网络聊天室总结 前言 根据上一篇文章中对于英汉互译和远程操作的两个小功能大家应该已经学会了,我们的目的是让大家可以深刻的理解udp服务器所需要的接口已经实现的简单步骤,下面我们开始实现网络聊天室。…

3.SpringBoot 返回Html界面

1.添加依赖spring-boot-starter-web <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>2.创建Html界面 在Resources/static 文件夹下面建立对应的html&#xff0c…

快速排序的非递归实现、归并排序的递归和非递归实现、基数排序、排序算法的时间复杂度

文章目录 快速排序的非递归三数取中法选取key快速排序三路划分 归并排序的递归归并排序的非递归计数排序稳定性排序算法的时间复杂度 快速排序的非递归 我们使用一个栈来模拟函数的递归过程&#xff0c;这里就是在利用栈分区间。把一个区间分为 [left,keyi-1][key][keyi1,right…

用百度地图api获取当前定位,获取经纬度——前端笔记

问题&#xff1a; 做一个按钮&#xff0c;点击后可以获取到当前位置的经纬度&#xff0c;并渲染地图。 效果如下: 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>获取当前定位测试<…

【笔记MD】

https://editor.csdn.net/md/?not_checkout1&articleId131798584 这里写自定义目录标题 https://editor.csdn.net/md/?not_checkout1&articleId131798584欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入…

行业数据和报告到底应该如何去找?

信息时代&#xff0c;经常要对行业信息进行分析。这时首先就是要进行信息收集和筛选&#xff0c;如果我们懂得构建自己的工作工具和数据来源&#xff0c;效率会蹭蹭往上涨。 找行业报告、了解行业趋势&#xff0c;提高效率。 1. 国家权威 国家统计局&#xff1a;这个网站覆盖…

谋合作、创新境 | 百度参观图为科技生产全链路

当代科技的发展不断催生出新的变革和机遇&#xff0c;百度作为全球顶尖的高科技公司&#xff0c;凭借其强大的创新基因&#xff0c;一直处于人工智能领域的最前沿。   近日&#xff0c;百度公司派出了一支专业团队来到了图为科技&#xff0c;对图为的研发技术及生产线进行了全…

基于MSP432P401R跟随小车【2022年电赛C题】

文章目录 一、赛前准备1. 硬件清单2. 工程环境 二、赛题思考三、软件设计1. 路程、时间、速度计算2. 距离测量3. 双机通信4. 红外循迹 四、技术交流 一、赛前准备 1. 硬件清单 主控板&#xff1a; MSP432P401R测距模块&#xff1a; GY56数据显示&#xff1a; OLED电机&#x…

基于单片机智能台灯坐姿矫正器视力保护器的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;LCD1602液晶显示当前当前光线强度、台灯灯光强度、当前时间、坐姿距离等&#xff1b;按键设置当前时间&#xff0c;闹钟、提醒时间、坐姿最小距离&#xff1b;通过超声波检测坐姿&#xff0c;当坐姿不正容易对眼睛和身体腰部等造成…

Git 使用笔记

Git使用笔记 1 版本控制 1.1 什么是版本控制 ​ 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单说就是用…

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

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

postgresql部署及优化

目录 一、postgresql概念 二、PostgreSQL 特征 三、postgres安装与登录 3.1、postgres安装 3.2、postgres使用 3.3.1、postgres登录 3.3.2、修改postgres用户密码 四、PostgreSQL 命令 4.1、PostgreSQL 创建数据库 4.2、删除数据库 4.3、创建表格 4.4、删除表格 一、…

Python爬虫学习笔记(一)————网页基础

目录 1.网页的组成 2.HTML &#xff08;1&#xff09;标签 &#xff08;2&#xff09;比较重要且常用的标签&#xff1a; ①列表标签 ②超链接标签 &#xff08;a标签&#xff09; ③img标签&#xff1a;用于渲染&#xff0c;图片资源的标签 ④div标签和span标签 &…

【MySQL】MySQL在Centos7环境下安装

目录 一、卸载不要的环境 1.1、查看是否有安装mysql 1.2、关闭运行的程序 1.3、卸载安装 二、配置yum 源 2.1、下载yum 源 2.2 安装yum源 2.3 查看是否已经生效 三、安装mysql服务 四、启动服务 五、登录方法 方法一&#xff08;不行就下一个&#xff09; 方法二&#xff08;不…

【Tauri + React 实战】VCluster - 了解技术选型与开发环境配置

VCluster A React Tauri App as visualizer of apps cluster on windows. 背景介绍 VCluster是一个在开发环境下&#xff0c;用以对一系列应用集群&#xff08;如分布式、微服务&#xff09;进行可视化管理的桌面应用程序&#xff0c;目标是实现类似 docker-compose 那样的集…

怎么解决亚马逊跟卖?为何卖家总是举报不成功?

以前大家都是从跟卖的时代走向现在的品牌化运营之路&#xff0c;但是现在跟卖已经从大家都模仿的对象变成了大部分卖家厌恶的对象&#xff0c;那么怎么解决这个跟卖问题呢&#xff1f;目前最直接的方法就是进入亚马逊后台进行举报&#xff0c;但是大概率是失败的。 一、举报违…

Spring Cloud 之 Gateway 网关

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

elasticsearch基本操作

elasticsearch 下面参数详细解释 java 搜索查询看官方文档 https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/8.8/connecting.html#_your_first_request{"name" : "Tom Foster","cluster_name" : "elasticsearch&q…

Kafka 入门到起飞 - 核心概念(术语解释)

在kafka之旅&#xff0c;我们会大量讨论Kafka中的术语&#xff0c;那么就让我们先来了解一下这些核心概念 消息(Message)&#xff1a; kafka的数据单元称为消息&#xff0c;相当于DB里的一行数据或一条记录 消息由字节数组组成 批次&#xff1a; 生产者组一批数据再向kafka推送…

消息重试框架 Spring-Retry 和 Guava-Retry

一 重试框架之Spring-Retry 1.Spring-Retry的普通使用方式 2.Spring-Retry的注解使用方式 二 重试框架之Guava-Retry 总结 图片 一 重试框架之Spring-Retry Spring Retry 为 Spring 应用程序提供了声明性重试支持。它用于Spring批处理、Spring集成、Apache Hadoop(等等)。…