Linux-3进程概念(一)

news2024/11/15 19:42:09

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.coloradmin.cn/o/1436202.html

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

相关文章

【大模型】万亿级别的大语言模型训练,基础设施如何支持

万亿级别的大语言模型训练&#xff0c;基础设施如何支持 前言1&#xff09;培训百万亿参数的LLM是可行的&#xff0c;但需要每个GPU高达1 TiB的次级内存池&#xff0c;双向带宽为100 GB/s。2&#xff09;对于1T模型的强扩展在约12288个GPU左右停滞&#xff0c;因为矩阵乘法变得…

C++二维数组

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 大家好&#xff0c;我是PingdiGuo_guo&#xff0c;今天我们来学习二维数组。 文章目录 1.二维数组的概念与思想 2.二维数组和一维数组的区别 3.二维数组的特点 4.二维数组的操作 1.定义 2.初始化 1.直…

IPv4的公网地址不够?NAT机制可能是当下最好的解决方案

目录 1.前言 2.介绍 3.NAT机制详解 1.前言 我们都知道IPv4的地址范围是32个字节,这其中还有很多地址是不可用的.比如127.*,这些都是环回地址.那么在网路发展日新月异的今天,互联网设备越来越多,我们该如何解决IP地址不够用的问题呢?目前有一种主流的解决方案,也是大家都在用…

JVM相关-JVM模型、垃圾回收、JVM调优

一、JVM模型 JVM内部体型划分 JVM的内部体系结构分为三部分&#xff0c;分别是&#xff1a;类加载器&#xff08;ClassLoader&#xff09;子系统、运行时数据区&#xff08;内存&#xff09;和执行引擎 1、类加载器 概念 每个JVM都有一个类加载器子系统&#xff08;class l…

C语言的malloc(0)问题

malloc(0)详解 首先来解释malloc&#xff08;0&#xff09;的问题&#xff0c;这个语法是对的&#xff0c;而且确实也分配了内存&#xff0c;但是内存空间是0&#xff0c;就是说返回给你的指针是不能用的&#xff0c;感觉奇怪吧&#xff1f;但是从操作系统的原理来解释就不奇怪…

(c语言版)开源项目热榜,某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。对于每个开源项目

某个开源社区希望将最近热度比较高的开源项目出一个榜单&#xff0c;推荐给社区里面的开发者。对于每个开源项目&#xff0c;开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue、MR的数量&…

3. ⼤语⾔模型深度学习背景知识

1. LLM⼤语⾔模型⼀般训练过程 #mermaid-svg-8kci1fjEPiVolPue {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8kci1fjEPiVolPue .error-icon{fill:#552222;}#mermaid-svg-8kci1fjEPiVolPue .error-text{fill:#5522…

前端实现标题滚动点击导航

效果图 右边滚动的html代码 <div class"right-box"><el-tabs v-model"isScrollNow" tab-position"right" class"updateTab" tab-click"scrollTo"style"height: fit-content;"><el-tab-pane label…

怎么把视频音乐提取成mp3?分享详细工具和方法!

在数字媒体时代&#xff0c;音乐已经成为我们生活中不可或缺的一部分。有时候&#xff0c;我们会在社交媒体、视频分享网站或在线视频平台上看到一些非常喜欢的视频音乐&#xff0c;想要将其保存为MP3格式以便随时随地聆听。那么&#xff0c;如何从视频中提取音乐并转换为MP3格…

Python操作Word表格对齐、单元格对齐

通过Table的alignment可以设置表格居左对齐、居中对齐、居右对齐。通过Cell的vertical_alignment可以设置垂直位置。通过单元格里段落的alignment可以设置文本的左右对齐方式。 import docx from docx.enum.table import WD_TABLE_ALIGNMENT, WD_CELL_VERTICAL_ALIGNMENT from…

@Repository注解的作用和用法,以及和@Mapper的区别

1、Repository的作用 Repository是属于Spring的注解。它用来标注访问层的类&#xff08;Dao层&#xff09;&#xff0c;它表示一个仓库&#xff0c;主要用于封装对于数据库的访问。其实现方式与Component注解相同&#xff0c;只是为了明确类的作用而设立。 即Repository是Comp…

Qt:QFileDialog

目录 一、介绍 二、功能 三、具体事例 1、将某个界面保存为图片&#xff0c;后缀名可选PNG、JPEG、SVG等 一、介绍 QFileDialog提供了一个对话框&#xff0c;允许用户选择文件或者目录&#xff0c;也允许用户遍历文件系统&#xff0c;用以选择一个或多个文件或者目录。 QF…

基于Java超市管理系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

牛客网--------------小红统计区间(easy)

题目描述&#xff1a; 本题为easy版本&#xff0c;和hard版本的唯一区别是aia_iai​保证是正整数&#xff01; 小红拿到了一个数组&#xff0c;她想知道&#xff0c;有多少非空区间满足区间所有元素之和不小于kkk&#xff1f; 输入描述: 输出描述: 输出一个整数表示满足条件的非…

Camunda流程引擎数据库架构

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;数据库架构…

WINDOWS搭建NFS服务器

下载并安装 Networking Software for Windows 启动配置 找到安装目录&#xff08;如C:\Program Files\nfsd&#xff09;&#xff0c;双击nfsctl.exe&#xff0c;菜单Edit->Preferences 启动后&#xff1a; 配置Export Exports->Edit exports file 其他的几句我都删除…

[Linux] 网络编程套接字

目录 预备知识 网络字节序 网络字节序和主机字节序转换的库函数 socket编程接口 socket常见API sockaddr结构 套接字的种类 预备知识 1.在IP数据包头部中&#xff0c;有两个IP地址&#xff0c;分别叫做源IP地址和目的IP地址。 2.端口号&#xff1a;是传输层协议的内容…

速过计算机二级python——第八讲:基本编程

第八讲:基本编程 基本编程题【15 分】简单应用题【25 分】综合应用题【20 分】**问题一**【5分】问题二【5 分】问题二【10 分】小结基本编程题【15 分】 考生文件夹下存在一个文件 PY101.py,请写代码替换横线,不修改其他代码,实现以下功能:【5 分】键盘输入正整数 n,按要…

EMNLP 2023精选:Text-to-SQL任务的前沿进展(上篇)——正会论文解读

导语 本文记录了今年的自然语言处理国际顶级会议EMNLP 2023中接收的所有与Text-to-SQL相关&#xff08;通过搜索标题关键词查找得到&#xff0c;可能不全&#xff09;的论文&#xff0c;共计12篇&#xff0c;包含5篇正会论文和7篇Findings论文&#xff0c;以下是对这些论文的略…

国图公考:公务员面试资格复审需要准备什么?

参加国考面试的考生在资格审核阶段需要准备以下材料&#xff1a; 1、本人身份证、学生证或工作证复印件。 2、公共科目笔试准考证复印件。 3、考试报名登记表。 4、本(专)科、研究生各阶段学历、学位证书(应届毕业生没有可以暂时不提供)。 5、报名资料上填写的各类证书材料…