Linux-3进程概念(一)

1.冯诺伊曼结构

1.1 冯诺依曼结构的概念

冯·诺依曼结构,又称为普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,比如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。

数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系

截至目前,我们所认识的计算机,都是有一个个的硬件组件组成
输入单元:包括键盘, 鼠标,扫描仪, 写板等
中央处理器(CPU):含有运算器和控制器等
输出单元:显示器,打印机等
 

输入设备和输出设备处理数据的速度相较于CPU是很慢的,如果数据直接从输入输出设备中发送或者接收就会形成一个很大的速度差,这样就会使得整个计算机运行起来的效率还是很低。

因为有IO设备和CPU的效率不均衡,因此引进了存储器(也就是内存),快于IO设备又慢于CPU。

冯诺依曼体系中数据的输入输出就不是直接传到CPU。数据由输入设备先传递到内存,然后CPU再从内存中读取数据进行处理,处理完CPU再写入内存,最后由内存传给输出设备。

总结:

不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。                           一切设备都与内存打交道

2.操作系统

2.1操作系统的概念

操作系统是一个进行软硬件资源管理的软件

 底层硬件是以冯诺依曼结构组织的

操作系统和底层硬件之间还有个驱动程序,那么这个驱动程序呢就是让操作系统通过调用不同的驱动程序去管理不同的硬件

2.2设计操作系统的目的

操作系统包括:

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

定位:在整个计算机软硬件架构中,操作系统的定位是一款纯正的 "搞管理" 的软件。

管理的目的:为用户程序提供一个良好稳定的运行环境    

与硬件交互,管理所有的软硬件资源。

2.3操作系统的管理的理解

那么什么叫做管理?如何理解?

管理的本质就是对数据或者说信息进行管理

而管理者(OS)的工作是做决策,根据数据做决策

那么数据量大时管理者该怎么做管理呢?

可以将事物抽象成为一个对象,这个对象中保存着一个事物的信息(属性),也就是抽取事物的属性来描述这个事物

比如说学生:可以抽取姓名、性别、年龄、学号等

看着是不是很眼熟,这就是先描述,用一个数据类型(struct)以及学生的属性来描述学生

然后通过某种数据结构(容器)对大量的学生(数据/对象)进行管理,链表就很合适(可以通过学号或成绩等来做管理)

决策者(OS)所有的决策工作就变成了对链表的增删查改

对学生(数据)的管理也变成了对链表的增删查改

这也就是再组织的过程

总结:

先描述:将事物抽离出属性,通过大量属性定义出对象(通过结构体或类定义出对象(变量))

再组织:通过容器(数据结构)对大量的对象进行管理

2.4系统调用和库函数概念

在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用

系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

3.进程

3.1进程的概念

进程是一个运行起来的程序,在具体点呢?

我们先想想下面几个问题

啥是程序呢?程序在哪呢?

程序在电脑中不就是二进制文件嘛,既然是文件那它就存在磁盘里

就是磁盘里的那个.exe(可执行程序)文件,将这玩意加载到内存里就是进程了(暂时先这么理解)

3.2描述进程-PCB

可以同时运行多个程序吗?

可以同时运行,一定要将多个.exe(可执行程序)加载到内存

操作系统要不要管理多个加载到内存的程序呢?

操作系统如何管理多个加载到内存的程序呢?

先描述,再组织

先描述:

进程加载到内存里,操作系统咋知道谁是谁啊

所以对进程的属性进行抽离,根据属性创建出对象来描述每个进程"长啥样"

由此就产生了processes control block(PCB)也叫进程控制块

那么为什么程序加载到内存,变成进程之后我们要给每个进程创建一个PCB对象呢?

因为操作系统要对进程进行管理

PCB中有一个属性(指针)指向对应的进程,那么对进程的管理变成对PCB对象的管理

然后PCB里面又有指向下个PCB对象的指针,那么就变成对链表的增删查改(再组织)

所以进程的本质是

内核数据结构 + 可执行程序 = 进程

未来,所有对进程的控制和操作只和进程的PCB有关,和进程的可执行程序无关

Linux操作系统下PCB是task_struct

task_struct描述内容分类

标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等

进程标示符: 描述本进程的唯一标示符,用来区别其他进程

也就是进程的PID,PID是操作系统中唯一标识的进程号

通过系统调用获取标识符

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
int main()
{
   printf("before fork: I am a prcess, pid: %d, ppid: %d\n", getpid(), getppid());
   printf("创建进程\n");
  sleep(5);
  pid_t id = fork();
  if(id<0)
   {
      return 0;
   }
    else if(id == 0)
   {
     //子进程
      while(1)
     {
      printf("after fork, 我是子进程: I am a prcess, pid: %d, ppid: %d,returnid:%d\n", getpid(), getppid(), id);
      sleep(1);
     } 
   }
   else
   {

        while(1)
      {
        printf("after fork,i am a fatherprcess,pid:%d,return id:%d\n",getpid(),getppid(),id);
           sleep(1);                                                    }
  return 0;
}

3.3组织进程

可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里

3.4查看进程

进程的信息可以通过 /proc 系统文件夹查看

1.通过ps aux 可以查看系统中所有进程的信息

2.可以通过 ps axj 查看进程的父进程号

 3.5fork初识

3.5.1 通过fork创建进程

fork成功返回子进程的pid给父进程,返回0给子进程

失败返回-1给父进程,子进程不会创建

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
    int id = fork();
    if(id < 0)
    {
        perror("fork");
        return 1;
    }
    else if(id == 0)
    { 
        //child  可以执行你所需要的子进程内容
        printf("I am child : %d!, ret: %d\n", getpid(), id);
    }
    else
    { //father  执行所需要的父进程内容
        printf("I am father : %d!, ret: %d\n", getpid(), id);
    }
    sleep(1);
    return 0;
}

父子非同一个进程,可以同时跑(两个执行流)

进程 = 内核数据结构 + 可执行程序的代码和数据

子进程又没有自身的代码和数据,子进程会指向父进程的代码和数据

子进程被创建是以父进程为模板的

3.5.2fork的返回值

为什么给父进程返回子进程的pid,而给子进程返回0?

我们要明白,一个父亲可以有多个孩子,而一个孩子只能有一个父亲

父亲:孩子 = 1:n 的关系  当然 孩子也可以有一个

但重要的是父进程是唯一的,子进程可以很容易的找到父进程,而父进程需要通过子进程的pid去找到子进程

为什么fork函数会返回两次?

还记得我们上面写的代码吗?

if(id < 0)
{
    //...
}
else if(if == 0)
{
    //...
}
else
{
    //...
}

id如果是同一个变量怎么可能既大于0又等于0

一个进程挂掉是不会影响另一个进程的

(任意)进程之间是具有独立性的,互相不能影响

前面我们提到子进程没有自身的代码和数据,子进程会指向父进程的代码和数据。那么当子进程要改变(写入)变量时会出现写时拷贝,可以用同一个变量名来表示不同的内存

在return子进程之前已经有父子进程分流了

返回的本质就是写入

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

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

相关文章

日历功能——C语言

实现日历功能&#xff0c;输入年份月份&#xff0c;输出日历 #include<stdio.h>int leap_year(int year) {if(year % 4 0 && year % 100 ! 0 || year % 400 0){return 1;}else{return 0;} }int determine_year_month_day(int *day,int month,int year) {if(mo…

【C++】构造函数、初始化列表,析构函数,拷贝构造函数,运算符重载

注&#xff1a;本博客图片来源于学习笔记: 学习笔记https://gitee.com/box-he-he/learning-notes 完整思维导图请前往该博主码云下载。 目录 注&#xff1a;本博客图片来源于学习笔记: 学习笔记https://gitee.com/box-he-he/learning-notes 完整思维导图请前往该博主码云下载…

带你实现用自己域名打开Tomcat

文章目录 Tomcat1.1、Tomcat 下载1.2、Tomcat 文件图解1.3、 启动或关闭 Tomcat1.3.1、 启动1.3.2、 关闭程序2.1、 修改端口号2.2、修改主机名称Tomcat 1.1、Tomcat 下载 首先去Tomcat 官网下载找到我们需要下载的版本 1.2、To

PKI - 02 对称与非对称密钥算法

文章目录 概述对称密钥算法凯撒密码优点缺点 非对称密钥算法工作原理优点缺点 非对称密钥的的用途一&#xff1a; 一种简单而优雅的“混合加密”解决方案加密解密 非对称密钥的的用途二&#xff1a; 数字签名工作原理工作示意图 扩展 DSA vs RSA 概述 对称密钥算法和非对称密钥…

jvm体系结构

一、Jvm 的介绍 1、JVM体系结构 2、JVM运行时数据区 3、JVM内存模型 JVM运行时内存 共享内存区 线程内存区 3.1、共享内存区 共享内存区 持久带(方法区 其他) 堆(Old Space Young Space(den S0 S1)) 持久代&#xff1a; JVM用持久带&#xff08;Permanent Space&…

使用CICFlowMeter 实现对pcap文件的特征提取【教程】

使用CICFlowMeter 实现对pcap文件的特征提取【教程】 针对现有的关于CICFlowMeter 的使用教程不够全面&#xff0c;一些细节没有展示&#xff0c;我将结合网络上的相关资料和实际的经历&#xff0c;提供一些经验和建议。 configuration information --------------- Windows…

污水处理设备数据分析:潜在市场容量高达1000亿

随着国家可再生能源激励政策和中长期发展规划的不断贯彻落实&#xff0c;一些大型能源投资公司、房地产开发商、装备制造龙头企业和物流运营商瞄准了污水处理设备产业的巨大潜在市场&#xff0c;纷纷加入到了污水处理设备建设的行列。我国污水处理设备行业发展重点已从农户自用…

时间序列之趋势

什么是趋势&#xff1f; 在时间序列中&#xff0c;趋势成分表示序列均值持续的、长期的变化。趋势是一个序列中移动最慢的部分&#xff0c;但却代表最重要的时间尺度。在产品销售的时间序列中&#xff0c;随着越来越多的人逐年了解该产品&#xff0c;市场扩张就可能会产生增长…

JavaScript ATM取款机

①&#xff1a;循环的时候&#xff0c;需要反复提示输入框&#xff0c;所以提示框写到循环里面 ②&#xff1a;退出的条件是用户输入了 4&#xff0c;如果是4&#xff0c;则结束循环&#xff0c;不在弹窗 ③&#xff1a;提前准备一个金额预先存储一个数额 ④&#xff1a;取钱…

【敏感词】敏感词检测功能v1.1.0版本正式上线

背景 为了解决系统发布信息时人工审核成本高的问题&#xff0c;开发一个敏感词检测系统。该系统能够自动检测用户输入的内容中是否包含敏感词&#xff0c;从而减少不合规内容的发布&#xff0c;降低人工审核成本。通过实施这个系统&#xff0c;可以提高信息发布的效率和准确性…

文献速递:肿瘤分割---- 优先注意网络,用于医学图像中多病变分割

文献速递&#xff1a;肿瘤分割---- 优先注意网络&#xff0c;用于医学图像中多病变分割 Title 题目 Prior Attention Network for Multi-Lesion Segmentation in Medical Images 优先注意网络&#xff0c;用于医学图像中多病变分割 Abstract 摘要 —The accurate segmen…

【C++】win11,OpenCV安装教程(VS2022)

1.下载 首先进入官网&#xff0c;下载对应的安装包&#xff0c;苹果系统就选IOS pack&#xff0c;微软系统就选Windows 下载地址&#xff1a;Releases - OpenCV 不方便外网下载的话可以下载我分享的百度网盘资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1lV7l…

学生信息|基于Springboot的学生信息管理系统设计与实现(源码+数据库+文档)

学生信息管理系统目录 目录 基于Springboot的学生信息管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员登录 2、课程管理 3、公告信息管理 4、公告类型管理 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xff1a; 五、核心代码 六、…

阿里资深摸鱼测试工程师推荐——Web自动化测试学会这一招,下班早一小时

前 言 大家都知道&#xff0c;我们在通过 Selenium 执行 Web 自动化测试时&#xff0c;每次都需要启动/关闭浏览器&#xff0c;如果是多线程执行还会同时打开多个&#xff0c;比较影响工作的正常进行。那有没有办法可以不用让浏览器的自动化执行干扰我们的工作呢&#xff1f; …

seatunnel数据集成(一)简介与安装

seatunnel数据集成&#xff08;一&#xff09;简介与安装seatunnel数据集成&#xff08;二&#xff09;数据同步seatunnel数据集成&#xff08;三&#xff09;多表同步seatunnel数据集成&#xff08;四&#xff09;连接器使用 1、背景 About Seatunnel | Apache SeaTunnel …

【Spring基础】从0开始学习Spring(2)

前言 在上篇文章&#xff0c;我已经讲了Spring中最核心的知识点&#xff1a;IoC&#xff08;控制反转&#xff09;以及DI&#xff08;依赖注入&#xff09;。这篇文章&#xff0c;我将讲一下关于Spring框架中的其它比较琐碎但是又还是挺重要的知识点&#xff0c;因此&#xff…

【类与对象(中)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 引用 常引用 5.赋值运算符重载 5.1…

Excel——高级筛选匹配条件提取数据

一、筛选多条件 Q&#xff1a;筛选多个条件&#xff0c;并将筛选出的内容复制到其他区域 点击任意一个单元格 点击【数据】——【筛选】——【高级筛选】 选择【将筛选结果复制到其他位置】——在【列表区域】 鼠标选择对应的区域位置&#xff0c;条件区域一定要单独写出来&a…

DevOps落地笔记-19|响应速度:天下武功,唯快不破

上一课时介绍一个团队应该具备什么样的能力&#xff0c;以及如何度量团队的交付效能。事实上&#xff0c;团队的能力在一定程度上反映了软件的交付能力&#xff1b;而响应速度则是企业能否快速占领市场的重要因素。试想一下&#xff0c;有两个企业都发现了市场上的机会&#xf…

【数据结构和算法】--- 基于c语言排序算法的实现(1)

目录 一、排序的概念及其应用1.1排序的概念1.2 排序的应用1.3 常见的排序算法 二、插入排序2.1直接插入排序2.2 希尔排序2.2.1 预排序2.2.2 缩小gap2.2.3 小结 三、选择排序3.1 直接选择排序3.2 堆排序 一、排序的概念及其应用 1.1排序的概念 排序&#xff1a; 所谓排序&…
最新文章