计算机的进程

什么是进程/任务

每个应用程序运行于现代操作系统上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一。

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程。

进程可以视为操作系统进行资源分配的基本单位。

 进程控制块抽象(PCB Process Control Block)

计算机内部要管理任何现实事务,都需要将其抽象成一组有关联的、互为一体的数据。在java语言中,我们可以通过类和对象来进行描述这一特征。

PCB进程控制块描述进程

//以下代码是Java代码的伪码形式,重在说明,无法执行
class PCB{
    //进程的唯一标识 ——pid;
    //进程关联的程序信息,例如哪个程序,加载到内存中的区域。
    //分配给该资源使用的各个资源。
    //进程调度信息
}

这样,每一个PCB对象,就代表着一个实实在在运行着的程序,也就是进程。

操作系统在通过这种数据结构,例如线性表、搜索树等将PCB对象组织起来,方便管理时进行增删改查的操作。

管理进程

先描述:PCB控制块描述进程。

后组织:链表把多个PCB串起来。

1.任务管理器中查看进程列表。

遍历链表中的每个节点,并获取显示对应的信息。

2.创建新的进程

新的进程创建出一个对应的新的PCB,并且添加达到链表中。

3.销毁某个进程

把链表上对应的PCB结点删掉。

PCB的核心属性

1.pid 进程的ID/标识符。

2.内存指针 依赖的指令和数据的位置。

进程运行时,需要消耗一定的硬件资源。一组指针,告诉操作系统该进程要运行的指令在内存的那些房间里。

3.文件描述表  通过一个“顺序表”这样的数据结构,记录这个进程都打开了那些文件。

4.PCB中提供了几个属性,支持进程调度。

(1)状态  等待IO的时候会进入阻塞状态。 “随叫随到”是就绪状态。

(2)优先级  处理的事件不同。

(3)上下文  存档,以备下次继续。

(4)记账信息  延续刚才的优先级。

(5)tgid 同一个进程的tgid是同一个。

CPU分配——进程调度(Proccess Scheduling)

为了便于讨论和理解,我们大部分的场景下假设是单cpu单核的计算机。

操作系统对cpu资源的分配,采用的是时间模式——不同的进程在不同的时间段去使用cpu资源。

内存分配——内存管理(Memory Manage)

操作系统对内存资源的分配,采用的空间模式——不同进程使用内存中的不同区域,互相之间不会干扰。

进程间通信(Inter Process Communication)

如上所述,进程是操作系统进行资源分配的最小单位,这意味着各个进程之间是无法感受到对方存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备“隔离性”。

但现代的应用,奥完成一个复杂的业务需求,往往无法通过一个进程来独立完成,总是需要进程和线程进行配合的达到应用的目的,如此,进程之间需要进行“信息交换”的需求。进程间通信的需求就应运而生。

目前,主流操作系统提供的进程通信机制有如下:

1.管理

2.共享内存

3.文件

4.网络

5.信号量

6.信号

其中,网络是一种相对特殊的IPC机制,它除了支持同主机两个进程间通信,还支持同一网路内部非同一主机上的进程间进行通信。

相关推荐

  1. 计算机进程

    2024-03-27 23:40:02       38 阅读
  2. 计算机体系中程序、进程与线程关系解读

    2024-03-27 23:40:02       65 阅读
  3. 使用Pytorch进行梯度下降计算

    2024-03-27 23:40:02       44 阅读
  4. 使用Python进行计算机视觉

    2024-03-27 23:40:02       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 23:40:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 23:40:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 23:40:02       82 阅读
  4. Python语言-面向对象

    2024-03-27 23:40:02       91 阅读

热门阅读

  1. 【无标题】

    2024-03-27 23:40:02       34 阅读
  2. Leetcode 283. 移动零

    2024-03-27 23:40:02       39 阅读
  3. maya 导入导出anim脚本

    2024-03-27 23:40:02       42 阅读
  4. Redis常用数据结构的用法和使用场景

    2024-03-27 23:40:02       41 阅读
  5. 求和...

    2024-03-27 23:40:02       47 阅读
  6. 控制传输和中断传输能否同时使用呢

    2024-03-27 23:40:02       40 阅读
  7. 31-1 文件包含漏洞 - 文件包含

    2024-03-27 23:40:02       39 阅读
  8. 华为机试题-密码输入检测

    2024-03-27 23:40:02       44 阅读
  9. Vue.js 目录结构

    2024-03-27 23:40:02       42 阅读