Linux基础——进程初识(一)

1. 硬件

①冯诺依曼体系

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。其详细结构如下图所示

在这里有几点要说明

1. 这里的储存器实际上指的是内存

2. 输入设备与输出设备都属于外设

常见的输入设备如:鼠标,键盘,摄像头,话筒,磁盘,网卡等

常见的输出设备如:显示器,播放器硬件,磁盘,网卡

3. 运算器与控制器都属于中央控制器(即CPU)

运算器的功能是对我们的数据进行计算任务(算数运算,逻辑运算)

控制器的功能是对我们的计算硬件流程进行一定的控制

值得注意的是

1. 在不考虑缓存情况时,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)

2. 在冯诺依曼体系中每一个部件都是一个独立个体

3. 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取

根据上面的情况,我们可以总结出一个结论:所有设备都只能直接和内存打交道 

在了解了冯诺依曼体系后,我们也可以解释一些之前无法解释的问题,如:

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

答:因为冯诺依曼体系结构规定了必须这样做。

在实现进度条小程序时,我们知道默认缓存的数据被储存了起来,那么这些数据存储在哪?

答:储存器中。

②实际举例

在这里我们举一个实际例子

我们在使用QQ向朋友发送消息时,数据是如何流动的?

如果发送的是文件时,那么自己的输入设备和朋友的输出设备都应该是磁盘,朋友在收到文件后,采取的措施是将文件保存到本地磁盘中。 

2. 软件

①什么是操作系统

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)(operating system)

内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)

简单来说,操作系统是一个对软硬件资源进行管理的软件。

计算机中有如上图所示的层状结构,在其中我们可以看到操作系统通过直接管理驱动程序来实现间接管理底层的硬件,在管理好软硬件资源之后,操作系统为了保证自己数据安全,也为了保证给用户能够提供服务,操作系统以接口的方式给用户提供调用的入口来获取操作系统内部的数据,这就是系统调用,它是操作系统提供的用C语言实现的,自己内部的函数调用。所有访问操作系统的行为,都只能通过系统调用来完成。那么操作系统存在的意义是什么呢?为什么我们需要操作系统呢?根据上面对层状结构的解释,我们可以有以下理解

1.操作系统帮助用户,管理好下面的软硬件资源
2.为了给用户提供一个良好(稳定,高效,安全)的运行环境

即:操作系统通过管理好底层的软硬件资源(手段),为用户提供一个良好的执行环境(目的) 

在C语言中我们经常会调用系统库,那么这个系统库与系统调用又有何关系和

②操作系统如何进行管理

那么在知道了操作系统是什么之后,它是如何对软硬件进行管理的呢?

首先我们要知道一般管理资源都分为决策者,执行者与被管理者,举几个例子,在大学中,校长就相当于决策者,辅导员是执行者,各个学生就是被管理者,在公司中,老板就相当于决策者,小组长是执行者,员工就是被管理者。在这些例子中,我们可以发现,管理者和被管理者是不需要见面的,既然如此,那么管理者在不见被管理者的情况下,如何做好的管理呢?——其实,只要能够得到管理信息,就可以进行管理决策,由此我们也可以看到管理的本质——通过对数据的管理,达到对人的管理。既然管理者和被管理者面都不见,那怎么拿到对应的数据呢?——通过执行者。

管理者在决定好要收集到被管理者的什么数据之后,如:校长需要收集到学生的学院、专业、班级、学号、姓名、性别、身高、体重、籍贯、电话等数据,通知辅导员收集数据之后,再将其反馈到校长处,校长为了能够更好的管理数据决定描述每一个学生的具体情况,将每个学生视作一个结构体的具体对象,对学生的描述可以如下图所示

在描述好之后,为了将它们互相联系起来,可以向Student结构体中添加struct Student* next来衔接下一个学生,这之后每有一个学生便实例化一个对象,并使它们链接起来,这样就将对学生数据的管理转换成了对链表的管理,这种方式就是操作系统管理资源的方式,即:在操作系统中,管理任何对象,最终都可以转化成为对某种数据结构的增删查改,这种管理资源的方式我们将其称为“先描述,后组织”,即对于任何一个要管理的资源,都要先对其进行描写(有什么属性),这之后再使用一种数据结构来管理它们

3. 进程

①什么是进程

对于一个已经加载到内存中的程序,叫做进程,通俗一点来说,正在进行的程序,我们将其称之为进程。

②进程的理解

因为操作系统是需要同时运行多个进程的,那么操作系统要如何管理进程呢?这在之前我们就提到过——先描述,后组织。对于任意一个进程,在磁盘将其加载到内存时,都是加载的代码与数据进去,而操作系统想要管理它,就要先对一个进程作出相应的描述,为了描述这样一个进程,操作系统有自己的描述进程的结构体对象,即——PCB(process control block),它是一个进程属性的集合体,在这个结构体中包含了许多的进程属性,然后操作系统会根据自己的PCB类型,为传输进来的代码和数据创建相应的PCB对象。

操作系统为了管理这些进程,会将它们转换为单链表方便管理。那么,我们就可以认为进程=操作系统对应的PCB+相应的代码与数据。

③Linux中的进程

在了解了PCB后,Linux中的进程又是什么样的呢?在LInux中,操作系统所使用的PCB为task_struct,其包含进程的所有属性,且LInux是使用双链表的形式来管理进程的。下面就让我们来创建一个进程,其代码如下

int main()
{while (1){printf("这是一个进程\n");sleep(1);}return 0;
}

然后我们可以使用

ps ajx | grep code1

来查看我们想要查看的进程属性,运行有

在这里我们能够看到除了我们想看到的自己的进程外还有一个auto code1进程,我们要想只显示自己的进程可以添加一个过滤命令,即

ps ajx | grep code1 | grep -v grep

此外为了方便我们更好的了解进程属性可以打印一个表头出来,即

ps ajx | head -1 && ps ajx | grep code1 | grep -v grep

运行效果如下

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

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

相关文章

uniapp实战 —— 轮播图【数字下标】(含组件封装,点击图片放大全屏预览)

组件封装 src\components\SUI_Swiper2.vue <script setup lang"ts"> import { ref } from vue const props defineProps({config: Object, })const activeIndex ref(0) const change: UniHelper.SwiperOnChange (e) > {activeIndex.value e.detail.cur…

JS加密/解密之HOOK实战2

上一篇文章介绍了HOOK常规的应用场景&#xff0c;这篇我们讲一下HOOK其他原生函数。又是一个新的其他思路 很多时候&#xff0c;当我们想要某些网站的请求参数的时候&#xff0c;因为某些加密导致了获取起来很复杂。 这时候hook就十分方便了 源代码 var _JSON_Parse JSON.…

在Pytorch中使用Tensorboard可视化训练过程

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 本节课我们来讲一下如何在pytouch当中去使用我们的tensorboard 对我们的训练过程进行一个可视化 左边有一个visualizing models data and training with tensorboard 主要是这么一个教程 那么这里…

Java多线程并发(二)

四种线程池 Java 里面线程池的顶级接口是 Executor&#xff0c;但是严格意义上讲 Executor 并不是一个线程池&#xff0c;而只是一个执行线程的工具。真正的线程池接口是 ExecutorService。 newCachedThreadPool 创建一个可根据需要创建新线程的线程池&#xff0c;但是在以前…

麒麟系统进入救援模式或者是crtl D界面排查方法

如出现以下图片的情况可能需要修复磁盘&#xff1a; V10GFB-desktop&#xff1a; 开机后发现一致卡在此界面&#xff1a; 按esc键后有以下报错信息说明在/etc/fstab里面编写的外挂磁盘的命令有问题 解决方法如下&#xff1a;进入单用户模式对/etc/fstab进行修改&#xff1a; …

Opencv制作电子签名(涉及知识点:像素过滤,图片通用resize函数,像素大于某个阈值则赋值为其它的像素值)

import cv2def resize_by_ratio(image, widthNone, heightNone, intercv2.INTER_AREA):img_new_size None(h, w) image.shape[:2] # 获得高度和宽度if width is None and height is None: # 如果输入的宽度和高度都为空return image # 直接返回原图if width is None:h_ratio …

gitee配置

注册配置gitee Gitee官网 进入官网之后&#xff0c;有账号直接登录&#xff0c;没有账号注册一个新的账号 下载安装git客户端 官网地址 下载完成&#xff0c;一路直接点击安装直接安装成功 检查是否安装成功 鼠标留在桌面–>右击–>出现Git GUI Here/Git Bash Her…

理解VAE(变分自编码器)

1.贝叶斯公式 贝叶斯理论的思路是&#xff0c;在主观判断的基础上&#xff0c;先估计一个值&#xff08;先验概率&#xff09;&#xff0c;然后根据观察的新信息不断修正(可能性函数)。 P(A)&#xff1a;没有数据B的支持下&#xff0c;A发生的概率&#xff0c;也叫做先验概率。…

Linux基础命令练习2

案例2&#xff1a;创建命令练习 请在/root创建三个目录分别为student、file、stu18 请在/opt创建三个文本文件分别为1.txt、a.txt、stu.txt 案例3&#xff1a;复制、删除、移动 在目录/opt下创建一个子目录 etime 在目录/opt/etime/创建文件readme.txt,利用vim写入内容 …

【Java 基础】26 枚举

文章目录 1. 什么是枚举2. 定义3. 使用1&#xff09;常量2&#xff09;遍历3&#xff09;switch 4. 属性和方法1&#xff09;属性2&#xff09;方法 5. 实现原理6. 使用场景总结 1. 什么是枚举 枚举是列出某些有穷序列集的所有成员的程序&#xff0c;或者是一种特定类型对象的计…

Java Spring + SpringMVC + MyBatis(SSM)期末作业项目

本系统是一个图书管理系统&#xff0c;比较适合当作期末作业主要技术栈如下&#xff1a; - 数据库&#xff1a;MySQL - 开发工具&#xff1a;IDEA - 数据连接池&#xff1a;Druid - Web容器&#xff1a;Apache Tomcat - 项目管理工具&#xff1a;Maven - 版本控制工具&#xf…

编译和使用WPS-ghrsst-to-intermediate生成SST

一、下载 V1.0 https://github.com/bbrashers/WPS-ghrsst-to-intermediate/tree/masterV1.5&#xff08;使用过程报错&#xff0c;原因不详&#xff0c;能正常使用的麻烦告知一下方法&#xff09; https://github.com/dmitryale/WPS-ghrsst-to-intermediate二、修改makefile…