进程、CPU、MMU与PCB之间的关系

目录

进程与cpu(中央处理器)

源代码、程序、cpu与进程的关系

cpu超线程

CPU的简易架构与处理数据过程

进程与MMU(内存管理单元)

mmu作用

cpu和mmu的关系

进程与PCB(进程控制块)

PCB介绍与内部成员

PCB和mmu的关系

pcb中的文件描述符表

进程的四种状态


进程与cpu(中央处理器)

源代码、程序、cpu与进程的关系

程序和进程的关系

  • 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源,比如cpu、内存等
  • 进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。程序运行起来,cpu执行二进制文件中的二进制指令,执行n多指令的过程就是一个进程,所以运行程序会产生一个进程(当然也可以产生多个进程)。

程序编译和运行过程

  1. 编译过程
    1. 代码(如C语言代码)首先通过编译器(如GCC)被转换成二进制文件。这个过程称为编译,它将高级语言代码转化为机器语言代码,也就是CPU能直接执行的二进制指令。
    2. 编译后的二进制文件通常包含程序的机器码、数据以及其他信息,这些信息都是按照CPU的指令集架构(ISA)来组织的。
  2. 加载与执行
    1. 在程序执行之前,编译后的二进制文件(如.exe或.elf文件)需要被加载到主存储器(RAM)中。这是因为CPU无法直接从硬盘等存储设备中读取和执行程序,它只能访问RAM中的数据。
    2. 当用户运行一个程序时,操作系统的程序加载器(如Windows的PEB或Linux的ELF加载器)会将程序加载到RAM中,并为其分配内存空间。
    3. CPU通过执行指令来从RAM中读取数据并执行操作。这些指令包括加载数据到寄存器、执行算术或逻辑运算、将数据存储回内存等。
  3. CPU与二进制指令
    1. CPU按照存储在RAM中的二进制指令的顺序逐条执行。每一条指令都告诉CPU要执行什么操作,以及操作的数据在哪里(通常在寄存器或内存中)。
    2. CPU内部有多个寄存器,用于存储数据和指令的地址。其中,程序计数器(PC寄存器)用于存储下一条要执行的指令的地址。
    3. 当CPU执行完一条指令后,它会从PC寄存器中取出下一条指令的地址,并加载该指令到指令寄存器中进行分析和执行。这个过程不断重复,直到程序结束。

cpu超线程

"超线程"是英特尔提出的的一种方式,使得逻辑核数翻倍,其实也是一种榨干硬件的方式。一个核心能上一个线程,但是这个线程有时候也会"休息",导致这时候核心也是一个空闲的状态,导致不能完全利用到核心算力,因此英特尔提出的这个方案其实就是一个核心管两个线程,一个线程空出核心的时候,另一个线程就上核心,就类似于进程切换,将CPU利用起来。

CPU的简易架构与处理数据过程

中央处理器(CPU)与进程处理数据的交互逻辑:

  • 首先进程产生数据存入内存或者cpu缓存中:当进程运行时,它会产生和访问各种数据。这些数据通常首先存储在RAM(随机访问存储器)中。其次是在cpu缓存中,cpu缓存中可能有这些数据的副本。
  • 然后cpu从cpu缓存或者内存中读取和处理数据
    • cpu预取指令从缓存或者内存中取出数据。当CPU需要执行一个程序或访问某个数据时,它首先会检查缓存中是否有该数据。如果没有,CPU会向内存发出请求,内存会响应这个请求并将数据发送到CPU。这个过程涉及到内存管理单元(MMU)和CPU的协作,以确保数据能够正确地传输到CPU。
    • 然后cpu中的译码器的作用就是判断指令需要哪些寄存器,比如需要加法器,就从寄存器堆里取出相应的寄存器数据
    • 然后进入到算术逻辑单元执行,执行后又将数据回写到寄存器堆里的一些寄存器
  • 处理数据完毕后,如果需要将数据写入内存的话, **数据可以直接从寄存器写入到内存中,也可以先经过CPU缓存,再到内存。**也可以数据被直接写入内存,并且同时更新缓存。现代CPU通常会根据复杂的缓存策略和算法来决定是否将数据写入缓存。

进程与MMU(内存管理单元)

mmu作用

MMU(内存管理单元)是计算机硬件的一部分,通常与CPU紧密集成,负责处理所有进程的内存访问请求,并进行地址转换、内存保护等任务。

一个进程产生一块虚拟内存,在操作系统中,每个进程都有自己的虚拟地址空间。当进程访问内存时,它使用虚拟地址来引用数据。这些虚拟地址通过MMU转换为物理地址,以便CPU能够实际访问内存中的数据。

  • 虚拟地址: 可用的地址空间 有 4G,最大4G的虚拟地址空间。比如0x804a4000 int a = 10;,这个地址是一个虚拟地址。
  • 物理地址:1000。物理地址的大小就是我们内存条的大小。
  • MMU做的事就是将虚拟地址上的数据写到物理地址上。

cpu和mmu的关系

CPU(Central Processing Unit,中央处理器):作为计算机系统的核心,负责执行各种计算任务和控制操作。它是信息处理和程序运行的最终执行单元。

MMU(Memory Management Unit,内存管理单元):是一种硬件设备,位于CPU和内存之间。它负责处理CPU发出的内存访问请求,并进行地址转换、虚拟内存管理、内存保护等功能。

进程与PCB(进程控制块)

PCB介绍与内部成员

每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。

/usr/src/linux-headers-3.16.0-30/include/linux/sched.h文件中可以查看struct task_struct 结构体定义。其内部成员有很多,我们重点掌握以下部分即可:

* 进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数。

* 进程的状态,有就绪、运行、挂起、停止等状态。

* 进程切换时需要保存和恢复的一些CPU寄存器。

* 描述虚拟地址空间的信息。

* 描述控制终端的信息。

* 当前工作目录(Current Working Directory)。

* umask掩码。

* 文件描述符表,包含很多指向file结构体的指针。

* 和信号相关的信息。

* 用户id和组id。

* 会话(Session)和进程组。

* 进程可以使用的资源上限(Resource Limit)。用 "ulimit -a"可以查看当前linux环境一下的相关资源限制,比如栈溢出对应的上限限制

PCB和mmu的关系

  • MMU是负责处理中央处理器(CPU)的内存访问请求的计算机硬件。
  • PCB(Process Control Block,进程控制块)不是硬件,PCB是操作系统中用于管理进程的数据结构,也被称为进程描述符或任务控制块。它通常由操作系统的内核(Kernel)进行管理。
  • PCB和MMU在操作系统中各自承担不同的角色:PCB负责进程信息的存储和管理,而MMU负责内存访问的控制和转换。
  • 虽然它们在功能上是分开的,但在实现进程内存管理时存在间接的关联。PCB中的内存分配情况等信息可能用于指导MMU进行虚拟地址到物理地址的转换,以确保进程能够正确地访问其虚拟地址空间中的数据。

pcb中的文件描述符表

在linux中,当用C程序打开一个文件时便会产生一个文件描述符,文件描述符是一个整数,对应文件描述符表的下标,该下标对应的值是一个文件指针,指向一个文件结构体,结构体记录了该文件当前的一些状态。本质上来说文件描述符是指这个指针,只是通常操作时传递下标给其它函数,因此粗略把这个下标整数值当做了文件描述符。

文件描述符表的大小通常是固定的,例如常见的实现中大小为1024。其中,前三个文件描述符(0、1、2)通常用于标准输入、标准输出和标准错误输出。因此,默认情况下用户进程可以打开的文件数量是1021个(1024 - 3)。文件描述符表的大小是可以更改的。

进程的四种状态

进程基本的状态有4种:就绪态,运行态,挂起态与终止态。


end

相关推荐
爱吃生蚝的于勒1 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
失落的香蕉4 小时前
C语言串讲-2之指针和结构体
java·c语言·开发语言
舞动CPU4 小时前
linux c/c++最高效的计时方法
linux·运维·服务器
versatile_zpc6 小时前
C++初阶:类和对象(上)
开发语言·c++
小鱼仙官6 小时前
MFC IDC_STATIC控件嵌入一个DIALOG界面
c++·mfc
神仙别闹6 小时前
基本MFC类框架的俄罗斯方块游戏
c++·游戏·mfc
秦jh_6 小时前
【Linux】多线程(概念,控制)
linux·运维·前端
ChoSeitaku7 小时前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
娅娅梨7 小时前
C++ 错题本--not found for architecture x86_64 问题
开发语言·c++