【Linux学习笔记】进程概念(上)

  • 1. 冯诺依曼体系结构
  • 2. 操作系统的作用
  • 3. 进程

1. 冯诺依曼体系结构

如图,这是一个冯诺依曼体系结构简图

img

其中这里的存储器指的是内存!

用通俗的话来解释这个图,就是数据从输入设备进入,然后进入到存储器,CPU从存储器中拿到数据,处理完毕后,输出到输出设备。

  1. CPU与存储器与外设

其中CPU的功能是用来计算处理数据的,所需要的数据从存储器中来,并不是直接和外设打交道的。所处理完的数据之后,再交给存储器,外设再从存储器中拿到处理后的数据。

其实CPU很笨,只能被动的接受别人的指令或者别人的数据,然后去执行别人的指令,计算别人的数据。

一句话,所有的设备都只能直接同内存打交道

  1. CPU如何认识别人的指令?

我们在编译代码的时候,本质就是形成一种二进制可执行程序。其中这种二进制可执行程序可以被CPU的指令集识别,从而CPU能够认识指令,计算数据。

  1. 操作系统的作用

当CPU处理完数据,执行完指令后,那么多余的数据,指令该怎么办呢?这个问题其实操作系统都会帮你解决。

2. 操作系统的作用

  1. 什么是操作系统

一句话简单说明什么是操作系统,操作系统就是一个进行软硬件资源管理的软件。

  1. 操作系统为什么要管理软硬件

一句话总结,操作系统通过合理的管理软硬件资源(手段),为用户提供良好的(稳定的,高效的,安全的)执行环境(目的)。

  1. 那么操作系统是如何管理硬件的呢?

你可以把操作系统想象成你的大学校长。那么在大学的时候,你的校长是怎么管理学生的呢?是不是中间还有一个人,这个人暂且称为辅导员。那么就有如下抽象图:

img

对于上面的图,可以这么理解。你的校长并不直接管理着学生,而是通过辅导员获取上来学生的数据来管理学生,再告知辅导员相应的决策来管理学生的。**那么同样的,操作系统也并不是直接去管理硬件的,而是通过驱动获取上来的数据来管理硬件,再通过数据告知相应的驱动去管理硬件的。**那么具体的图就变成了这样:

img

  1. 既然操作系统是通过数据来管理硬件的,那么数据多了怎么办

还是举一个例子来说清楚问题。**假如一个大学里面有着2万名学生,那么就是有2万名学生的数据,那么校长是怎么管理的呢?其实每个学生都有着自己的一份信息表,校长就是通过这份信息表来管理着学生的。同样的,操作系统也是如此。当管理硬件的时候,每个硬件其实也是有着这样一份信息表的,用代码来表示,就是结构体。每当操作系统管理硬件的时候,都是通过这个结构体的信息来管理的。**如下图所示:

img

img

其中,校长有了学生的信息表之后,就可以开始管理学生,例如把学生信息放进一个链表来管理。同样的操作系统对硬件的管理也是如此,也是放进某种数据结构中来进行管理的。

所以操作系统管理的本质是:对数据做管理。

管理的方法:先描述,再组织。

  1. 用户是如何操作硬件的呢?

计算机的硬件其实就是一堆二极管,那为什么用户不能直接操作硬件完成相应的操作呢?这里用一个例子来说明一下。

在日常生活中,银行取钱很常见。面对银行大量的业务,为什么老百姓就不能自己操作呢?比如老百姓自己去存钱,自己去取钱,这样不是方便很多吗?其实原因很简单,银行并不信任任何人!!!所以设立很多小窗口来给老百姓提供业务,既保证了银行的安全,也实现了对老百姓的业务。

切换到计算机的世界,操作系统其实就相当于银行,操作系统并不相信任何用户,因为操作系统害怕用户不小心操作对操作系统本身造成了不可逆的伤害,所以操作系统也不允许用户直接操作硬件,而是提供了一系列的系统接口来供用户使用,从而实现了用户对硬件的操作,既保护了操作系统本身,也完成了对用户的服务。

  1. 操作系统概念图

img

3. 进程

  1. 进程的概念

对于进程的理解可以理解为:操作系统是怎么管理硬件的,就怎么管理软件的,而这里的软件就可以认为是进程。

在教科书上,进程的概念是,一个运行起来的程序叫做进程。可实际进程是什么样子的呢?下面来看一看图示:

img

  • 当程序加载到内存中时,操作系统会对该程序生成相应的PCB
  • CPU实际管理的并不是内存中的程序,而是管理程序对应的PCB
  1. PCB(程序控制块)

PCB全写是process control block。实际上可以认为是一个结构体,其中保存的是相应的程序的相关属性,例如优先级,代码地址,…

  1. 为什么会有PCB?

PCB实际上是对程序的描述,根据上面所讲过的内容,我们可以知道管理的实质其实就是先描述,再组织。操作系统对程序创建相应的结构体,对其进行了相应的描述,然后操作系统再根据相应的数据结构对这些PCB进行组织,例如链表。从而实现了对进程的管理。

  1. 所以进程是什么?

进程可以简单的认为是: 进程 = 内核数据结构(PCB) + 进程对应的磁盘代码。

下面来看看Linux中的进程。

  1 #include <stdio.h>2 #include <unistd.h>3            4 int main()                                                                                                             5 {                                                     6     int cnt = 0;                                                        7     while(1)       8     {                                          9         printf("我是一个进程,%d\n",cnt++);10         sleep(1);11     }                                                                                                                                                               12     return 0;          13 }

以这个代码为基础,创建一个进程。运行代码后,我们就可以看到该进程。

img

  1. 查看当前进程ID 和 父进程ID

这里可以调用系统接口来查看子进程ID和父进程ID

  • 查看当前进程ID的系统接口是: getpid()
  • 查看父进程ID的系统接口时: getppid();
  1 #include <stdio.h>2 #include <unistd.h>3            4 int main()                                                                                                             5 {                                                     6    // fork();                                                           7     printf("我是一个进程!进程ID:%d, 父进程ID:%d\n",getpid(),getppid());8     sleep(1);                                                                                                                                                       9     return 0;        10 }                         

运行结果:

img

  1. 了解系统接口

fork()是一个系统接口,其主要功能是给当前进程创建一个子进程。可以通过man命令来查看fork的详细信息。

img

img

  1. 了解并发运行

当你的代码运行起来的时候,就已经是一个进程在运行了。那么此时我再创建一个子进程,那么后续的代码将会被两个进程(子进程和当前进程)所共享。例如下面这个代码:img

运行结果:

img

img

img

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

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

相关文章

阿里云OS系统Alibaba Cloud Linux 3系统的安全更新命令

给客户部署的服务&#xff0c;进入运维阶段&#xff0c;但是经常被客户监测到服务器漏洞&#xff0c;现在整理一下&#xff0c;服务器漏洞问题更新命令步骤。 服务器系统&#xff1a; 阿里云linux服务器&#xff1a;Alibaba Cloud Linux 3 漏洞类型和描述&#xff1a; #3214…

新体验:万圣节夜晚的新游戏!--愤怒的南瓜

引言&#xff1a; Chatgpt4.0 所带来的冲击似乎远超出人们想象&#xff0c;网页小游戏《愤怒的南瓜》在昨日&#xff08;万圣节夜晚&#xff09;火爆了外网。一位名为 Javi Lopez 的外国小哥使用 Midjourney、DALL•E 3 和 GPT-4 打开了一个无限可能的世界&#xff0c;重新演绎…

【Python全栈_公开课学习记录】

一、初识python (一).Python起源 Python创始人为吉多范罗苏姆&#xff08;荷兰&#xff09;&#xff0c;Python崇尚优美、清晰、简明的编辑风格。Python语言结构清晰简单、数据库丰富、运行成熟稳定&#xff0c;科学计算统计分析领先。目前广泛应用于云计算、Web开发、科学运算…

DSP 开发例程(5): tcp_server

目录 DSP 开发例程(5): tcp_server创建工程源码编辑tcp_echo.chelloWorld.c 调试说明 DSP 开发例程(5): tcp_server 此例程实现在 EVM6678L 开发板上创建 TCP Server进程, 完成计算机与开发板之间的 TCP/IP 通信. 例程源码可从我的 gitee 仓库上克隆或下载. 点击 DSP 开发教程…

【机器学习合集】模型设计之注意力机制动态网络 ->(个人学习记录笔记)

文章目录 注意力机制1. 注意力机制及其应用1.1 注意力机制的定义1.2 注意力机制的典型应用 2. 注意力模型设计2.1 空间注意力机制2.2 空间注意力模型2.3 通道注意力机制2.4 空间与通道注意力机制2.5 自注意力机制2.5 级联attention 动态网络1. 动态网络的定义2. 基于丢弃策略的…

PostgreSQL逻辑管理结构

1.数据库逻辑结构介绍 2.数据库基本操作 2.1 创建数据库 CREATE DATABASE name [ [ WITH ] [ OWNER [] user_name ] [ TEMPLATE [] template ] [ ENCODING [] encoding ] [ LC_COLLATE [] lc_collate ] [ LC_CTYPE [] lc_ctype ] [ TABLESPACE [] tablespace ] [ CONNECTION L…

Day17力扣打卡

打卡记录 参加会议的最多员工数&#xff08;拓扑排序 分类讨论&#xff09; 链接 计算内向基环树的最大基环&#xff0c;基环树基环为2的情况分类讨论。 class Solution { public:int maximumInvitations(vector<int> &favorite) {int n favorite.size();vector…

4.多层感知机-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 多层感知机一、感知机1、感知机2、训练感知机3、图形解释4、收敛定理5、XOR问题6、总结 二、多层感知机1、XOR2、单隐藏层3、单隐藏层-单分类4、为什么需要非线性激活函数5、Sigmoid函数6、Tanh函数7、ReLU函数8、多类分…

SDK是什么

SDK 是“Software Development Kit”&#xff08;软件开发工具包&#xff09;的缩写&#xff0c;它是一组用于开发特定软件应用、硬件平台、计算机系统或操作系统的开发工具的集合。SDK 通常包括一组开发工具、库、文档和示例代码&#xff0c;以帮助开发者更快地开发和部署应用…

SAML- 安全断言标记语言

一、概念 安全断言标记语言&#xff08;SAML&#xff09;是一种开放标准&#xff0c;用于在各方之间&#xff08;特别是身份提供商和服务提供商之间&#xff09;交换身份验证和授权数据。SAML 是一种基于XML的安全断言标记语言&#xff08;服务提供商用来做出访问控制决策的语句…

HTML标签、CSS介绍

标签的分类: 块级/行内 # 块级标签: 独占一行 h1~h6 p div """ 块儿级标签可以修改长宽. 行内标签不可以, 就算修改了也不会变化.块级标签内部可以嵌套任意的块级标签和行内标签. 特例: 是p标签虽然是块级标签 但是它只能嵌套行内标签 不能嵌套块级标签. 如…

linux安装apache并配置userid站点

目录 一、linux安装apache的方式 1、安装wget 2、下载CentOS 7的repo文件 3、更新镜像源 二、安装apache 1.通过命令直接安装apache(linux的软件包为httpd) 2.启动httpd服务 3.访问一下 三、apache配置文件 1.主配置文件 2.修改根目录 3.修改下端口 4.apache的工作…

BUUCTF 数据包中的线索 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 公安机关近期截获到某网络犯罪团伙在线交流的数据包&#xff0c;但无法分析出具体的交流内容&#xff0c;聪明的你能帮公安机关找到线索吗&#xff1f; 密文&#xff1a; 下载附件&#xff0c;解压得到一个.pcapng文…

【兔子王赠书第5期】ChatGPT速学通:文案写作+PPT制作+数据分析+知识学习与变现

文章目录 前言ChatGPT推荐图书作者简介内容简介推荐理由 粉丝福利尾声 前言 程序员如果有一天代码写不动了&#xff0c;还能干什么&#xff1f; 一位 80 后女程序员“兰猫”给出了她的答案——转型 AI 写手。兰猫从事程序员工作十余年&#xff0c;在繁重的工作压力下&#xf…

大数据毕业设计选题推荐-系统运行情况监控系统-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

leetCode 2915. 和为目标值的最长子序列的长度 + 动态规划 +01背包 + 空间优化 + 记忆化搜索 + 递推

2915. 和为目标值的最长子序列的长度 - 力扣&#xff08;LeetCode&#xff09; 给你一个下标从 0 开始的整数数组 nums 和一个整数 target 。返回和为 target 的 nums 子序列中&#xff0c;子序列 长度的最大值 。如果不存在和为 target 的子序列&#xff0c;返回 -1 。子序列 …

ubuntu下vscode终端输出出现空白的问题

当终端 输出铺满后 再继续回车 会出现局部空白 这是vscode 的bug&#xff1f;有大佬知道解决办法的可以评论区留言。

Flutter 04 按钮Button和事件处理、弹框Dialog、Toast

一、按钮组件 1、按钮类型&#xff1a; 2、按钮实现效果&#xff1a; import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);overrideWidget build(BuildContext co…

Stream 流对象的创建与各方法

Stream 流对象的创建与各方法 目录 1.0 Stream 流的说明 2.0 Stream 流对象的创建 2.1 对于 Collection 系列集合创建 Stream 流对象的方式 2.2 对于 Map 系列集合创建 Stream 流对象的方式 2.3 对于数组创建 Stream 流对象的方式 3.0 Stream 流的中间方法 3.1 Stream 流的 …

《算法设计与分析》 蛮力法实验报告一

1.&#xff08;洛谷 P1008&#xff09;将 1,2...9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数构成 1:2:3 的比例,试求出所有满足条件的三个三位数。 输入格式&#xff1a; 无 输出格式&#xff1a; 若干行&#xff0c;每行 3 个数字。按照每行第 1 个数字升序…